* MDXデータの作成方法 [#y5ab0245]
今となっては失われつつあるMDXデータの作成方法を記載します。((筆者はX68000リアルタイム世代では無いので憶測で書いている部分があります。ご指摘はstella.cadente.xあっとgmail.comまでお願い致します。))~
#freeze
* MDXデータの作成方法 [#cd6acfa9]
このページではMXDRVのMDXデータを作成する為に必要最低限の手順を説明します。~
ここで紹介するソフトの使い方はそれぞれのマニュアルを確認して下さい。~
また紹介するソフトウェアの作者様は敬称略させて頂きます。~

#contents

* MDXとは [#vde7e5bd]
MDXとはかつてSHARP X68000シリーズ用のFM音源ドライバとして栄華を誇った''MXDRV''のデータ形式です。((MXDRVは膨大な曲数を誇っていた為、本家X68000の他にもPC-98x1、PC-88VA、MSXなどへドライバが移植されました。))~
GIMICのお試しファームウェアにはMXDRV互換ドライバ((MXDRV2.06+16相当?))が組み込まれている為、S98ログを採取せずとも直接MDXデータを再生することが可能です。~
** MDXとは [#q41f09bc]
MDXとはSHARP X68000シリーズ用のFM音源ドライバMXDRVの曲データ形式です。~

このページではファームウェアに内蔵されたMXDRV互換ドライバを利用してOPMモジュールで楽曲を作成する為の解説を行います。~
> MXDRV 作者:milk, K.MAEKAWA, Yatsube, Missy.M

* コンパイラ [#u5a7cc9d]
MXDRVでの楽曲作成はMMLという言語(詳細は後述します)を用いて行いますが、テキストファイルに演奏情報を記載しコンパイラでMDXデータ形式へと変換を行う必要があります。~
現存するコンパイラにはnote.xとmxc((こうのたけし氏のPC-98x1版を利用します。本家X68000用のmxcは現存していないようです。))の2種類があります。note.xはmxcの上位互換コンパイラなので通常はnote.xを使えば問題無いはずです。~
GIMICのスタンドアロンモードにはMXDRV再生エンジン((MXDRV v2.06+17相当))が組み込まれている為、MDXデータを直接再生することが可能です。~
また2014/07/25以降のファームウェアからはADPCMパートの演奏にも対応しました(2代目マザーボードPro版もしくはStd版が必要です)~

■note.xを使う場合
-[[note.x(NOTE085.LZH):http://cgi.geocities.jp/robokabuto/gimic/wiki/index.php?plugin=attach&pcmd=open&file=NOTE085.LZH&refer=MDX%E3%83%87%E3%83%BC%E3%82%BF%E4%BD%9C%E6%88%90]]
-[[run68(run68bin-009a-20090920.zip):http://sourceforge.jp/projects/sfnet_run68/]]
*** MDXを作るには [#n9859994]
MXDRVでの楽曲作成はMMLという言語を用いてテキストファイルに演奏情報を記載します。~
ただしMXDRVはそのテキストファイルをそのまま演奏情報として解釈することはできませんので、コンパイラを使ってバイナリデータに変換し、~
そのバイナリデータをMXDRVに渡すことによって演奏を行います。~

note.xはX68000のOSであるHuman68k用の実行ファイルである為、そのままではWindows上で動作させることができません。~
そこでrun68というHumann68kのコマンドラインをエミュレーションするツールを併用して実行します。~
MXDRVは様々な人が開発に携わってきた為か他の音源ドライバとは情勢が異なり、音源ドライバ作者以外が提供するコンパイラも存在します。~
主なコンパイラは以下の通りです。~

■mxcを使う場合
-[[mxc:http://www.vector.co.jp/soft/dos/art/se003454.html]]
|コンパイラ名|アーカイブ名|EX-PCM対応状況|作者|
|mxc.x|MXC101.LZH|非対応|MFS soft, milk.|
|note.x|NOTE085.LZH|対応|DIS|
|tmc.x|TMC105.LZH|対応|NORIKUN|
|tmc2.r|TMC2.LZH|対応|NORIKUN|
|mac.x|[[MADRV201.LZH:http://retropc.net/x68000/software/sound/madrv/madrv/]]|対応|Konoa|
|mxc.exe|[[MXD2063.LZH:http://www.vector.co.jp/soft/dos/art/se003454.html]]|対応|こうのたけし|

mxcはNT系OSではコンソール表示が行われないので注意が必要です。~
EX-PCMとはMXDRVにおいてADPCM(PCM)を8パート利用できる拡張機能に対応しているか否かを示しています。~
GIMICでは2014/07/29以降のファームウェアからEX-PCM対応の曲データの演奏にも対応しています。~

* プレイヤ [#e51805ad]
-[[foobar2000:http://www.foobar2000.org/]]
-[[MDX/MDC input:http://www.vesta.dti.ne.jp/~tsato/soft_fb2k.html]]
何を使えば良いか分からない場合はnote.xを使うと良いでしょう。~

現状、PC側からGIMICへMDXデータを直に転送して再生することができないので制作中の曲データの再生に使うことになります。~
上記の他にもMDXプレイヤは存在していますが、エミュレーションの精度が低いのでRuRuRuさんのMDX/MDCinputをお勧めします。((X68Sound.dllやfmgenを利用した物はハードウェアLFOの再現性に難があります。))~
上記またこれから紹介するツールの拡張子が''.X''または''.R''のファイルはX68000のOSであるHuman68k用の実行ファイルです。~
そのままではWindows上で動作しないので、run68というHuman68kのコマンドラインをエミュレーションするツールを併用します。~

foobar2000をインストールしたら'''C:\Program Files\foobar2000\components'''に''foo_input_mdx.dll''をコピーすればOKです。((必要に応じて''foo_input_s98.dll''も入れておくと良いでしょう))~
foobar2000を起動したらFile→Preferencesを開いてMDX inputの設定を行ってください。~
-[[run68(run68bin-009a-20090920.zip):http://sourceforge.jp/projects/sfnet_run68/]] 作者:Yokko, masamic

#ref(foobar2000.jpg)
同様に拡張子が''.EXE''または''.COM''のファイルはPC-98,PC/ATのMS-DOS用の実行ファイルです。~
32bit Windowsであればそのまま動作しますが、64bit Windowsで動作させる場合はMS-DOS Player for Win32-x64が必要になります。~

SampleRateに''62500Hz''を選択し、''Use LPF''のチェックを外して下さい。これでGIMICの音声出力に近い出音になります。~
-[[MS-DOS Player for Win32-x64:http://homepage3.nifty.com/takeda-toshiya/msdos/]] 作者:TAKEDA,toshiya

* コンパイル環境の構築 [#j02a1550]
例としてnote.xを使った場合の環境構築の方法を記載します。上記サイトから'''NOTE085.LZH'''、'''run68bin-009a-20090920.zip'''をダウンロードして解凍してください。~
** PDXとは [#ba8cc46d]
PDXとはADPCM(PCM)データを格納する為のデータ形式です。~
初期のPDXは96個までのADPCM(PCM)データを格納することができます。後期のPDXでは96個を超えるデータを格納できるように拡張されています。~
格納できるデータ形式はMSM6258仕様のADPCM、8bit PCM、16bit PCM(ビッグエンディアン)の3種類です。~

#ref(notex.jpg)
'''NOTE085.LZH'''に含まれるデータで必要なのは''note.x''だけです。''note.doc''((.doc形式ですが実際にはただのテキストファイルなのでnote.txtとリネームしてメモ帳で開いてください。))はMMLの仕様が記載されているマニュアルなので目を通しておきましょう。~
*** ADPCM(PCM)データを作るには [#gb57d252]
現在ADPCM(PCM)データを作るとした場合、WAVデータをADPCMデータに変換するのが最も効率が良いと思いますので変換ツールを紹介しておきます。~

#ref(run68.jpg)
'''run68bin-009a-20090920.zip'''に含まれるデータで必要なのは''run68.exe''と''run68.ini''だけです。~
|ツール名|アーカイブ名|作者|
|PCM3PCM.X|[[PCM3V215.LZH:http://noz.ub32.org/68fsw.html]]|NOZ|
|WAV2ADP.X|W2ADP101.LZH|Yokko|
|PCMCONV.X|[[PCV10110.LZH:http://www.h6.dion.ne.jp/~chie/freesoft/]]|恥絵袋|
|PCMCONV.COM|[[PCONV18.LZH:http://www.vector.co.jp/soft/dos/art/se004506.html]]|こうのたけし|

#ref(mxdrv.jpg)
''note.x''、''run68.exe''、''run68.ini''を一つのフォルダの中にコピーします。Cドライブ直下にmxdrvというフォルダを作ってそこに入れるのが良いと思います。~
※注意事項※~
WAVからADPCMに変換した場合、MXDRVの音量はv7~v8を指定することで元のWAVの音量に近くなります。~
WAVから8bit PCMに変換した場合、MXDRVの音量を最大のv15まで上げても上述のADPCMへ変換した物と比べて音量が異様に小さくなります。~
WAVから16bit PCMに変換した場合、そのままでは確実に音が割れます。元のWAVの音量を6~7%まで下げないとADPCMと同等の音量になりません。~

後はコマンドラインで~
16bit PCMを使いたい場合は上記変換ツールのオプションや、元WAV自体を加工して音量が6~7%になるように調整を行って下さい。~

>run68 note.x ''コンパイルするファイル.MML''
*** PDXを作るには [#t80127e6]
作成したADPCM(PCM)データをMXDRVから直接読み取ることはできませんので、各々のデータを連結してPDXファイルを作る必要があります。~
PDXを作るツールもいくつか種類があります。~

と入力することでMDXデータを作成できます(以下のような表示が行われます)~
|ツール名|アーカイブ名|EX-PDX対応状況|作者|
|PDXM.X|PDXM.LZH|非対応|milk.|
|TPDXM.X|TPDXM07.LZH|対応|Satoyan, AKEMI.A|
|SPDXM.X|SPDXM110.LZH|対応|Satoyan|
|PDMK.X|PDMK05.LZH|対応|DIS|
|PDXM.COM|[[MXD2063.LZH:http://www.vector.co.jp/soft/dos/art/se003454.html]]|非対応|こうのたけし|

#ref(compile.jpg)
EX-PDXとは前述した96個を超えるADPCM(PCM)データを格納できるように拡張されたPDXファイルのことです。((EX-PCMと似たような名前ですが別物なので混同しないように注意))~

コンパイル後、即座にfoobarで曲を再生したい場合は以下のようなバッチファイルを用意すると良いでしょう。~
何を使えば良いか分からない場合はPDMK.XやSPDXM.Xを使うと良いでしょう。後者はADPCM(PCM)データを加工する機能も搭載しているようです。~

>"C:\Program Files\foobar2000\foobar2000.exe" /stop ~
run68 note.x ''コンパイルするファイル.MML'' ~
call "C:\Program Files\foobar2000\foobar2000.exe" "%~dp0''再生するファイル.MDX''" ~
pause ~
** MDXデータの再生環境の構築 [#facbfe5d]
作成したMDXデータを再生するソフトウェアについて、いくつか例を挙げておきます。~

※foobarで該当MDXが再生中の場合、ファイルがロックされていてコンパイルに失敗するので事前に演奏を停止しています。~
*** foobar2000 + MDX/MDC input プラグイン [#b7e8b47f]
-[[foobar2000:http://www.foobar2000.org/]] 作者:Peter Pawlowski
-[[MDX/MDC input:http://www.vesta.dti.ne.jp/~tsato/soft_fb2k.html]] 作者:RuRuRu

* MMLとは [#kf610b48]
MMLとは'''MusicMacroLanguage'''の略で、演奏情報をテキストで表現する為の言語((統一規格ではないので音源ドライバ毎に仕様は異なります。))になります。~
まずはfoobar2000をインストール。
MDX/MDC inputのアーカイブを解凍し、foo_input_mdx.dllをfoobar2000のインストール先のcomponentsフォルダへコピー。~

>A @0o4v12l8 cdefgab>c
■foobar2000の標準のインストール先~
32bit Windowsの場合 C:\Program Files\foobar2000\components~
64bit Windowsの場合 C:\Program Files (x86)\foobar2000\components~

例えば上記はOPMのチャンネルA(8チャンネル中)で、音色番号0、オクターブ4(9段階中)、音量12(15段階中)、音長8分音符でドレミファソラシドを演奏することを表しています。~
foobar2000を起動したらFile→Preferencesを開いてMDX inputの設定を行ってください。~
SampleRateに62500Hzを選択し、Use LPFのチェックを外して下さい。これでGIMICの音声出力に近い出音になります。~

* note.xのMML仕様 [#gd8e184f]
とりあえずMMLの基本的な所は解説したいと思います。mxcのMML仕様もほぼ同じなので参考にできると思います。~
*** hoot [#vdd41a45]
-[[hoot:http://dmpsoft.s17.xrea.com/hoot/]] 作者:DMP SOFT.

** チャンネル定義 A〜H [#u9184ca9]
行頭に'''A〜H'''を記載することでOPMの8つあるチャンネルのどれに対する演奏情報なのかを定義します。チャンネル定義の後には半角スペースが必要です。~
hoot本体とhoot用mxdrvをダウンロード。~
それぞれのアーカイブを解凍し、hoot用mxdrvの中に入っているmxdrv.binをhootのフォルダの中にコピーします。~
hoot.iniをメモ帳で開いて以下の項目を書き換えます。

>ABC @0o4v12l8 cdefgab>c
|hoot.iniの項目|値|
|sampling_rate=|62500|
|buffer=|8|
|time_slice=|16|
|lpf=|0|

以上の様に記載することで複数のチャンネルに対して同じ演奏情報を定義することも可能です((分かりやすくする為に音色や音量も記載しましたが、音色や音量を各チャンネル毎に定義して音階情報のみレイヤーさせることも可能です))~
hootを起動し、MDXデータをドラッグアンドドロップすることで再生することができます。~
(ドラッグアンドドロップでしかhootへMDXを渡せません。hootのセレクターからMDXを直接再生することはできないので注意)~

※実際にはP〜Wのチャンネルもありますが、こちらはPCM用で現状のGIMICでは利用することはできません。~
[[c86ctl.dll>ファームウェアダウンロード#c86ctl]]をhootのフォルダの中に入れればGIMICで直接聞くこともできます。~
(ただしADPCMパートやPCM8パートはGIMICから再生されません。hootのエミュレーションによりPC側から鳴ります)

** 音符・休符 c,d,e,f,g,a,b r + - = [#ud0f4edb]
cから順にドレミファソラシに対応します。休符は'r'、シャープは'+'、フラットは'-'、ナチュラルは'='で表すことができます((c-、e+、f-、b+は存在しませんが<b>、f、e、>c<と同義になります。))(('c++'や'c--'と記載することでダブルシャープ、ダブルフラットを表現できた…ような気がします。))~
*** MXDRVg [#vb15cbaa]
-[[MXDRVg:http://gorry.haun.org/mx/]] 作者:GORRY
-[[c86ctl対応x68sound:https://sites.google.com/view/nue/]] 作者:nue

>A cdefedcr efgagfe crcrcrcr ccddeeff edcr
GORRYさんのサイトよりMXDRVg及びMXVをダウンロード。nueさんのサイトからc86ctl対応x68soundをダウンロード。~
それぞれのアーカイブを解凍し、MXDRVgの中に入っているmxdrv.dllをMXVのフォルダの中にコピーします。~
c86ctl対応x68soundの中に入っているX68Sound.dllとX68Sound.iniをMXVのフォルダの中にコピーします。~

上記はかえるのうたをMMLで記載した物です。ドレミファミレド休符、ミファソラソファミ休符、ド休符ド休符ド休符ド休符、ドドレレミミファファミレド休符を表しています。~
[[c86ctl.dll>ファームウェアダウンロード#c86ctl]]をMXVのフォルダの中に入れ、MXVのMXDRVg設定で'ROMEOで演奏する'にチェックを入れればGIMICで直接聞くこともできます。~
(ただしADPCMパートやPCM8パートはGIMICから再生されません。X68SoundのエミュレーションによりPC側から鳴ります)

** 音長 1,2,4,8,16,32,64,128, 3,6,12,24,48,96,192 [#o7be79f3]
音長は音符の直後に記載します。1が全音符、2が2分音符…と最大で128分音符まで表現することができます。3連符を表現する時は分割したい音長に3をかけてやることで表現することができます。~
例えば全音符を3分割したい時は1×3で"3"、2分音符を3分割したい時は"6"を記載します。ただし128分音符の3連符は表現することができません。64分音符の3連符"192"までです。~
** コンパイル環境の構築 [#na567db0]
例としてnote.xを使った場合の環境構築の方法を記載します(mxc.exeを除くX68000用コンパイラも同じやり方で使うことができます)~

また音長の後に"."を付けることで付点を表現することができます。"4."は付点4分音符になります。~
上述したrun68およびNOTE085.LZHのアーカイブを解凍します。~
run68の中に入っているrun68.exeおよびrun68.iniと、NOTE085.LZHの中に入っているnote.xが必要なファイルです。~
Cドライブの直下にMXDRVというフォルダを作ってrun68.exe、run68.ini、note.xをMXDRVフォルダへコピーします。

>A c4d4e4f4e4d4c4r4 e4f4g4a4g4f4e4 c4r4c4r4c4r4c4r4 c8c8d8d8e8e8f8f8 e4d4c4r4
後はコマンドラインでC:¥MXDRVに移動し、~

先ほどのかえるのうたに音長を記載したものです。~
>run68 note.x ''コンパイルするファイル.MML''

** 音長の省略 ln n=音長 [#g56eff2f]
音長をいちいち記載するのは面倒なのでlコマンドを使って音長を省略することができます。~
と入力することでMDXデータを作成できます。

>A l4 cdefedcr efgagfe crcrcrcr l8 ccddeeff e4d4c4r4
コンパイル後、即座にfoobar2000で曲を再生したい場合は以下のようなバッチファイルをC:¥MXDRVの中に作成すると良いでしょう。~
(foobarのインストールパスは自分の環境に合うように修正して下さい)~

上記のかえるのうたの音長をlコマンドを使って簡略化した物です。lコマンドで音長を省略中でも音符の後に音長を記載すればその通りに演奏されます(最後のe4d4c4r4の部分)~
なおlコマンドはチャンネル毎に独立していますので注意してください。~
>"C:\Program Files (x86)\foobar2000\foobar2000.exe" /stop ~
run68 note.x ''コンパイルするファイル.MML'' ~
call "C:\Program Files (x86)\foobar2000\foobar2000.exe" "%~dp0''再生するファイル.MDX''" ~
pause ~

>A l4~
B l8~
AB cdefedcr efgagfe crcrcrcr~

このように記載した場合、Aチャンネルは4分音符で、Bチャンネルは8分音符で演奏されます。~

** 音長のステップ表現 %1〜256 [#x02d06cb]
ステップ表現とはMXDRVが処理を行うタイミング(1ステップ)で音長を表現する手法になります。~
全音符は192ステップ((MXDRVの分解能は全音符192ステップ固定です。))、2分音符は96ステップ、4分音符は48ステップとn分音符が進むにつれステップ数は半減していきます。~

>全音符(192ステップ) ÷ n分音符 = n分音符のステップ数

計算式は上記になります。なお64分音符を3等分(3連符)した192分音符が1ステップとなる為、192分音符以上を表現することはできません。~
ステップ表現は演奏のモタりや先走りを表現したい時や5連符や7連符を再現したい場合に使います。~

5連符の表現方法は5等分したいn分音符のステップ数を上記式から求めて5で割ります。~
しかし実際には5や7で割り切ることができない為、音長を足したり削ったりして帳尻合わせをする必要があります。~
例えば4分音符(48ステップ)の5連符を再現したい場合は音符1つ辺り48ステップ÷5で9ステップになりますが余りが3ステップ出てしまいます。~
このような場合は以下のように余った3ステップを適当に割り当ててしまいます。~

>A c%10d%9e%10f%9g%10

厳密には5連符とは言えませんが聞いた感じでは5連符っぽい何かになります。余りや不足分の割り当ては自分の好みでやってみるのが良いでしょう。~

** 連符 {}n n=音長 [#x04f3298]
上記でステップ数での連符の表現方法を記載しましたが、note.xではこれを自動で行ってくれるコマンド'{}'があります。~

>A {cdefg}4

上記は4分音符を'cdefg'で5等分しています。{}の中に書いた音符の数で指定した音長を等分して割り当ててくれます。~

** 音長の加減算 ^ &tilde; [#f40d6472]
音長は加減算することが可能です。足す場合は'^'、引く場合は'&tilde;'を使います。~

>A c4^8 (付点4分音符と同義)~
A c%48^%24 (付点4分音符と同義)~
A c4~8 (8分音符と同義)~
A c%48~%24 (8分音符と同義)~
A c%48~8 (n分音符表記とステップ表記を混在させることも可能)~

ただし加減算した結果のステップ数は%1〜%256の範囲収まっている必要があります。~

** タイ・スラー & [#y1f7dfe4]
音符同士を繋ぐ時は'&'を使います。前後が同じ音階であればタイ、違う音階であればスラーとして機能します。~

>A c1&c1~
A c1&d1~

音長の加算は'^'でも行えますがステップ数が%256を超える物は表現できません(例えば上記の様に全音符同士を結ぶ場合)~
通常、音長を加算したい場合はタイを使った方が良いでしょう。~
なおMXDRVでは'&'直後の音符を省略することができません(c1&1の様な表現はできません)~

** 音階 o0〜8, <, > [#w16a6ac5]
オクターブを定義します。note.docには値の範囲として-2〜10と記載がありますが実際に利用できるのはo0d+〜o8dまでのようです。~
また相対指定をすることも可能で'<'でオクターブを一つ下へ、'>'でオクターブを一つ上に変更することができます。~

>A o3cdefgab>c<bagfedc

上記はオクターブ3でドレミファソラシ(オクターブ+1)ド(オクターブ-1)シラソファミレドを意味しています。~

** 音色 @n n=0〜255 [#w052b925]
音色番号を指定します。なおMXDRVは音色を内蔵していませんので別途定義してやる必要があります(音色定義は後述する…予定)~

** 音量 vn n=0〜15 [#v15cee2c]
音量を16段階で指定します。0は無音で15が最大です。~
実際の所、OPM(YM2151)は128段階の音量設定を持っていますが、大雑把に音量を指定する時に使います。((MMLに慣れてくると全く使わなくなるコマンドの筆頭です))~

** 音量 @vn n=0〜127 [#g85bcee0]
音量を128段階で指定します。0は無音で127が最大です。~
値が1上がる毎にそのチャンネルの音量が0.5dBずつ上がります。~

** アクセント xn, @xn n=0〜15、0〜127 [#e45c03e8]
このコマンド直後にある音符だけを指定した音量に変更します。~
'x'が'v'に相当する物で値は0〜15の範囲、'@x'が'@v'に相当する物で値は0〜127の範囲を持ちます。~

>A @v100 cde @x120 e f~

上記の例では'cde'と'f'@v100で、'e'が@v120で演奏されます。~

** 相対音量変化 (n )n n=0〜127 [#of797b7d]
音量を相対的に変化させます。~

>A @v100 cde )20 e (20 f~

上記の例では'cde'と'f'@v100で、'e'が@v120で演奏されます(アクセントで出した例と同じ結果になります)~

** パン pn n=0〜3 [#j2dddfc5]
そのチャンネルの音声出力を左から出すか、右から出すか、両方から出すかを指定します。~

|値|音声出力|
|0|無音|
|1|左|
|2|右|
|3|左右|

** 以下、作成中… [#c63dd4bd]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS