自分がパソコンを使って音楽を作り始めたときにはMIDI音源が主流になっており、FM音源は「名前は知ってるけどどういう仕組みで鳴っているかよくわらかない」ものでした。
そこで、FM音源がどんなものか知るためにFMシンセを作ってみることにしました。
出来たもの↓
https://takabosoft.github.io/tiny-fm-1/
※広いモニターのPCでお試しください。スマホには画面サイズ的に対応していません。
TypeScriptでWeb Audio APIを使ってリアルタイムに周波数変調を行い、サウンドを生成しています。
FMの仕組みについては以下のサイトを参考にさせていただきました。
仕組み自体は非常にシンプルで、FM音源らしい音はたぶん数時間で鳴らすところまで出来たのですが、その後UIで仮想キーボードやらツマミやらエンベロープやらを作っている方が大変でした。
ソフト名に「Tiny」と付けたように、シンセとしての機能としては簡略的なものです。
各オペレーターにアンプリチュードエンベロープこそ付けましたが、ピッチエンベロープ、モジュレーションエンベロープ等、時間で音を変化させる系の機能が全然載っていません。
ただ、あまりUIを複雑にすると経験上迷子になりやすいのでまずは1画面で収まる範囲の機能で完成としました。
(※FM音源を本当に使う方はDAWにお気に入りのFMシンセがインストールされていると思いますし、WebでFM音源を体験する程度であればこのぐらいかなという所です。)
GitHubにソースもありますので、興味のある方はどうぞ。
https://github.com/takabosoft/tiny-fm-1