未定義・判別不能な#命令は警告して行末まで無視し、次行から変換を続けます。既知の命令の不正な引数はエラーです。-m512は512KiBの出力予算として利用できます。Unknown optionになる場合の実行ファイル確認はdocs/DIRECTIVE_CLI_FIX.mdを参照してください。
音色定義の数値をカンマだけでなく半角スペース・タブ・改行でも区切れるようにしました。混在も可能です。既存の数値範囲と47項目の検査は維持しています。詳細はdocs/VOICE_SEPARATOR_FIX.md。Windows用EXEは同梱していません。
NOTE v0.8.5形式のMMLをX68000用MDXに変換するC++17モジュールとCLIです。変換部分は他のプログラムから独立して利用できます。
全52入力で、44本が元MDXと全バイト一致、2本はEX-PCM補正後一致、6本は原版同様の拒否結果を確認しています。 音色・波形バンク2本も一致しました。小規模33入力に限ると31本が全バイト一致です。 残る2本は、Aパートが音符を発音しないEX-PCMデータです。元データの欠落バイトE8を補った比較コピーと一致します。元ファイルとの一致扱いにはしていません。
0.4では音色・波形バイナリの保存/読込、#compress、#optによる重複コマンドの削除を追加しました。追加のMDX7本とバイナリ2本はすべて全バイト一致しています。音符数モードのディレイ、負のディレイとタイ、VM/MVと一時音量、複数の波形効果の組合せも照合しました。
pcmuse.map の生成は、未対応です。#pcmlist は警告して無視し、MDXは生成します。対応範囲は docs/COMPATIBILITY.md を参照してください。実機・既存プレイヤーでの再生は未確認です。
日英の索引付き説明書は 日本語 / English です。原文の note.doc(CP932テキスト)も同梱しています。
変換成功時に、曲名、FM使用音色、使用中のPCMバンクごとの音色番号、OPM A〜H・PCM P〜Wの総ステップ数とL/Cからのステップ数を英語の整列表示で出力します。曲名は原文を保持します。1ステップは四分音符の1/48です。
FMはMDXに収録する選択音色を範囲省略せず個別に表示します。PCMは発音する番号を0〜95のバンク内番号で表示します。未使用番号はFM・PCMとも表示しません。項目幅はTotal stepsの11文字、半角空白1つの後に:です。PDX内の音声の存在やPCM8による実際の割り当てを検査するものではありません。有限ループと最終回の / を反映し、Lは最初の終端まで、Cは最初に実行される位置から終端までを集計します。ループ点なしは -、未使用/ミュートトラックは0です。同期信号待ちWの待ち時間は加算しません。64bitを超える場合は overflow と表示します。
同じ情報は Result::statistics から取得できます。pcmuse.map の入出力は引き続き未対応です。
ILの11曲すべてが元MDXと全バイト一致しました。STAGE5・STAGE6は -c -z を指定し、他9曲は既定設定です。 休符のタイ、波形の発音長の丸め、クオンタイズ設定・復帰、波形中の音量、GLON再開、圧縮・最適化の状態管理を修正しました。
notemdx.exe -c -z STAGE5.mus
notemdx.exe -c -z STAGE6.mus当時の起動オプションは未確認です。この指定で元データを再現できることを確認しました。曲名による自動切替は行いません。
既存33本の照合結果も維持しています。小規模入力と実曲の小計44入力では、42本完全一致、2本が既知のEX-PCM宣言補正後一致です。STAGE5/6には上記オプションが必要です。
0.6で対応した行末コメントと連続臨時記号、0.5の行頭コメント規則も維持しています。
-iCHANNELSを復元し、-m/-r/-b/-t/-w/-v/-1/-eと引数なしスイッチの併記に対応しました。-v1はASCII矢印、-v0は対応端末で色を使用します。-eはエラー時の登録済みバンク保存に対応しますが、最初の致命的エラー後の解析継続は未対応です。-lと引数なし-oは認識した上でpcmuse.map未対応の警告を出します。全項目の確認表はdocs/CLI_COMPATIBILITY.mdを参照してください。
-mSIZEでファイル全体の上限をKiB単位で指定できます(既定64KiB)。-m256で参照用の67,488バイトのK01TAIL.mdxと全バイト一致しました。ファイル全体は64KiBを超えられますが、トラック・音色領域の開始位置はデータ先頭から65535以内である必要があります。ループの相対距離制限も維持します。原版もトラック位置超過と長距離ループの6入力をエラーにしていました。
大容量検証の結果はdocs/LARGE64K_VALIDATION.md、原版のMDX2本とLOG8本はtests/large64k_referenceに同梱しています。入力と再現用バッチはprobes/large64kにあります。
notemdx.exe -m256 probes/large64k/K01TAIL.MML
従来の44入力に大容量8入力を加えた52入力について、生成成功46本(44本が元MDXと全バイト一致、2本は既知のEX-PCM補正後一致)、原版同様の拒否6本を確認しています。
MDX出力先の明示指定は--output FILEを推奨します。互換用-o FILEは、入力名指定後、次の名前が.mdx/.MDXの場合、または出力名・入力名が連続する場合に認識します。PCMマップ指定は-loの併記が明確です。
Visual Studio 2022の「C++によるデスクトップ開発」、MSVC v143、Windows SDKが必要です。
- スタートメニューから x64 Native Tools Command Prompt for VS 2022 または x64 Cross Tools Command Prompt for VS 2022 を開きます。
- 展開したプロジェクトフォルダへ移動し、次を実行します。
build_vs2022.batバッチは現在のVS開発環境のMSBuildを使い、同梱の NoteMDX.sln を Release / x64 でビルドしてC++単体検査を実行します。CMake、vcpkg、vswhere、Pythonはこの手順には不要です。呼び出し元のカレントフォルダは終了時に復元します。ビルドまたは検査が失敗すると非ゼロの終了コードを返します。
| 生成物 | 用途 |
|---|---|
bin\x64\Release\notemdx.exe |
コンバータ |
bin\x64\Release\notemdx_core.lib |
変換ライブラリ |
bin\x64\Release\notemdx_tests.exe |
C++単体検査 |
VS上で NoteMDX.sln を開いて Release / x64 をビルドすることもできます。Pythonによる参照MDX等の検査は別途検証手順に従って実行してください。
CMake/CTestを使う場合は別の手順です。
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
ctest --test-dir build -C Release --output-on-failureCMakeの出力先は build\Release です。Python 3が見つかる場合はPython検査もCTestに登録されます。C++標準ライブラリを使用し、音源DLLは不要です。Releaseは /MT、Debugは /MTd でC/C++ランタイムを静的リンクします。この設定で再ビルドしたRelease版はVC++ v14 x64再頒布可能パッケージの追加インストールを必要としません。Windows標準DLLは使用します。Windows用EXEは同梱していません。ビルド成果物の確認状況は下記の公開バイナリ検査を参照してください。
bin\x64\Release\notemdx.exe examples\basic.mml
bin\x64\Release\notemdx.exe --encoding utf8 -o song.mdx song.mml
bin\x64\Release\notemdx.exe --ex-pcm --mute BH song.mml出力を省略すると、入力の拡張子を .mdx に変更した名前になります。入力名の拡張子を省略した場合は .mml、.mus の順に探します。
| オプション | 内容 |
|---|---|
--output FILE |
出力ファイル。-o FILEも判別可能な場合は互換用に受理 |
--encoding auto |
既定。BOM付きUTF-8、その他はCP932として読み込む |
--encoding utf8 |
BOMなしも含めてUTF-8として読み込む |
--encoding cp932 |
CP932 / WindowsのShift_JISとして読み込む |
--ex-pcm / -p |
PCM 8ch、全16chのMDXを生成 |
--reverse-octave / -x |
< / > の初期方向を反転 |
-iCHANNELS / --mute CHANNELS |
指定チャンネルを変換しない。例 ABPQ |
-c / --compress rests |
休符圧縮。MMLの#compressより優先 |
-cn / --compress notes |
休符とタイで接続された同音程を圧縮 |
--compress none |
圧縮を明示的に無効化 |
-z / --opt "*" |
全項目の最適化。MMLの#optより優先 |
-zdvqpt012 / --opt dvqpt012 |
最適化項目を指定。--opt noneで無効化 |
--help / --version |
ヘルプ / バージョン表示 |
MDXのタイトルとPDX参照名はCP932になります。変換不能な文字はエラーです。日本語ファイル名を使用できます。include内の文字コードにも同じオプションを使用します。
成功時は終了コード0、MML変換エラー時は1、入出力・引数エラー時は2です。通常はMMLエラーで既存MDXを維持します。-r指定時は削除します。成功時の書き込みも一時ファイルを経由します。
#play は警告して無視します。MMLから外部コマンドは実行しません。#removeは無視しますが、CLIで-rを明示すると変換エラー時に旧MDXを削除します。-bはビープ、-v/-v0/-v1は進行状況と位置付きソース表示です。
include/notemdx/compiler.hpp と src/compiler.cpp だけで変換部分を組み込めます。あるいは notemdx_core.lib をリンクしてください。C++の標準ライブラリのみを使用します。
#include "notemdx/compiler.hpp"
notemdx::Source input;
input.name = "memory.mml";
input.text = "#title \"Test\"\nP @0 F4 n0,4\n"; // CP932 bytes
notemdx::Options options;
auto result = notemdx::compile(input, options);
if (result.ok()) {
// result.mdx は生成されたMDXの所有権付きバイト列です。
// 保存・再生・転送は呼び出し元が行います。
} else {
// result.diagnostics: ファイル名、行、列、チャンネル、メッセージ
}#include を使う場合だけ Options::include_loader に読み込みコールバックを設定します。変換モジュールは自分でファイルを開きません。UI、ファイルI/O、文字コード変換、再生処理から独立しています。詳細と利用例は docs/API.md と examples/use_module.cpp にあります。
#load-tone "tone.bin"
#wavemem
#load-wave "wave.bin"
#save-tone "copy_tone.bin"
#save-wave "copy_wave.bin"
NOTE形式の音色7168バイト、波形131968バイトを扱います。保存名省略時は tone.bin / wave.bin です。疑似命令の相対パスは各命令を書いたMMLファイルのフォルダを基準に解決します。-t[name]/-w[name]も使用でき、CLI指定の保存名は実行カレント基準で疑似命令より優先します。読込内容はそれまでの登録状態を置き換え、保存するのは変換終了時の状態です。
入力MML、include先、読込バイナリと同じファイルへは保存できません。別名を指定してください。複数出力のパス重複もエラーです。全ファイルを一時保存してから順に置き換えますが、OSの置換処理で途中失敗した場合の一括ロールバックは行いません。
モジュール利用時は Options::binary_loader で読込を実装し、成功時の Result::auxiliary_files を呼び出し元が保存します。モジュール自体はファイルを作成しません。
probes/priority・effects・followup・remainingの33入力とtests/referenceの参照データ、tests/il_referenceの11曲、probes/large64kの8入力とtests/large64k_referenceのMDX2本・LOG8本を同梱しています。資料一覧は日英説明書末尾およびdocs/COMPATIBILITY.mdの「根拠」を参照してください。python tests/test_reference.py <notemdx.exeのパス> で小規模33入力とバンク2本を再照合できます。実曲はtests/test_il.py、大容量8入力はtests/test_large64k_probes.pyで照合します。
| パス | 内容 |
|---|---|
include/notemdx/compiler.hpp |
再利用用C++ API |
src/compiler.cpp |
MML解析・MDX生成 |
src/main.cpp |
CLI、文字コード変換、include読み込み、保存 |
NoteMDX.sln / *.vcxproj |
Visual Studio 2022構成 |
CMakeLists.txt |
CMake構成 |
tests/test_compiler.cpp |
変換・エラー・境界値の自動検査 |
tests/test_reference.py / tests/reference |
33入力の照合(31本全バイト一致・2本補正後一致)と元MDX・バンク |
tests/test_il.py / tests/il_reference |
実曲11組の照合 |
tests/test_large64k_probes.py / tests/large64k_reference |
large64k.zipの元MDX2本・LOG8本との照合 |
examples/basic.mml / basic.mdx |
変換サンプルと生成結果 |
probes |
元のNOTEに渡す照合用MML |
docs |
日英HTML説明書、API、対応範囲、検証記録 |
note.doc |
原版説明書(CP932テキスト) |
- 新規ソースコード:Copyright (c) 2026 I.C.KaZe、0BSD。
- I.C.KaZeの提供した楽曲・参照資料:CC BY 4.0 International。テスト用途で収録し、同ライセンスの条件で再利用できます。
- Illumination LASER title copyright: (C) 2000 MYO GAME。
- DIS氏のnote.docと転載・翻訳部分:原版の条件と適用範囲をTHIRD_PARTY_NOTICES.mdに記載。
ルートの説明書は README.md に統一しています。チェックサムは配布ファイル名に対応しています。旧版からの更新と検査は更新手順を参照してください。文書改訂日:2026-10-11。プログラムは0.8 revision 5です。
VSとCMakeの全ターゲット(CLI、変換ライブラリ、単体検査)でランタイム設定を統一しています。既存の動的リンク版EXEは設定変更だけでは変わらないため、build_vs2022.batで再ビルドしてください。
dumpbin /dependents bin\x64\Release\notemdx.exeMSVCP140.dll、VCRUNTIME140.dll、VCRUNTIME140_1.dllおよびapi-ms-win-crt系DLLが依存一覧にないことを確認できます。この配布はソースのみです。静的リンク版の依存DLLは下記のとおり確認済みです。
Windows x64版NoteMDX 0.8 revision 5の再ビルド済みEXEを静的検査しました。
- PEインポートテーブルの依存DLLはKERNEL32.dllのみ。VC++ランタイムの追加導入は不要です。
- CodeViewのPDB参照はnotemdx.pdbのみ。ビルド時のドライブ名・フォルダー名を含みません。ASCII・UTF-16LEのドライブ付き絶対パス検索でも該当なしです。
- EXEのSHA-256:
0dbbaff99edfb9ed82421dea16f0d9258ba2513b9bf50e01060d3bce4d0a75dc。 - 配布ZIPにはPDBを含めず、同梱ファイルのチェックサムを更新・検査しています。
ビルド環境のOS・VS・MSVC・SDKの正確な版と実行コマンドは未記録です。Windows上での起動・変換検査は未実施です。ソース版の変換テスト結果と本EXEの静的検査を区別しています。