- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{include unfinished_page}}
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[4章 アプリケーションの開発]] ,{BSIZE:0|RIGHT}[[A R800 インストラクション表]] →
!!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システムを初期化します。
,書式
CALL MUSIC[([<モード>],[,[0] [,<PLAY文第1文字列へのチャンネル数> [,<PLAY文第2文字列へのチャンネル数> [,・・・[,<PLAY文第1文字列へのチャンネル数>]]]]]]]]]])]
,解説
内蔵FM音源LSIの初期化、FM音源のチャンネルをどのように使用するかの指定、MIDIインターフェイスの初期化を行います。CALL MUSIC文により初期化するまでは、拡張BASICステートメントを使うことはできません。
*<モード>
指定するのは0か1で、以下のような意味があります。
,指定,意味
,0 ,リズム音を使用しない
,1 ,リズム音を使用する
*チャンネル数
それぞれのモードで、仕様できるチャンネル数は次の通りです。
それぞれのモードで、使用できるチャンネル数は次の通りです。
,モード,リズム,最大チャンネル数
,0 ,無し ,9
,1 ,有り ,内蔵FM(6音+1リズム){{br}}MIDI(8音+1リズム)
モード1では、MIDIを使うときは使用できるチャンネル数が、8チャンネルまで増えました。
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ノート番号を設定します。
,書式
CALL MDR(<BのMIDIノート番号>,<SのMIDIノート番号>,<MのMIDIノート番号>,<CのMIDIノート番号>,<HのMIDIノート番号>)
,解説
リズム音用のMMLで使用するB、S、M、C、Hコマンドに割り当てるMIDIノート番号を指定します。
MIDI音源の多くは、1つのチャンネルの各ノートにリズム音を割り当てる機能(リズム専用トラック)を持っています。PLAY文の各文字列は、1つのチャンネルにしか対応していません。同時に複数音を発音するリズム音の場合は、このリズム専用トラックを使用するようにして下さい。
このリズム音の割り当ては、各MIDI機器によって異なります。お手持ちのMIDI機器のマニュアルを参考に割り当てて下さい。
パラメータは0〜127を指定します。省略はできません。初期値はすべて0に設定されています。
,文例
CALL MDR(35,38,45,49,42)
::PLAY
,機能
音楽をMMLにしたがって演奏します。
,書式
PLAY [#<モード>,]<文字列1>[,<文字列2>[,<文字列3> ...[,<文字列13>]
,解説
PLAY文は音楽を演奏するもので、内蔵FM音源(9音)+PSG音源(3音)、またはMIDI機器(9音)+PSG音源(3音)の、最大12音まで同時発音が可能です。<文字列>に書かれた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",コントロールチェンジを出力します。{{br}}mはコントロール番号、nはコントロール番号に対する値です。 ,0≦n≦127{{br}}0≦n≦127
,@Sn ,MIDIリアルタイムクロックに関する命令です。{{br}}n=0 FCH(STOP)を出力し、クロックを停止する{{br}}n=1 FAH(START)を出力し、クロック出力を開始する{{br}}n=2 FBH(CONTINUE)を出力し、クロック出力を開始する{{br}}クロックのテンポは、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{{br}}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{{sup *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{{sup *1}},○ ,○
, ,S{{sup *1}},○ ,○
, ,M{{sup *1}},○ ,○
, ,C{{sup *1}},○ ,○
, ,H{{sup *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インプリメンテーションチャート
,ファンクション{COLS:2},,送信,備考
,ベーシック{{br}}チャンネル,電源ON時{{br}}設定可能範囲,1 - 9{{br}}1 - 16,{{br}}@Hn
,モード,電源ON時{{br}}メッセージ{{br}}代用,3{{br}}×{{br}}*********,
,ノート{{br}}ナンバー,{{br}}音域,○24 - 119{{br}}*********,O1C - O8B{{br}}
,ベロシティ, ノート・オン{{br}}{{br}}ノート・オフ,"○9nH , v=8 × n {{br}}{{br}}× 9nH,v=0","Vn,@An(n=0 - 15){{br}}@Anはリズム音のみ{{br}}"
,アフター{{br}}タッチ,キー別{{br}}チャンネル別,×{{br}}×,
,ピッチ・ベンド,,×,
,コントロール{{br}}チェンジ,,○(7){{br}}○(0 - 127),"@Vn{{br}}@Cm,n"
,プログラム{{br}}チェンジ,{{br}}設定可能範囲,○{{br}}*********,@n{{br}}
,エクスクルーシブ,,×,
,コモン,ソング・ポジション{{br}}ソング・セレクト{{br}}チューン,×{{br}}×{{br}}×,
,リアル{{br}}タイム,クロック{{br}}コマンド,○{{br}}○,{{br}}@Sn
,その他,ローカルON/OFF{{br}}オール・ノート・オフ{{br}}アクティブ・センシング{{br}}リセット,×{{br}}○{{br}}×{{br}}×,{{br}}CTRL+STOP
,備考{COLS:2},,Zn : 1バイトデータの送信{COLS:2},
モード1:オムニ・オン、ポリ モード2:オムニ・オン、モノ ○:あり
モード3:オムニ・オフ、ポリ モード2:オムニ・オフ、モノ ○:なし
*********は送信では意味を持たない
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[4章 アプリケーションの開発]] ,{BSIZE:0|RIGHT}[[A R800 インストラクション表]] →