MidiからNSD.Lib向けMMLを作るソフトを作ってみた (全拡張音源対応済)

ツイート 
このエントリーをはてなブックマークに追加

ゲーム機トップへ

0:26 2026/05/21 作成
19:28 2026/06/24 更新 

ほぼ完全体になった


ここに書いてあることを参考にした結果
何か起こってもその責任は負いかねます。各自の判断で使ってください。
VirusTotalで4つほど引っ掛かります…


まずはMidi2NsdMmlの方。
Midi2NsdMml.zip 14:24 2026/06/17

MIDIからNDS.Lib向けMMLにするやつです。
一緒にtve.txtというファイルが入ってますが、
これにプログラムチェンジごとの音量、音色、モジュレーション、ノートエンベローブなんかを書いていきます。
とてもめんどくさい。細かいことはファイル内に書いてあります。
tve.txtは、読み込むmidiの場所に有ればそれを利用、なければEXEフォルダ内のを利用、それも無い場合はE@0 Ev15(ベロシティ最大時)で出力します。
wt.txtというファイルは主に波形メモリやVRC7の音色を書き込みます。
コマンドプロンプトで実行するとどこから読み込んでいるかがパスが表示されます。読み込めていれば。

MIDIのほうは、フォーマット1専用でトラックがMMLのトラックに対応します。チャンネル設定は無視します。
トラックの配置は各.lib/.binの仕様 を参考に。TR1~5(内部音源)以降はnsd_all2.binに準じます。

MMLのヘッダはこんな感じになってます

------------------------------------------------------------------------
#Title "MIDの曲タイトル"
#Composer "作曲者名(独自方式)"
#Copyright "MIDの著作権表示"

#maker "製作者(独自方式) Conv by Midi2NsdMml"

#Code "nsd_all2.bin"(固定)
#BGM 1
#SE 0
#timebase 24(テンポから適当に設定)
#External %0(使用トラックから自動設定)

#Bank
------------------------------------------------------------------------

上記の独自方式となっている部分の入力方法

作曲者(独自方式)、製作者(独自方式)は
テキストデータ(metaType == 0x01)として譜面に入力されているものから探してMMLへ入力します。
作曲者は「Composer:」の後ろに入力した文字列が入ります。
製作者は「maker:」の後ろに入力した文字列が入りそのうしろに Conv by Midi2NsdMmlが入ります。
大文字小文字は不問です。
良く分からん時は、下に置いてあるサンプルmidiをお使いのソフトで開いてみるのが手っ取り早いかと。

TR5のDPCMにノートが有る場合以下のように出力します。
これにDMCは付属していないので各自で作ってください。
なぜか皆さんZEXのページのmid2mml for ppmck v1.0bをダウンロードしてますね…

------------------------------------------------------------------------
DPCM{
n36, "dmc/36.dmc",15,0,64
n38, "dmc/38.dmc",15,0,64
n43, "dmc/43.dmc",15,0,64
}
------------------------------------------------------------------------

トラックの移動、融合、キーシフト機能

画像のようにトラック名の先頭か区切り文字の直後にTRX*とするとMML変換時にそのトラックとして扱われます。
trxの文字列は、大文字小文字関係なく適用します。
「trx2 track6」とトラック名に入っていた場合、スペース以降は、特定の文字列以外はコメントとして無視します。スペースの代わりに-や_も区切りとして利用します。

移動は、MMC5やSun5Bのような後ろに有るトラックだけ使いたいときに便利かな。

融合は、すでに使われているトラックを指定する(画像ではトラック2)と、そのトラックのノートオフの時だけ発音します。
移動してないトラックが最優先で、移動したトラック同士がかち合う場合は、トラック番号の若い方が優先されます。

トラック3にCC12の64以降でEnを設定し、三角波ドラムとしつつ、トラック6にベースのノートを普通にうってtrx3とすれば
ドラムで刻まれた3角波ベースが出来あがる。はず 
適当なサンプル作らねば…下の方に有ります。
同じくトラック名の所にks+*、ks-*(*は数字)と入力すると変換時にキーが変化します。
例えばks+12なら変換後に1オクターブ上の音になります。trxと併用可能です。

使えるコントロールチェンジは
ピッチベンド
モジュレーション(tve.txtで要設定)
CC12(和音などのEn設定用。tveで要設定)
CC111(無限ループL挿入用)
マスターファインチューン(ディチューンDx挿入)です。

CC12が単独で入力できない場合は、リバーブタイムやディレイタイムで代用できるかと思われます。

ピッチベンドは±2オクターブくらいは可能ですがモジュレーションにもよります。
モジュレーションを使っているトラックで、発音から時間が経ってから変化するベンドを入れた場合、
エンベロープが長大になり過ぎてnsfコンパイル時にエラーとなる場合があります。

CC111(無限ループ)はノートオンと同時ならば入力来ますがすでにノートオンしているノートが有るとエラーになります。

マスターファインチューンはCC#6の0~127み利用しCC#38は無視します。
64を0とし、0~127で-8~8まで変化します(+-50cent)

サブルーチン挿入に対応。
トラックにノートナンバー127の音符を置くとそのタイミングにSxを挿入します。(xはベロシティ値から1~127)
他のノートと同じノートオンタイミングの場合は他のノートの前に、他のノートの発音中はエラーとなります。(CC111と同じ)
MMLへ取り込むものはwt.txtへ記述します。

FDS、N16x、VRC7の音色に関することはtve.txtの中に書いてあります。
N16xに関してはMMLで使うよりも簡単になってるかと(アドレス、サンプル数計算とか音程自動補正)

変換の実行はmidiをexeにD&DでもコマンドプロンプトでMidi2NsdMml.exe hoge.mid でも好きな方で。オプションは有りません。
次に挙げるGUIを使うと非常に便利です。(個人の感想です)

つぎはMidi2NsdNsf_EasyGUI。
Midi2NsdNsf_EasyGUI.zip 19:44 2026/06/17

名前の通りMidi2NsdNsf用のGUIです。これ自身に変換機能は有りませんので同じフォルダに置いて使います。
特別難しい所は無いと思いますので適当に使って見るのが早いです。
必要な設定はNDS.Libのコンパイラフォルダ設定位です。後は使い勝手を考えて適当に。
ウィンドウサイズは変更できます。
自動変換のチェックを入れると当該のファイル更新を察知して実行します。
MIDI監視、MML監視、NSF監視を入れた場合。MIDIを上書き保存したら、MML変換、NFSコンパイル、NSF再生まで勝手にされます。(エラーが無ければ)


とりあえずサンプルMIDIとTVEとWTが出来たので公開。
一通り上記の機能が使われているはず。DPCMは使ってないです。
GUIに放り込んで、MML変換、NSF変換をすればXに上げたのとちょっと違う音の出るNSFが出来上がるはずです。
matsuno.zip 6:43 2026/05/29

Ver.2026/06/17 用サンプル
FDSとn16xを使っています。旧版では変換できません。ループでもたるのはテンポのせいかな…
Battliss.zip 21:11 2026/06/17




ドラムスプリッターは作動が怪しいので公開見合わせ…


勝手に謝辞
mid2mml for ppmck v1.0b これが無ければチプツンに手を出していなかったでしょう。いい様にDMC使わせてもらってます…


ほしいものリスト


プライバシーポリシー

カウンタ アクセス
カウンタ PV

2011/10/26 ~ 2026/07/11 3:00

© 2011-2026 とらぷ