linux下的音频采集

这是一个在QT下做的一个音频采集类,只是做一个练习。。


sound::sound(QObject *parent) :

QObject(parent)

{

QMessageBox::about(NULL,"test","loving china!!");//这个可以随便写,就一QMessageBox只是用来观察每次是否修改了。

}

int sound::record()

{

int id,fd,i,j;

char buf[4*1024];

fd = open("/dev/dsp",O_RDONLY);//打开设备/dev/dsp

if(fd<0)

{

perror("Couldn't open the file /dev/audio:");

return -1;

}

id = open("test.wav",O_RDWR | O_CREAT,755);//打开用来记录的文件(存放音频文件)

if(id<0)

{

perror("Couldn't open the file test.wav:");

return -1;

}

/*************Set the ioctl********************/

i =0;

if(ioctl(fd,SNDCTL_DSP_RESET,(char *)&i)==-1)perror("reset error:");

if(ioctl(fd,SNDCTL_DSP_SYNC,(char *)&i)==-1)perror("sync error:");

i =1;

if(ioctl(fd,SNDCTL_DSP_NONBLOCK,(char *)&i)==-1)perror("nonblock error:");

i=RATE;

if(ioctl(fd,SNDCTL_DSP_SPEED,(char *)&i)==-1){perror("speed error:");return -1;}//设置8K的采样率,其中RATE已经宏定义为8K了;

i=1;

if(ioctl(fd,SNDCTL_DSP_CHANNELS,(char *)&i)==-1)perror("channel error:");

i=AFMT_S16_NE;

if(ioctl(fd,SNDCTL_DSP_SETFMT,(char *)&i)==-1){perror("setfmt error:");return -1;}//设置采样格式,之前设了AFMT_S16_LE结果电流声明显然

if(i!=AFMT_S16_NE){printf("the device is not suppor the AFMT_S16_NE");return -1;}

i=3;

if(ioctl(fd,SNDCTL_DSP_SETTRIGGER,(char *)&i)==-1)perror("settrigger error:");

i=3;

if(ioctl(fd,SNDCTL_DSP_SETFRAGMENT,(char *)&i)==-1)perror("setfragment error");

i=1;

if(ioctl(fd,SNDCTL_DSP_PROFILE,(char *)&i)==-1)perror("profile error");

/*****************TO Work*********************/

i=0;

for(j=0;j<8000;)//这里的数字没太大重要,别太小就行了,主要是用来控制录制的音频的长短的

{

/*录取音频到缓冲区*/

i=read(fd,buf,32);//这里的第三个参数,32是可以调节的,这个是我调过的数值,其实也没太大规定,重点是play那里的那个;

printf("In the %dth time it had get %d bytes\n",j,i);

if(i>0)

{

/*从缓冲区把音频写到文件里头*/

write(id,buf,i);

j++;

}

}

close(fd);

close(id);//最后记得关闭文件

return 0;

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值