YM2413FM音源の使い方

「YM2413FM音源の使い方」の編集履歴(バックアップ)一覧はこちら

YM2413FM音源の使い方」(2012/05/03 (木) 23:47:33) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

YM2413はFM音源LSIで、MUSIC規格に採用されているLSI。 この音源LSIはモノラルFM音源で、同時発音数が9チャンネル、または 6+5リズムを持つ。 LSIのROMに音色データが予め設定されており、難しいFM音源の設定を必要としない。 また独自の音色を一つだけ設定することができる。 LSIは書き込み専用でレジスタの読み込みやステータス状態を知ることは出来ない。 有効アクセス時間があるので、連続データ書き込み時はウエイトを採りタイミングに注意する必要がある。 YM2413はI/Oポートの0x7C,0x7Dに接続されている。 このFM音源チップは0x7Cに音源LSI内部レジスタの設定、0x7Dにデータの 書き込みを行なう。 FM音源LSIのレジスタ内容は書き込み専用でレジスタの参照は出来ない。 レジスタは38個あり、それぞれの内容はレジスタ番号をI/Oポートの0x7Cにセットし、 I/Oポートの0x7Dへデータ書き込みを行なう。 YM2413は同時発音数が9チャンネルあるので、それぞれの発音チャンネル用に 設定可能なレジスタデータセットを内部に持っている。 音を制御する場合は、これらのレジスタを制御する。 FM音源の音色設定も可能だが、しかしその仕組みは非常に複雑なので、FM音源の仕組みを 理解している事と、チャンネルについて理解している必要がある。 単純に音を発音する場合は以下の手順に従ってコントロールすればよい。 +音階をF-Numberで与える。音階はチャンネルごとに指定が可能。音階モードの場合は、チャンネルは9チャンネルある。 +音量と音色を設定する。 +音を発音する場合は鍵盤キーが押された事を示すON/OFFレジスタを設定する。この瞬間にFM音源は音を発生する。このキーON/OFFについてもチャンネルごとに指定が可能。 ビルトインのFM音源の音色を使う場合は、独自に作る音色設定関連のレジスタは 特に必須ではない。 予めLSIに搭載されたビルトインのFM音源の音色は、それぞれのチャンネル ごとに指定可能。 音源の音量を設定するボリュームもチャンネルごとに設定が可能である。 I/Oポート0x7Cでレジスタを一回設定したらあとは連続してデータ書き込み(0x7D)が可能。 YM2413はレジスタの書き込みのみで、ステータスやレジスタセットの 読み込みはできない。 キーON/OFFは鍵盤のキーのON/OFFである。このデータはオート インクリメントされない。 キーが放されたときはゼロを書き込む必要がある。 このタイミングがFM音源のエンベロープの変化に反映される。 F-Numberは音階である。正確なオクターブのパラメータは計算によって 求める事ができる。 -C言語のサンプル。 音階のドの音、(O4 C)を発音する場合は、チャンネル0にF-Numberとして172を指定する。 これは262Hzの音を指定した事に等しい。 またレジスタアクセス時は適切にウエイトタイミングを必要とする。 extern unsigned char inp(unsigned char); extern outp(unsigned char,unsigned char); void ym2413(unsigned char reg, unsigned char parm); void main(void){ volatile long i; //F-Number ym2413(0x10,172); //Voice & Vol ym2413(0x30,48); //Key-on ym2413(0x20,24); //wait for(i=0; i<100000; i++); //Key-off ym2413(0x20,0); } void ym2413(unsigned char reg, unsigned char parm){ volatile int i; outp(0x7C,reg); for(i=0; i<5000; i++); outp(0x7D,parm); for(i=0; i<5000; i++); } 上のC言語と同等のBASICコード例を示す。 10 'F-Number 20 out &h7c,&h10 30 out &h7d,172(86) 40 'voice number & volume 50 out &h7c,&h30 60 out &h7d,48 70 'key-on 80 out &h7c,&h20 90 out &h7d,24 100 for i=0 to 1000:next i 110 'key-off 120 out &h7c,&h20 130 out &h7d,0

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。