N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
<< 「AquesTalk-ESP32 Ver.2.0」を使う | main |
Arduinoの "Simple audio player" がお粗末すぎる

keywords:Arduino Zero, SAMD, DAC, サウンド出力

 

 

■概要


Simple audio player」は、Arduinoのチュートリアルのサンプルの一つです。
Arduino Zero、MKRZero、MKR1000ボードでSD上のWAVファイルを内蔵10bitDACから出力します。
このサンプルプログラムで使われている「AudioZero」というライブラリのソースコードを読んだところ、無茶苦茶で、まともな音が再生できるはずがありません。気付いた点を記しておきます。ハッキリ言います。このライブラリを使ってはいけません!

 

 

■おかしな点


1.  符号付き16bitデータを、符号無しで8bitづつ出力している

一般的なWAVフォーマットにおいて、1サンプルのデータは符号付きの16bit(2byte)です。
このライブラリではファイルから読み込んだデータを、1バイト毎にそのまま10bit DACに出力しています。
そのため、16bitデータの下位8bitと上位8bitが交互に出力されてます。しかもそのまま符号無しで。
本来は、符号付き16bitデータ(-32768〜32767)を符号無し10bit(0〜1023)にマップしてDA出力すべきです。

 

2.  WAVヘッダを出力している

WAVファイルの先頭にはデータの長さやサンプリング周波数などが書かれたヘッダが置かれています。
このライブラリではヘッダもそのままDACに出力しています。
本来は、ヘッダ部分を除いて出力すべきです。

 

3.  1024サンプル毎に1データが出力されない

1024番目のデータが出力されずに、1023番目のデータが2回繰り返されるようになっています。
聴感上は気付きにくい部分ですが・・・

 


■実際に使うには


さらに以下の点も検討が必要です。


・ステレオ to モノラル変換
・開始、終了時のポップノイズ対策
・アンプのアナログ回路設計の見直し

 


■音質が悪いのはライブラリのせい


サンプリング周波数が合っているので、なんとなくそれっぽい音が出るようですが、いずれにせよ問題外のライブラリです。

音質の悪さを、Arduino Dueが12bitDACなのに対して、Arduino Zeroが10bitだからとか、オーディオアンプが良くないからなどと納得しないでください。本来、SAMD21マイコンは、ずっと良い音質で出力できます!
繰り返しますが、このライブラリは使ってはいけません!

 

なお、本情報は2019年2月現在のもので、ライブラリは今後修正されるかもしれません。

 

■link



 

| 電子工作 | 19:20 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND