作家
登录

Linux音频设备驱动架构及应用编程

作者: 来源: 2017-11-08 09:18:19 阅读 我要评论


Linux音频设备驱动架构及应用编程

最早涌如今Linux上的音频编程接口是OSS(Open Sound System),它由一套完全的内核驱动法度榜样模块构成,可认为绝大年夜多半声卡供给同一的编程接口。OSS出现的汗青相对较长,这些内核模块中的一部分(OSS/Free)是与Linux内核源码合营免费宣布的,别的一些则以二进制的情势由4Front Technologies公司供给。因为获得了贸易公司的鼎力支撑,OSS已经成为在Linux下进行音频编程的事实标准,支撑OSS的应用法度榜样可以或许在绝大年夜多半声卡上工作优胜。

固然OSS已经异常成熟,但它毕竟是一个没有完全开放源代码的贸易产品,ALSA(Advanced Linux Sound Architecture)正好弥补了这一空白,它是在Linux下进行音频编程时另一个可供选择的声卡驱动法度榜样。ALSA除了像OSS那样供给了一组内核驱动法度榜样模块之外,还专门为简化应用法度榜样的编写供给了响应的函数库,与OSS供给的基于ioctl的原始编程接口比拟,ALSA函数库应用起来要加倍便利一些。

ALSA的重要特点有:

1)支撑多种声卡设备

003)支撑SMP和多线程

声肯喔赡混音器由多个混音通道构成,它们可以经由过程驱动法度榜样供给的设备文件/dev/mixer 进行编程。对混音器的操作一般都经由过程ioctl()体系调用来完成,所有控制敕令都以SOUND_MIXER 或者MIXER 开首,下表列出了常用的混音器控制敕令。

4)供给给用开辟函数库

5)兼容OSS应用法度榜样

ALSA和OSS最大年夜的不合之处在于ALSA是由自愿者保护的自由项目,OSS则是由公司供给的贸易产品,是以在对硬件的适应程度上OSS要优于ALSA,它可以或许支撑的声卡种类更多。ALSA固然不及OSS应用得广泛,但却具有加倍友爱编程接口,并且完全兼容于OSS,对应用法度榜样员来讲无疑是一个更佳的选择。

两种音频编程接口驱动的构成如下:

1) Linux OSS 音频设备驱动的构成、mixer 接口、dsp 接口及用户空间编程办法。

2) Linux ALSA 音频设备驱动的构成、card 和组件治理、PCM 设备、control 接口、AC97 API及用户空间编程办法。

1. 数字音频设备

今朝棘手机、PDA、MP3 等很多嵌入式设备中包含了数字音频设备,一个典范的数字音频体系的电路构成为:嵌入式微控制器/DSP 中集成了PCM、IIS 或AC97 音频接口,经由过程这些接口连接外部的音频编解码器即可实现声音的AD 和DA 转换,功放完成模仿旌旗灯号的放大年夜功能。

音频编解码器是数字音频体系的核心,衡量它的指标重要有:

• 采样频率

采样的过程就是精晓常的模仿音频旌旗灯号的电旌旗灯号转换成二进制码0 和1 的过程,这些0 和1 便构成了数字音频文件。如图17.2 中的┞俘弦曲线代表原始音频曲线,方格代表采样后获得的结不雅,二者越吻合解释采样结不雅越好。采样频率是每秒钟的采样次数,我们常说的 44.1kHz 采样频率就是每秒钟采样44100 次。理论上采样频率越高,转换精度越高,今朝主流的采样频率是48kHz。

• 量化精度

量化精度是指对采样数据分析的精度,比如24bit 量化精度就是是将标准电平旌旗灯号按照2 的24 次方进行分析,也就是说将图17.2 中的纵坐标等分为224 等分。量化精度越高,声音就越逼真。

2.1 PCM 接口

针对不合的数字音频子体系,出现了几种微处理器或DSP 与音频器件间用于数字转换的接口。最简单的音频接口是PCM(脉冲编码调制)接口,该接口由时钟脉冲(BCLK)、帧同步旌旗灯号(FS)及吸法术据(DR)和发送数据(DX)构成。在FS 旌旗灯号的上升沿,数据传输大年夜MSB(Most Significant Bit)字开端,FS 频率等于采样率。FS 旌旗灯号之后开端数据字的传输,单个的数据位按次序进行传输,1 个时钟周期传输1 个数据字。发送MSB 时,旌旗灯号的等级起首降到最低,以避免在不合终端的接口应用不合的数据筹划时造成MSB 的损掉。PCM 接口很轻易实现,原则上可以或许支撑任何数据筹划和任何采样率,但须要每个音频通道获得一个自力的数据队列。

此外,所有的混音通道都有单声道和双声道的差别,如不雅须要知道哪些混音通道供给了对立体声的支撑,可以经由过程SOUND_MIXER_READ_STEREODEVS 来获得。

  1. static int mixdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)   
  2. {   
  3.  ...   
  4.  switch (cmd)   
  5.  {   
  6.  case SOUND_MIXER_READ_MIC:   
  7.  ...   
  8.  case SOUND_MIXER_WRITE_MIC:   
  9.  ...   
  10.  case SOUND_MIXER_WRITE_RECSRC:   
  11.  ...   
  12.  case SOUND_MIXER_WRITE_MUTE:   
  13.  ...   
     1/9    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      程序员的未来在哪里?扎心了

    视野。但不知为何,法度榜样员在很多人中的印象并不是特别好,蓬头垢面、满脸油光、格子衫、小短裤似乎成了法度榜样员的代名词。 反不雅同一公司里的其它岗亭,产品、运营、>>>详细阅读


    本文标题:Linux音频设备驱动架构及应用编程

    地址:http://www.17bianji.com/lsqh/38578.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)