嵌入式產(chǎn)品開發(fā)中經(jīng)常遇到音頻的輸入輸出問題,如何為其添加“喇叭”、“麥克風(fēng)”設(shè)備呢?本文將簡單介紹ARM+Linux產(chǎn)品中的音頻解決方案。
我們先認識下I2S(Inter-ICSound)總線。I2S又稱集成電路內(nèi)置音頻總線,該總線專門用于音頻設(shè)備之間的數(shù)據(jù)傳輸,廣泛應(yīng)用于各種多媒體系統(tǒng)。它采用了沿獨立的導(dǎo)線傳輸時鐘與數(shù)據(jù)信號的設(shè)計,通過將數(shù)據(jù)和時鐘信號分離,有效避免因時差誘發(fā)的失真。
以HDG2L-IoT評估套件為例,RZ/G2L處理器提供至少一路I2S總線,通過該總線與音頻編解碼芯片(IC型號WM8960)連接,用于提供高質(zhì)量的錄音播音功能。音頻模塊的硬件部署如下所示。
![HDG2L-IoT音頻接口](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9GATfAGAAFImXvJyMw069.jpg)
圖1HDG2L-IoT音頻接口
G2L核心板與WM8960的音頻通訊引腳如下所示:
![音頻通訊引腳](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KAQtcmAAClp9IArkg323.jpg)
在Linux系統(tǒng)的音頻編解碼驅(qū)動中,通過I2C通訊接口與音頻IC通訊,把音頻IC內(nèi)的各個功能寄存器抽象成音頻控件,這樣用戶即可在User空間內(nèi)直接調(diào)整IC內(nèi)的參數(shù)。I2S音頻引腳,則是數(shù)字信號發(fā)送、接收的通道。
播音時,音頻IC接收到數(shù)字信號后則轉(zhuǎn)換為模擬信號發(fā)送出去,錄音時,音頻IC把收到的音頻模擬量轉(zhuǎn)換為數(shù)字量,發(fā)送給處理器。
ALSA是linux的主流音頻體系結(jié)構(gòu),它包含內(nèi)核驅(qū)動集合,API庫和工具對Linux聲音進行支持,應(yīng)用程序只要調(diào)用alsa-lib提供的API,即可以完成對底層音頻硬件的控制。
Linux通過alsa庫以及alsa工具管理音頻IC的控件,通過“amixercontrols”列出當(dāng)前系統(tǒng)內(nèi)的音頻控制項:
![音頻控制項](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9KAAlr_AAB7CXInE9U177.jpg)
音頻功能的關(guān)鍵控件信息如下所示。(錄音通道、播音通道、耳機音量大小、喇叭音量大小)。
![音頻功能的關(guān)鍵控件信息](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9GAa1WqAADFrApZv0I592.jpg)
在開發(fā)板下,運行aplay程序可以對音頻播放進行測試。在測試前,需要將耳機插入開發(fā)板的耳機插孔中。
為測試基于I2S的音頻輸出接口,在命令行下執(zhí)行如下命令:
![5.jpg](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9KAHQhtAAAQLcCKHkg487.jpg)
其中2.wav為需要播放的音頻文件,且此處假定2.wav位于/home/root/audios目錄下。
在進行音頻播放時,對于基于I2S的音頻輸出接口,可以使用amixer程序?qū)σ袅窟M行調(diào)節(jié)。使用amixer程序?qū)Χ鷻C播放音量進行調(diào)節(jié)的命令行格式為:
![6.jpg](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KANBX3AAAKjv6SEGQ737.jpg)
其音量值取值范圍在0~127之間,127表明最大音量。例如要將音量設(shè)置為100,可在命令行下執(zhí)行如下命令:
![7.jpg](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KAbjUoAAARhVFMT8Q098.jpg)
將揚聲器接入HDG2L-IOT開發(fā)板的左右聲道插座中,在播放音頻前可先設(shè)置揚聲器播放音量以及總音量,然后播放音頻文件:
![8.jpg](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KAUY5NAAAkmTc_hZQ370.jpg)
錄音功能需設(shè)置錄音控件的參數(shù),如下所示。
![9.jpg](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9KAdlyvAAAa-OtdnEU622.jpg)
用arecord命令錄音并保存為“/tmp/t.wav”,然后用aplay命令回放進行驗證。
![10.jpg](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KAbZJUAAAXYu76nqI825.jpg)
由于當(dāng)前的麥克風(fēng)輸出信號僅接到了音頻處理的Left端作為輸入,所以播放錄音文件時僅左聲道有輸出,若希望將麥克風(fēng)輸出信號同時記錄在左右聲道可做如下設(shè)置:
![11.jpg](https://file.elecfans.com/web2/M00/53/0F/pYYBAGLOO9KAKhkvAAAOQRb2uHE767.jpg)
將“ADCDataOutputSelect”設(shè)定為1,其值含義為“LeftData=LeftADC;RightData=LeftADC”。
由上可知,音頻編解碼芯片在Linux系統(tǒng)中以控件的形式存在,內(nèi)部的參數(shù)一般只記錄在內(nèi)存中,當(dāng)系統(tǒng)掉電時,修改的參數(shù)就會消失,所以需要保存和恢復(fù)指令將上次的參數(shù)保存在配置文件中。
alsa的配置文件為:/var/lib/alsa/asound.state
控件修改后的寫入操作如下所示。
![12.jpg](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9KAJ_1GAAAFpdJB0_g324.jpg)
控件恢復(fù)參數(shù)的操作如下所示(注:重啟板子后會自動讀取配置文件)。
![13.jpg](https://file.elecfans.com/web2/M00/52/73/poYBAGLOO9KAH3EaAAAIRAjoY-M448.jpg)
-
ARM
+關(guān)注
關(guān)注
134文章
9173瀏覽量
369280 -
嵌入式
+關(guān)注
關(guān)注
5094文章
19183瀏覽量
307798 -
Linux
+關(guān)注
關(guān)注
87文章
11347瀏覽量
210440
發(fā)布評論請先 登錄
相關(guān)推薦
Arm 技術(shù)預(yù)測:2025 年及未來的技術(shù)趨勢
![<b class='flag-5'>Arm</b> <b class='flag-5'>技術(shù)</b>預(yù)測:2025 年及未來的<b class='flag-5'>技術(shù)</b>趨勢](https://file1.elecfans.com/web3/M00/05/F9/wKgZO2eGJE-ALiHqAAAZ_zF3tQU000.jpg)
請問ads7957寄存器地址是多少?
干貨來嘍!實用樹莓派Linux編譯指南
![<b class='flag-5'>干貨</b>來嘍!實用樹莓派<b class='flag-5'>Linux</b>編譯指南](https://file1.elecfans.com/web3/M00/02/EF/wKgZO2dihiSASOeOAAMMNtBFK7E647.png)
音頻采集方案
![<b class='flag-5'>音頻</b>采集<b class='flag-5'>方案</b>](https://file1.elecfans.com/web2/M00/EA/7E/wKgaomZUTKSASIxvAAAcHd_kXCY843.png)
直播音頻解決方案
![直播<b class='flag-5'>音頻</b>解決<b class='flag-5'>方案</b>](https://file1.elecfans.com/web2/M00/08/2B/wKgaombuMt-AAHb5AADrljPfyO4961.png)
空間音頻技術(shù)的現(xiàn)狀和特性
一文讀懂音頻解決方案專家
![一文讀懂<b class='flag-5'>音頻</b>解決<b class='flag-5'>方案</b>專家](https://file1.elecfans.com/web2/M00/F0/EE/wKgZomZz4ACAMPFVAAATnfO73qE989.png)
在研華科技的嵌入式IPC上設(shè)置實時Linux和EtherCAT主站
![在研華科技的嵌入式IPC上設(shè)置實時<b class='flag-5'>Linux</b>和EtherCAT主站](https://file.elecfans.com/web2/M00/9B/81/pYYBAGQiWjaAbkZoAACBrWp1TiE766.png)
最新藍牙音頻方案選型表
![最新藍牙<b class='flag-5'>音頻</b><b class='flag-5'>方案</b>選型表](https://file1.elecfans.com//web2/M00/C8/25/wKgZomYY9xiALWkdAAL8Pe73iAw370.jpg)
使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實時 Linux 內(nèi)核
![使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實時 <b class='flag-5'>Linux</b> 內(nèi)核](https://file.elecfans.com/web2/M00/9B/81/pYYBAGQiWjaAbkZoAACBrWp1TiE766.png)
無線麥克風(fēng)音頻方案
你見過這樣的音頻轉(zhuǎn)接器嗎?原來原理這么簡單
![你見過這樣的<b class='flag-5'>音頻</b>轉(zhuǎn)接器嗎?<b class='flag-5'>原來</b>原理這么<b class='flag-5'>簡單</b>](https://file.elecfans.com/web2/M00/56/70/pYYBAGLfR9qAImpYAACF7jiCm8Y960.png)
評論