組み込みシステムでオーディオファイルを効率的にデコードして再生する方法
DigiKeyの北米担当編集者の提供
2019-11-05
オーディオインターフェースは、組み込み設計の機能としてますます求められるようになっています。同時に、組み込みシステムのユーザーが求めるオーディオ品質はいっそう高くなっています。このため、開発者は、MP3やその他のオーディオファイルをマイクロコントローラベースのシステムで実行する方法を見出すという課題に直面しています。このようなシステムはリソースが限られるだけでなく、開発者がLinuxベースのシステムで利用できる使いやすいオーディオインターフェースもありません。そのため、オーディオファイルをデコードして内容をアナログ音声に効率的に変換することが困難になっています。
また、コスト、スペース、および開発時間が重要な考慮事項となるため、開発者はハードウェアまたはソフトウェアソリューションを慎重に選択し、使用するコンポーネントを決定する必要があります。
この記事では、AKM Semiconductor、Adafruit、STMicroelectronics、およびCirrus Logic Inc.から提供されている、開発者がオーディオファイルを組み込みデバイスに効率的かつ効果的に追加するために使用できるハードウェアおよびソフトウェアソリューションを紹介します。また、実装を成功に導く「ヒントとコツ」も示します。
組み込みオーディオ形式の選択
オーディオ機能を組み込みデバイスに統合する方法について詳しく見ていく前に、MP3オーディオ形式が一般によく使用される理由について考えると役立ちます。組み込みシステムで開発者が使用できるオーディオ形式には、パルス符号変調(PCM)、WAV、およびMP3の3種類があります。
PCMは、非圧縮のロスレスオーディオ形式で、オーディオストリームのデジタル表現をユーザーに聞こえるアナログ音声に変換するオーディオコーデックでよく使用されます。CDからサポートが続いている標準形式です。PCMを組み込みシステムで使用することもできますが、問題は、PCMファイルが一般にWAVまたはMP3ファイルよりもはるかに大きいということです。コストが重要視され、リソースが限られたデバイスでは、製品をサポートするために、より大規模な外部メモリデバイスまたはより多くのメモリを搭載したマイクロコントローラが必要になる場合があります。このため、製品が少量生産型である場合、単一のオーディオファイルのみを使用する場合、またはコスト制限がない場合を除き、PCMは一般に採用されません。
WAVファイルも非圧縮のロスレスファイルであるため、PCMとよく似ています。WAVファイルはPCMファイルよりも組み込みアプリケーションによく使用される傾向がありますが、WAVファイルもかなりのスペースを占めます。組み込みシステムにすでにSDカードやその他の大規模メモリデバイスがある場合に適しています。
ほとんどのシステムでオーディオ形式として推奨されるのは、MP3ファイルです。MP3ファイルは損失を伴うため、オーディオのエンコード時に一部のオーディオの再現性が失われる可能性があります。ただし、PCMまたはWAVよりもはるかに小さいため、オーディオファイルを転送してデバイスに格納する時間が短縮されるほか、メモリ要件が軽減されます。
MP3が最適であることが明らかになったら、開発者はハードウェアでデコードするかソフトウェアでデコードするかを選択できます。
ハードウェアベースのMP3デコーディング
多くの場合、最も迅速かつ簡単な解決策は、Adafruitの1681 VS1053BなどのハードウェアMP3デコーダを使用することです(図1)。VS1053Bは、シリアルストリームを介してMP3、WAV、OGG、またはMIDIファイル形式を直接受け入れてデコードできるため、開発者はほとんどまたはまったく労力を費やさずに済みます。ストリームのデコード後に、VS1053Bは18ビットのD/Aコンバータ(DAC)を使用して、そのストリームをオーディオに変換します。
図1:AdafruitのVS1053Bは、オーディオストリームを受け取って代表的なアナログオーディオ信号にデコードする、ハードウェアベースのMP3デコーダチップです。このソリューションに必要なのは最小限のソフトウェアで、開発者がMP3ファイルをデコードまたは変換する方法を理解する必要はありません。(画像提供:Adafruit)
VS1053Bの興味深い点は、I2Cを使用する他の多くのデコーダとは異なり、シンプルなUARTを使用してデバッグおよび制御できることです。また、ビットの読み取りやスイッチまたはステータスLEDの設定などのアプリケーション機能に使用できる8つの汎用入出力ピンも備えています。
ハードウェアベースのソリューションを試す際、必ずしもVS1053B用の独自のブレークアウトボードを作成しなくてもかまいません。Adafruitは、1381 VS1053Bコーデック+ MicroSDブレークアウトボードを提供しています。 VS1053Bに付属するこのボードは、デコードするオーディオファイルの保存に使用できるMicroSDカードスロットを搭載しています(図2)。このブレークアウトボードは、SPIまたはSDIOポート経由でSDカードに接続してオーディオファイルを読み取るマイクロコントローラに接続するように設計されています。オーディオファイルストリームは、VS1053Bに送信されデコードされます。VL1053Bの出力は、必要に応じてヘッドフォンジャックやスピーカなどに転送できます。
図2:Adafruitが提供する1381 VS1053Bコーデック+ MicroSDブレークアウトボードには、マイクロコントローラを簡単に接続してオーディオを再生するために必要なハードウェアが含まれています。このブレークアウトボードは、マイクロコントローラがSPI経由で読み取ることができるオンボードのMicroSDカードスロットを搭載しており、そのファイルはVS1053Bに転送されデコードされます。(画像提供:Adafruit)
ソフトウェアベースのMP3デコーディング
若干複雑になるものの、部品表(BOM)の観点から見て低コストになることが多い解決策は、マイクロコントローラでMP3ファイルをデコードして、オーディオを生成するオーディオコーデックにデコード済みのファイルをストリーミングすることです。効率的なソフトウェアベースのソリューションを実装するには、開発者は次のような重要なコンポーネントをいくつか実装する必要があります。
- MP3デコーダライブラリ
- メモリストレージドライバ
- ファイルシステムスタック
- ダイレクトメモリアクセス(DMA)ドライバ
- I2Sドライバ
- I2Cドライバ
- オーディオコーデックドライバ
一見すると、ソフトウェア開発者の作業量が多く、MP3をデコードしてオーディオに変換するために厄介なソフトウェアコンポーネントを多数統合しなければならないように思えます。MP3デコーディングソリューションを実装する最善の方法は、オーディオのエンコーディング、デコーディング、および一般処理をサポートするマイクロコントローラプラットフォームを利用することです。
インターネット上でさまざまなオープンソースソリューションが見つかりますが、開発者が利用できるプロフェッショナルソリューションとして実績があるのは、STM32ツールチェーンです。STM32マイクロコントローラファミリには、STM32CubeIDEと統合されているSTM32CubeMxという開発ツールがあり、オーディオサンプルや開発ライブラリが含まれています。サンプルやツールは、X-CUBE-AUDIOというSTM32CubeMXアドオンプラグインに含まれています。このプラグインには、Arm Cortex-M4クラスのマイクロコントローラに搭載されているSTM32プロセッサ向けのMP3デコーディング用のオーディオライブラリが用意されています。
具体的には、STM32F469IGH6TRマイクロコントローラ上で実行されるMP3プレーヤを作成するためのコードプロジェクト例があります。STM32F469IGH6TRは、1MBのフラッシュと384KBのRAMを備え、180MHzで動作する高性能なマイクロコントローラです。このマイクロコントローラは176ピンUBGAパッケージで提供され、ほぼすべてのアプリケーションに対応するさまざまなGPIOおよび周辺機能を実現します。
図3:STM32F469IGH6TRは、1MBのフラッシュと384KBのRAMを備えた、180MHzのArm Cortex-M4プロセッサです。この176ピンUBGAパッケージは、ほぼすべての組み込みアプリケーションに対応するさまざまなGPIOを実現します。(画像提供:STMicroelectronics)
MP3プレーヤのコード例は、STM32F469I-DISCOディスカバリキットで動作します(図4)。STM32F469I-DISCOには、MP3のデコードと再生に必要なすべてが含まれています。このボードには4インチ800 x 480ピクセルのLCDが搭載されており、開発者がMP3のデモンストレーション状態を確認したり、再生、停止、次へ、前へなどのプレーヤコントロールを操作したりするために使用できます。このディスカバリボードは、結果として得られるオーディオがステレオで再生されるヘッドフォンジャックも備えています。このコード例に関する唯一の注意点は、MP3ファイルを外部ソース(具体的には、マイクロUSBコネクタを介して接続されるUSBドライブ大容量記憶装置)から提供する必要があることです。
図4:STM32F469I-DISCOディスカバリキットには、MP3プレーヤのデモンストレーションの操作に使用される4インチLCDが搭載されています。オーディオファイルは、オンボードのマイクロUSBコネクタを介して外部のUSB大容量記憶装置から提供します。MP3ファイルのデコード方法の作業例を確認できます。(画像提供:STMicroelectronics)
MP3デコーディングライブラリを使用するにはArm Cortex-M4以上のプロセッサが必要ですが、開発ボードでデモンストレーションコードを実行すると、作業例を確認して試すだけでなく、アプリケーションの性能を検証することもできます。Armコアのシリアルワイヤデバッグ(SWD)インターフェースおよび計装トレースマクロセル(ITM)機能を使用すると、プログラムカウンタで統計分析を実行して、MP3ファイルのデコードと再生にどの程度の処理能力が使用されていたかを特定できます。CPU時間のほぼ50%をLCDディスプレイの更新に費やすことができ、MP3デコーディングに費やされたのは10%以下であることがわかります。STMicroelectronicsのオーディオライブラリは非常に効率的で、DMAを使用してデコード済みのフレームをI2S経由でオーディオコーデックにプッシュ送信します。
アプリケーションにLCDが不要で、代わりに他のシステムイベントに基づいてオーディオを再生する必要がある場合は、機能がより少ないプロセッサを使用できます。たとえば、STM32F469VGT6などがあります。STM32F469VGT6も高性能で、100ピンLQFPに1MBのフラッシュと384KBのRAMをすべて備えています。この部品はBGAフットプリントを使用していないため、開発者とメーカーの両方にとって厄介になる場合があります。
図5:STM32F469VGT6は、1MBのフラッシュと384KBのRAMを備えた180MHzプロセッサです。この部品はArm Cortex-M4ファミリをベースにしており、STMicroelectronicsのオーディオライブラリでサポートされています。このように100ピンLQFPで提供されるため、開発者とメーカーの両方にとってあまり有力とは言えません。(画像提供:STMicroelectronics)
開発者は、アプリケーションに最適だと思うソリューションを選択して試したら、デコード済みのMP3ファイルをデジタル波形からアナログ音声に変換する方法を決定する必要があります。
コーデックによるオーディオストリームの音声への変換
ほとんどのハードウェアベースのデコーディングソリューションには、受け取ったデジタルファイル形式をアナログ音声に変換するために使用できるD/Aコンバータ(DAC)も含まれています。ただし、このようなチップには、開発者が独自のオーディオコーデックを追加できるI2S出力ポートが含まれていることがよくあります。ソフトウェアベースのソリューションでは、デコード済みのデジタルストリームをオーディオに変換するコーデックが間違いなく必要になります。これには2とおりの方法があります。
1つ目の方法は、デジタルオーディオとマイクロコントローラのオンボードのDAC周辺機器を使用してオーディオ出力を生成する方法です。一般に、これはオーディオを生成する最善の方法とは言えません。高品質の出力を実現するには、追加のディスクリート部品が必要となり、アナログ回路の設計とレイアウトを慎重に行う必要があるためです。また、DACを起動して実行するためにマイクロコントローラで追加の設定が必要になり、通常、DACにデータが適切に入力されるようにするにはプロセッサパワーがさらに必要になります。
2つ目の方法は、統合オーディオコーデックを使用する方法で、一般にこの方法が推奨されます。オーディオコーデックは基本的に、DACやクラスDアンプなどのアナログ出力を生成するためのすべての回路を含む集積回路です。オーディオコーデックは、ディスクリートソリューションと比べて、占有する基板スペースが非常に小さく、オーディオ出力ストリームを制御するためのデジタル回路を組み込むこともできるというメリットがあります。
たとえば、Cirrus Logicが提供するCS43L22-CNZ DACには、次のようなさまざまな機能が用意されています。
- I2Cバスを介したDAC制御
- ヘッドフォンやスピーカなどの複数の出力
- 外部出力フィルタが不要
- ボリューム、低音、および高音コントロール用のデジタル信号プロセッサエンジン
- ポップとクリックの抑制
CS43L22-CNZは、PCMでエンコードされたデータストリームをI2Sインターフェース経由でマイクロコントローラから受信し、内部DACを使用して変換します(図6)。CS43L22-CNZ DACは、スピーカやヘッドフォンなどの複数の出力を駆動できます。CS43L22-CNZでは、単一のモノラルチャンネルが使用されている場合は2Wの電力をスピーカに出力でき、ステレオチャンネルが使用されている場合はチャンネルごとに最大1Wを出力できます。
図6:CS43L22-CNZ DACは、モノラル出力では最大2W、ステレオオーディオではチャンネルごとに最大1Wを出力できるオーディオDACです。このDACは、ボリューム、低音、および高音コントロールを簡単に制御できるデジタル信号処理エンジンを搭載しています。(画像提供:Cirrus Logic)
CS43L22-CNZのすべての機能が必要なわけではない場合は、機能を最小限に抑えてBOMコストを削減することができます。
もちろん、アプリケーションの要件によりますが、このようなアプローチの一例として、AKMのAK4637ENオーディオコーデックがあります(図7)。これは、スピーカのみの出力DACを搭載した24ビットのモノラルチャンネルコーデックです。このコーデックにはマイクロフォンアンプも含まれているため、アプリケーションに必要な場合はオーディオの録音にも使用できます。
図7:AK4637ENは、小型の20ピンQFNパッケージで提供されるオーディオDACで、単一のモノラルオーディオチャンネルを最大1Wで出力します。このコーデックは、I2Cバスを介してデジタル制御でき、出力ボリュームと自動出力制御を管理できます。(画像提供:AKM Semiconductor)
ほとんどのオーディオコーデックと同様に、AK4637ENにも、マイクロコントローラからデジタルオーディオ信号を受信するI2Sインターフェースがあります。このチップには、ボリュームコントロールなどのオンボードのデジタル機能を制御するために使用されるI2Cインターフェースもあります。
他の製品機能と同様に、開発者は時間をかけてシステムの要件を慎重に確認し、コーデックの機能およびコストと目標BOMコストのバランスを取る必要があります。
MP3ソリューションの実装に関するヒントとコツ
以下に、アプリケーションに適したソリューションを選択する際に使用できる「ヒントとコツ」を示します。
- 外部のMP3デコーダと単独でMP3デコーダを実行できるより高性能なマイクロコントローラを比較して、予想生産量におけるBOMコスト分析を行います。より的確な意思決定のために、悲観的な生産量、達成可能な生産量、および楽観的な生産量の数値を使用して範囲を設定するようにします。
- I2Sに対応するオーディオコーデックを使用して出力オーディオを生成します。ディスクリートソリューションではチューニングにより時間がかかり、コンポーネントコストは同等である可能性があります。
- 開発ボードを使用してMP3ソフトウェアライブラリの性能分析を行い、ソリューションの実行に必要な最小限のマイクロコントローラの特性を把握します。
- DMAチャンネルを利用して、デコード済みのMP3フレームをI2Sインターフェース経由でオーディオコーデックに転送します。これでより安価なプロセッサを使用できます。
- MP3ソフトウェアライブラリのライセンスをよく調べて、商用製品に使用できることを確認します。ほとんどのオープンソースライブラリでは、チップベンダから提供されていない限り、商用製品には有償ライセンスが必要です。
これらのヒントに従うことで、開発者は組み込みアプリケーションに適したオーディオソリューションを選択できます。
まとめ
組み込みシステムへのオーディオの追加は、以前は複雑な作業でしたが、これまで見てきたように、現在はさまざまなソリューションの中から選択できます。ソリューションは、専用の外部コーデックから統合ソフトウェアライブラリまで多岐にわたります。それでも、開発者はアプリケーションのニーズを慎重に評価し、最も有用なソリューションパスを特定する必要があります。
検討事項には、BOM、ソリューションの複雑さ、開発と統合にかかる時間とコスト、ソリューションのスケーラビリティなどがあります。これらの事項を製品の生産量、目標コスト、および開発スケジュールと比較検討すると、最適なソリューションが明確になります。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


