如何在嵌入式系統中有效率解碼並播放音訊檔案
資料提供者:DigiKey 北美編輯群
2019-11-05
音訊介面已逐漸成為嵌入式設計必備的功能。同時,嵌入式系統使用者對音訊品質的期望也越來越高。對開發人員來說,這項趨勢帶來一個難題,即如何在微控制器型系統上播放 MP3 或其他音訊檔案。這些系統不僅資源受限,也缺乏能讓開發人員在 Linux 架構系統上輕易使用的音訊介面。因此,將音訊檔案解碼並有效率地將內容轉換成類比聲音的困難度更加提升。
成本、空間和開發時間都是重要的考量因素,因此開發人員也必須謹慎地選擇硬體或軟體解決方案,以及要使用的元件。
本文將介紹 AKM Semiconductor、Adafruit、STMicroelectronics 和 Cirrus Logic Inc. 等公司提供的幾種硬體和軟體解決方案,以便開發人員以有效率和有效的方式將音訊檔案添加到嵌入式裝置中。此外,本文還會介紹幾個「秘訣與訣竅」,幫助確保成功實作。
選擇嵌入式音訊格式
在詳細討論如何將音訊功能整合到嵌入式裝置之前,應該思考一下為何 MP3 音訊格式較為常用。對嵌入式系統來說,開發人員實際上有三種可用的音訊格式,即脈衝編碼調變 (PCM)、WAV 和 MP3。
PCM 是一種未經壓縮的無損音訊格式,音訊編解碼器經常使用此格式,將音訊串流的數位形式轉換成使用者可聽到的類比聲音。這是具有良好支援的標準格式,其歷史可回溯到使用 CD 的年代。PCM 可用於嵌入式系統中,但問題在於 PCM 檔案通常比 WAV 或 MP3 檔案大很多。在裝置資源錙銖必較的情況下,產品可能需要更大的外接式記憶體元件,或搭載更多記憶體的微控制器,才能支援 PCM。因此,除非產品數量少,僅有一個音訊檔案,或不受成本限制,否則通常避免使用 PCM。
WAV 檔案也是未經壓縮的無損音訊格式,因此和 PCM 非常類似。雖然 WAV 在嵌入式應用中通常比 PCM 檔案更受歡迎,但依然會佔用相當多的空間。如果嵌入式系統已有 SD 卡或其他大容量記憶體元件,這種格式或許就相當適合。
對大多數系統來說,MP3 檔案是首選的音訊格式。由於 MP3 檔案是有損格式,因此在音訊編碼時可能會失去一些傳真度。但是 MP3 檔案遠小於 PCM 或 WAV 檔案,因此將音訊檔案放入裝置時,只需較短的傳輸與儲存時間,而且對記憶體的需求量也較低。
一旦確定使用 MP3,開發人員便可選擇使用硬體或軟體來實現。
硬體式 MP3 解碼
最快且最簡單的解決方案通常是使用硬體式 MP3 解碼器,例如 Adafruit 的 1681 VS1053B (圖 1)。VS1053B 能通過序列串流直接接收 MP3、WAV、OGG 或 MIDI 檔案格式,因此開發人員幾乎不用費工便能進行解碼。串流解碼後,VS1053B 會使用 18 位元數位類比轉換器 (DAC) 將其轉換成音訊。
圖 1:Adafruit 的 VS1053B 是硬體式 MP3 解碼器晶片,可接收音訊串流並將其解碼為類比音訊訊號。此解決方案僅需極少的軟體,而開發人員無需瞭解如何解碼或轉換 MP3 檔案。(圖片來源:Adafruit)
值得注意的是,與其他許多使用 I2C 的解碼器相比,VS1053B 還可使用簡單的 UART 進行除錯和控制。另外,此產品還有八個一般用途的輸入/輸出引腳,可用於讀取位元或設定開關或狀態 LED 等應用功能。
開發人員若想嘗試硬體式解決方案,沒必要自行打造 VS1053B 用的分接板。Adafruit 提供 1381 VS1053B 編解碼器和 MicroSD 分接板。除了 VS1053B,此板還有 MicroSD 卡插槽,可用來儲存要解碼的音訊檔案 (圖 2)。此分接板可連接到微控制器,再由微控制器透過 SPI 或 SDIO 連接埠接到 SD 卡以讀取音訊檔案。音訊檔案串流隨即會傳送到 VS1053B 進行解碼。接著,VL1053B 的輸出即可視需求引導至耳機插孔或揚聲器等位置。
圖 2:Adafruit 的 1381 VS1053B 編解碼器 + MicroSD 分接板含有必要的硬體,可輕鬆連接微控制器以播放音訊。此分接板有一個板載 MicroSD 卡插槽。微控制器可透過 SPI 讀取卡槽,並將檔案傳輸到 VS1053B 進行解碼。(圖片來源:Adafruit)
軟體式 MP3 解碼
另一種解決方案稍微複雜些,但可減少物料清單 (BOM) 的零件數量,因此通常成本較低。這個方案就是在微控制器上進行 MP3 檔案解碼,然後將已解碼的檔案串流到音訊編解碼器,以產生音訊。若想實作高效的軟體式解決方案,開發人員需要實作幾個要件,例如:
- MP3 解碼器函式庫
- 記憶體儲存驅動程式
- 檔案系統堆疊
- 直接記憶體存取 (DMA) 驅動程式
- I2S 驅動程式
- I2C 驅動程式
- 音訊編解碼器驅動程式
乍看之下,軟體開發人員的工作相當多,需要整合許多有潛在挑戰性的軟體項目,才能將 MP3 解碼並轉換成音訊。但實作 MP3 解碼解決方案的最佳辦法,其實是使用可支援音訊編碼、解碼和一般處理的微控制器平台。
雖然網際網路上有許多開放原始碼解決方案,但有個專業且經過實際證實的解決方案可供開發人員運用,那就是 STM32 工具鏈。STM32 微控制器系列有個稱為 STM32CubeMx 的開發工具,可整合 STM32CubeIDE,其中含有音訊範例及開發函式庫。這些範例與工具是 STM32CubeMX 附加項目 X-CUBE-AUDIO 的一部分。此附加項目可針對任何隸屬於 Arm Cortex-M4 等級微控制器的 STM32 處理器,提供 MP3 解碼時所需的音訊函式庫。
有專門提供程式碼專案範例,可用來建立在 STM32F469IGH6TR 微控制器上執行的 MP3 播放器。STM32F469IGH6TR 是一款功能強大的微控制器,具有 1 MB 的快閃記憶體和 384 KB 的 RAM,並以 180 MHz 的頻率運作。此微控制器採用 176 引腳的 UBGA 封裝,可提供大量的 GPIO 和周邊裝置功能,幾乎適用於任何應用。
圖 3:STM32F469IGH6TR 是 180 MHz Arm Cortex-M4 處理器,具有 1 MB 快閃記憶體和 384 KB RAM。176 引腳的 UBGA 封裝可提供大量的 GPIO,適合幾乎任何嵌入式應用。(圖片來源:STMicroelectronics)
MP3 播放器程式碼範例可在 STM32F469I-DISCO 探索套件上執行 (圖 4)。STM32F469I-DISCO 包含 MP3 解碼與播放所需的一切功能。此板有一個 800 x 480 畫素的 4 吋 LCD,能讓開發人員隨時查看 MP3 展示狀態,同時還提供播放、停止、下一首、前一首等播放器控制功能。另外,此探索板還含有耳機插孔,能以立體聲播放產生的音訊。唯一要注意的事項是,該範例程式碼需要外接來源提供 MP3 檔案,在此指透過 micro USB 連接器連接的 USB 隨身碟大容量儲存裝置。
圖 4:STM32F469I-DISCO 探索套件有一個 4 吋 LCD,可用於展示 MP3 播放器。音訊檔案由板載 micro USB 連接器連接的外接式 USB 大容量儲存裝置提供。此套件提供可行的範例,說明如何解碼 MP3 檔案。(圖片來源:STMicroelectronics)
雖然 MP3 解碼函式庫需要 Arm Cortex-M4 或效能更好的處理器,但事實證明,在開發板上執行展示程式碼是個相當不錯的方法,不僅能查看並試驗可行的範例,還能驗證應用效能。使用序列線除錯 (SWD) 介面及 Arm 核心的指令追蹤宏單元 (ITM) 功能,可以對程式計數器進行統計分析,判定需要大約多少處理能力來解碼並播放 MP3 檔案。結果證實,近 50% 的 CPU 時間會用在更新 LCD 顯示器上,而花在 MP3 解碼上的時間僅有 10% 或更少。STMicroelectronics 音訊函式庫效率超高,使用 DMA 將解碼的訊框,透過 I2S 推送至音訊編解碼器。
若應用不需要 LCD,而只需根據其他系統事件來播放音訊,則可使用功能較少的處理器。例如,開發人員可以考慮使用 STM32F469VGT6。STM32F469VGT6 仍有相當功能,並具有 1 MB 快閃記憶體和 384 KB RAM,採用 100 引腳的 LQFP 封裝。此零件未採用有時可能會讓開發人員和製造商望而卻步的 BGA 封裝。
圖 5:STM32F469VGT6 是一款 180 MHz 處理器,具有 1 MB 的快閃記憶體和 384 KB 的 RAM。此零件以 Arm Cortex-M4 系列為基礎,由 STMicroelectronics 音訊函式庫提供支援。如圖所示,此零件採用 100 引腳 LQFP 封裝,這可能會讓開發人員和製造商沒那麼望而卻步。(圖片來源:STMicroelectronics)
在開發人員挑選並試驗了他們認為最適合應用的解決方案後,便需要決定如何將解碼的 MP3 檔案從數位波形轉換為類比聲音。
使用編解碼器將音訊串流轉換為聲音
大多數硬體式解碼解決方案還包含一個數位類比轉換器 (DAC),可將接收到的數位檔案格式轉換成類比聲音。不過,這些晶片通含有 I2S 輸出連接埠,能讓開發人員添加自己的音訊編解碼器。軟體式解決方案必須有編解碼器,才能將解碼的數位資料流轉換為音訊。若要做到這一點,有兩種方法可選擇。
首先,可以採用數位音訊以及微控制器的板載 DAC 周邊裝置來產生音訊輸出。一般來說,這不是產生音訊的最佳作法,因為需要額外的離散元件,以及周全的類比電路設計和佈局,才能獲得高品質的輸出。此外,還需要在微控制器上進行更多設定才能讓 DAC 啟動和運行,而且通常還需要額外的處理器電源,才能確保 DAC 已正確供電。
第二種方法,也是一般較推薦的方法,就是使用整合式音訊編解碼器。音訊編解碼器其實是一種積體電路,含有所有產生 DAC 和 D 類放大器等類比輸出所需的電路。音訊編解碼器比離散式解決方案有優勢的原因在於,佔用的電路板空間非常小,而且還內建數位電路來控制音訊輸出串流。
例如,Cirrus Logic 的 CS43L22-CNZ DAC 就為開發人員提供眾多功能,包括:
- 透過 I2C 匯流排進行 DAC 控制
- 提供多個輸出,例如耳機和揚聲器
- 不需要外部輸出濾波
- 具有數位訊號處理器引擎,可控制音量、低音和高音
- 可抑制爆音點擊聲
CS43L22-CNZ 會透過 I2S 介面從微控制器接收 PCM 編碼的資料流,然後使用內部 DAC 進行轉換 (圖 6)。CS43L22-CNZ DAC 可以驅動多個輸出,如揚聲器或耳機。若使用單聲道,CS43L22-CNZ 可向揚聲器輸出 2 W 功率,若使用立體聲通道,每個聲道可輸出高達 1 W。
圖 6:CS43L22-CNZ DAC 是音訊 DAC,在單聲道下,可輸出高達 2 W 的功率,若是立體聲音訊,每通道可輸出 1 W。DAC 具有數位訊號處理引擎,可輕鬆控制音量、低音和高音。(圖片來源:Cirrus Logic)
有些開發人員可能不需要用到 CS43L22-CNZ 的所有功能,因此能選擇更簡易的產品來節省一些 BOM 成本。
當然,這取決於應用的需求。此類做法有個很好的例子便是 AKM 的 AK4637EN 音訊編解碼器 (圖 7)。這是一款 24 位元的單聲道編解碼器,僅有一個輸出 DAC 可供單一揚聲器使用。此編解碼器還含有一個麥克風放大器,因此如果應用需要,也可以用來錄製音訊。
圖 7:AK4637EN 是採用 20 引腳 QFN 小型封裝的音訊 DAC,在單一單聲道下最多能輸出 1 W。此編解碼器可透過 I2C 匯流排以數位方式控制輸出音量,並可自動控制輸出。(圖片來源:AKM Semiconductor)
AK4637EN 和大多數音訊編解碼器一樣,也具有 I2S 介面,可接收來自微控制器的數位音訊訊號。此晶片還含有 I2C 介面,可用於控制板載數位功能,如音量控制。
如同任何產品功能一樣,開發人員需要花時間仔細審核其系統需求,並在編解碼器功能和成本與目標 BOM 成本之間達到平衡。
實作 MP3 解決方案的秘訣與訣竅
以下是開發人員在挑選適合應用的解決方案時,可以使用的一些秘訣與訣竅:
- 在外接 MP3 解碼器以及能自行執行 MP3 解碼器的更強大微控制器之間,按照預期產量進行 BOM 成本分析及比較。確保使用悲觀、可達到以及樂觀的產量數字來建立評估範圍,以便做出更適當的決定。
- 使用可接受 I2S 的音訊編解碼器來產生輸出音訊。離散式解決方案可能需要更多的時間進行調諧,而且元件成本可能差不多。
- 使用開發板對 MP3 軟體函式庫進行效能分析,瞭解執行該解決方案所需的最少微控制器特性。
- 利用 DMA 通道,透過 I2S 介面將解碼的 MP3 訊框傳送到音訊編解碼器,利用這種作法即可使用較便宜的處理器。
- 仔細檢查任何 MP3 軟體函式庫的授權,確保可用於商業化產品。除非是由晶片供應商提供,否則大多數開放原始碼函式庫都需要支付授權費用,才能用於商業化產品。
遵循這些訣竅有助於確保開發人員選出最適合其嵌入式應用的音訊解決方案。
結論
在嵌入式系統中添加音訊曾是相當複雜的工作,但如本文所述,開發人員如今已有多種解決方案可供選擇,從專用的外接式編解碼器,到整合式軟體函式庫應有盡有。但儘管如此,開發人員仍需要仔細評估其應用需求,判定哪種解決方案路徑最合理。
需要考慮的因素包括 BOM、解決方案複雜度、開發及整合時間與成本,以及解決方案的可擴充性等。將這些因素與產量、目標成本和開發日程進行權衡後,最合適的解決方案就會浮現。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。