概述
音频
1、概述
AUDIO 模块包括音频输入、音频输出、音频编码、音频解码四个子模块。音频输入和输出模块通过对Hi35xx 芯片音频接口的控制实现音频输入输出功能。音频编码和解码模块提供对G711、G726、ADPCM 格式的音频编解码功能,并支持录制和播放LPCM格式的原始音频文件。
2、功能描述
2.1音频输入和音频输出
2.1.1 音频接口和AI、AO 设备
音频输入输出接口简称为AIO(Audio Input/Output)接口,用于和Audio Codec 对接,完成声音的录制和播放。AIO 接口分为两种类型:只支持输入或只支持输出,当为输入类型时,又称为AIP,当为输出类型时,又称为AOP。
软件中负责抽象音频接口输入功能的单元,称之为AI 设备;负责抽象音频接口输出功能的单元,称之为AO 设备。
对每个输入输出接口,软件根据该接口支持的功能,分别与AI 设备和AO 设备建立映射关系。例如:AIP0 只支持音频输入,则AIP0 映射为AiDev0;AOP0 只支持音频输出,则AOP0 映射为AoDev0。
2.1.2 录音和播放原理
原始音频信号以模拟信号的形式给出后,通过Audio Codec,按一定采样率和采样精度转换为数字信号。Audio Codec 以I2S 时序或PCM 时序的方式,将数字信号传输给AI设备。芯片利用DMA 将AI 设备中的音频数据搬移到内存中,完成录音操作。
播放和录音是基于同样的原理。芯片利用DMA 将内存中的数据传输到AO 设备。AO设备通过I2S 时序或PCM 时序向Audio Codec 发送数据。Audio Codec 完成数字信号到模拟信号的转换过程,并输出模拟信号。
2.1.3 音频接口时序和AI、AO 通道排列
音频接口时序
音频接口支持标准的I2S 接口时序模式和PCM 接口时序模式,并提供灵活的配置以支持与多种Audio Codec 对接。详细的时序支持情况请参考对应芯片的用户指南。
为实现成功对接,需要对I2S 或者PCM 协议以及对接的Audio Codec 时序支持情况有足够了解,这里只简单介绍下I2S 及PCM接口时序的几个特性:
- 按照标准 I2S 或PCM 协议,总是先传送最高有效位MSB,后传送最低有效位LSB,即按照从高位到低位的顺序传输串行数据。
- AI 设备支持扩展的多路接收的I2S 及PCM 接口时序。对接时,Codec 的时序模式选择、同步时钟、采样位宽等配置必须与AI 设备的配置保持一致,否则可能采集不到正确的数据。
- AI/AO 设备支持主模式和从模式,主模式即AI/AO 设备提供时钟,从模式即Audio Codec 提供时钟。主模式时,如果AI 设备与AO 设备同时对接同一个Codec,则时钟供输入和输出共同使用,其他情况没有此限制。而从模式时的输入输出时钟可以分别由外围Audio Codec 提供。
- 由于时序的问题,在 AI/AO 设备从模式下,建议用户先配置好对接的Codec,再配置AI 或AO 设备;而在AI/AO 设备主模式下,建议用户先配置好AI 或AO 设备,再配置对接的Codec。
- AI/AO 设备选择主模式时,有些AI/AO 设备只提供用于时序同步的帧同步时钟和位流时钟,不提供MCLK,这时如果Audio Codec 使用外接的晶振作为工作时钟,这样可能导致声音失真,因此推荐使用从模式或者使用位流时钟产生Codec内部工作主时钟。
当 AI/AO 设备为主模式时,对于向外提供了MCLK 的AI/AO 设备,MCLK 的设定为:
− 采样率为 48k/24k/12k 时,提供12.288MHz 的主时钟。
− 采样率为 32k/16k/8k(32k 采样位宽不是256bits,8k 要求采样位宽不是16bits)时,提供12.288MHz 的主时钟。
− 采样率为 32k/16k/8k(32k 采样位宽为256bits 或8k 采样位宽为16bits)时,提供8.192MHz 的主时钟。
− 采样率为 44.1k/22.05k/11.025 时,提供11.2896MHz 的主时钟。
AI/AO 设备支持标准PCM 模式和自定义PCM 模式。PCM 模式下只支持单声道模式,因此在PCM 模式下,需要关闭对接Codec 的右声道输出,否则声音会有杂音。根据PCM 标准模式协议,当工作模式为标准PCM 主模式或标准PCM 从模式时,音频输入输出的数据相对帧同步信号延迟1 个位流时钟(BCLK)周期。如果在标准PCM 主模式或标准PCM 从模式下对接外置的Codec,需要确保外置Codec 的数据相对帧同步信号延迟的位流时钟(BCLK)周期数大于音频输入输出数据相对帧同步信号延迟的位流时钟周期数(1 个BCLK),否则声音会有杂音。
AI AO通道
AI和AO通道是软件层次的概念,下面通过举例的方式来说明通道的概念。例如当AI设备使用多路复用的I2S 接收模式时,标准的I2S 协议只有左右声道这个概念,AI 设备最大支持左右声道各接收128bit 音频数据。此时假设Codec 具有复用功能,可以将16路16bit 采样精度的音频数据复用为2 路128bit 的I2S 左右声道数据,那么AI 设备可以解析这16 路音频数据,并称这16 路音频数据为16 个音频通道。
AIO多路复用 | 最大支持 | 通道举例 |
---|---|---|
IIS时序接受 | 左右声道各128bit | 16bit16chn等 |
PCM接受 | 单声道128bit | 16bit8chn等 |
IIS时序发送 | 左右声道各16bit | 16bit2chn |
PCM时序发送 | 单声道16bit | 16bit1chn |
AI、AO可以在在AI/AO 设备最大支持的比特范围内,按采样精度拆分AI 和AO 通道,并按照时序上的顺序,依次视为AiChn0、AiChn1 等或AoChn0、AoChn1 等。只有AI/AO 设备配置的I2S 或PCM 时序与Codec 配置的时序一致时,才能接收或传送正确的音频数据,将AI/AO 设备的时序配置和Codec 的时序配置调为一致的过程称作对接。例如配置AO 为标准PCM 从模式,8k 采样率,16bit 采样精度,4 通道;配置Codec 提供的帧同步时钟为8k,位流时钟为8kx64bit,每个采样点为64bit(Codec 支持将四个16bit 的采样点复用为一个采样点);
PCM时序发送示意图
AIO 接口中的AI 设备与AO 设备是相互独立的,如果它们同时对接同一个Codec,则
AI 和AO 配置的工作模式必须一致,例如AI 和AO 均配置为I2S 时序的从模式。当AIO 工作在主模式时,AI 和AO 的通道数与采样精度的乘积也必须相等,这样才能保证由AIO 发送给Audio Codec 的同步时钟,对AI 和AO 是一致的,例如AI 是16bit 4通道,AO 可以是8bit 8 通道,如果他们没有同时对接同一个Codec,则没有此限制。当AIO 工作在从模式时,AI 和AO 的通道数与采样精度的乘积可以不一致,此时可以由Audio Codec 发送不同的同步时钟给AI 和AO。Hi35xx SDK 支持通过SYS 模块绑定接口,建立AI、AO 通道间的绑定关系,实现音频数据的实时播放。
2.1.4 重采样
音频输入和音频输出模块支持对音频数据实施重采样如果启用AI 重采样功能,则在HI_MPI_AI_GetFrame 获取数据返回前,内部将会先执行重采样处理,再返回处理后的数据。如果启用了AO 重采样功能,则音频数据在发送给AO 之前,内部先执行重采样处理,处理完成后再发送给AO 通道进行播放。
音频重采样支持任意两种不同采样率之间的重采样。重采样支持的输入输出采样率为:8kHz,11.025kHz,12kHz,16kHz,22.05kHz,24kHz,32kHz,44.1kHz,48kHz。重采样仅支持处理单声道。
- 如果是 AI 的重采样,则重采样的输入采样率与AI 设备属性配置的采样率相同,重采样的输出采样率必须与AI 设备属性配置的采样率不相同,用户只需要配置重采样的输出采样率。重采样之前的每帧采样点数目与AI 设备属性配置的每帧采样点数目相同。
- 如果是 AO 的重采样,则重采样的输出采样率与AO 设备属性配置的采样率相同,重采样的输入采样率必须与AO 设备属性配置的采样率不相同,用户只需要配置重采样的输入采样率。重采样之后音频帧的每帧采样点数目与AO 设备属性配置的每帧采样点数目相同
- 如果 AI 的数据需要送到AENC 进行编码且AI 启动了重采样,则重采样后的音频帧长Out PtNumPerFrm 必须满足:CPU 软件编码时Out PtNumPerFrm 小于等于编码通道属性的u32PtNumPerFrm;VOIE 编码时Out PtNumPerFrm 必须是80、160、240、320、480 中的一个值。Out PtNumPerFrm、重采样前的音频帧长InPtNumPerFrm、重采样前的采样InSampleRate、重采样后的采样率OutSampleRate 之间的换算关系为OutPtNumPerFrm=OutSampleRate*InPtNumPerFrm/InSampleRate。
注意
- 当 AI-AO 的数据传输方式为系统绑定方式时,AI 或AO 的重采样无效。
- 当 AI-AENC 的数据传输方式为系统绑定方式时,AI 的重采样有效。
- 非系统绑定方式下,用户可以通过 HI_MPI_AI_GetFrame 接口获取重采样处理后的AI 音频帧,并发送给AENC/AO,以建立AI-AENC 或AI-AO 的数据传输,此时AI或AO 的重采样有效。
- ADEC-AO 的数据传输方式无上述限制,当为系统绑定方式时,AO 的重采样仍有效。
- 接口 HI_MPI_AI_EnableReSmp 和HI_MPI_AI_DisableReSmp 使用的是声音质量增强功能中的RES 模块。
2.1.5 声音质量增强(VQE)
音频输入和输出模块支持对音频数据进行声音质量增强(Voice QualityEnhancement)处理。VQE 针对AI 和AO 两条通路的异同点,分别通过UpVQE 和DnVQE 两个调度逻辑来处理两个通路的数据。
- AI 上行通路的VQE 功能包含回声抵消、语音降噪、自动增益、高通滤波、录音噪声消除、均衡器六个处理模块,如图所示。AI 上行通路的VQE 功能在HI_MPI_AI_GetFrame 接口内实现,并返回处理后的数据。
- AO 下行通路的VQE 功能包含语音降噪、自动增益、高通滤波、均衡器四个处理模块,如图 所示。AO 下行通路的VQE 功能在HI_MPI_AO_SendFrame 接口内实现。
VQE 分为2 个调度接口模块(UpVQE 和DnVQE),8 个功能模块(AEC、ANR、AGC、RNR、EQ、HPF、GAIN、RES),以及1 个共用模块(COMMON)。两个调度逻辑使用libdl 库的dlopen 方式动态加载各个功能模块,通过统一功能模块的API 接口格式,对功能模块进行统一调度。VQE 功能模块支持剪裁,用户可根据实际应用场景选择需要用到的功能模块动态库文件,如表所示:
模块名 | 功能描述 | 库文件名称 | AI 上行通路 | AO 下行通路 | 是否可剪裁 | 依赖 | 互斥 |
---|---|---|---|---|---|---|---|
UpVQE | AI 音效处理调度接口 | libupvqe.a(.so) | 有 | 无 | 否 | 无 | 无 |
DnVQE | AO 音效处理、调度接口 | libdnvqe.a(.so) | 无 | 有 | 否 | 无 | 无 |
AEC | 回声抵消 | libhive_AEC.so | 有 | 无 | 是 | 无 | RNR |
ANR | 语音降噪 | libhive_ANR.so | 有 | 有 | 是 | 无 | RNR |
AGC | 自动增益控制 | libhive_AGC.so | 有 | 有 | 是 | 无 | RNR |
RNR | 录音噪声消除 | libhive_RNR.so | 有 | 无 | 是 | 无 | AEC/ANR/AGC/EQ |
EQ | 均衡处理器 | libhive_EQ.so | 有 | 有 | 是 | AGC | RNR |
HPF | 高通滤波 | libhive_HPF.so | 有 | 有 | 是 | 无 | 无 |
GAIN | 音量调节 | libhive_GAIN.so | 有 | 无 | 是 | 无 | 无 |
RES | 重采样 | libhive_RES.so | 有 | 有 | 是 | 无 | 无 |
COMMON | 公共模块 | libhive_common.so | 有 | 有 | 是 | 无 | 无 |
注意
- 当 AI- AO 的数据传输方式为系统绑定方式时,使能AI 或AO 的任何VQE 功能均不起作用。
- 声音质量增强功能不支持立体声。
- 如果 AI-AENC 之间采取的是系统绑定方式传输数据,使能AI 上行通路的VQE 功能后,在AENC 中先进行相应的VQE 处理,再进行编码。
- 当 AI-AENC/AO 的数据传输方式为非系统绑定方式时,使能AI 上行通路的VQE功能后,VQE 功能在HI_MPI_AI_GetFrame 接口内部进行处理,用户可以通过该MPI 接口获取VQE 处理后的AI 音频帧,然后发送给AENC/AO,以建立AI-AENC或AI-AO 的数据传输。
AEC 为回声抵消(Acoustic Echo Cancellation)模块,主要工作在需要进行去除回声的场景下:如IPC 对讲,远端语音数据在AO 设备上播放,此时在本地通过MIC 采集语音数据,它支持消除录制的语音数据中的AO 设备播放的声音(回声)
与其他功能模块只需要Sin 数据不同,AEC 模块需要Sin(Signal In)和Rin(Reference In)两路数据来进行算法处理,最终得到处理后的sou(Signal Out)数据。其中,Sin 为加入了回声的近端输入,Rin 为参考帧(回声)数据。成功启用回声抵消
需要具备一定条件:单声道模式,工作采样率为8kHz、16kHz,且MIC 采集语音数据的AI 帧长和远程语音播放的AO 配置帧长必须相同。以上条件AI 和AO 都必须满足。
ANR为语音降噪(Audio Noise Reduction)模块,主要工作在需要去除外界噪声,保
留语音输入的场景下。与RNR 算法比起来,ANR 更讲究噪声处理的干净程度。ANR 会滤除一些环境声音,
主要保留语音数据,并会带来一定的细节丢失。所以ANR 算法更适用于NVR 和IPC
场景。在这两个场景下,我们更希望能够着重保留人声,滤除其他噪声。
注意
语音降噪功能仅支持8KHZ,16KHZ采样率,不支持立体声。
RNR 为录音噪声消除(Record Noise Reduction)模块,主要工作在需要去除环境噪声,但保留小信号输入的场景下。与ANR 算法比起来,RNR 更讲究细节输入(小信号)的保留度,RNR 会在降噪的同时保留小信号的输入,所以降噪力度会低一点,但能更多的保留现场声音,真实还原场景,适用于运动DV 场景。
注意
录音噪声消除功能仅支持8KHZ,16KHZ,48KHZ采样率,不支持立体声。
HPF 为高通滤波(high-pass filte)模块,主要负责去除低频噪声。低频噪声来源经常为硬件噪声或工频噪声,表现为轰轰轰类不舒适的声音。我们可以通过使用频谱分析单板在安静环境下录制的码流,来确定是否需要加入该模块。如果低频噪声不是非常明显,并且客户需要保留低频部分的音源,则不建议加入该模块。推荐配置参数为AUDIO_HPF_FREQ_120 或AUDIO_HPF_FREQ_150。
注意
高通滤波功能仅支持8KHZ,16KHZ,48KHZ采样率,不支持立体声。建议在使用VQE功能时,一直开启高通滤波功能。
AGC
AGC 为自动增益控制(Auto Gain Control)模块,主要负责增益控制输出电平,在声音输入音量有大小变化时,能将输出音量控制在比较一致的范围内,主要工作在需要保证声音不至于过大或过小的场景下。AGC 更多起到的作用是放大输入源的声音,以保证音源过小时,经过算法处理后的声音依然很大。AI 通路如果使能了AGC 功能,那么将不再能够通过调节AI 增益来控制输出声音大小,需要通过调用接口HI_MPI_AI_SetVqeVolume 来控制声音输出大小。
注意
自动增益功能仅支持8KHZ,16KHZ,采样率,不支持立体声。
EQ模块为均衡处理器(Equalizer)模块,主要对音频数据进行均衡处理,以调节音频数据中各频段声音的增益。
注意
- 均衡处理器仅支持8KHZ,16KHZ,采样率,不支持立体声。
- 均衡处理器使用的前提是,自动增益功能开启。
GAIN模块是音量调节模块,主要用于调节AGC 开启后的音量大小。AGC 负责对语音的音量进行动态增益控制,算法能够处理的Sin 语音电平范围为0dB至-40dB,处理完毕后的语音电平最大值为-2dB,并且在语音最大增益方面做到了30dB 的增益,这使得sout 的语音电平能够做到-2dB 至-10dB,同时也使得通过调整AI增益来调整sout 的音量成了一个很困难的事情,因此GAIN 模块在VQE 处理流程中位于AGC 模块后端,以实现AI 上行通路的音量调节。
RES 模块为重采样(Resampler)模块。当AI 上行或AO 下行通路中开启VQE 各功能模块时,在处理前后各存在一次重采样,第一次的作用是将输入采样率下的音频数据转换成功能模块所支持的工作采样率(8kHz/16kHz/48kHz),第二次则将工作采样率下的数据转换成输出采样率。
2.2 音频编码和解码
2.2.1 音频编解码流程
音频的编码类型G711、G726、ADPCM_DVI4、ADPCM_ORG_DVI4、ADPCM_IMA 均使用CPU 软件编解码。所有的解码功能都基于独立封装的海思音频解码库,核心解码器工作在用户态,使用CPU 软件解码。SDK 支持通过SYS 模块的绑定接口,将一个AI 通道绑定到AENC 通道,实现录音编码功能;也可以将一个ADEC通道绑定到AO 通道,实现解码播放功能。
2.2.2 音频编解码协议
协议 | 采样率 | 帧长 | 码率 | 压缩率 | CPU消耗 | 描述 |
---|---|---|---|---|---|---|
G711 | 8kHz | 80/160/240/320/480 | 64 | 2 | 1MHz | 优点:语音质量最好;CPU 消耗小;支持广泛,协议免费。缺点:压缩效率低。G.711 提供A 律与μ 律压缩编码,适用于综合业务网和大多数数字电话链路。北美与日本通常采用μ 律编码,欧洲和其他地区大都采用A 律编码。 |
G726 | 8kHz | 80/160/240/320/480 | 16、24、32、40(注:G726 编码是一种有损压缩方法,码率比较小时,压缩比和量化误差较大,可能会影响声音质量) | 8~3.2 | 5 MHz | 优点:算法简单;语音质量高,多次转换后语音质量有保证,能够在低码率上达到网络等级的话音质量。缺点:压缩效率较低。G726_16KBPS 与MEDIA_G726_16KBPS 两种编码器区别在于编码输出的打包格式。G726_16KBPS 适用于网络传输;MEDIA_G726_16KBPS 适用于ASF 存储。请参考RFC3551.pdf。 |
ADPCM | 8kHz | 80/160/240/320/480或81/161/241/321/481 | 32 | 4 | 2 MHz | 优点:算法简单;语音质量高,多次转换后语音质量有保证,能够在低码率上达到网络等级的话音质量。缺点:压缩效率较低。ADPCM_IMA4、ADPCM_ORG_DVI4 和ADPCM_DVI 是ADPCM 编码算法的三种封包格式。IMA 封包格式以第一个采样点作为预测值,DVI 封包格式以上一帧作为预测值。即IMA 编码每帧需要多输入一个采样点,输入采样点个数为81/161/241/321/481。DVI 编码每帧输入采样点个数为80/160/240/320/480 |
注意
- “cpu 消耗”的结果值基于ARM9 288MHz 环境,2 MHz 表示解码分别占有2MCPU。
- G726 编码是一种有损压缩方法,码率比较小时,压缩比和量化误差较大,可能会影响声音质量。
- 由于 ADPCM_ORG_DVI4 没有传输预测值,这样在网络丢包时,可能会引起异常。因此在音频码流网络传输应用中,不推荐使用该协议编码。
- 当编码或解码协议选择 LPCM 时,音频编码和解码模块可以录制和播放LPCM 格式的原始音频文件。
2.2.3 海思语音帧结构
海思语音编码库进行G711、G726、、ADPCM格式的编码,编码后的码流遵循以下表格中描述的帧结构,即每帧码流数据的净荷数据之前填充有四个字节的帧头;使用语音编码库解码时需要读取相应的帧头信息。
海思语音帧结构
参数位置(单元:HI_S16) | 参数比特位说明 | 参数含义 |
---|---|---|
0 | [15:8] | 净荷数据 |
0 | [7:0] | 保留 |
1 | [15:8] | 帧循环计数器 0~255 |
1 | [7:0] | 数据净荷长度(单位:HI_S16) |
2 | [15:0] | 净荷数据 |
3 | [15:0] | 净荷数据 |
… | [15:0] | 净荷数据 |
2+n-1 | [15:0] | 净荷数据 |
2+n | [15:0] | 净荷数据 |
2.3 音频接口与设备的对应关系
芯片集成的AIO内部分为两类:只支持音频输入的AIP和只支持音频输出的AOP.
AIO接口只支持音频输出的AOPO可以配置是否共同帧同步时钟和位流时钟给AIPO使用。共用时,AI设备0和AO设备0的帧同步始终与位流时钟必须相同,即采样精度乘以通道数目必须一致,并且采样频率也必须一致。
说明:
- AIPO与AOPO同时对接同一个Codec,可用语音对讲。
- AIPO/AOPO对接内置COdec时只支持IIS主模式。
2.4内置Audio Codec
2.4.1 概念
用于对接AIP0/AOP0 实现声音的播放和录制。AIP0/AOP0 接口可以选择对接内置的Audio Codec 或外接的Audio Codec,进行声音的播放及录制。因为内置Audio Codec 不能发送同步时钟,所以AIP0/AOP0 接口对接内置Codec 时只能配置为I2S 时序的主模式,用户仍需要正确配置AIP0/AOP0 和内置Audio Codec 对接的时序才可接收或发送音频数据。
2.4.2 重要概念
内置Audio Codec 分为模拟部分和数字部分。模拟部分可以通过模拟混音(MICPGA)选择由麦克风输入或LINEIN 输入,模拟混音支持增益调节。数字部分有ADC 和DAC,完成模拟信号和数字信号之间的转换,并且可分别调节音量。用户在进行音量调节时,可综合模拟部分和数字部分的音量调节,建议优先调节模拟部分音量。
内置Audio Codec 的DAC 支持软静音和软撤销静音。软静音控制数字音频数据被逐渐衰减到0,软撤销静音控制数字音频数据逐渐增大到配置的增益值,改变的速率由mute_rate 控制。当软静音使能时,数字音频数据将会逐渐静音为0;当软静音禁用时,数字音频数据恢复为配置的增益值。
内置Audio Codec 的工作时钟由AIP0/AOP0 提供,并由工作时钟分别产生模拟部分和数字部分的时钟,再由数字部分的时钟产生ADC 的时钟和DAC 的时钟。如果默认配置下声音不正常,可以配置数字部分时钟和模拟部分时钟反向,或DAC 时钟和ADC时钟反向。内置Audio Codec 配置默认采样精度为16bit。另外内置Audio Codec 支持去加重滤波、pop 音抑制和高通滤波,并默认开启这些功能。
使用内置CODEC 时,AI 设备0 不能共用AO 设备0 的时钟。
2.4.3 ioctl 函数
内置Audio Codec 的用户态接口以ioctl 形式体现,其形式如下:
int ioctl (int fd,
unsigned long cmd,
……
);
该函数是Linux 标准接口,具备可变参数特性。但在Audio Codec 中,实际只需要3 个
参数。因此,其语法形式等同于:
int ioctl (int fd,
unsigned long cmd,
CMD_DATA_TYPE *cmddata);
其中,CMD_DATA_TYPE 随参数cmd 的变化而变化。
fd 内置Audio Codec 设备文件描述符,是调用open 函数打开内置Audio Codec 设备文件之后的返回值。
cmd命令控制字
cmddata各cmd对应的数据指针
2.5 设置AI设备属性
音频输入设备的属性决定了输入数据的格式,输入设备属性包括工作模式、采样率、采样精度、buffer 大小、每帧的采样点数、扩展标志、时钟选择和通道数目。这些属性应与对接Codec 配置的时序一致,即能成功对接。
- 工作模式
音频输入输出目前支持I2S 主模式、I2S 从模式、标准PCM 主模式、标准PCM 从模式、自定义PCM 主模式以及自定义PCM 从模式。由于时序的问题,AI 设备在从模式下,建议用户先配置好对接的Codec,再配置AI 设备;而在主模式下,建议用户先配置好AI 设备,再配置对接的Codec。 - 采样率
采样率指一秒中内的采样点数,采样率越高表明失真度越小,处理的数据量也就随之增加。一般来说语音使用8k 采样率,音频使用32k 或以上的采样率;设置时请确认对接的Audio Codec 是否支持所要设定的采样率。 - 采样精度
采样精度指某个通道的采样点数据宽度,同时决定整个设备的通道分布。采样精度可以设置为8bit 或16bit,实际应用中采样精度还受Audio Codec 限制。 - buffer 大小
AIO_ATTR_S 中的u32FrmNum 项用于配置AI 中用于接收音频数据的缓存的音频帧帧数,建议配置为5 以上,否则可能出现采集丢帧等异常。 - 每帧的采样点数
当音频采样率较高时,建议相应地增加每帧的采样点数目。如要将这些采集到的音频数据送编码,则应保证每帧的持续时长不少于10ms(例如16K 的采样频率下每帧的采样点数至少应设置为160,如果声音有断断续续,可以适当增加每帧的采样点数,参数设置与具体芯片的性能有关),否则解码后声音可能有异常。 - 通道数目
通道数目指当前输入设备的AI 功能的通道数目,需与对接的Audio Codec 的配置保持一致;支持1 路、2 路、4 路、8 路和16 路。 - 扩展标志对 AI 设备无效
- 时钟选择
AI 必须和AD 配合起来才能正常工作,用户必须清楚AD 采集的数据分布和通道的关系才能从正确的通道取得数据。AI 设备为主模式时,决定AI 设备输出时钟的关键配置项是采样率、采样精度以及通道数目,采样精度乘以通道数目即为AI设备时序一次采样的位宽。AIO 接口中AI 设备与AO 设备是各自独立的,AI 设备0 和AO 设备0 的帧同步时钟与位流时钟是否共用可以通过u32ClkSel 来配置。当u32ClkSel 配置为1 时,表示AI 设备0 和AO 设备0 的帧同步时钟配置与位流时钟配置是共用的,此时要保证AI 设备0 和AO 设备0 的帧同步时钟与位流时钟是一致的,当u32ClkSel 配置为0 时,表示AI 设备0 和AO 设备0 的帧同步时钟与位流时钟是由不同的源提供的。当u32ClkSel 为1 时,AI 设备0 和AO 设备0 的帧同步时钟与位流时钟必须相同,即采样精度乘以通道数目必须一致,并且采样频率也必须一致。对接内置Codec 时,AI 设备0 和AO 设备0 的帧同步时钟与位流时钟不能共用,u32ClkSel 需要配置为0。
最后
以上就是昏睡小猫咪为你收集整理的海思SDK学习(10)海思媒体处理软件平台MMP(9)AUDIO音频音频的全部内容,希望文章能够帮你解决海思SDK学习(10)海思媒体处理软件平台MMP(9)AUDIO音频音频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复