首页 > 代码库 > Linux下音频编程-输出音频文件
Linux下音频编程-输出音频文件
程序实现了在Linux下播放Ok.wav的功能。程序首先调用fstat函数获得文件相关信息(主要是文件大小信息)。通过malloc函数分配指定的内存空间,并将online.wav读入内存;然后,打开声卡设备文件,设置声卡参数;再调用write函数完成文件的播放。
简要的实例,代码如下:
#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>#include<stdio.h>#include<linux/soundcard.h>#define Audio_Device "/dev/dsp"//不同的声音有着不同的播放参数,这些参数可以使用file命令获得#define Sample_Size 16 //there‘re two kinds of bits,8 bits and 16 bits#define Sample_Rate 8000 //sampling rateint play_sound(char *filename){ struct stat stat_buf; unsigned char * buf = NULL; int handler,fd; int result; int arg,status; //打开声音文件,将文件读入内存 fd=open(filename,O_RDONLY); if(fd<0) return -1; if(fstat(fd,&stat_buf)){ close(fd); return -1; } if(!stat_buf.st_size){ close(fd); return -1; } buf=malloc(stat_buf.st_size); if(!buf){ close(fd); return -1; } if(read(fd,buf,stat_buf.st_size)<0){ free(buf); close(fd); return -1; } //打开声卡设备,并设置声卡播放参数,这些参数必须与声音文件参数一致 handler=open(Audio_Device,O_WRONLY); if(handler==-1){ perror("open Audio_Device fail"); return -1; } arg=Sample_Rate; status=ioctl(handler,SOUND_PCM_WRITE_RATE,&arg); if(status==-1){ perror("error from SOUND_PCM_WRITE_RATE ioctl"); return -1; } arg=Sample_Size; status=ioctl(handler,SOUND_PCM_WRITE_BITS,&arg); if(status==-1){ perror("error from SOUND_PCM_WRITE_BITS ioctl"); return -1; } result=write(handler,buf,stat_buf.st_size); if(result==-1){ perror("Fail to play the sound!"); return -1; } free(buf); close(fd); close(handler); return result;}void main(void){ play_sound("/root/Online.wav");}
Linux下音频编程-输出音频文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。