#include #include #include #include #include #include #include #include #include #define IOCOUNT 4096 static const char *opts = "i:mA:"; static const char *usage = "**Input Sampling rate should be 32KHz and Sample format 16 bit signed\n\n" "-i : Input filename (default: stdin)\n" "-m : Mono input\n" "-A : DSP device path (default: /dev/dsp0)"; const char *devpath = "/dev/dsp0"; int main(int argc, char **argv) { char abuf[4096], *ptr; int i, ch, infd, sndfd, mono; infd = 0; mono = 0; while ( (ch = getopt(argc, argv, opts)) != -1) { switch (ch) { case 'i': if ( (infd = open(optarg, O_RDONLY)) == -1) err(errno, "Error opening %s", optarg); break; case 'm': mono = 1; break; case 'A': devpath = optarg; break; default: errx(EINVAL, "Invalid usage\n\n%s", usage); } } if ( (sndfd = open(devpath, O_RDWR)) == -1) err(errno, "Error opening audio device %s", devpath); i = 32000; if (ioctl(sndfd, SNDCTL_DSP_SPEED, &i) == -1) err(errno, "DSP speed ioctl error"); i = AFMT_S16_LE; if (!mono) i |= AFMT_STEREO; if (ioctl(sndfd, SNDCTL_DSP_SETFMT, &i) == -1) err(errno, "DSP format ioctl error"); while ( (i = read(infd, abuf, IOCOUNT))) { ptr = abuf; while (i) { ch = write(sndfd, ptr, i); if (ch > 0) { i -= ch; ptr += ch; } else if (ch < 0) err(errno, "Error writing to DSP"); } } return 0; }