2 * audio-pcm.c - Scope out the PCM audio stuff
8 #if defined(HAVE_MACHINE_SOUNDCARD_H) || defined(HAVE_SYS_SOUNDCARD_H)
11 #include "ntp_stdlib.h"
12 #include "ntp_syslog.h"
17 #include "ntp_string.h"
19 #ifdef HAVE_SYS_IOCTL_H
20 #include <sys/ioctl.h>
21 #endif /* HAVE_SYS_IOCTL_H */
25 #ifdef HAVE_MACHINE_SOUNDCARD_H
26 # include <machine/soundcard.h>
27 # define PCM_STYLE_SOUND
29 # ifdef HAVE_SYS_SOUNDCARD_H
30 # include <sys/soundcard.h>
31 # define PCM_STYLE_SOUND
38 static int ctl_fd; /* audio control file descriptor */
40 const char *m_names[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES ;
48 if (format & AFMT_MU_LAW) printf("MU_LAW ");
49 if (format & AFMT_A_LAW) printf("A_LAW ");
50 if (format & AFMT_IMA_ADPCM) printf("IMA_ADPCM ");
51 if (format & AFMT_U8) printf("U8 ");
52 if (format & AFMT_S16_LE) printf("S16_LE ");
53 if (format & AFMT_S16_BE) printf("S16_BE ");
54 if (format & AFMT_S8) printf("S8 ");
55 if (format & AFMT_U16_LE) printf("U16_LE ");
56 if (format & AFMT_U16_BE) printf("U16_BE ");
57 if (format & AFMT_MPEG) printf("MPEG ");
58 if (format & AFMT_AC3) printf("AC3 ");
70 for (i = 0; i < SOUND_MIXER_NRDEVICES; ++i)
71 if ((1 << i) & mixer) {
74 printf("%s", m_names[i]);
83 int unit = 0; /* device unit (0-3) */
84 # define AI_DEV "/dev/audio%d"
85 # define AC_DEV "/dev/mixer%d"
88 struct snd_size s_size;
93 char *dname = ai_dev; /* device name */
95 int devmask = 0, recmask = 0, recsrc = 0;
97 snprintf(ai_dev, sizeof(ai_dev), AI_DEV, unit);
98 snprintf(ac_dev, sizeof(ac_dev), AC_DEV, unit);
101 * Open audio device. Do not complain if not there.
103 fd = open(dname, O_RDWR | O_NONBLOCK, 0777);
108 * Open audio control device.
110 ctl_fd = open(actl, O_RDWR);
112 fprintf(stderr, "invalid control device <%s>\n", actl);
117 printf("input: <%s> %d\n", dname, fd);
118 printf("control: <%s> %d\n", actl, ctl_fd);
120 if (ioctl(ctl_fd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
121 printf("SOUND_MIXER_READ_DEVMASK: %s\n", strerror(errno));
122 if (ioctl(ctl_fd, SOUND_MIXER_READ_RECMASK, &recmask) == -1)
123 printf("SOUND_MIXER_READ_RECMASK: %s\n", strerror(errno));
124 if (ioctl(ctl_fd, SOUND_MIXER_READ_RECSRC, &recsrc) == -1)
125 printf("SOUND_MIXER_READ_RECSRC: %s\n", strerror(errno));
127 printf("devmask: %#x recmask: %#x recsrc: %#x\n",
128 devmask, recmask, recsrc);
129 printf("Devmask: "); d_mixer(devmask);
130 printf("Recmask: "); d_mixer(recmask);
131 printf("RecSrc: "); d_mixer(recsrc);
134 * Set audio device parameters.
138 if (ioctl(fd, AIOGSIZE, &s_size) == -1)
139 printf("AIOGSIZE: %s\n", strerror(errno));
141 printf("play_size %d, rec_size %d\n",
142 s_size.play_size, s_size.rec_size);
144 if (ioctl(fd, AIOGFMT, &s_c_p) == -1)
145 printf("AIOGFMT: %s\n", strerror(errno));
147 printf("play_rate %lu, rec_rate %lu, play_format %#lx, rec_format %#lx\n",
148 s_c_p.play_rate, s_c_p.rec_rate, s_c_p.play_format, s_c_p.rec_format);
149 printf("Play format: "); d_fmt(s_c_p.play_format);
150 printf("Rec format: "); d_fmt(s_c_p.rec_format);
154 #endif /* HAVE_{MACHINE_SOUNDCARD,SYS_SOUNDCARD}_H */