今回からは、音声入力と出力についてです。先ずは入力から。
音声入力
ESP32にはAD変換があるので、これを使用することを前提に考えるとコンデンサマイクをESP32に繋ぎマイクの出力をAD変換する事が考えられます。
コンデンサマイクは、例えば秋月電子で、”エレクトレットコンデンサーマイクロホン(ECM) WM-61A相当品 リードピン付”
値段は、1個50円と安いんですが、抵抗とコンデンサを追加する必要があるようです。入力電圧を3.3Vにすれば、マイクの出力をフルレンジでAD変換出来そうです。
更に秋月電子を閲覧していると、”高感度マイクアンプキット”を見つけました。
先程のマイクの出力にアンプを追加したマイクキットです。これってコンデンサマイクのみでは出力が小さく、使用するためにはアンプが必要って言ってるように聞こえます。このキットの価格は500円。価格にもアンプがかかっています。とは言えコンデンサマイクを使用するなら、このキットの様にマイクの出力にアンプが必要と思います。
このキットを使用するとして、出力をAD変換すれば値は取れますが、
- サンプリングは幾つにするか。
- 再生した時にはっきり聞こえるサンプリングはいつくか。
- そのサンプリングでESP32はサンプリング出来のか
- サンプリングしている間、その他の処理は止まる。
- 音声の取込みの他、データの送信受信、音声の再生等の処理を行う必要がある。
- これらの処理が止まると問題を起こす可能性がある。
- 割り込みを使えば上記は解決出来るかもしれないが、プログラムが面倒
- 割り込みプログラムの経験が少ない
- 通信中の割り込みは通信作業に影響しないのか
が直ぐに思い浮かびます。一番大変な点はプログラムの負担です。負担をなるべく少なくしたい。
以前、”WebRadio w/I2S”を製作した時に、”I2S”のアンプを使用した事を思い出しました。Webで調べるとその規格のマイクも有ることが分かりました。”WebRadio w/I2S”はサンプルプログラムを元にインターフェイスを若干変更したのみだったので”I2S”に殆ど触れずにプログラムを書きました。調べて見るとESP32は”I2S”用の関数を準備している事が分かりました。それと”I2S”のマイクを使用すると、入力関係はマイクが処理し最後の結果(デジタル)のみ受け取れば良い事が分かりました。なおかつ、この受け取ったデジタルデータをそのまま、”I2S”のアンプに送れば、その先はアンプが処理してくれる様です。という事で、”I2S”のマイクとアンプを買う事にしました。
I2Sマイクとアンプ
はっきり言って何を基準に選んで良いか分からないのが現状です。取り合えす、
- ”Arduino”に対応している
- コンデンサマイクキットが500円だったので、それくらいの価格
- その製品を使用して例がWebに載っている
を基準に探してみました。それでスイッチサイエンスの、”SPH0645LM4H搭載 I2S MEMSマイクモジュール”と、”MAX98357A搭載 I2Sオーディオモジュール”を選びました。マイクが990円。アンプが643円でした。マイクが若干予算オーバですが、プログラムの負担はかなり少なくなるはずです。各々2個注文しました。マイクとアンプに追加の部品は必要無いのですが、スピーカは当然必要です。スピーカは自前があるので今回はオーダーしていません。
次回は、ESP32へ接続とプログラムに付いて書きます。