概要

ESP32-S3でUSB Host経由で音声処理ができればなと思っていたので、実装してみました。スピーカー・マイクは便利ですがESP32-S3だとちょっと通信速度的に同時利用は厳しいかもしれません。ESP32-P4のHSだとなんとかなるかも?
製品
基本どんなデバイスでもいいのですが、これを使っています。オーディオテクニカ製で小さいですがそこまで高くなく、物理ボリューム付きになります。
マイクを利用しないのであれば100円ショップなどで販売しているDAC内蔵のUSBケーブルでも大丈夫です。たまに安いけれど汎用的に使えないやつがあるので注意してください。DAC内蔵と書いてあるやつであれば問題ありません。また、パッケージにはイヤホンマイクも使えると書いてありますが、ジャックが対応しているだけで、マイク入力のADCには対応していません。あくまで音を鳴らすDACのみです。
あとは普通のUSBオーディオのアダプタも利用できます。この手のだとマイクも利用可能です。
制御方法 mp3再生

いろいろな制御方法があるので、Audioフォルダを確認してほしいのですがMP3をUSB Audioで再生する例がこちらです。気をつけないといけないのは出力フォーマットが何種類か選択可能で、デバイスによって選択肢が変わります。48kHz/16bitが標準的で、44kHzに対応しているかはデバイスによって変わります。ある程度自動的にフォーマットを選択できる機能がライブラリに組み込まれています。
何らかの方法でオーディオストリームを作って、それを流すだけになります。このサンプルではPCMFlowという別ライブラリを利用しています。このライブラリは純正なオーディオデータの入力と出力間に入ってサンプリングレートやビット数などを調整するレイヤーになります。たとえばmp3は44kHzの場合が多いので、48kHzのUSBオーディオに流す場合にはリサンプリングをする必要がありますので、そこをPCMFlowが変換をしてくれます。
入力側としてmp3デコーダーがあるのでそれを利用しています。入力はUDP通信からPCMFlowに流す兄弟ライブラリとかもありますので複数を組み合わせて利用が可能です。この手の音声ストリームはよくある処理が多いのですが入力から出力まで全部を担当するライブラリが多く、部品だけで利用するのは面倒な作りになっているものが多いので新規作成しています。
利用方法 マイク入力

マイク入力例です。入力したあとにどうするかは要件によるので、どんな形で受信をするのかだけのサンプルとなります。
まとめ
音声に関して言うと、ATOMなどのスピーカーを持っていないデバイスに、100円ショップなどで売っているDAC内蔵ケーブルを利用して音を出すのが音質的にもおすすめです。
逆にマイクはちょっと使いにくいのでそこまで需要がないのかなと思っています。あまり最適化はしていないのでマイクとスピーカーの同時利用だとサンプリングレートを落とす必要がありますが、もしかしたらもう少し綺麗に同時利用できるかもしれません。






















































コメント