※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
5.1 拡張BASICの概要
MSX-MIDIには、各機能を簡単に使用できるように、MSX-MIDI拡張BASICが用意されています。MSX-MIDI拡張BASICは、CALLMUSICのように拡張ステートメントの形式になっています。CALLは、_(アンダーバー)で代用できます。
MSX-MIDI拡張BASICでは、MIDIインターフェイスを通じて外部のMIDI機器を使用することができます。そのため、コマンドが追加・変更されました。また、MMLもMIDIに対応するため拡張・変更されました。
5.2 拡張BASICの解説
- CALL MUSIC
機能 |
MSX-MIDIシステムを初期化します。
書式 |
解説 |
- <モード>
指定するのは0か1で、以下のような意味があります。
指定 | 意味 |
0 | リズム音を使用しない |
1 | リズム音を使用する |
- チャンネル数
それぞれのモードで、使用できるチャンネル数は次の通りです。
モード | リズム | 最大チャンネル数 |
0 | 無し | 9 |
1 | 有り | 内蔵FM(6音+1リズム) MIDI(8音+1リズム) |
PLAY文の各文字列へのチャンネル数は、内蔵FM音源が使用し、その文字列が幾つのOPLLのチャンネルを占有するか指定します。0は指定できません。
OPLLのチャンネルは9までしかありません。また、モード1ではリズム音用に3チャンネル使います。したがって、モード0ではPLAY文の各文字列へのチャンネル数の合計は9以下、モード1では6以下でなければなりません。
MIDIの場合は、各文字列に対してMIDIチャンネルを1つ割り当てます。2以上の値を指定しても意味は変わりません。
FM音源のチャンネルは、チャンネルの小さい方から割り当てます。MIDIチャンネルは第1文字列から順に、1、2、3・・・と設定されます。これを変更するには、MMLの@Hnコマンドを使用します。
パラメータを1つ以上指定した場合、他のパラメータの省略時の値は0になります。
PLAY文の各文字列へのチャンネル数は、0に設定したり、省略したりすることはできませんが、一部例外があります。次の例を参照して下さい。
CALL MUSIC(0, 0, 0, 5, 0) ↑ ↑ 0を設定してはいけない(Illegal function callになる)
CALL MUSIC(0, 0, 1, , 2) ↑ 省略してはいけない(Syntax errorになる)
CALL MUSIC(1, 0, 1, 1, 1, 1, 1, 1, 0, 0) ↑ ↑ モード1の第7文字列、第8文字列に対してのみ0を設定できる。この時、PLAY文では次のようになる。 - PLAY #1の場合 第1文字列〜第8文字列はMIDIに割り当てる。 第9文字列はMIDIのリズム音に割り当てる。 第10文字列〜第12文字列はPSGに割り当てる。 - PLAY #2の場合 第1文字列〜第6文字列はMIDIに割り当てる。 第7文字列、第8文字列は無視される。 第9文字列は内蔵FM音源のリズム音に割り当てる。 第10文字列〜第12文字列はPSGに割り当てる。
パラメータ無しで使われたときは、
CALL MUSIC(1,0,1,1,1)
と同じになります。
CALL MUSIC文を実行すると、システムの割り込みのフックがMSX-MIDIのシステムソフトウェアにリンクされるので、割り込み処理ルーチンのオーバーヘッドが増え、システムのスループットが低下します。また、CALL MUSIC文はワークエリア確保のために、内部でCLEAR文に相当することを行っているので、HIMEM(CLEAR文の第2パラメータに相当します)が807バイト小さく再設定され、変数はすべてクリアされます。
文例 |
CALL MUSIC
デフォルトの設定をする。
CALL MUSIC(0,0,1,1,1,1,1,1,1,1,1)
1チャンネルずつPLAY文の文字列に割り当てる。
- CALL MDR
機能 |
リズム音用MMLで発音されるMIDIノート番号を設定します。
書式 |
解説 |
MIDI音源の多くは、1つのチャンネルの各ノートにリズム音を割り当てる機能(リズム専用トラック)を持っています。PLAY文の各文字列は、1つのチャンネルにしか対応していません。同時に複数音を発音するリズム音の場合は、このリズム専用トラックを使用するようにして下さい。
このリズム音の割り当ては、各MIDI機器によって異なります。お手持ちのMIDI機器のマニュアルを参考に割り当てて下さい。
パラメータは0〜127を指定します。省略はできません。初期値はすべて0に設定されています。
文例 |
CALL MDR(35,38,45,49,42)
- PLAY
機能 |
音楽をMMLにしたがって演奏します。
書式 |
解説 |
他の拡張命令と異なり、CALL文は必要ありません。
<モード>は0〜3までの値をとり、PLAY文の音源や動作モードを次のように設定します。
- 0や省略されたときはPSGのみが音源となり、文字列は最大3つまでとなります。
- 1のとき、MIDI機器、PSG音源を使用できます。
<文字列>との関係ははじめから順に、
<MIDI機器用文字列1>,... <MIDI機器用文字列n>, <MIDI機器リズム音用文字列>, <PSG機器用文字列1>,<PSG機器用文字列2>,<PSG機器用文字列3>
となります。
- 2または3のとき、FM音源、PSG音源を使用できます(2のときと、3のときとでは動作は同じ)。
<文字列>との関係ははじめから順に、
<内蔵FM音源用文字列1>,... <内蔵FM音源用文字列n>, <内蔵FM音源リズム音用文字列>, <PSG機器用文字列1>,<PSG機器用文字列2>,<PSG機器用文字列3>
となります。
nはCALL MUSIC文で設定されたMMLの個数です。CALL MUSICでリズム音を使用しないモードに設定した場合は、リズム音用文字列をカンマ(,)と共に省略しなければいけません。
文例 |
PLAY #1,"CD","EF","GA"
MIDI機器用MMLの仕様
ここでは、MIDI機器用に追加および変更されたMMLを説明します。
表4.5 MIDI機器用に追加されたMML
文字 | 意味 | 値の範囲 |
@Hn | 使用するMIDIチャンネル番号を設定します。 | 1≦n≦16 |
@Cm,n | コントロールチェンジを出力します。 mはコントロール番号、nはコントロール番号に対する値です。 | 0≦n≦127 0≦n≦127 |
@Sn | MIDIリアルタイムクロックに関する命令です。 n=0 FCH(STOP)を出力し、クロックを停止する n=1 FAH(START)を出力し、クロック出力を開始する n=2 FBH(CONTINUE)を出力し、クロック出力を開始する クロックのテンポは、PLAY文の第1文字列と同じになります。 |
表4.6 MIDI機器用に変更されたMML
文字 | 意味 | 値の範囲 |
Ln | 長さを設定します。 | 1≦n≦96 |
Rn | 休符を設定します。 | 1≦n≦96 |
@Wn | nで指定した長さだけ状態を継続します。 | 1≦n≦96 |
Vn | MIDI機器に対しては、8倍した値をノートオン・ベロシティーとして出力します。 | 1≦n≦15 |
@Vn | ボリューム(コントロールチェンジ#7)を出力します。 | 1≦n≦127 |
@n | 内蔵FM音源に対しては音色変更を出力しますが、MIDI機器に対してはプログラムチェンジを出力します。 | 0≦n≦63 1≦n≦127 |
Zn | 1バイトMIDIデータを出力します。 | 1≦n≦255 |
リズム用MMLの仕様
ここでは、リズム音用に追加および変更されたMMLを説明します。
表4.7 リズム音用に追加されたMML
文字 | 意味 |
@n | MIDI機器に対してプログラムチェンジを出力します。内蔵FM音源では無視されます。 |
表4.8 リズム用に変更されたMML
文字 | 意味 |
@An | MIDI機器に対しては、Vnと同様にベロシティーを設定します。 |
表4.9 MMLと各音源との対応一覧表
文字 | MIDI | FM | PSG | |
Mn | - | - | ○ | |
Sn | - | - | ○ | |
Vn | ○[0〜15] | ○ | ○ | |
Ln | ○ | ○ | ○ | |
Qn | ○ | ○ | - | |
On | ○ | ○ | ○ | |
< | ○ | ○ | ○ | |
> | ○ | ○ | ○ | |
Tn | ○ | ○ | ○ | |
Nn*1 | ○ | ○ | ○ | |
Rn | ○ | ○ | ○ | |
A〜G | ○ | ○ | ○ | |
+ | ○ | ○ | ○ | |
- | ○ | ○ | ○ | |
# | ○ | ○ | ○ | |
. | ○ | ○ | ○ | |
=x; | ○ | ○ | ○ | |
Xx; | ○ | ○ | ○ | |
& | ○ | ○ | ○ | |
n | ○ | ○ | × | |
@n | ○[0〜127] | ○[0〜63] | - | |
@Vn | ○[0〜127] | ○[0〜127] | - | |
@Wn | ○ | ○ | Rnと同様 | |
★ | @Hn | ○[0〜16] | - | ー |
★ | @Cm, n | ○[0〜127] | - | ー |
Yr,d | - | ○ | ー | |
Zn | ○[0〜255] | - (×) | ー | |
★ | @Sn | ○[0〜2] | - | ー |
*1 nの値はMIDIノートナンバーではありません。従来通りの音階です。 ★ MSX-MIDIで追加された命令です。 × エラーになります。 ー 無視されます。 [ ] パラメータの範囲を示します。 ( ) 旧版(MSX-MUSIC)での対応を示します。
表4.10 リズム音用MML
コマンド | MIDI | FM | |
B*1 | ○ | ○ | |
S*1 | ○ | ○ | |
M*1 | ○ | ○ | |
C*1 | ○ | ○ | |
H*1 | ○ | ○ | |
n | ○ | ○ | |
! | ○ | ○ | |
Vn | ○ | ○ | |
@An | ○ | ○ | |
@Vn | ○[0〜127] | ○ | |
Tn | ○ | ○ | |
Rn | ○ | ○ | |
=x; | ○ | ○ | |
Xx; | ○ | ○ | |
Yr,d | ○ | ○ | |
★ | @Hn | ○[0〜16] | ー |
★ | @Cm,n | ○[0〜127] | ー |
★ | @n | ○[0〜127] | ー (×) |
Zd | ○ | ー (×) |
*1 MIDI機器の場合は、前もって発音されるノート番号をCALLMDRで定義しなければなりません。 ★ MSX-MIDIで追加された命令です。 × エラーになります。 ー 無視されます。 [ ] パラメータの範囲を示します。 ( ) 旧版(MSX-MUSIC)での対応を示します。
5.3 MIDI機器に対して無効なステートメント
以下のステートメントは、MIDI機器に対しては意味を持ちません。
CALL AUDREG CALL PITCH CALL TEMPER CALL TRANSPOSE CALL VOICE
MIDI機器の音色設定はCALL VOICEではできません。MMLの@nを使って設定します。
5.4 MIDIデータフォーマット
MSX-MIDI拡張BASICのMIDIデータフォーマットは以下のようになっています。
5.4.1 送信
1.ノート送信
・ノートオン ステータス 1001nnnn(9nH) n=0〜15 MIDIチャンネル番号 ノートナンバー 0kkkkkkk k=24(C0)〜119(B7) ベロシティ 0vvvvvvv v=8*I I=0〜15 ベロシティ値はVn、@Anで指定された値を8倍にして出力します。 ・ノートオフ ステータス 1001nnnn(9nH) n=0〜15 MIDIチャンネル番号 ノートナンバー 0kkkkkkk k=24(C0)〜119(B7) ベロシティ 00000000 ノートオフ リズム音を複数音同時に発音または発音停止するときは、ランニングステータスで出力します。
2.コントロールチェンジ
・@Vv (ボリューム) ステータス 1011nnnn(BnH) n=0〜15 MIDIチャンネル番号 コントロール番号 00000111 c=7 コントロール値 0vvvvvvv v=0〜127 ・@Vv (ボリューム) ステータス 1011nnnn(BnH) n=0〜15 MIDIチャンネル番号 コントロール番号 0ccccccc c=0〜127 コントロール値 0vvvvvvv v=0〜127
3.プログラムチェンジ
・@p (プログラムチェンジ) ステータス 1100nnnn(CnH) n=0〜15 MIDIチャンネル番号 プログラム番号 0ppppppp p=0〜127
4.システムリアルタイムメッセージ
・タイミングクロック ステータス 11111000(F8H) タイミングクロックは、@S1または@S2でクロックが開始されていて、かつPLAY文が実行されているときにのみ送信されます。PLAY文を終了すると、クロックは停止します。この時、ストップFCHは出力されません。 ・@S1 スタート ステータス 11111010(FAH) クロックの出力を開始します。 ・@S2 コンティニュー ステータス 11111011(FBH) クロックの出力を開始します。 ・@S0 ストップ ステータス 11111100(FCH) クロックの出力を停止します。
5.4.2 受信
拡張BASICでは受信は行いません。
表4.11 MSX-MIDI 拡張BASIC MML MIDIインプリメンテーションチャート
ファンクション | 送信 | 備考 | |
ベーシック チャンネル | 電源ON時 設定可能範囲 | 1 - 9 1 - 16 | @Hn |
モード | 電源ON時 メッセージ 代用 | 3 × ********* | |
ノート ナンバー | 音域 | ○24 - 119 ********* | O1C - O8B |
ベロシティ | ノート・オン ノート・オフ | ○9nH , v=8 × n × 9nH,v=0 | Vn,@An(n=0 - 15) @Anはリズム音のみ |
アフター タッチ | キー別 チャンネル別 | × × | |
ピッチ・ベンド | × | ||
コントロール チェンジ | ○(7) ○(0 - 127) | @Vn @Cm,n | |
プログラム チェンジ | 設定可能範囲 | ○ ********* | @n |
エクスクルーシブ | × | ||
コモン | ソング・ポジション ソング・セレクト チューン | × × × | |
リアル タイム | クロック コマンド | ○ ○ | @Sn |
その他 | ローカルON/OFF オール・ノート・オフ アクティブ・センシング リセット | × ○ × × | CTRL+STOP |
備考 | Zn : 1バイトデータの送信 |
モード1:オムニ・オン、ポリ モード2:オムニ・オン、モノ ○:あり モード3:オムニ・オフ、ポリ モード2:オムニ・オフ、モノ ○:なし *********は送信では意味を持たない