簡單的ARM+Linux音訊方案
導讀 | 嵌入式產品開發中經常遇到音訊的輸入輸出問題,如何為其新增“喇叭”、“麥克風”裝置呢?本文將簡單介紹ARM+ 產品中的音訊解決方案。 |
我們先認識下I2S(Inter-IC Sound)匯流排。I2S又稱積體電路內建音訊匯流排,該匯流排專門用於音訊裝置之間的資料傳輸,廣泛應用於各種多媒體系統。它採用了沿獨立的導線傳輸時鐘與資料訊號的設計,透過將資料和時鐘訊號分離,有效避免因時差誘發的失真。
以HDG2L-IoT評估套件為例,RZ/G2L處理器提供至少一路I2S匯流排,透過該匯流排與音訊編解碼晶片(IC型號WM8960)連線,用於提供高質量的錄音播音功能。音訊模組的硬體部署如下所示。
G2L核心板與WM8960的音訊通訊引腳如下所示:
在 的音訊編解碼驅動中,透過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
控制元件修改後的寫入操作如下所示。
alsactl store
控制元件恢復引數的操作如下所示(注:重啟板子後會自動讀取配置檔案)。
alsactl restore
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2907340/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【技術乾貨】原來ARM+Linux音訊方案如此簡單!Linux音訊
- 將雙通道音訊轉換為兩條單通道音訊的解決方案音訊
- 音視訊基本概念和FFmpeg的簡單入門
- 高效的音訊製作與槍和車的音訊設計方案音訊
- 超簡單的抖音去水印
- Mac音訊格式批處理轉換推薦,“Fission”讓音訊編輯變得簡單!Mac音訊
- 直播軟體開發,Android自定義簡單的音訊波譜viewAndroid音訊View
- 簡單的Socket通訊
- 使用NVRAM的簡單解決方案VR
- 抖音去水印超簡單
- socket 完成簡單的通訊
- 簡單的mock-server 解決方案MockServer
- 解決方案| anyRTC金融音視訊解決方案
- 超簡單整合!手把手教你實現音訊編輯能力音訊
- 一隻android簡訊控制馬的簡單分析Android
- Android應用加固的簡單實現方案Android
- 無線施工方案的簡單評價
- HTML5 Audio(音訊)簡介HTML音訊
- 雲控平臺的雙向音訊解決方案音訊
- Windows 平臺上有許多開源的音訊開發庫,涵蓋了從簡單的音訊播放到複雜的音訊處理和生成。以下是一些常見且功能強大的開源音訊開發庫:Windows音訊
- PHP-RBAC單角色設計-最簡單的設計方案PHP
- 超級簡單的跨平臺高效能音視訊播放框架QtAv編譯指南框架QT編譯
- 簡單的python程式碼實現語音朗讀Python
- 超簡單的視訊物件提取程式物件
- “簡單”的訊息佇列與kafka佇列Kafka
- 簡單的區域網內通訊
- Java的Socket通訊簡單例項Java單例
- mock-stores——簡單易用的資料mock方案Mock
- 簡單的瞭解跨域以及解決方案跨域
- 從U盤安裝centos最簡單的方案CentOS
- Android應用加固的簡單實現方案(二)Android
- 一個簡單的netty通訊的例子Netty
- 語音通知簡訊 API:一種新型的資訊傳遞方式API
- 語音簡訊API有哪些好處?API
- 實時音視訊質量評估方案
- vue..js 編寫的簡單音樂播放器VueJS播放器
- 簡單剖析智慧語音互動技術
- 一個簡單的構建React元件動畫方案React元件動畫