【技術乾貨】原來ARM+Linux音訊方案如此簡單!
嵌入式產品開發中經常遇到音訊的輸入輸出問題,如何為其新增“喇叭”、“麥克風”裝置呢?本文將簡單介紹ARM+Linux產品中的音訊解決方案。
我們先認識下I2S(Inter-IC Sound)匯流排。I2S又稱積體電路內建音訊匯流排,該匯流排專門用於音訊裝置之間的資料傳輸,廣泛應用於各種多媒體系統。它採用了沿獨立的導線傳輸時鐘與資料訊號的設計,透過將資料和時鐘訊號分離,有效避免因時差誘發的失真。
以HDG2L-IoT評估套件為例,RZ/G2L處理器提供至少一路I2S匯流排,透過該匯流排與音訊編解碼晶片(IC型號WM8960)連線,用於提供高質量的錄音播音功能。音訊模組的硬體部署如下所示。
圖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的音訊輸出介面,在命令列下執行如下命令:
其中2.wav為需要播放的音訊檔案,且此處假定2.wav位於/home/root/audios目錄下。
在進行音訊播放時,對於基於I2S的音訊輸出介面,可以使用amixer程式對音量進行調節。使用amixer程式對耳機播放音量進行調節的命令列格式為:
其音量值取值範圍在0~127之間,127表明最大音量。例如要將音量設定為100,可在命令列下執行如下命令:
將揚聲器接入HDG2L-IOT開發板的左右聲道插座中,在播放音訊前可先設定揚聲器播放音量以及總音量,然後播放音訊檔案:
錄音功能需設定錄音控制元件的引數,如下所示。
用arecord命令錄音並儲存為“/tmp/t.wav”,然後用aplay命令回放進行驗證。
由於當前的麥克風輸出訊號僅接到了音訊處理的Left端作為輸入,所以播放錄音檔案時僅左聲道有輸出,若希望將麥克風輸出訊號同時記錄在左右聲道可做如下設定:
將“ADC Data Output Select”設定為1,其值含義為“Left Data = Left ADC; Right Data = Left ADC”。
由上可知,音訊編解碼晶片在Linux系統中以控制元件的形式存在,內部的引數一般只記錄在記憶體中,當系統掉電時,修改的引數就會消失,所以需要儲存和恢復指令將上次的引數儲存在配置檔案中。
alsa的配置檔案為:/var/lib/alsa/asound.state
控制元件修改後的寫入操作如下所示。
控制元件恢復引數的操作如下所示(注:重啟板子後會自動讀取配置檔案)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009145/viewspace-2905536/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單的ARM+Linux音訊方案Linux音訊
- 容器DevOps,原來如此簡單!dev
- 短影片配音原來如此簡單
- 原來 Java 遠端除錯如此簡單Java除錯
- 技術乾貨收集
- K8S原來如此簡單(七)儲存K8S
- xmake入門,構建專案原來可以如此簡單
- K8S原來如此簡單(三)Pod+DeploymentK8S
- K8S原來如此簡單(六)Pod排程K8S
- K8S原來如此簡單(八)ServiceAccount+RBACK8S
- 原來如此
- 技術乾貨 | 利用systemd管理MySQL單機多例項MySql
- 阿里技術精華乾貨整理阿里
- 原來 React 專案多環境打包是如此的簡單React
- K8S原來如此簡單(四)Service+IngressK8S
- K8S原來如此簡單(五)Metrics Server與HPAK8SServer
- Goravel 讓微服務間通訊如此簡單,省出來的時間想幹點啥乾點啥吧Go微服務
- 簡單剖析智慧語音互動技術
- 【android】擺正姿勢,dagger2原來如此簡單Android
- 華為雲軟體開發雲:容器DevOps,原來如此簡單!dev
- 【基礎知識】Flex-彈性佈局原來如此簡單!!Flex
- 技術乾貨 | WebRTC 技術解析之 Android VDMWebAndroid
- (乾貨)Ai音響和Linux音訊驅動小談AILinux音訊
- [乾貨分享]1000篇乾貨好文!量子技術——資訊篇
- 語音識別技術竟然發展如此迅速
- 音視訊技術:視訊質量評價方法簡介
- 原來實現專案多環境打包部署是如此的簡單
- 技術乾貨:RabbitMQ面試題及答案MQ面試題
- 技術乾貨:ActiveMQ面試題及答案MQ面試題
- 技術乾貨| MongoDB時間序列集合MongoDB
- [乾貨分享]1000篇乾貨好文!量子技術——進階篇
- 原來如此!直播原始碼技術是這樣做的,直播互動篇原始碼
- 音視訊技術基礎
- 技術乾貨:Hadoop面試題及答案Hadoop面試題
- 2020文章合集 技術乾貨
- 技術乾貨 | 漫遊Linux塊IOLinux
- 乾貨!天翼雲DPU技術解碼
- 網易來聊聊子彈簡訊的訊息漫遊技術