<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 【技術(shù)干貨】原來(lái)ARM+Linux音頻方案如此簡(jiǎn)單!

【技術(shù)干貨】原來(lái)ARM+Linux音頻方案如此簡(jiǎn)單!

發(fā)布人:武漢萬(wàn)象奧科 時(shí)間:2022-07-13 來(lái)源:工程師 發(fā)布文章

  嵌入式產(chǎn)品開(kāi)發(fā)中經(jīng)常遇到音頻的輸入輸出問(wèn)題,如何為其添加“喇叭”、“麥克風(fēng)”設備呢?本文將簡(jiǎn)單介紹ARM+Linux產(chǎn)品中的音頻解決方案。

  我們先認識下I2S(Inter-IC Sound)總線(xiàn)。I2S又稱(chēng)集成電路內置音頻總線(xiàn),該總線(xiàn)專(zhuān)門(mén)用于音頻設備之間的數據傳輸,廣泛應用于各種多媒體系統。它采用了沿獨立的導線(xiàn)傳輸時(shí)鐘與數據信號的設計,通過(guò)將數據和時(shí)鐘信號分離,有效避免因時(shí)差誘發(fā)的失真。

  以HDG2L-IoT評估套件為例,RZ/G2L處理器提供至少一路I2S總線(xiàn),通過(guò)該總線(xiàn)與音頻編解碼芯片(IC型號WM8960)連接,用于提供高質(zhì)量的錄音播音功能。音頻模塊的硬件部署如下所示。

 

HDG2L-IoT音頻接口

圖1  HDG2L-IoT音頻接口

  G2L核心板與WM8960的音頻通訊引腳如下所示:

音頻通訊引腳


  在Linux系統的音頻編解碼驅動(dòng)中,通過(guò)I2C通訊接口與音頻IC通訊,把音頻IC內的各個(gè)功能寄存器抽象成音頻控件,這樣用戶(hù)即可在User空間內直接調整IC內的參數。I2S音頻引腳,則是數字信號發(fā)送、接收的通道。

播音時(shí),音頻IC接收到數字信號后則轉換為模擬信號發(fā)送出去,錄音時(shí),音頻IC把收到的音頻模擬量轉換為數字量,發(fā)送給處理器。

  ALSA是linux的主流音頻體系結構,它包含內核驅動(dòng)集合, API 庫和工具對 Linux 聲音進(jìn)行支持,應用程序只要調用alsa-lib提供的API,即可以完成對底層音頻硬件的控制。

  Linux通過(guò)alsa庫以及alsa工具管理音頻IC的控件,通過(guò)“amixer controls”列出當前系統內的音頻控制項: 


音頻控制項


  音頻功能的關(guān)鍵控件信息如下所示。(錄音通道、播音通道、耳機音量大小、喇叭音量大?。?。


音頻功能的關(guān)鍵控件信息


  在開(kāi)發(fā)板下,運行aplay程序可以對音頻播放進(jìn)行測試。在測試前,需要將耳機插入開(kāi)發(fā)板的耳機插孔中。

為測試基于I2S的音頻輸出接口,在命令行下執行如下命令:

5.jpg

  其中2.wav為需要播放的音頻文件,且此處假定2.wav位于/home/root/audios目錄下。

在進(jìn)行音頻播放時(shí),對于基于I2S的音頻輸出接口,可以使用amixer程序對音量進(jìn)行調節。使用amixer程序對耳機播放音量進(jìn)行調節的命令行格式為:

6.jpg

  其音量值取值范圍在0~127之間,127表明最大音量。例如要將音量設置為100,可在命令行下執行如下命令:

7.jpg

  將揚聲器接入HDG2L-IOT開(kāi)發(fā)板的左右聲道插座中,在播放音頻前可先設置揚聲器播放音量以及總音量,然后播放音頻文件:


8.jpg


  錄音功能需設置錄音控件的參數,如下所示。

9.jpg

  用arecord命令錄音并保存為“/tmp/t.wav”,然后用aplay命令回放進(jìn)行驗證。

10.jpg


  由于當前的麥克風(fēng)輸出信號僅接到了音頻處理的Left端作為輸入,所以播放錄音文件時(shí)僅左聲道有輸出,若希望將麥克風(fēng)輸出信號同時(shí)記錄在左右聲道可做如下設置:

11.jpg

  將“ADC Data Output Select”設定為1,其值含義為“Left Data = Left ADC;  Right Data = Left ADC”。

  由上可知,音頻編解碼芯片在Linux系統中以控件的形式存在,內部的參數一般只記錄在內存中,當系統掉電時(shí),修改的參數就會(huì )消失,所以需要保存和恢復指令將上次的參數保存在配置文件中。

  alsa的配置文件為:/var/lib/alsa/asound.state

  控件修改后的寫(xiě)入操作如下所示。

12.jpg

  控件恢復參數的操作如下所示(注:重啟板子后會(huì )自動(dòng)讀取配置文件)。

13.jpg


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: ARM Linux 嵌入式 音頻

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>