概要
- 10セントMCU で音声再生と合成に挑戦した事例紹介
- 16KBフラッシュ 内に音声データとコードを収める圧縮技術の解説
- 2ビットADPCM による短音声クリップの保存と再生手法
- LPC音声合成 (Talkieライブラリ)で多数の単語・フレーズを実現
- 実装や音質、ツール作成の工夫を具体的に説明
超小型MCUで音声再生に挑戦
- CH32V003 など10セントMCUで音声出力実現
- 1ビット音声 (GPIOトグル)から、 PWM出力 による波形再生へ進化
- 8kHzサンプリング でPWMをDAC代用、SMDブザーから小型スピーカーへ変更
- 16KBフラッシュ の厳しい容量制限下での音声再生
音声データ圧縮の工夫
- 6秒の音声クリップ (「Open the pod bay doors HAL…」)を保存するための圧縮方式比較
- 比較例
- CD品質 (44.1kHz/16bit):約529KBで16KBに収まらず
- 電話品質 (16kHz/16bit):約192KBで不可
- 8bit PCM/8kHz :約48KBで不可
- 4bit ADPCM/8kHz :約24KBで難しい
- QOA (3.2bit/サンプル):約19KBで不可
- 2bit ADPCM/8kHz :約12KBで 唯一可能
- 2bit ADPCM 選定理由
- 4:1圧縮で75%容量削減
- デコーダ実装も 1.3KB以下 と超軽量
- 音質は低いが 意外と聞き取れる
2ビットADPCMの仕組み
- 予測値 と ステップサイズ を維持し、2ビット符号で差分を符号化
- 00: 1ステップ下げる、01: 1ステップ上げる、10: 2ステップ下げる、11: 2ステップ上げる
- 適応的にステップサイズを調整し、元音声の形状を大まかに再現
- エンコードツール 作成でWAV→2bit ADPCM変換を自動化
LPC音声合成による長文再生
- ADPCM では長い音声保存が難しいため、 LPC音声合成 (Talkieライブラリ)を導入
- Talkie はTexas Instrumentsの1970年代LPC音声チップ互換ソフトウェア
- Speak & Spell や初期アーケードゲーム、BBC Microなどで採用実績
- 1フレーズ数百バイト で多数の単語・フレーズ保存可能
- 音質はロボット的だが 明瞭で理解可能
- カスタム音声 を作るには既存語彙の連結や新規LPCデータ生成が必要
- BlueWizard・PythonWizardなどのツールでWAV→LPC変換
- AIアシスタント 活用でオンライン変換ツールも自作
実験結果とまとめ
- 2bit ADPCM で8秒弱の音声クリップ保存・再生に成功
- Talkie LPC で多様なフレーズや単語の合成音声出力が可能
- PWM出力 による音質は低いが、内容は十分伝わる
- GitHub で全コード公開中
- 超低コストMCU でも工夫次第で「話す」機能を実現可能
関連情報・サポート
- 詳細なデモ動画やコードは GitHub ・ブログ上で公開
- Patreon や ko-fi でのサポートも受付中
- 執筆者: Chris Greening