音频Audio模块
一、概述
音频(AUDIO)模块包括四个子模块:
- 音频输入(AI);
- 音频输出(AO);
- 音频编码(AENC);
- 音频解码(ADEC)
音频输入和输出模块通过对芯片音频接口的控制实现音频输入输出功能。
音频编码和解码模块提供对G711、 G726、 ADPCM格式的音频编解码功能,并支持录制和播放LPCM格式的
原始音频文件.
二、音频输入(AI) 和 音频输出(AO)
2.1 音频接口和 AI、 AO 设备
音频输入输出接口简称为AIO( Audio Input/Output)接口,用于和Audio Codec对接,完成声音的录制和播放。
AIO接口分为两种类型:只支持输入或只支持输出。
当为输入类型时,又称为AIP;
当为输出类型时,又称为AOP
AI设备:在海思媒体处理软件中,将音频输入(AI)接口抽象为 AI设备;
AO设备:在海思媒体处理软件中,负责抽象音频接口输出功能的单元;
SS528芯片内部集成 1 个 AIO, 包含 2 个 AIP(Audio Input Port)和 2 个 AOP(Audio Output Port),也就是有2个AI设备、2个AO设备。
2.2 录音和播放原理
录音:采集声音,转换成数字信号并保存起来的过程,一般有如下三个过程:
- 原始音频信号一般是模拟信号的形式的,通过Audio Codec,按一定采样率和采样精度转换为数字信号。
- Audio Codec以I2S时序或PCM时序的方式,将数字信号传输给AI设备。
-
芯片利用DMA将AI设备中的音频数据搬移到内存中,完成录音操作
录音.png
播放:将保存的数字信号的声音取出,转换成模拟信号输出的过程:
- 芯片利用 DMA 将内存中的数据传输到 AO 设备。
- AO设备通过 I2S 时序或 PCM 时序向 Audio Codec 发送数据。
- Audio Codec 完成数字信号到模拟信号的转换过程,并输出模拟信号。
![](https://img.haomeiwen.com/i28206257/cc66cb960bbc2373.png)
2.3 AI、AO 通道
AIO在不同协议时,支持的AI、 AO多路复用模式有差异,不同的解决方案也不相同。
AI、 AO可以在AI/AO设备最大支持的比特范围内,按采样精度拆分AI和AO通道,并按照时序上的顺序,依次视为AiChn0、 AiChn1等或AoChn0、 AoChn1等。例如:SS528的AIO最大支持左右声道各160bit,可以拆分为16bit 20通道,也可以拆分32bit 10通道等等。
SS528V100 AIO 最大支持 AI、 AO 通道数如下图:
![](https://img.haomeiwen.com/i28206257/ba9ce08ff1072b9f.png)
SS528V100/SS524V100上音频AI支持的最大通道数为20通道, I2S模式下AO支持的最大通道数为8通道(每根数据线支持2通道,受I2S数据线数量限制,最大仅4通道有效), PCM模式下AO支持的最大通道数为1通道。多通道情况下, AI、 AO视通道排列中相对应的两通道为立体声输入输出。
2.4 重采样
重采样:将一个音频信号从一个采样率转换为另一个采样率。
音频输入和音频输出模块支持对音频数据实施重采样。
- 如果启用AI重采样功能,则在 ss_mpi_ai_get_frame获取数据返回前,内部将会先执行重采样处理,再返回处理后的数据。
- 如果启用了AO重采样功能,则音频数据在发送给AO之前,内部先执行重采样处理,处理完成后再发送给AO通道进行播放。
音频重采样支持任意两种不同采样率( 64k、 96k除外)之间的重采样,也支持64kHz下采样到8kHz或16kHz。
- 重采样支持的输入采样率为: 8kHz, 11.025kHz, 12kHz,16kHz, 22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz, 64kHz,
- 不支持的输入采样率: 96kHz;
- 支持的输出采样率为: 8kHz, 11.025kHz, 12kHz, 16kHz,22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz;
- 不支持的输出采样率: 64kHz,96kHz;
- 重采样仅支持处理单声道
三、音频编码和解码
海思SS528的音频编码、解码都是用软件的,而非硬件。
SDK音频的编码类型G711、 G726、 ADPCM_DVI4、 ADPCM_ORG_DVI4、ADPCM_IMA均使用CPU软件编解码。
所有的解码功能都基于独立封装的音频解码库,核心解码器工作在用户态,使用CPU软件解码。
SDK支持通过SYS模块的绑定接口,将一个AI通道绑定到AENC通道,实现录音编码功能;
也可以将一个ADEC通道绑定到AO通道,实现解码播放功能。
3.2 音频编解码协议
![](https://img.haomeiwen.com/i28206257/4de13562cad38308.png)
表中列出来的编码协议,仅支持对单个声道的音频帧进行编码,如果送给编码通道的是立体声音频帧,则只会对左声道数据进行编码,编码出来的码流只带左声道数据。
3.3 语音帧结构
使用语音编解码库进行G711、 G726、 ADPCM格式的编码,编码后的码流遵循以下表格中描述的帧结构,即在每帧码流数据的净荷数据之前填充有4个字节的帧头;使用语音编解码库进行以上格式的解码时,需要读取相应的帧头信息。
帧头中的数据净荷长度(单位:short)字段计算公式:
数据净荷长度 = (每帧采样点数 – 输入预测采样点数)/压缩率 + 输出预测帧头长度。
下图是语音帧结构:
![](https://img.haomeiwen.com/i28206257/5aa601a5a9caa199.png)