音频设备操作 为了将libmad解码后的PCM数据输出到本地的音频设备,需要调用OSS音频驱动API函数,具体的操作过程为[17] [18]: (1)包含必要的头文件,并定义合适的输出缓冲区 #include <ioctl.h> #include <unistd.h> #include <fcntl.h> #include <sys/soundcard.h> #define BUF_SIZE 4096 int audio_fd; unsigned char audio_buffer[BUF_SIZE]; (2)打开音频设备/dev/sound/dsp if ((audio_fd = open("/dev/sound/dsp", O_WRONLY, 0)) == -1) { perror("/dev/sound/dsp"); //如果打不开,提示出错 exit(1);} (3)设置采样格式、声道数和采样速率 int format; //设置采样格式 format = AFMT_S16_LE; //设置为16bit little endian格式 if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format) == -1) { perror("SNDCTL_DSP_SETFMT"); //如果设置格式失败,提示出错 exit(1);} //退出程序 int channels = 2; //设置两声道 if (ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &channels) == -1) { perror("SNDCTL_DSP_CHANNELS"); //如果设置声道数失败,提示出错 exit(1);} int speed = 44100; //设置采样速率 if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &speed)==-1) { perror("SNDCTL_DSP_SPEED"); //如果设置速率失败,提示出错 exit(1);} (4)关闭音频设备 close(audio_fd); audio_fd=-1; (秩名) |