前言
本人自2012年开始从事音频软件相关的开发工作,如今也有十多年的时间,假如你现在准备投身音频软件这个领域,或者是想面试音频软件相关的岗位,或许这篇文章有你想要的东西。
基础概念
Item | description |
数字/模拟 信号 | 数字信号:是对连续的模拟信号进行抽样,量化和编码得到的离散数字信号 note:我们软件工程师代码处理的都是数字信号 |
采样率 | 1秒钟采样的信号点数,一般用HZ表示,常见的有48K,16K,8K等 |
位深 | 表示每个采样点使用多少位来表示;如果用16bit位深,那每个采样点就是两个字节 |
采样定理 | 信号的采样率必须不小于信号最高频率的两倍 |
通道 | 一般表示音频在传输过程的通道数量,如耳机就是:左声道和右声道 |
peroid_size | 这个表示音频处理块的大小,一般和中断对应 |
peroids | 音频处理的ring buffer有多少个peroid_size的buffer |
interleave | 音频交织排布方式,以双声道3个采样点为例:(L1 R1 L2 R2 L3 R3) |
noninterleave | 音频非交织排布方式,以双声道3个采样点为例:(L1 L2 L3 R1 R2 R3) |
其他 | 硬件接口:I2C,IIS |
软件架构
学习开源的音频框架,是成长的一部分。下面列出四个经典的开源项目供参考学习
- Android灵魂拷问
1. AudioTrack 和AudioRecord是如何和AudioFlinger做交互的?
2. AudioFlinger的各个音频线程如何被创建的?他们的创建属性有什么区别?
3. Audiopolicymanager如何做音频设备切换,关键函数是哪个?
4. AudioHal做为一个中间件是如何把android和linux的音频连接起来的?
- Linux ALSA
嵌入式linux内核主流的音频框架,可以考古:
Audio之ALSA框架基础_alsa audio-CSDN博客
- WebRTC
音频通信领域最著名的音频处理框架
- FFmpeg
音频编解码大集合,基本上常见的音频编码格式都可以在这里找到。
DSP系统
DSP属于音频专用的芯片系统,主流的IP厂商有很多,例如CEVA,Cadence等。一般而言这些芯片由于资源有限,一般是跑轻量级的操作系统如FreeRTOS,XOS,RTThread等。
目前有INTEL公司开源的整套解决方案可以参考,这个项目的主要开发人员也是Linux ALSA的作者: