デモ動画
概要
WiFi対応マイコンとしてホビーユーザーにも人気のESP32を使ったFM音源搭載シンセサイザーです。これまでFM音源を実装してきたAVRマイコンやLPC810(ARM)マイコンなどよりも動作周波数が高くパワフルなマイコンなので、1チップ1音ではなく、1チップで複数音を同時発音するような仕様としました。この記事を書いているのは2025年の2月ですが、実際に制作していたのは2020年~2022年ごろです。
実装
ソフトウェア
ESP32はFPUを搭載していますが、そこまで高速ではないということもありFM音源部の処理は速度を重視して基本的に固定小数点で実装しています。テーブルサイズの最適化などをしてESP32のFlashからの読み出し回数を減らせばもしかすると8音同時発音までいけるかもしれませんが、いまのところ7音~6音@48KHzが限界のようです。また、他のマイコンへの移植性などを考慮し、FM音源部に関してはヘッダファイル内のコンフィグ値を変えることでサンプリング周波数や最大発音数などを変更できるように作っています。
7音同時発音なので実用性に乏しいですが、マルチティンバー対応にしてあります。それぞれの発音スロットに対して個別にパラメーターを割り当てることができるので、MIDIデータの処理部でスロットとチャンネルの対応を決めて、適切なパラメーターをスロットに割り当ててやることで、16チャンネル(ただしドラムは非対応)の同時再生が可能です。
デモ動画の中でも触れていますが、デバッグの際に音色作成を数値ベタ打ちでやるのはなかなかモチベーションが湧きにくいということもあり、node.js+Electronで音色エディタを作ったりもしました。
as isですが、ソースはGitHubの以下のリポジトリで公開しています。
- FM音源部:https://github.com/JA1TYE/SuFMLib
- MIDIパーサー:https://github.com/JA1TYE/SuMIDILib
- ESP32で動くようにまとめたもの:https://github.com/JA1TYE/SuFM-ESP
ハードウェア
ESP32はそこそこパワフルなマイコンかつ、オーディオ用のDAC/ADCとの通信I/FであるI2Sのペリフェラルを持っています。そこで汎用的に音モノを作って遊べるようなマイ評価ボードを作り、その上でシンセサイザーを実装しました。秋月電子通商のB基板と同じ寸法(95mm x 72mm)にして、ユニバーサル基板エリアも付けることで追加の回路も取り付けられるような基板としました。
この基板のユニバーサル基板を取り外したものを使って初代のボイスチェンジャーメガホンを作ったりしているので、なかなか活躍している評価ボードです。この評価ボードは最終的に何度か試作を繰り返し、MIDI入力用のフォトカプラやモノラルのオーディオアンプも内蔵した基板に仕立てて様々な試作に活用しています。
仕様
ハードウェア部 | |
---|---|
MCU | Espressif製 ESP32 (Xtensa LX6@240MHz x2) |
DAC | TI製 TLV320AIC3204 (DAC部のみ使用) |
I/F | USB-UART,レガシーMIDI入力,オーディオ出力 |
音源部 | |
音源方式 | FM合成方式 |
サンプリング周波数 | 48KHz |
オペレーター数 | 4オペレーター |
アルゴリズム数 | 8アルゴリズム |
同時発音数 | 7音 |