吵吵   2012-02-12  阅读:3,624

   吵吵前在研究一个问题,即在linux下怎么把从话筒中输入的声音记录下来成为一个wav文件,又或者再压缩一下,在网路上进行传输。没曾想到的是原来单单是获取音频已经是一个大大的问题了,搞了一晚都没有成功的采集到呢,alsa比oss确实是麻烦多了。

   OSS全称是Open Sound System,即是linux下的声卡驱动架构,它提供了主要的一些api函数,音频进行操作的。早期的linux下声卡多是用这种架构的,但是它有一个缺点就是不支持混音,而且都不能同时操作声卡。但是OSS的好处在于,它提供的api很简单也很易用,例如需要采集音频的话,只需要open /dev/dsp就行了,然后就是read出来音频数据。

   这种基于dsp的编程很简单,大概就是打开设备、设置声道、设置采样格式、设置采样频率、录音、播放、关闭设备了,这里的代码网上一堆,我也不再贴了。看看这段代码吧,就是打开设备的代码:

   1:  int handle = open("/dev/dsp", O_WRONLY);
   2:  
   3:  if (handle == -1) {
   4:  
   5:      perror("open /dev/dsp");
   6:  
   7:      return -1;
   8:  
   9:  }

 

为什么会说到这段代码,因为吵吵在ubuntu下实验采集音频的时候总是出现open faild /dev/dsp not found之类的错误,意思即是打开设备失败,dsp不存在。这是个什么问题?因为现在的linux系统已经不用OSS了,都用alsa了。

ALSA全称是Advanced Linux Sound Architecture,在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统),所以以上我们的编程就是无用功。ALSA的好处在于提供了软件混音等功能,坏处也显而易见,至少对开发者来说,一堆的函数让人摸不着头脑。

要写基于ALSA声卡驱动框架的音频采集程序,我们需要先下载和安装lasa-lib,这个需要去它的官网下载,然后安装就是linux下的基本程序安装步骤了

./configure

make

make install

安装好了,我们找到官网的一个例子试了一下,但是编译的时候老是提示里面的诸多函数没有定义,即undefined。怎么办呢?那是还要链接库,类似使用多线程需要在编译时候加入-lpthread,这里加入-lasound就能编译通过了。至于里面的函数到底怎么弄,麻烦您去看看官网的说明,吵吵觉得真的是太繁琐了,原本以为很简单做个录音机,还搞的我心力交瘁,ALSA,伤啊… …

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

3条回应:“linux下音频采样的那些问题”

  1. 大学便民网说道:

    看到代码就头痛
    第一次用linux的程序就是你的那款港湾登录器,到现在还不知道那些命令是干嘛用的…

  2. 刘学政博客说道:

    如此技术,我说什么呢?

  3. 淘宝培训说道:

    毕竟什么都是浮云

发表评论

电子邮件地址不会被公开。 必填项已用*标注