博客專欄

        EEPW首頁 > 博客 > 【技術干貨】原來ARM+Linux音頻方案如此簡單!

        【技術干貨】原來ARM+Linux音頻方案如此簡單!

        發布人:武漢萬象奧科 時間:2022-07-13 來源:工程師 發布文章

          嵌入式產品開發中經常遇到音頻的輸入輸出問題,如何為其添加“喇叭”、“麥克風”設備呢?本文將簡單介紹ARM+Linux產品中的音頻解決方案。

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

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

         

        HDG2L-IoT音頻接口

        圖1  HDG2L-IoT音頻接口

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

        音頻通訊引腳


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

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

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

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


        音頻控制項


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


        音頻功能的關鍵控件信息


          在開發板下,運行aplay程序可以對音頻播放進行測試。在測試前,需要將耳機插入開發板的耳機插孔中。

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

        5.jpg

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

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

        6.jpg

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

        7.jpg

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


        8.jpg


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

        9.jpg

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

        10.jpg


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

        11.jpg

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

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

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

          控件修改后的寫入操作如下所示。

        12.jpg

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

        13.jpg


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: ARM Linux 嵌入式 音頻

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 甘德县| 松溪县| 花垣县| 丹凤县| 法库县| 丽江市| 四会市| 海伦市| 类乌齐县| 蚌埠市| 长武县| 阿巴嘎旗| 仁化县| 牟定县| 东城区| 霍林郭勒市| 墨竹工卡县| 民和| 昌宁县| 罗甸县| 西昌市| 泸定县| 武穴市| 泰和县| 四子王旗| 治多县| 英德市| 利津县| 闽清县| 搜索| 慈利县| 新沂市| 新竹县| 萍乡市| 思茅市| 娄烦县| 梁山县| 定州市| 衢州市| 兴安县| 六盘水市|