アキゾラソフトのロゴアキゾラソフト技術 × キャリア × WEBツール
SERIES 03

FM音源を作る|原理から4オペレータ実装まで

チップチューン音楽アプリ「PICOM」のFMシンセ実装を題材に、FM音源(周波数変調合成)の仕組みを原理から実装まで4回で掘り下げる連載シリーズです。サイン波が単一倍音であること・変調で側帯波が生まれること・変調指数と周波数比が音色を決めることといった原理、キャリアとモジュレータ2個だけの最小2オペレータ実装、OPNA準拠のAlg0〜7というアルゴリズムによる接続の違い、そしてフィードバックとADSRエンベロープを備えた4オペレータFM音源のC#実装までを扱います。「FM音源が多彩な音を出せる理由を理解したい」「DX7やPC-98のOPNAのような音を自分で実装してみたい」エンジニア向けの実装メモです。

シリーズの記事一覧(公開順)

  1. 第1回
    FM音源とは?なぜ1個のサイン波からあれだけ多彩な音色が出るのか

    FM音源とは?なぜ1個のサイン波からあれだけ多彩な音色が出るのか

    チップチューン音楽アプリPICOMで使っているFM音源(周波数変調合成)の原理を、数式1本だけで直感的に解説します。サイン波が単一倍音であること、変調で側帯波が生まれて倍音が増えること、変調指数と周波数比が音色をどう変えるかを、コードを使わず言葉で結びます。DX7やPC-98のOPNAといった歴史的文脈にも触れる、全4回シリーズの第1回です。

  2. 第2回
    2オペレータFM音源をC#で実装する|サイン波2本で音を作る最小構成

    2オペレータFM音源をC#で実装する|サイン波2本で音を作る最小構成

    FM音源シリーズ第2回。前回の式 out = sin(2π·fc·t + I·sin(2π·fm·t)) を、そのままC#のコードに落とします。オペレータを「位相を進めてsinを引く1ユニット」として設計し、キャリアとモジュレータ2個だけを直列に繋いで、サンプル単位のループで1音を生成する最小構成を解説します。位相累算の仕組みと、周波数を比(レシオ)で持つ理由まで。

  3. 第3回
    4オペレータFM vs 2オペレータ|アルゴリズムとは何かを理解する

    4オペレータFM vs 2オペレータ|アルゴリズムとは何かを理解する

    FM音源シリーズ第3回。2オペレータでは出せない音があるのはなぜか、オペレータを4個に増やすと何ができるのかを「接続の組み合わせ=アルゴリズム」という軸で解説します。OPNA準拠のAlg0〜7の接続パターンを図で紹介し、直列寄りは歪んだ複雑な音・並列寄りはオルガン的な加算合成という音色傾向を整理。接続の自由度・倍音の複雑さ・計算コストの3軸で2opと4opを比較します。

  4. 第4回
    4オペレータFM音源をC#で実装する|アルゴリズム・フィードバック・ADSR

    4オペレータFM音源をC#で実装する|アルゴリズム・フィードバック・ADSR

    FM音源シリーズ最終回。前回までの概念を全部コードにします。PICOMの実装をもとに、FMOperatorクラス、4つのオペレータとアルゴリズム・フィードバックを持つFMParameters、Alg0〜7をswitchで切り替える波形生成ループ、OP1セルフフィードバック、各オペレータのADSRエンベロープを解説します。第2回の2オペレータ実装をどう一般化したかを辿り、動く4オペレータFM音源を完成させます。