FM音源とPSG音源の基礎

GR-SAKURA用にFM音源シールドを製作してみたものの、サウンド系のプログラム(というか音楽全般)には全く縁がなかったので基礎知識がありませんでした。ちょっとここにまとめます。

FM音源とPSG音源

FM音源とPSG音源は、どちらも80年代ごろにパソコンやゲーム機などに使用された音源です。ファミコンMSXやPC-88の音に郷愁を感じるオッサンも多いでしょう(笑) FM音源は90年代〜00年代ごろには携帯電話の着メロにも使われました。FM音源もPSG音源も、音量・音程・音色などのパラメータを設定して音を鳴らすタイプの音源です。実際の音を録音して再生するのに比べてデータ量は非常が小さいので、記憶容量の貧弱だった頃のパソコンやゲーム機や携帯電話で用いられました。音色の豊かさにおいて、FM音源のほうがPSG音源より優れています。もちろんそのぶん、設定するパラメータが多くて複雑なわけです。なお、ヤマハではPSG音源のことをSSG音源と呼称するようです。


僕が今回製作したGR-SAKURA用FM音源シールドは、ヤマハのYM2203というチップを搭載しており、FM音源3チャンネルとPSG(SSG)音源3チャンネルを持っています。ここでいうチャンネル数とは同時に発声できる音の数です。あまり正確な言い方ではありませんが、和音とも呼ぶこともあります*1。ひところは、携帯の着メロで「16和音」とか言ってましたね。その言い方ならYM2203はFM音源3和音+PSG音源3和音ということになります。
FM音源シールド

音のパラメータ

では、音のパラメータとはどんなものでしょうか? それは次の4つです。このうちエンベロープを音色に含めて、音量・音程・音色を音の3要素と言ったりもします。

  1. 音量
  2. 音程
  3. エンベロープ
  4. 音色



音量とは音の大きさです。音波の振幅です。まあ、これは簡単ですね。
振幅


音程とは音の高さです。音波の基本周波数です。これも簡単ですね。五線譜の第二間のラ(A)の音が440Hzです。1オクターブ上がると周波数は2倍になります。そして1オクターブの中にある12の音(C, C#, D, D#, E, F, F#, G, G#, A, A#, B)は等比数列で周波数が上がります。つまり公比は2の12乗根となります。*2
周波数


エンベロープとは音量の時間的な変化です。音波の包絡線です。というか、包絡線を英語でenvelopeというのです。音量がどんなふうに立ちあがって、どんなふうに持続して、どんなふうに消えていくかです。広義には音色の一部とも考えられますが、ここでは分けるて考えることにします。詳しくは後述します。
包絡線


音色とは、音の「感じ」です。音波の「波の形」です。いちばん記述の難しい要素です。簡単なところでは正弦波、矩形波三角波、ノコギリ波。これらは同じ音量・同じ音程でも違う音に聞こえます。違うのは波の形、すなわち音色です。現実の楽器の音はもっと複雑な波の形をしており、それが豊かな音色となります。詳しくは後述します。
波形

FM音源とPSG音源で設定できるパラメータ

音量と音程は、FM音源でもPSG音源でも設定できます。そもそも、最低この2つが設定できないことには音楽を奏でることはできないでしょう。PSG音源は、エンベロープは多少は設定できますが、音色の設定はできません。PSG音源の音色は矩形波のみです。これに対してFM音源は、エンベロープをPSG音源より複雑に設定できるうえ、音色も正弦波を変調することでさまざまに設定できます。

PSG音源 FM音源
音量の設定
音程の設定
エンベロープの設定
音色の設定
×

エンベロープ

YM2203のFM音源は次の5つのパラメータでエンベロープを設定できます。

  1. Attack Rate = ノートオン(鍵盤を押したとき)からの音量の立ち上がりの傾き
  2. Decay Rate = 最大音量から持続部分の音量に達するまでの減衰の傾き
  3. Sustain Level = 音が持続する部分の音量
  4. Sustain Rate = 音が持続する部分の音量の減衰の傾き
  5. Release Rate = ノートオフ(鍵盤を離したとき)から音が消えるまでの減衰の傾き

エンベロープ
これに対して、YM2203のPSG音源(SSG音源)は、予め決められた8種類の簡単なエンベロープから選べるのみです。しかも、3チャンネルの音源であるにも関わらずエンベロープ発生器は1系統しかありません。つまり3つの音を同時に出せるのに、エンベロープは別々にはかけられないのです。これはかなり残念な仕様だと思います。

音色

もっとも基本的な音の波形は正弦波です。次の式において、Aが振幅すなわち音量であり、fが周波数すなわち音程です。これは高校の物理かなんかで習うから誰でも知ってますね。


x(t) = A \sin( 2 \pi f t)


FM音源では、これに次の式のような操作を加えます。2πftの後に加えられた項によって周波数にゆさぶりがかけられます。これを周波数変調と呼びます。FM音源のFMとは周波数変調(Frequency Modulation)を意味します。*3 ここで、Iを変調指数、fmを変調周波数といいます。基本周波数に対してどれくらい大きく・どのような周期でゆさぶりをかけるかというパラメータです。


x(t) = A \sin( 2 \pi f t + I \sin(2 \pi f_m t) )


上の式をブロック図で表すと次のようになります。
ブロック図
FM音源はこのような操作によって音色を作ります。たとえば上の式において、 I=1, fm=2f とすると下図のような矩形波に近い波形になります。また当然ながら、I=0とすれば正弦波となります。
周波数変調

YM2203のオペレータとアルゴリズム

YM2203のFM音源は1チャンネルにつき4個の「オペレータ」とよばれるユニットを持っています。オペレータとは、エンベロープと周波数変調の機能を持ったユニットです。これを2個組み合わせれば前述の基本的な周波数変調のブロック図を実現できることが分かると思います。
オペレータ

そしてYM2203では、4個のオペレータを接続するパターンを8種類の中から選ぶことができます。このオペレータの接続パターンを「アルゴリズム」と呼びます。4個のオペレータを組み合わせることによってより多彩な音色を表現できるようになります。
アルゴリズム

でもこれ、どのアルゴリズムがどのような音色を生み出すのか、まったく想像がつきませんよね? それについては、こちらのサイト (果物使いのためのFM音源温故知新 - さけかんわーくす)に分かりやすい解説がありました。要点は次の3点です。

  • キャリア(最終段のオペレータ)が多いほど、つまり並列度が高いほど、音が厚くなる
  • モジュレータ(前段のオペレータ)の段数が多いほど、つまり直列度が高いほど、倍音が複雑になる
  • フィードバックが前段にあるほど倍音が複雑になり、後段にあるほど音にパワーが出る。

だいたい番号の若いアルゴリズムほど直列度が高く、番号の大きいアルゴリズムほど並列度が高いですね。もっとも直列度の高い0のアルゴリズムはギターなどの撥弦楽器むきで、もっとも並列度の高い7のアルゴリズムはオルガンやチャイムむきとことですが… う〜ん、やはり経験が無いと実感が湧きませんねぇ。このあたりは実際に鳴らしてみないことにはなんとも。


というわけで、次回はこれらの基礎知識をもとに、実際にYM2203のレジスタにどのような設定をすればよいかを考えていきます。



*1:音楽用語として、単に同時に音がなることを和音とは言わないはずですが、音源の世界ではなぜか昔からこの間違った用語が横行してます。

*2:これを12平均律といいます。現代では12平均律が一般的ですが、2の12乗根などというワケ分からん無理数が使えなかった頃は、12平均律とは異なるピタゴラス音律などで調律されていたそうです。

*3:FMラジオのFMと同じです。FMラジオの場合、電波の周波数に対して、伝送したい音声信号でゆさぶりをかけます。FM音源とはまったく異なる応用のしかたですが、数学的には同じような数式で表現できる操作です。