English
HARDWARE ManualSCSPユーザーズマニュアル
戻る進む
SCSPユーザーズマニュアル/4.2 音源部レジスタ

■FM音源方式を使用するにあたって

 FM音源方式とは、ある波形発生器の位相入力に、異なる波形発生器の出力を加えることで変調を行なう方式です。FM音声合成はスロットと呼ばれる波形演算ユニットで実現されます。
図4.12にスロットのブロック図を示します。

図4.12 スロットのブロック図

 スロットから音を出力させるためには、スロットが発生するための波形データを波形RAM上に書いておきます。更に波形の読みだしアドレス、ループ開始アドレス、ループ終了アドレス、発音ピッチ、発音レベル、EGの各設定を行ない、 KEY_ONによって発音をスタートさせます。
 SCSPは全体的に22.68[μsec]を1つの大きなサイクルとして動作します。
 PG(Phase Generator)は、発音周波数の設定値によって決まる、波形データの読み出し速度を管理しています。発音周波数を変えない限り、PGは一定の値を1Fsサイクル(22.68[μsec]=1/44.1KHz)ごとに生成して、毎Fsサイクル累積加算を行ない出力します。 これを図4.13のようにアドレスポインタで各種アドレスと加算し、その結果得られた値を波形アドレスとしてアドレスバスに出力し、波形アドレスに対応する波形データをRAMから読み出します。

図4.13 波形アドレス生成演算部

図4.14 波形アドレス生成・波形データ読み出し

 発振周波数が一定の時(PGの内部生成がすべてのFsサイクルで一定の時)、アドレスポインタの出力は図4.14のように直線になり、波形RAM上の波形を変えることなく読み出すことができます。
 アドレスポインタは見かけ上は直線ですが、実際には1Fsサイクル毎に計算を行なうので、図4.15のように階段状の軌跡を描きます。この段差が、PGの内部生成値になります。

図4.15 アドレスポインタ出力拡大図

 周波数を上げた場合にはPGの生成値が増加するので、PG出力およびアドレスポインタの出力値(関数)は傾きが急になります。
 また逆に、周波数を下げた場合にはPGの生成値が減少するので、PG出力値およびアドレスポインタの出力値は図4.16のように傾きが緩やかになります。

図4.16 周波数アドレスポインタ出力値

 FM音声合成を行う時には、短い周期の波形をループして使用します。従って、アドレスポインタの出力値(関数)は、図4.17のようになります。

図4.17 FM音声合成実行時のアドレスポインタ出力値(1)

図4.17 FM音声合成実行時のアドレスポインタ出力値(1)

 aのアドレスに、スタートアドレスを設定し、ループスタートアドレスの値を"0000H"に設定してしておき、波形読み出しアドレスと、波形ループ開始アドレスを同じアドレスに設定します。 更にbのアドレスが波形ループ終了アドレスとなるようにループエンドアドレスを設定すると、図4.17のような波形が得られます。

図4.18 FM音声合成実行時のアドレスポインタ出力値(2)

図4.18 FM音声合成実行時のアドレスポインタ出力値(2)

 図4.18のようにアドレスポインタの出力値を線形にした場合(Aの波形)は、RAMの波形どおりに出力します(1の波形)。しかし、非線形関数(Bの波形)になると波形の読み出し方が変わり、2の波形を出力します。 このように波形が変形すると、音色が変わります。
 この位相値を時間的に変動させることで波形を歪ませることを応用したものが、FM音声合成方式です。FM音声合成方式はアドレスポインタ出力値(位相値)を非線形にする方法として、実際には他の(場合によっては自) スロットの出力値を加算する方法をとっています。今までは、ノーマルモードを例にとって説明してきましたが、その他にも"LPCTL"レジスタの変更により、リバースループ、オルタネーティブループの設定が可能です。 "LPCTL"レジスタにより指定できるループデータは図4.19、図4.20、図4.21のようになります。

図4.19 ノーマルループ

図4.20 リバースループ

図4.21 オルタネーティブループ

 ノーマルループ、リバースループは、"LSA","LEA"に対応するデータが同じあることを前提としているため、"LSA"のデータを"LEA"にコピーしてループデータを作成してください。 オルタネーティブループの設定値は、必ず"LSA"<"LEA"となるように設定してください(全てのループにおいて、"LSA">"LEA"にした場合の動作は保証できません)。また、ループスタートポイントとループエンドポイントに重複してデータを置くことによって、 オルタネーティブループの場合のピッチを他のループモードのピッチと一致させることができます。全ての波形のループモードをオルタネーティブループに限定した場合"LSA","LEA"に対応するデータは、同じ値である必要はありません。

 実際のFM音声合成の実現方法をブロック図で表すと、図4.22のようになります。

図4.22 FM音源構成図

 以下に、FM音源構成図の各ブロックについて、説明します。

SOUND STACK(サウンドスタック)
 各スロットの出力を格納します。SCSPのスロットは、2つのスロットの出力値(サウンドスタック内データ)を入力することができます。

平均化演算部
 各スロットにはXおよびYの2つの変調入力があります。この2つの入力を1つにまとめるために、加算を行なう必要があります。加算結果をオーバフローさせないようにするためには、2つの入力を1/2倍してから加算する方法があります。
SCSPではこの方法を取り入れることにより、2本の入力データを1本の出力データに変換しています。
入力データをXDおよびYD、出力データをZDとすると、次の式で表すことができます。

平均化演算部の式
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃                    YD     XD  ┃ ┃                    │      │   ┃ ┃       XD + YD     ┌┴──────┴┐  ┃ ┃ ZD = ─────────    │ 平均化演算部 │  ┃ ┃          2        └────┬───┘  ┃ ┃                        │      ┃ ┃                        ZD     ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

 これは、平均値を求める式と同様であることから、この演算ブロックを平均化演算部と呼んでいます。

MDL[モジュレーションレベル(変化量)]
 外部スロット入力によるFMのかかり具合(度合い)を調整するために用います。

位相加算器
 PGで生成される位相値と、平均化演算部を経てMDL演算によって生成された位相値を加(減)算します。また、加算または減算の実行判断は、ループモードとループ状態によって決まります。

レベル乗算部
 波形メモリから読み出された波形と、ALFO、TL(Total Level)、EGによって生成されるレベル係数を乗算します。更に、実際の波形出力レベル調整を行ないます。

波形RAM
 サウンド用RAMです。

波形アドレスポインタ
 各スロットに設定されたSA(スタートアドレス)値と、位相加算器から出力される波形位相値を加算または減算して、実際の波形メモリアドレスを生成するブロックです。

波形データバッファ
 波形メモリから読み出された波形を、一時的に保存しておくためのメモリです。

PG(Phase Generator)
 発音周波数の波形の読み出し速度を管理します。(実際は、波形の読み飛ばしを行なっています。)

EG(Envelope Generator)
 各レイトやレベルの設定に従って、値の時間的な変化(エンベロープカーブ)を作り出すブロックです。ここで生成された値は、レベル演算部に送られた後に波形データと乗算されるので、波形の出力レベルが時間的に変化することになります。


戻る進む
HARDWARE ManualSCSPユーザーズマニュアル
Copyright SEGA ENTERPRISES, LTD., 1997