X68000エミュレータでWindowsのソフトウエアMIDIを使ってみる
使うもの
② VirtualMIDISynth MIDIドライバ
と
SGM-V2.0.1.sf2 サウンドフォント
導入については↓こちらがわかりやすいです
③ ZMUSIC ver2 X68000用音源ドライバ+BASIC&C言語用ライブラリ
XM6typeGの使い方から書いていると大変なことになるので、「動いている」という前提で…
まずZMISICを常駐させます
ZMUSIC[リターン]でOKです
X-BASICで使うのでBASIC.CNFファイルを編集
この辺はX68000を使ったことがある方は大丈夫かと思います。
このへんはX-BASICのマニュアルとZ-MUSICのマニュアルの方がわかりやいと思います。
XM6rypeGの「ツール」→「MIDI」でMIDIの設定をします。
よくわかっていませんが設定はこんな感じ
VirtualMIDISynthがセットできればOKかと…
リセットコマンドは「GSでいいんじゃないかなぁ」という根拠のない設定
X-BASICを起動します。
ZMUSICが使用可能かどうかの確認は
ダイレクトモードから
m_init()
としてエラーが出ないことで確認できると思います
さっそくですが
単純に音を出すリストはこんな感じです
音を出すまでがとりあず大変だと思うので、まずはそこまでできるように…
10 str zz
20 m_init()
30 m_count(192)
40 m_alloc(1,10000)
50 m_ch("fm")
60 m_assign(10,1)
80 m_trk(1,"@1 v15 o4 cde")
90 m_play()
100 input zz
プログラムは
20 音楽関係のデータを初期化して
40 演奏トラックを確保して
50 演奏チャンネルの並びを指定して
60 40で確保した演奏トラックをMIDIのチャンネル0番に指定して
80 演奏トラックに演奏データをMMLで記述して
90 演奏させる
という流れです
音色が色々変えられます
どんな音色があるかは
VirtualMIDISynth Configurator
で確認できます
サウンドフォントをダブルクリックすると音色リリストが表示されます
コピペできるのでエディターなどに書き写してしまうと楽です
データは
バンク:プリセット = 音色名
という順でならんでいます
80 m_trk(1,"@1 v15 o4 cde")
上のプログラムの80行
@1
がプリセットの変更です
注意としては、ZMISICのMMLでは表のプリセット値に+1した値を記述します
バンク切り替えは
80 m_trk(1,"i3 @1 v15 o4 cde")
プリセット変更の前で ↑
i(バンク)
で行います、
バンク切り替え、プリセット変更は両方書かないと有効にならないような感じなので
両方一緒にしておいたほうが無難だと思います
i(バンク) @(プリセット番号+1)
という感じですね
例えばこの表で
2:50 = StackStrings
この音を使いたい場合は
i2 @51 v15 o4 ceg
という感じになります
次はMMLを使わず、MIDIに直接データを送って音を出す方法です
プログラムの好きなタイミングで音が出せますので効果音などの用途ならこういうやりかただと思います
10 m_init()
20 m_ch("fm")
30 /*
40 m_out(&HB0,0,3) :/* SET BANK
50 m_out(&HC0,126) :/* SET PRESET
60 m_out(&H90,40,127) :/* SOIND ON
70 for i=0 to 10000:next
80 m_out(&H80,40,127) :/* SOUND OFF
10 音源を初期化して
20 演奏チャンネルの並びを指定(今回の処理では意味はないです)
40 バンクを切り替え
Bn 00 xx
n は MIDIのチャネル 0~15
zz は バンク
50 プリセットを指定
Cn yy
n は MIDIのチャンネル
yy はプリセット番号(今回は+1しなくてよい)
60 音を出す
9n zz vv
n は MIDIのチャンネル
zz は音階の番号(ノートナンバーと呼ぶ模様)
vv は音量(ベロシティと呼称) 0~127で127が音量が大きい
70 ウエイト
80 音を消す
8n zz vv
n は MIDIのチャンネル
zz は音階の番号
vv は音量←この数値は特に意味がない模様
データをMIDIに直接送るような操作は「MIDIメッセージ」と呼ばれている模様
16進数のデータを順に送るあたりアセンブラっぽいですね
マイコン少年的には、こういうやりかたりほうが理解しやすかったりします
MIDIメッセージについては詳しく解説してくれるページがたくさんありました
音楽用語がわからなくて、自分は音を出すところまでしかできませんでしたが…