天地(常州)自動化股份有限公司 孫旭峰
嵌入式終端音頻媒體格式轉(zhuǎn)換模塊設(shè)計
天地(常州)自動化股份有限公司 孫旭峰
本文介紹了一種適用于嵌入式媒體終端平臺的音頻格式轉(zhuǎn)換軟件模塊,模塊可實現(xiàn)PCMU/PCMA、LPCM和ADPCM三類音頻編碼格式之間的靈活轉(zhuǎn)換,提供支持RTP格式打包和解析功能的TCP/IP協(xié)議棧接口以及音頻芯片底層驅(qū)動接口功能。經(jīng)測試驗證,該模塊便于移植使用,功能穩(wěn)定。
音頻格式轉(zhuǎn)換;A/μ律PCM;ADPCM;嵌入式終端平臺
隨著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,嵌入式媒體終端憑借其靈活多變的產(chǎn)品實現(xiàn)形式逐漸成為工業(yè)生產(chǎn)中VOIP網(wǎng)絡(luò)終端形態(tài)的優(yōu)先選擇,例如目前礦山通訊網(wǎng)絡(luò)建立時,一般選擇使用工業(yè)以太網(wǎng)作為通訊服務(wù)器與終端節(jié)點間的數(shù)據(jù)傳輸通道,而嵌入式多媒體終端作為終端節(jié)點時只需要支持相應(yīng)的底層數(shù)據(jù)接口(如TCP/IP協(xié)議棧),然后根據(jù)實際產(chǎn)品形態(tài)應(yīng)用方式修改應(yīng)用層邏輯即可滿足各類終端節(jié)點使用需求。我公司項目組長期致力于工業(yè)通訊網(wǎng)絡(luò)應(yīng)用業(yè)務(wù)設(shè)計,在設(shè)計嵌入式終端音頻數(shù)據(jù)處理邏輯過程中,我們發(fā)現(xiàn)在以太網(wǎng)寬帶網(wǎng)絡(luò)中,音頻傳輸使用G.711標(biāo)準(zhǔn)的數(shù)據(jù)壓縮格式可以充分利用帶寬以獲得更好的音質(zhì)效果,而在終端節(jié)點間或板載音頻芯片之間傳輸音頻數(shù)據(jù)時,音頻格式選用壓縮比例更高的ADPCM格式傳輸更加實用。因此本項目組基于C語言編寫了一種音頻格式轉(zhuǎn)換軟件模塊,便于在各類嵌入式終端平臺上實現(xiàn)PCMU/PCMA與ADPCM之間的音頻格式轉(zhuǎn)換。
音頻格式轉(zhuǎn)換軟件模塊提供PCMU/A、LPCM和ADPCM三種常用音頻格式之間的實時轉(zhuǎn)換功能,主要適用于支持音頻底層硬件功能和以太網(wǎng)接口的嵌入式媒體終端,圖1為轉(zhuǎn)換模塊在嵌入式終端中的應(yīng)用結(jié)構(gòu)。
圖1 音頻轉(zhuǎn)換模塊應(yīng)用結(jié)構(gòu)
具體應(yīng)用時,首先需要完成模塊移植工作,包括從本地內(nèi)存管理模塊中分配內(nèi)存、添加音頻芯片驅(qū)動接口和添加網(wǎng)絡(luò)層協(xié)議棧接口三項工作。分配內(nèi)存主要用于為模塊運行時處理音頻數(shù)據(jù)提供存儲空間,音頻芯片驅(qū)動接口和網(wǎng)絡(luò)協(xié)議棧接口移植則是為了方便在具體應(yīng)用時與網(wǎng)絡(luò)端或本地媒體模塊間進行音頻數(shù)據(jù)交互。完成移植后系統(tǒng)主程序可以通過調(diào)用模塊提供的API接口函數(shù)設(shè)置音頻格式轉(zhuǎn)換任務(wù),設(shè)置任務(wù)時需要配置音頻源格式、目標(biāo)格式、數(shù)據(jù)包大小、數(shù)據(jù)收發(fā)接口等參數(shù),完成設(shè)置后啟動任務(wù),模塊會周期性從接收接口獲取源格式音頻數(shù)據(jù)包并轉(zhuǎn)換為目標(biāo)格式后從發(fā)送接口發(fā)出。
圖2 音頻轉(zhuǎn)換模塊內(nèi)部架構(gòu)
如圖2所示,音頻轉(zhuǎn)換模塊包括核心功能模塊和輔助功能模塊兩個部分,核心功能包括音頻數(shù)據(jù)存儲隊列創(chuàng)建、音頻轉(zhuǎn)換算法、內(nèi)存分配接口和模塊API調(diào)用接口,輔助功能包括面向網(wǎng)絡(luò)端的TCP/IP數(shù)據(jù)接口和RTP打包/解包模塊以及面向音頻芯片的驅(qū)動接口和RIFF頭(資源互換文件格式)生成模塊。
嵌入式系統(tǒng)主程序在調(diào)用音頻轉(zhuǎn)換模塊時,模塊會根據(jù)設(shè)置的音頻格式和數(shù)據(jù)包大小為各個格式隊列分配相應(yīng)空間,當(dāng)模塊接收到源格式數(shù)據(jù)后會將數(shù)據(jù)存入相應(yīng)隊列,然后依次調(diào)用轉(zhuǎn)換算法,最終獲取所需的目標(biāo)格式音頻數(shù)據(jù)。
圖3 音頻格式轉(zhuǎn)換流程圖
圖3為音頻數(shù)據(jù)從PCMU/A轉(zhuǎn)換至ADPCM流程圖。由于PCMU/A和ADPCM之間無法直接轉(zhuǎn)換,所以需要通過線性PCM格式進行中轉(zhuǎn)。系統(tǒng)主程序啟動該轉(zhuǎn)換任務(wù)后,模塊會首先為三個格式的隊列分配所需的存儲空間,然后開始循環(huán)接收PCMU/A的數(shù)據(jù)包,每收到一個160byte包后就調(diào)用轉(zhuǎn)換算法將其轉(zhuǎn)換為320byte的LPCM數(shù)據(jù)并存入LPCM隊列,當(dāng)LPCM隊列中收滿1010byte的數(shù)據(jù)后,開始調(diào)用LPCM至ADPCM的轉(zhuǎn)換算法,獲取256byte的ADPCM數(shù)據(jù)包,并從主程序設(shè)置好的發(fā)送接口發(fā)出。當(dāng)主程序設(shè)置的源格式、目標(biāo)格式和數(shù)據(jù)包大小不同時,模塊會根據(jù)設(shè)置內(nèi)容執(zhí)行相應(yīng)的轉(zhuǎn)換流程。
本文介紹的音頻轉(zhuǎn)換模塊為嵌入式終端應(yīng)用提供了媒體處理輔助功能,并且提供了合適的應(yīng)用層調(diào)用接口和移植模塊接口,可以在不同的嵌入式平臺上實現(xiàn)快速移植,有效提高了媒體終端應(yīng)用業(yè)務(wù)開發(fā)速度,對嵌入式媒體終端快速產(chǎn)品化提供一定的助力。
[1]郭慧.基于PCM編碼的模擬信號數(shù)字化實現(xiàn)[J].微型機與應(yīng)用,2017,36(2):70-71,77.
[2]李濤,曾攀,肖功海.基于ADPCM的數(shù)字語音存儲與回放系統(tǒng)[J].現(xiàn)代電子技術(shù),2013,36(13):23-28.
[3]裴志兵,胡平平.基于C8051F007的ADPCM語音編碼系統(tǒng)設(shè)計[J].信息通信,2016(1):59-61.
[4]周春梅.語音壓縮編碼PCM[J].硅谷,2012,3:37.
[5]黎燕霞,劉宇容.基于PCM編碼的數(shù)字高清設(shè)備音頻信號測試研究[J].計算機與現(xiàn)代化,2015,4:27-31.
孫旭峰(1989—),男,江蘇常州人,助理工程師,主要研究方向為微處理機的應(yīng)用。
智慧礦山專項(2016-ZHKSZX-04)。