linux下的音频采集

原创 2012年03月21日 09:05:29

这是一个在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;

}



Linux下的音频采集与回放

以下假设你对ioctl已有一定的认识及了解sndtools.h代码:#ifndef SNDTOOLS_H#define SNDTOOLS_H#include #define FMT8BITS AFMT...

linux 音频采集基础知识普及

转自:http://blog.csdn.net/calculatorw/article/details/8814255虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

linux音频采集

采集的时候,先写wav头文件,头文件格式如下:   表1 WAV文件的文件头    偏移地址 字节数 类型 内容 00H~03H 4 字符 资源...

Linux音频驱动-声音采集过程

现实中的声音是一段连续的信号, 现在大部分的声音是以离散的数字信号保存下来,例如CD、MP3音频格式。 在保存这些信息时,考虑到对声音质量和存储的效率, 需要对声音的几个重要的基本属性进行研究。 对于...

linux音频采集技术

采集的时候,先写wav头文件,头文件格式如下:   表1 WAV文件的文件头    偏移地址 字节数 类型 内容 00H~03H 4 字符 资源交换文件标志(RIFF) 04H~07...

底层音频采集与回放

  • 2006年03月16日 00:00
  • 10KB
  • 下载

音频采集回放源代码汇总

  • 2012年06月26日 22:16
  • 15.24MB
  • 下载

webrtc windows api音频采集总结

AudioDeviceWindowsWave类中创建了一个线程,线程调用函数为ThreadFunc,并在其中调用ThreadProcess函数,线程的调用通过_timeEvent事件进行控制,而_ti...

【VS开发】Windows上的音频采集技术

前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音。 之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下的音频采集
举报原因:
原因补充:

(最多只允许输入30个字)