一数冬、概述
音頻(AUDIO)模塊包括四個(gè)子模塊:
- 音頻輸入(AI)搀庶;
- 音頻輸出(AO)拐纱;
- 音頻編碼(AENC);
- 音頻解碼(ADEC)
音頻輸入和輸出模塊通過(guò)對(duì)芯片音頻接口的控制實(shí)現(xiàn)音頻輸入輸出功能戳玫。
音頻編碼和解碼模塊提供對(duì)G711、 G726咕宿、 ADPCM格式的音頻編解碼功能,并支持錄制和播放LPCM格式的
原始音頻文件.
二府阀、音頻輸入(AI) 和 音頻輸出(AO)
2.1 音頻接口和 AI、 AO 設(shè)備
音頻輸入輸出接口簡(jiǎn)稱為AIO( Audio Input/Output)接口试浙,用于和Audio Codec對(duì)接董瞻,完成聲音的錄制和播放田巴。
AIO接口分為兩種類型:只支持輸入或只支持輸出钠糊。
當(dāng)為輸入類型時(shí)壹哺,又稱為AIP抄伍;
當(dāng)為輸出類型時(shí)管宵,又稱為AOP
AI設(shè)備:在海思媒體處理軟件中截珍,將音頻輸入(AI)接口抽象為 AI設(shè)備箩朴;
AO設(shè)備:在海思媒體處理軟件中岗喉,負(fù)責(zé)抽象音頻接口輸出功能的單元炸庞;
SS528芯片內(nèi)部集成 1 個(gè) AIO钱床, 包含 2 個(gè) AIP(Audio Input Port)和 2 個(gè) AOP(Audio Output Port),也就是有2個(gè)AI設(shè)備燕雁、2個(gè)AO設(shè)備诞丽。
2.2 錄音和播放原理
錄音:采集聲音拐格,轉(zhuǎn)換成數(shù)字信號(hào)并保存起來(lái)的過(guò)程,一般有如下三個(gè)過(guò)程:
- 原始音頻信號(hào)一般是模擬信號(hào)的形式的捏浊,通過(guò)Audio Codec,按一定采樣率和采樣精度轉(zhuǎn)換為數(shù)字信號(hào)。
- Audio Codec以I2S時(shí)序或PCM時(shí)序的方式浊洞,將數(shù)字信號(hào)傳輸給AI設(shè)備。
-
芯片利用DMA將AI設(shè)備中的音頻數(shù)據(jù)搬移到內(nèi)存中法希,完成錄音操作
播放:將保存的數(shù)字信號(hào)的聲音取出,轉(zhuǎn)換成模擬信號(hào)輸出的過(guò)程:
- 芯片利用 DMA 將內(nèi)存中的數(shù)據(jù)傳輸?shù)?AO 設(shè)備苫亦。
- AO設(shè)備通過(guò) I2S 時(shí)序或 PCM 時(shí)序向 Audio Codec 發(fā)送數(shù)據(jù)毛肋。
- Audio Codec 完成數(shù)字信號(hào)到模擬信號(hào)的轉(zhuǎn)換過(guò)程屋剑,并輸出模擬信號(hào)润匙。
2.3 AI唉匾、AO 通道
AIO在不同協(xié)議時(shí),支持的AI巍膘、 AO多路復(fù)用模式有差異,不同的解決方案也不相同典徘。
AI蟀苛、 AO可以在AI/AO設(shè)備最大支持的比特范圍內(nèi)逮诲,按采樣精度拆分AI和AO通道,并按照時(shí)序上的順序幽告,依次視為AiChn0梅鹦、 AiChn1等或AoChn0、 AoChn1等冗锁。例如:SS528的AIO最大支持左右聲道各160bit齐唆,可以拆分為16bit 20通道,也可以拆分32bit 10通道等等冻河。
SS528V100 AIO 最大支持 AI箍邮、 AO 通道數(shù)如下圖:
SS528V100/SS524V100上音頻AI支持的最大通道數(shù)為20通道, I2S模式下AO支持的最大通道數(shù)為8通道(每根數(shù)據(jù)線支持2通道擂错,受I2S數(shù)據(jù)線數(shù)量限制,最大僅4通道有效), PCM模式下AO支持的最大通道數(shù)為1通道剑鞍。多通道情況下, AI蚁署、 AO視通道排列中相對(duì)應(yīng)的兩通道為立體聲輸入輸出。
2.4 重采樣
重采樣:將一個(gè)音頻信號(hào)從一個(gè)采樣率轉(zhuǎn)換為另一個(gè)采樣率光戈。
音頻輸入和音頻輸出模塊支持對(duì)音頻數(shù)據(jù)實(shí)施重采樣。
- 如果啟用AI重采樣功能田度,則在 ss_mpi_ai_get_frame獲取數(shù)據(jù)返回前,內(nèi)部將會(huì)先執(zhí)行重采樣處理镇饺,再返回處理后的數(shù)據(jù)。
- 如果啟用了AO重采樣功能奸笤,則音頻數(shù)據(jù)在發(fā)送給AO之前,內(nèi)部先執(zhí)行重采樣處理监右,處理完成后再發(fā)送給AO通道進(jìn)行播放。
音頻重采樣支持任意兩種不同采樣率( 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軟件編解碼备畦。
所有的解碼功能都基于獨(dú)立封裝的音頻解碼庫(kù)许昨,核心解碼器工作在用戶態(tài),使用CPU軟件解碼糕档。
SDK支持通過(guò)SYS模塊的綁定接口拌喉,將一個(gè)AI通道綁定到AENC通道,實(shí)現(xiàn)錄音編碼功能尿背;
也可以將一個(gè)ADEC通道綁定到AO通道,實(shí)現(xiàn)解碼播放功能田藐。
3.2 音頻編解碼協(xié)議
表中列出來(lái)的編碼協(xié)議,僅支持對(duì)單個(gè)聲道的音頻幀進(jìn)行編碼汽久,如果送給編碼通道的是立體聲音頻幀,則只會(huì)對(duì)左聲道數(shù)據(jù)進(jìn)行編碼景醇,編碼出來(lái)的碼流只帶左聲道數(shù)據(jù)。
3.3 語(yǔ)音幀結(jié)構(gòu)
使用語(yǔ)音編解碼庫(kù)進(jìn)行G711啡直、 G726、 ADPCM格式的編碼酒觅,編碼后的碼流遵循以下表格中描述的幀結(jié)構(gòu),即在每幀碼流數(shù)據(jù)的凈荷數(shù)據(jù)之前填充有4個(gè)字節(jié)的幀頭舷丹;使用語(yǔ)音編解碼庫(kù)進(jìn)行以上格式的解碼時(shí),需要讀取相應(yīng)的幀頭信息颜凯。
幀頭中的數(shù)據(jù)凈荷長(zhǎng)度(單位:short)字段計(jì)算公式:
數(shù)據(jù)凈荷長(zhǎng)度 = (每幀采樣點(diǎn)數(shù) – 輸入預(yù)測(cè)采樣點(diǎn)數(shù))/壓縮率 + 輸出預(yù)測(cè)幀頭長(zhǎng)度。
下圖是語(yǔ)音幀結(jié)構(gòu):