Programmable Sound Generator
HOME | 自作MSXゲーム | ものすごいヤツ | 百戦危うからず | MSXリンク | 正義の願い |
PSGを探る |
PSGについて書いてみました。PSG=“Pretty Sexy Girls” の略語では無いんですよ。図はテキトーです。私は物理とか楽典とか分かりませんので、ウソ800かもしれません。 音とは何か? “音”とは、何らかの原因で起きた “気体分子の密度の変化で起きる波(弾性波)” を生き物が特定の感覚器官で感じたものです。なので(昔の特撮やアニメ以外の)真空に近い宇宙空間では音はしないハズです。また、扇風機を回して前に頭を持って行き耳を向けると 「バババ・・・」 という様な風の音がしますが、手を持っていっても音はしません。手で感じる場合は “風” で、耳で感じたときに “音” となります。通常 “音” と言う場合は、人の耳で聞こえる範囲の空気の波動を指します。ちなみに、水は空気の4倍、固体はそれ以上に振動 (もしそれを耳で感じられれば “音” ) を伝えるそうです。 大気中で高速に物を振動させると、その振動に応じて一時的に空気の密度が濃い部分と薄い部分(疎密差)が出来て、空気の波=音が発生します。特に指向性を持たせない限り、音は全方向に球状に広がります。右図は音の作る球の断面図と、音源からの一定距離の空気密度の高い低いを、時間を横軸にとってグラフにしたものです。ガラスの水槽に起した波を横から見たような “波形” グラフとなります。
シンセサイザの原理 音の高さ(音高)は波形の周波数、音の大きさ(音量)は波形の振幅なので、電気的に作った波形の周波数や振幅を任意に変えてから空気の波に変換すれば、原理的には自由に好きな高さと大きさの音を発声できるわけです。また、その波形をある音の波形そっくりに似せれば、その音色が再現できるわけです。そういう考えに基づいて作られた機械がシンセサイザです。 VCO(DCO、OSC)・・・電圧制御型オシレータ。元にする音の高さ(レンジ )と波形を決める VCF(DCF) ・・・電圧制御フィルタ。元の波形に倍音を加減したりフ ィルターをかける VCA(DCA) ・・・電圧制御型アンプ。音量とその時間による変化をつ ける NG ・・・ノイズジェネレータ。特定の周波数を保たない信号 (擬似乱数の周波数信号)を出す LFO ・・・低周波オシレータ。VCOより低い周波数を発生し トレモロやビブラートに使う EG ・・・エンベロープジェネレータ。VCAをコントロール して、パターンどおりに音量を変える
それだけではまだ、実楽器に似ない事もあるので、さらに波形を加工して音に効果をかけられるようにもしました。 効果の色々 ビブラート ・・・周期的に音の高さを少し変え(周波数をずらし)て戻す事を繰り 返し、音を震わせる トレモロ ・・・周期的に音の大きさを少し変えて戻す事を繰り返し、音をうねら せる ポルタメント・・・ある音と別の高さの音の間を(半音より)細かく補完して、滑ら かに繋ぐ ディレイ ・・・少し遅れて、同じ音を小さくして出す。山彦。エコー リバーブ ・・・ホールや風呂場のような反響をつける。残響。ある音が、壁・床 ・天井などに反射して60dB減衰するまでを残響時間と言い、会議 、演説、映画、歌物、管弦楽の順に0〜2秒程度が最適時間 コーラス ・・・少しだけずらした音をだして、同じ音を複数で演奏しているよう に見せる。和声のコーラスではなくユニゾン?
注1.シンセサイザが考えだされた当時は、発生させたアナログ信号を、人が摘まみを 回して調節して音を作る方法だった為、4つ位にしか分けられなかった。現在の 楽器音はPCM(実楽器音をデジタル録音したもの)なので、この4つの役割は 似せるというより音の加工用に変わったのかも?? PSGは超簡易シンセサイザ もともとビデオゲームに使用する事を意識して作られた低価格音源がPSG(プログラマブル・サウンド・ジェネレータ)です。80年代には、最もポピュラーな音源でした。最大3つのトーン(ピーという感じの音)に1つのノイズ(ザーという音)を混ぜて同時に発声できます。3つの音はICの別のピンで出力されるので、チャンネル毎に音を左右のスピーカーに振り分けることも出来ます(注2)。幾つか同等のチップがありますが、MSXではAY-3-8910(相当品)というものです。チップ自体や呼び方も違うPC-8801(mkIISR以降)でも、レジスタ構成は同じです。 PSGレジスタ
┌──┬─────────┬─┬─┬─┬─┬─┬─┬─┬─┬────┐
│ │ 機能 │7│6│5│4│3│2│1│0│ 説明 │
├──┼─────────┼─┴─┴─┴─┴─┴─┴─┴─┼────┤
│ 0│チャンネルA周波数│ 周波数 下位8ビット │ │
├──┤ ├───────┬───────┤ │
│ 1│ │−−−−−−−│ 上位4ビット│ │
├──┼─────────┼───────┴───────┤ │
│ 2│チャンネルB周波数│ 周波数 下位8ビット │ │
├──┤ ├───────┬───────┤ │
│ 3│ │−−−−−−−│ 上位4ビット│ │
├──┼─────────┼───────┴───────┤ │
│ 4│チャンネルC周波数│ 周波数 下位8ビット │ │
├──┤ ├───────┬───────┤ │
│ 5│ │−−−−−−−│ 上位4ビット│ │
├──┼─────────┼─────┬─┴───────┼────┤
│ 6│ノイズの平均周波数│−−−−−│ 5ビット │ │
├──┼─────────┼───┬─┴───┬─────┼────┤
│ 7│ミキサー&ポート │B│A│C│B│A│C│B│A│ *1 │
├──┼─────────┼───┴─┬─┬─┴─────┼────┤
│ 8│チャンネルAの音量│−−−−−│M│ 4ビット │ │
├──┼─────────┼─────┼─┼───────┤ │
│ 9│チャンネルBの音量│−−−−−│M│ 4ビット │ *2 │
├──┼─────────┼─────┼─┼───────┤ │
│10│チャンネルCの音量│−−−−−│M│ 4ビット │ │
├──┼─────────┼─────┴─┴───────┼────┤
│11│エンベロープ周期 │ 周波数 下位8ビット │ │
├──┤ ├───────────────┤ │
│12│ │ 周波数 上位8ビット │ │
├──┼─────────┼───────┬─┬─┬─┬─┼────┤
│13│エンベロープ波形 │−−−−−−−│C│T│L│H│ *3 │
├──┼─────────┼───────┴─┴─┴─┴─┼────┤
│14│ポートA │ │ │
├──┼─────────┼───────────────┤ *4 │
│15│ポートB │ │ │
└──┴─────────┴───────────────┴────┘
*1.ビット0〜2はトーンのオンオフ、ビット3〜5はノイズのオンオフ
(全て0でオン、1でオフ)。ビット6と7はポートの入出力選択
*2.M=MODE・・・0のとき、下位4ビットで音量調整。1のとき
エンベロープ使用、音量調整無効
*3.各ビットの意味(それぞれ1の時ON、0の時OFF)
C=CONT・・・下位2ビットと繰り返しの有効無効
(Continue)
T=ATT ・・・1回目の山が反転する=開始0終わり15になる
(Attack)
L=ALT ・・・2回目は1回目の状態を反転する
(Alternate)
H=HOLD・・・2回目を飛ばして2回目の終わりの音を保つ
(Hold)
これをビット3から順に見ていく。例えば1011の場合。
下位2ビット有効、1回目の立ち上がり15、終わり0
2回目の山は反転するが、飛ばして終わりの15を保つ、で
1 2
U山U山U
│\│ ̄ ̄ ̄ ̄ ̄ ̄
という形になる
全エンベロープ(ビット組み合わせ)パターン8種類
8 |\|\|\|\|\|\ 1000
0〜3、 9 |\ 0000 0001 0010 0111 1001
10 |\/\/\/\/\/\ 1010
11 |\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1011
12 /|/|/|/|/|/| 1100
13 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1101
14 /\/\/\/\/\/\ 1110
4〜7、15 /| 0100 0101 0110 0111 1111
*4.汎用に使える8ビットパラレルポート。レジスタ7のビット6と7で
ポートAとBそれぞれの入力か出力かを選ぶ。これが無いチップも有る
参考:PSGレジスタに入れる値
そのPT3の実質標準の作曲用ソフトがWindows上で動く『Vortex Tracker II』です。残念ながら日本語Windowsではエディット部のフォントが等幅にならないので、少々使い辛い所があります。慣れれば最強のPSG作曲(トラッカー)ソフトらしいのですが。 注2.東芝のMSXでは音を左右に振り分けていたが、当時は大多数がモノラルテレビ なので“ステレオ→モノラル変換”というコードを使わなければ片方の音が聞こ えなかった 注3.『マジンナースB』では面倒くさいので、内蔵のエンベロープを使った。だから BGMは、かなりヘロヘロかもしれない(と自分の作曲能力を棚に上げる)。ま、 BGM以外も全面的にヘロヘロだけど 案外おしゃべりPSG MSXでPCM音(Windowsで言うところのWAV)を再生する方法は、私の知る限りMSX-AUDIOの“ADPCM”やTurboR内蔵の“8bitPCM”というハード系の2通りと、1ビットサウンドポートを使う“DPCM”やPSGを使う“4bitPCM”とFM音源を使う“4bitPCM”というソフト系3通りの、計5通りが有ります。他に欧州の「MOONSOUND」という音源カートリッジで16bitサンプリングが出来るらしいです(?)。エミールソフトの「とーくまん」というカートリッジでもPCMの録音再生が出来るそうです。コナミのSCCチップでも4bitPCMが出来ましたっけ?? PSGを使うPCMはとても簡単で、PSGレジスタ0と1を0にしてから、レジスタ8に4ビットPCMデータを(ウェイトを入れて速度を調整しつつ)送るだけです。2011年の今なら、そのPCMデータを作るのも、Windowsで8bitモノラル非圧縮WAVの素材を作り、ヘッダ部を取ってから4ビットPCMデータに変換(要するに1バイトずつ16分の1して、空いた上位4ビットにも空きが無いようにデータを詰めるように(注4))すればいいだけです。再生プログラムをマシン語で素直に作れば、MSX1でも22050Hz辺りまで十分に再生できます。 MSX上でPSGのPCM音声を使った市販ソフト中、1番有名なのがコンパイルの『魔導物語1-2-3』で、中々良くしゃべる上にゲームも面白いです。ナムコの『ファミリースタジアム』も何だかんだしゃべります(2+以上だとスムーズにスクロールしますし)。天才Daniel Vik氏のMSX1メガデモ『WAVES』では、PSGのPCMで延々とBGMを鳴らしつつアニメします。 注4.PSGにデータを送る際は1バイトずつなので、詰めたデータを元の08Hとか 0AHとか上位4ビットが0の1バイトデータに戻してから送ること。面倒だけ ど、こうしないとデータ容量が倍になって、ただでさえ少ないメモリが超無駄に 使われることになる このページは、1024×768画面に合わせて作りました。ちゃんと見えなかったらスミマセン |