找回密码
 立即注册
Qt开源社区 门户 查看内容

嵌入式Linux音频驱动开发

2019-3-21 05:53| 发布者: admin| 查看: 1195| 评论: 0

摘要: 嵌入式Linux音频驱动开发最简短的回答是行动。by赫伯特干就是了。嵌入式Linux音频驱动开发必备知识数字音频(必备)声卡驱动(必备)编程接口(必备)应用框架(必备)我们年轻时坚持一些自己认为是正确的东西的时候 ...

嵌入式Linux音频驱动开发








最简短的回答是行动。by赫伯特

干就是了。



嵌入式Linux音频驱动开发必备知识数字音频(必备)声卡驱动(必备)编程接口(必备)应用框架(必备)




我们年轻时坚持一些自己认为是正确的东西的时候,总有些长辈,完全是出于善意好心,过来提醒你,告诉你这个社会不像你想的那样,如果你要想怎么样,就必须怎么怎么样。这种话你是不是听过很多次啊?我长大的过程中也不断地听到这种话,我从来都不听,我就一直坚持我年轻时认为是正确的东西。——罗永浩



声卡驱动


嵌入式Linux音频驱动开发,主要是基于两种声卡驱动。

  1. Open Sound System「OSS」


  2. Advanced Linux Sound Architecture「ALSA」



01Open Sound System「OSS」



Open Sound System「OSS」是一个类 Unix 和 POSIX 兼容系统上一个可选的音频架构。OSSv3是 Linux 下原始的声音系统并集成在内核里。但是 OSSv4 在2002年 OSS 称为商业软件时它的地位被 ALSA 所取代。 OSSv4 在 2007 年又称为了开源软件,4Front Technologies 以 GPL 协议发布了它的源码。



02Advanced Linux Sound Architecture



高级 Linux 声音体系「Advanced Linux Sound Architecture」是 Linux 中提供声音设备驱动的内核组件,用来代替原来的开放声音系统(Open Sound System,OSSv3)。除了声音设备驱动,ALSA 还包含一个用户空间的函数库,开发者可以通过这些高级 API 使用驱动,不必直接与内核驱动进行交互。



Open Sound System「OSS」与 Advanced Linux Sound Architecture 对比的优缺点。

OSS的优点「对用户来说」

  1. 在内核空间(kernel space)里面包含了一个透明软件混音器(vmix)。这样多个程序就可以同时使用声音设备而且没有任何问题。

  2. 这个混音器可以让你单独调节各个程序的音量。

  3. 对某些老声卡有着更好的支持比如创新(Creative)的X-Fi。

  4. 声音程序的初始反应时间一般更好。

  5. 对使用OSS的应用程序接口(API)的程序有更好的支持,很多程序都支持OSS的API,而不需要ALSA的模拟。


OSS的优点「对开发者来说」

  1. 清晰的 API 文档,更易于使用。

  2. 支持用户空间的声音驱动。

  3. 可移植性强,OSS也可以在BSDs和Solaris下运行。

  4. 本身可以跨平台,可以更方便移植到新的操作系统。


ALSA 的优点

  1. ALSA对USB音频设备支持更好,而OSS的输出还在试验中,输入还未实现。

  2. ALSA支持蓝牙声音设备。

  3. ALSA支持AC'97和HDAudio dial-up soft-modems (比如Si3055)。

  4. ALSA对MIDI支持得更好,但用OSS你只能通过软件合成器(如timidity和fluidsynth)来使用MIDI。

  5. ALSA对待机支持更好,而用OSS,你需要在待机前使用soundoff来停止OSS驱动,在恢复后使用soundon来启动OSS。

  6. OSS的jack检测目前在某些HDAudio-powered主板上不能正常工作。也就是说在某些型号的主板上,你可能需要在插入耳机的时候手动关闭外置扬声器。而ALSA没这个问题。





OSS API 文档链接:「http://manuals.opensound.com/developer/」



出于对安全性方面的考虑,Linux下的应用程序无法直接对声卡这类硬件设备进行操作,而是必须通过内核提供的驱动程序才能完成。在Linux上进行音频编程的本质就是要借助于驱动程序,来完成对声卡的各种操作。

对硬件的控制涉及到寄存器中各个比特位的操作,通常这是与设备直接相关并且对时序的要求非常严格,如果这些工作都交由应用程序员来负责,那么对声卡的编程将变得异常复杂而困难起来,驱动程序的作用正是要屏蔽硬件的这些底层细节,从而简化应用程序的编写。





奋斗的小青年,终生学习者

有趣的灵魂终会遇见。
扫码关注



----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Kende,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了