[AVR]Play WAV file
WAVファイルの音声データをAVRマイコンのPWM機能で鳴らす方法を紹介します。
音声データをマイコン内のフラッシュROMに記憶させていますので、マイコンとスピーカがあるだけで作ることができます。
フラッシュROMの容量的な問題で、長時間喋らせることができません。
用意する部品は次のとおりです。
ATmega168/328マイコンボードキット : http://akizukidenshi.com/catalog/g/gK-04590/
回路図です。
WAVファイルを読み込んで、Cのソースファイルを生成するプログラム(HSP3)。
WAVファイルは無圧縮状態の8ビットデータに対応。WAVファイルは構造が単純でヘッダファイルの後はベタのデータになっています。無音状態が128(0x80)です。
冒頭の無音を読み飛ばす機能もあります。
上の写真は「いらっしゃいませ」と喋ってる音声です。1.1秒で言い終わっていますので、1.5秒に収まりました。22kHzで録音しましたが、8kHzに変換するように作りました。
ステレオの音声データは左側の音だけ使っています。右側の音は捨ててしまいます。
PWM機能を使って波形を出力します。無音状態が約2.5Vです。
マイコンはATmega168Pを使います。全容量は16KBです。そのうち12KBを割り当ててWAVファイルのベタデータを格納します。
サンプリングのデータは1つあたり8ビット。サンプリング周波数は8kHzとしました。8000バイト/秒。12Kバイトで1.5秒だけ再生できます。
現時点では再生時間が短いことと、音質が悪いことが難点です。増幅していないので音量が小さいです。
音質についてはD/Aコンバータを使うと良くなると思います。
再生時間を伸ばすには、外部のメモリが使うといいかもしれません。その場合、8KB/秒=64Kbosのスピードでメモリを読み込める性能が求められます。