linux下实现音频文件的播放

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 1024 //这里定义了音频的字节数
int dspfd; ///dev/dsp节点的描述符号
int mp3fd; //音乐文件的描述符
struct aiocb audio_aiocb;
int ret;
char buff[BUFFER_SIZE];
void input_handler()
{
char ch;
scanf("%c",&ch);
printf("play music \n",ch);
memset(buff,0,sizeof(buff)); //将buf晴空 等待输入
ret = read(mp3fd,buff,sizeof(buff)); //读入音乐格式的文件内容 内容是1024字节 *
bzero((void*)&audio_aiocb, sizeof(struct aiocb)); //清空可能要存褚的异步结构的buff
audio_aiocb.aio_fildes = dspfd; //将dsp文件的dspfd节点给 异步i结构体
audio_aiocb.aio_nbytes = ret; //将 ret采集到的MP3的文件的内容1024 字节给了ret 这里将ret的字节数给 异步I/O结构体
audio_aiocb.aio_offset = 1;
// aio_buf对于异步写入操作表示要写入的数据,因此要设置一个指向实际值的指针变量
audio_aiocb.aio_buf = buff; //将内容给一步I/O buf
ret = aio_write(&audio_aiocb); //发送异步写操作
if(ret < 0)
perror("aio_write");
while(aio_error(&audio_aiocb) == EINPROGRESS); // 等待异步写请求完成
}
int main()
{
int i;

dspfd = open("/dev/dsp", O_RDWR); //这里打开一个音频文件
if (dspfd < 0) {
printf("open of /dev/dsp failed");
exit(1);
}
mp3fd = open("test.mp3",O_RDONLY); //这里打开一个需要播放的音频文件.mp3
if (mp3fd < 0) {
printf("open of wav failed");
exit(1);
}
int oflags;
//启动信号驱动机制 这里启动 一个信号机构 采用异步方式 fcntl
signal(SIGIO, input_handler);
fcntl(STDIN_FILENO, F_SETOWN, getpid());//设置为当前进程所拥有,即当前进程接收输入
oflags = fcntl(STDIN_FILENO, F_GETFL);
fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);
while(1);
}

相关主题
相关文档
最新文档