linux如何播放语音文件夹,Linux下声卡编程(播放指定音频文件)

root@ubuntu:/home/naviwork/dsp# file /usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav

/usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 11025 Hz

root@ubuntu:/home/naviwork/dsp# ./a.out /usr/lib/openoffice/basis3.2/share/gallery/sounds/wallewal.wav 16 11025

samplebits = 16 samplerate = 11025

===============================================================

#include

#include

#include

#include

#include

#include

#include

#include

#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 rate

int play_sound(char *filename, int samplebits, int samplerate){

struct stat stat_buf;

unsigned char * buf = NULL;

int handler,fd;

int result;

int arg,status;

printf("samplebits = %d samplerate = %d\n", samplebits, samplerate);

//打开声音文件,将文件读入内存

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=(unsigned char *)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=samplerate;

status=ioctl(handler,SOUND_PCM_WRITE_RATE,&arg);

if(status==-1){

perror("error from SOUND_PCM_WRITE_RATE ioctl");

return -1;

}

arg=samplebits;

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;

}

int main(int argc, char *argv[])

{

play_sound(argv[1], atoi(argv[2]), atoi(argv[3]));

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值