这一年来的一个重要工作是音频设备驱动方面,如驱动开发、调试debug、性能调优、音频路由、回声消除等。除此之外,熟悉了一下alsa-lib接口,Android音频系统,包括设备抽象层和音频策略。
遗憾的是一直没有什么机会接触蓝牙设备的集成和开发,可预知的未来无线设备会极大地普及。还有就是ffmpeg,以前经常用它来做一些兴致突来能力而及的小工具,年初时计划进一步在它的基础上学习H264或AVS的解码,但至今都未开始。问题一方面是我自身的懒惰,另一方面是公司不允许装虚拟机(PC装的是windows,毕竟办公都必须在windows环境下,开发登陆到Linux服务器)。试过在cygwin上面建立ffmpeg开发环境,以失败告终,ffplay无论如何都不能编译。
而值得自豪的是,alsa-driver算是消化得差不多了。sound/core目录里面的几大主体:control、hwdep和pcm,sound/soc目录的soc-core和soc-dapm都基本理顺了。还有info、jack、timer、rawmidi、usb-audio、ac97-bus,有空再研究。
关于control、hwdep、dapm、codec,写了不少文章记录我的学习成果,均在ALSA专栏。Card和pcm方面,由于内容太庞大,未整理出较完善的文档,暂借用前辈的经验,如下:
Linux音频驱动之二:声卡的创建:http://blog.csdn.net/droidphone/article/details/6289712
Linux音频驱动之三:PCM设备的创建:http://blog.csdn.net/droidphone/article/details/6308006
alsa驱动分析之一:http://blog.csdn.net/wylhistory/article/details/5114217
alsa驱动分析之二:http://blog.csdn.net/wylhistory/article/details/5114230
然后缪谈一些个人对于alsa开发的心得吧。
1、 清楚音频相关概念和原理,如采样率、采样精度、peroid、ADC/DAC、DAI、pops等等;明白音频数据流向,进而明白codec、i2s、dma各起到什么作用。
2、多看内核文档Documentation/sound/alsa,这些文档起到概述作用,配合源码可以让人更清晰音频概念和运作机理。
3、alsa-utils的几个工具,多用aplay和amixer进行调试。
4、熟悉alsa配置脚本asound.rc的写法:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html,有时间可以练习写一个类似aplay的播放器工具。
其实这些都是老生常谈了,但很实用。
另外今天在网上找到一个wolfson音频处理芯片的PPT,写得很好,将音频开发的大致流程和关键点都写出来了。
Linux Audio for Android:http://download.csdn.net/detail/sepnic/3783997
----
2012/12/17
今天进资源区看了下这个PPT的评论,发现很多人在抱怨“英文的,看的不懂啊”。于此,我只能坦白说一句:如果这种程度的英文都无能为力的话,我劝你还是不要做这行了吧!工作多年,看过的datasheet从来没发现有中文的东西。大学时,C++程序设计、数据结构与算法、编译原理、操作系统、数字信号处理这些课程全是英文教材,换成你们,是不是不用学了?