1 2 3 4 5 6 7 8 9 10 11 12 13 | /* * Standard includes */ #include <ioctl.h> #include <unistd.h> #include <fcntl.h> #include <sys/soundcard.h> /* * Mandatory variables. */ #define BUF_SIZE 4096 int audio_fd; unsigned char audio_buffer[BUF_SIZE]; |
1 2 3 4 5 | if ((audio_fd = open(DEVICE_NAME, open_mode, 0)) == -1) { /* Open of device failed */ perror(DEVICE_NAME); exit(1); } |
1 2 3 4 5 | int len; if ((len = read(audio_fd, audio_buffer, count)) == -1) { perror("audio read"); exit(1); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int format; format = AFMT_S16_LE; if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format) == -1) { /* fatal error */ perror("SNDCTL_DSP_SETFMT"); exit(1); } if (format != AFMT_S16_LE) { /* 本设备不支持选择的采样格式. */ } 在设置采样格式之前,可以先测试设备能够支持那些采样格式,方法如下: int mask; if (ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &mask) == -1) { /* Handle fatal error ... */ } if (mask & AFMT_MPEG) { /* 本设备支持MPEG采样格式 ... */} |
1 2 3 4 5 6 7 8 | int channels = 2; /* 1=mono, 2=stereo */ if (ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &channels) == -1) { /* Fatal error */ perror("SNDCTL_DSP_CHANNELS"); exit(1); } if (channels != 2) {/* 本设备不支持立体声模式 ... */} |
1 2 3 4 5 6 7 8 9 | int speed = 11025; if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1) { /* Fatal error */ perror("SNDCTL_DSP_SPEED"); exit(Error code); } if ( /* 返回的速率(即硬件支持的速率)与需要的速率差别很大... */ ) { /* 本设备不支持需要的速率... */ } |
1 2 3 | int vol; if (ioctl(mixer_fd, SOUND_MIXER_READ(SOUND_MIXER_MIC), &vol) == -1) { /* 访问了没有定义的mixer通道... */ |
1 2 3 4 | int mask; if (ioctl(mixer_fd, SOUND_MIXER_READ_xxxx, &mask) == -1) { /* Mixer 的没有此能力... */ } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |