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和音ということになります。
音のパラメータ
では、音のパラメータとはどんなものでしょうか? それは次の4つです。このうちエンベロープを音色に含めて、音量・音程・音色を音の3要素と言ったりもします。
- 音量
- 音程
- エンベロープ
- 音色
音量とは音の大きさです。音波の振幅です。まあ、これは簡単ですね。
音程とは音の高さです。音波の基本周波数です。これも簡単ですね。五線譜の第二間のラ(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つのパラメータでエンベロープを設定できます。
- Attack Rate = ノートオン(鍵盤を押したとき)からの音量の立ち上がりの傾き
- Decay Rate = 最大音量から持続部分の音量に達するまでの減衰の傾き
- Sustain Level = 音が持続する部分の音量
- Sustain Rate = 音が持続する部分の音量の減衰の傾き
- Release Rate = ノートオフ(鍵盤を離したとき)から音が消えるまでの減衰の傾き
これに対して、YM2203のPSG音源(SSG音源)は、予め決められた8種類の簡単なエンベロープから選べるのみです。しかも、3チャンネルの音源であるにも関わらずエンベロープ発生器は1系統しかありません。つまり3つの音を同時に出せるのに、エンベロープは別々にはかけられないのです。これはかなり残念な仕様だと思います。
音色
もっとも基本的な音の波形は正弦波です。次の式において、Aが振幅すなわち音量であり、fが周波数すなわち音程です。これは高校の物理かなんかで習うから誰でも知ってますね。
FM音源では、これに次の式のような操作を加えます。2πftの後に加えられた項によって周波数にゆさぶりがかけられます。これを周波数変調と呼びます。FM音源のFMとは周波数変調(Frequency Modulation)を意味します。*3 ここで、Iを変調指数、fmを変調周波数といいます。基本周波数に対してどれくらい大きく・どのような周期でゆさぶりをかけるかというパラメータです。
上の式をブロック図で表すと次のようになります。
FM音源はこのような操作によって音色を作ります。たとえば上の式において、 I=1, fm=2f とすると下図のような矩形波に近い波形になります。また当然ながら、I=0とすれば正弦波となります。
YM2203のオペレータとアルゴリズム
YM2203のFM音源は1チャンネルにつき4個の「オペレータ」とよばれるユニットを持っています。オペレータとは、エンベロープと周波数変調の機能を持ったユニットです。これを2個組み合わせれば前述の基本的な周波数変調のブロック図を実現できることが分かると思います。
そしてYM2203では、4個のオペレータを接続するパターンを8種類の中から選ぶことができます。このオペレータの接続パターンを「アルゴリズム」と呼びます。4個のオペレータを組み合わせることによってより多彩な音色を表現できるようになります。
でもこれ、どのアルゴリズムがどのような音色を生み出すのか、まったく想像がつきませんよね? それについては、こちらのサイト (果物使いのためのFM音源温故知新 - さけかんわーくす)に分かりやすい解説がありました。要点は次の3点です。
- キャリア(最終段のオペレータ)が多いほど、つまり並列度が高いほど、音が厚くなる
- モジュレータ(前段のオペレータ)の段数が多いほど、つまり直列度が高いほど、倍音が複雑になる
- フィードバックが前段にあるほど倍音が複雑になり、後段にあるほど音にパワーが出る。
だいたい番号の若いアルゴリズムほど直列度が高く、番号の大きいアルゴリズムほど並列度が高いですね。もっとも直列度の高い0のアルゴリズムはギターなどの撥弦楽器むきで、もっとも並列度の高い7のアルゴリズムはオルガンやチャイムむきとことですが… う〜ん、やはり経験が無いと実感が湧きませんねぇ。このあたりは実際に鳴らしてみないことにはなんとも。
というわけで、次回はこれらの基礎知識をもとに、実際にYM2203のレジスタにどのような設定をすればよいかを考えていきます。