Windows 10/11 x64用のC++17製MML編集・MDX再生ツールです。MML→MDX/VGM/VGZ/MRL/MRZ変換、Mix WAV/Track WAV、FM音色編集、PDX編集を備えます。
GUIから音楽処理までC/C++で構成し、製品のビルド・起動にGoは不要です。正式版です。検証済みの範囲は下記文書を参照してください。移行状況、ビルド、検証範囲を参照してください。
アプリケーションアイコンは青紫の背景に「NOTE MDX」「Workbench」を2行で配置しています。EXEに複数サイズを内包し、Explorer・メインウインドウ・タスクバーで使用します。外部PNG/ICOの配置は不要です。
v2.9.10のWindows起動拒否修正とv2.9.11の権利表示整備を維持しています。
実行用ZIPを展開し、NOTE-MDX-Workbench.exeを起動してください。以下を同じフォルダーに保持します。ソース版のbin/には提供音源DLLと32bitブリッジだけを収録し、GUI・コア・言語ファイルはビルド時に配置します。
| ファイル/フォルダー | 用途 |
|---|---|
NOTE-MDX-Workbench.exe |
C++製Win32 GUI |
workbench_core.dll |
MML変換、再生、解析、音色編集、内蔵PDXEditor |
independent_opm.dll |
Independent OPM 0.14、x64、C ABI 1 |
IndependentMDX-X68Bridge32.exe |
32bit X68Soundとの接続 |
pdx_languages/ja.lang、pdx_languages/en.lang |
内蔵PDX編集の言語ファイル |
LICENSE.txt、THIRD_PARTY_NOTICES.txt、licenses/ |
ライセンスと第三者通知 |
docs/ |
ビルド手順、構成、検証結果、バイナリ情報 |
この版のEXE・DLL・言語ファイルを一式で使用してください。PDXEditor.exeの配置は不要です。既存の設定ファイルを引き継ぐ場合は、起動前に新しいフォルダーへコピーします。
内蔵エディタとファイル監視の2つのモードを使用できます。初期モードは内蔵エディタです。参照すると読み込み、編集名を参照ファイルの拡張子を除いた名前に変更します。MMLはUTF-8/CP932を読み取り、コンパイラへはCP932で渡します。CP932で表現できない文字は変換エラーになります。末尾のDOS EOF文字は除去します。
「MML保存」またはCtrl+Sで保存画面を開きます。参照ファイルは元の符号化と改行を保持します。参照中のMMLを変更した場合、別の参照ファイルを開く時と終了時に保存を確認します。「はい」で保存画面、「いいえ」で進む、「キャンセル」で操作を中止します。UNDOは最大512操作、REDOはCtrl+Shift+Z/Ctrl+Yです。
内蔵エディタの自動保存はEXE横の編集名_Autosave.元の拡張子(未参照なら.mus)です。旧自動保存ファイルは新しい名前の保存がない場合に読み込みます。GUI設定はNOTE-MDX-Workbench.json、再生・MIDI・音量・音色ウインドウの設定はNOTE-MDX-Workbench.iniに保存します。
ファイル監視では参照ファイルのタイムスタンプが変わると変換し、成功した場合は全曲の再生を開始します。
MML変換にはNoteMDX 0.8 Revision 5、MDX/PDX解析・再生にはIndependentMDX 0.33.5由来のコードを使用します。再生時に必要な音声を音声処理スレッドで生成します。
- F5/再生:最新のMMLを無限ループで演奏します。選択範囲があれば、トラック先頭の休符を保持した選択部分を繰り返し演奏します。複数トラックでは最長トラックの終端で全トラックを同時に先頭へ戻します。WAVループ回数は通常再生に影響しません。
- F6:一時停止/解除。Esc:停止。再生位置スライダーでシークできます。音色編集ウインドウ内でもこれらのキーを使用できます。
- 出力:Independent OPM/X68Sound/C86CTLを選択します。演奏中の切り替えは再生位置と一時停止状態を保持します。再初期化中は無音時間が生じる場合があります。
- 音量・キー・速度:全体、FM A〜H(0〜400%)、PCM P〜W、半音単位のキーと変更対象、再生速度%を設定します。FM音量は出力種別ごとに保存します。
- 音源設定:「実測出力タイミング(Independent OPM DLL / ALG5・7)」「YM3012時差モデル: R +7.00 μs (Clock/64 → 48 kHz)」、C86CTL用FM/PCM遅延を設定します。遅延は次回再生開始時に反映します。
- MIDI:メイン画面で入力機器、発音モード、アフタータッチを設定します。プルダウンを開くたびに機器一覧を再取得します。音色・MIDIチャンネル割当は音色編集で操作します。
| 出力 | 追加で用意するもの |
|---|---|
| Independent OPM | 追加不要 |
| X68Sound | 32bitのX68Sound.dllをEXEと同じフォルダーに配置 |
| C86CTL | 64bitのC86CTL.dllをEXEと同じフォルダーに配置し、対応OPM機器を接続 |
X68Sound.dllとC86CTL.dllは同梱していません。Independent OPM 0.14にはKON値を変更せず渡します。DLL自身がYM2151のビット順を内部スロットへ対応付けます。
再生中は実際に読み込んだPDXを500ms間隔で監視します。変更を検出すると有効なデータであることを確認し、再生位置と一時停止状態を保持して読み込み直します。書き込み途中・一時的な削除・不正なデータの場合は現在の再生を維持して再試行します。PDXの指定はMML/MDXと通常の自動探索を使用します。
A〜H、P〜Wの16トラックの全体/ループ部分のステップ数を表示します。全体は有限リピートを展開し、無限ループは初回1周までを含みます。ループなしは—です。行番号横には音符・休符の長さをチャンネル別に表示し、マクロは呼び出し行、インクルードは#include行へ対応付けます。選択範囲は各トラックのステップ数と、最長トラックの4/4小節数・端数を表示します(192ステップ=1小節)。12分音符などの3連符系の長さに対応し、16ステップは「0小節 + 12」と表示します。付点表記はステップ数に正確に一致するものだけを使用し、複数の音長が必要な場合は最少の項数で表します。
行番号・ステップ数エリアを右クリックすると、ステップ数表示と音長表示が交互に切り替わります。音長表示では48ステップが4、16ステップが12、192ステップが1b、240ステップが1b+4です。複数トラックの行は従来どおり/で区切ります。表示モードは保存・復元され、既存設定の初期表示はステップ数です。右クリックでは編集テキストと選択範囲を変更しません。
選択再生は各トラックの選択部分を開始位置へ揃えます。選択範囲を1周として停止するまで繰り返します。トラックごとのステップ数が異なる場合、短いトラックは終端で待機し、最長トラックが終わった時点で全トラックを同時に再開します。休符も長さに含めます。毎周、選択先頭のテンポ・音量などのシーケンサー状態を復元します。通常のWAV用リリース待機時間はループ間に追加しません。選択前の音色・音量・オクターブ・既定音長などを引き継ぎ、先行音符やベンドを省きます。ただしトラックの最初のMML命令が休符 r の場合に限り、最初の音符より前に連続する先頭休符のうち、選択前にある分を選択部分の前へ加えます。選択内の休符は重複させず、音符後の選択外休符は加えません。A r8 @0 … はディレイ用休符として保持し、A @0 r8 … や A l8 r … は保持しません。空白とコメント、全体ディレクティブは判定から除きます。マクロ・リピート・連符から始まるトラックも対象外です。対象トラック内の休符は実際のステップ数で計算します。休符を加えたトラック長で最長トラックを判定し、その休符はループの各周に含めます。音符・休符のない選択には休符を追加しません。音符・休符の先頭が選択範囲にあるものを演奏します。選択内で対になる有限リピートは回数と最終回脱出を反映し、範囲をまたぐリピートは1周につき選択部分を1回演奏します。無限ループ指定と他トラックとの同期命令は無効にします。マクロは呼び出し位置で選択を判定し、連符の一部も元の分割長を保持します。選択開始時点のテンポを引き継ぎ、複数トラックの場合は記述順で最初の選択トラックを共通テンポの基準にします。
編集後、0.5秒間入力がなければ専用ワーカーで行別・全体/ループのステップ数とエラーをチェックします。入力が続く間は開始を延期します。計算中に編集内容や参照先が変わった場合は結果を破棄し、最新の内容をチェックします。待機中は古いステップ数を表示せず、行番号を表示します。選択統計も別の専用ワーカーで計算します。
エラー箇所は背景色と文字色を入れ替えて表示します。警告は反転しません。日本語を含むCP932の列位置をエディタのUTF-16位置へ変換し、インクルード先のエラーは対応する#include、マクロ内のエラーは呼び出し位置を強調します。CP932へ変換できない文字も強調します。ファイル読み込み失敗など位置を持たないエラーはログに表示します。編集すると以前のエラー強調を解除し、再チェック後に更新します。強調はカーソル・選択・UNDO・保存文字列を変更しません。
F5や変換・WAV出力は現在の内容をその場でコンパイルして実行します。自動チェックは再生用MDXを更新せず、現在の再生を継続します。
MML内の現在の音符・休符をパート別の背景色で表示します。半音記号と付点を含む音長までを着色し、選択・UNDO・保存文字列を変更しません。マクロは呼び出し文字、インクルードは#include行に表示します。編集中は対応が古くなるため着色を解除し、次のF5で新しい対応を有効にします。
「MML自動スクロール」はOFF/AUTO/A〜H/P〜Wです。AUTOは最初の非マスクパートへ追従します。個別指定はマスク状態を問わず、そのトラックの元MML位置データがある場合に追従します。選択は一時停止中も即時反映され、保存・復元します。旧ON設定はAUTO、旧OFFはOFFへ移行します。
「ピアノロール」でトラック別鍵盤とロール表示を切り替えます。中央の白線が現在位置、左が実演奏の履歴、右が解析した予定の音符です。左右各4秒、96音の範囲を表示します。右のスクロールバー/ホイールで上下移動、Ctrl+ホイールで行高3〜36pxの拡大縮小ができます。サイズは保存します。
「キャリア音程」はFMのAL/ML/DT2を反映し、PCMはサンプル番号を表示します。モニターやロールのトラック名をクリックすると消音を切り替えます。「波形表示」(初期ON)は通常鍵盤のチャンネル波形を切り替えます。ピアノロールのミックス波形と音色編集の波形は独立しています。スプリッターでモニター/エディタ/ログの領域を変更できます。表示周期・出力バッファ・外部機器によって予定表示と実音に差が生じる場合があります。
「音色編集」は別ウインドウの表示/非表示を切り替えます。開閉状態、通常位置・サイズを保存します。MMLの全有効音色を一覧表示し、同番号は最後の有効定義を採用します。#nlist、#toneofs、インクルードに対応し、演奏用MDXに含まれない音色も試奏できます。
OP1〜OP4の各11項目とCON/FL/OPの計47パラメータを回転ノブまたは音色テキストで編集します。ホイールは1刻み、左右ドラッグで増減します。有効な定義は音源・レジスタ・アルゴリズム図へ即時反映し、入力途中の無効な定義では最後の有効値を保持します。テキスト入力中はPC鍵盤を文字として扱い、鍵盤や一覧へフォーカスするとAWSEDFTGYHUJKで試奏します。外部MIDI入力も鍵盤表示へ反映します。
変更された音色・ノブ・数値を赤く表示します。切り替えや非表示では編集を保持します。「保存」は変更音色を最後の有効定義の下へ1行空けて追記し、書き込み成功後に初期値を更新します。保存失敗時は変更を保持します。「リセット」は表示中音色を初期値へ戻します。#overwriteが有効でない場合は保存時に追加します。
「PDX編集」で、PDXEditor 1.1.1のソースを組み込んだ編集ウインドウを開きます。同一プロセスの専用スレッドで動作し、開いている間はPDX編集ボタンを無効にします。Workbench終了時にはPDXプロジェクトの未保存変更を保存して編集スレッドを終了します。保存に失敗した場合はウインドウを残して終了を保留します。
MMLの有効な#pcmfileの最後の定義を優先します。有効な定義がなければ、行頭スペース///でコメントにした定義の最後を参照し、それもなければ編集名を使います。PDXEDITとPDXは編集中MUSと同じフォルダーの参照名を使用します。同名の.pdxeditを優先し、なければ同名の.pdxを自動読み込みして新規プロジェクトを作成します。どちらもなければ空の互換プロジェクトを作成します。既存プロジェクトは保持します。
PDXのPCMはEXEのあるフォルダーのPDX名サブフォルダーへ展開します。既存の同名フォルダー・ファイルがある場合は上書き確認し、「いいえ」では展開先を選択します。選択先にも既存ファイルがある場合は再確認します。展開先の選択をキャンセルすると読み込みを中止します。PDXEDITとPDXの保存先はPCMの展開先に影響されません。PDX出力にも上書き確認を追加しています。現在のPDXEDITへの自動保存は確認なしで行います。変更後2秒間操作がなければ保存しますが、保存処理・読み込み・変換・確認ダイアログ中は自動保存を停止します。別名の既存PDXEDITへの上書きを「いいえ」で拒否した場合、または保存に失敗した場合は、次の編集まで自動保存を保留します。終了時の保存では再確認できます。
PDX名が設定済みの状態で別のPDXを手動で読み込む場合、現在のPDX名(PDXEDIT名)とプロジェクト保存先を維持し、サンプルデータを置き換えます。PCMの展開フォルダー名は読み込んだPDX名を使います。起動時の自動読み込みと、PDX名が空の場合は読み込んだPDX名で初期化します。
参照可能な#pcmfileがなければ#pcmfile "編集名.pdx"を最初の行頭#titleの直後、なければ先頭へ追加します。内蔵エディタでは1回のUNDOで取り消せます。ファイル監視では元の文字コードと改行で保存します。
WAVをバンクの鍵盤へ割り当て、範囲、音量、ピッチ、逆再生を編集してPDX/EX-PDXへ変換できます。バンク000〜255、各96音色、ADPCM/P16/P8に対応します。プロジェクト形式は.pdxedit、共通設定はEXE横のPDXEditor.iniです。既存ファイルを継続使用します。起動時の言語はWorkbenchの日本語/英語に合わせます。言語ファイルはpdx_languages/から読み込みます。PDX編集内のファイル操作はプロセスのカレントフォルダーを変更しません。
「変換」のメニューでMDX/VGM/VGZ/MRL/MRZを選択します。内蔵編集ではEXE横の編集名.mdx/.vgm/.vgz/.mrl/.mrz、ファイル監視では参照ファイルと同じフォルダー・名前に保存します。完了後にフルパスをダイアログへ表示します。ファイル監視の自動変換はMDXです。
VGMはVGM 1.71でYM2151レジスタと44.1kHzステレオ合成PCM(符号付き12bit、PWM左右へ個別データ)を記録し、ループ位置を保存します。PCM P〜Wを各トラックのパンに従って左右別々に合成し、過大入力では左右共通の一定倍率で減衰してステレオバランスを維持しながらクリッピングを防ぎます。FMのパンは保持します。PCMを含む曲には直接PWM DAC形式に対応したVGMプレーヤーが必要です。詳細はPCM出力仕様を参照してください。VGZはVGMのgzip圧縮です。WAVループ回数と出力DLLには依存しません。GD3 Track Titleはコンパイラが採用した#title(#TITLEも可)、CommentはExported from NOTE MDX Workbench.です。タイトル未指定時は空欄です。VGM出力では不要なFM合成を行わず、FMのみの命令をイベント単位で組み立てます。PCMはサンプル単位で記録します。
「Mix WAV」「Track WAV」は選択中のIndependent OPM/X68Soundで、開始時のMML・音源・設定を固定して音声を生成します。C86CTL選択時は無効です。EXE横の編集名/へ編集名_Mix.wav、編集名_A.wavなどを保存します。空トラックは省き、Track WAVは最大4件を並列処理します。各トラックで曲全体を処理するため、長さ・ループ回数・トラック数で処理量が増えます。
同名ファイルがある場合は上書きを確認します。VGM/VGZ/MRL/MRZ/Mix WAV/Track WAVの処理中はボタンに進捗を表示します。処理中のボタンを押すと一時停止して中断を確認し、「はい」で中断、「いいえ」で続行します。
長時間出力の作業MDX・中間VGM/MRL・MRZ圧縮作業・出力途中ファイルは、プロセスのカレントフォルダーへ一意なworkbench-名で作成します。成功したファイルを出力先へ反映し、一時ファイルを削除します。出力先が別ドライブの場合は、完成データを出力先フォルダー内の一時ファイルへコピーした後に置き換えます。コピー中の中断では既存ファイルを変更しません。中断・失敗時も一時ファイルを削除し、まだ反映していない既存ファイルを保持します。Track WAVは全トラックの生成成功後に順に反映します。反映途中で失敗・中断した場合、反映済みのファイルは残ります。カレントフォルダーには書き込み権限が必要です。演奏用の一時MDXはWindowsの一時フォルダーに作成し、通常終了時に削除します。
build_windows.batはCMake/Visual Studio 2022でGUIと内蔵PDXEditorを含むコアDLLをビルドします。MSVCランタイムとzlibは静的リンクします。VC++再頒布可能パッケージの追加導入は不要です。必要なソースは同梱し、ビルド中のダウンロードはありません。docs/BUILD_MANIFEST.jsonに版と同梱バイナリのハッシュを記録します。実施した検査と範囲はdocs/VALIDATION.mdを参照してください。
ライセンスはLICENSE.txt、THIRD_PARTY_NOTICES.txt、licenses/を参照してください。過去の変更はCHANGELOG.mdに記載しています。
「変換」のメニューからMRLまたはMRZを選びます。MMLを一度MDXへコンパイルし、通常速度・移調なし・2ループで論理FMレジスタとPCM8操作を記録します。GUI再生の無限ループ、出力DLL、ミュート、音量・移調設定には依存しません。最大1時間を超える場合は出力を中止します。
MRLはMDXRLOG 1.2形式です。タイトル、PDX名・CRC32、見つかったPDXの内容、ループ時刻・イベント範囲を含みます。PDXが見つからなくてもPCM操作を記録し、PDX内容を含めず出力できます。不正なPDXやコンパイル・シーケンサーのエラーでは出力を中止します。MRZはrecord.mrlを1ファイル格納するDEFLATE/ZIP64で、復元した内容はMRL出力と同一です。MRZの圧縮はストリーミングで処理します。
出力先・ファイル名・上書き確認・完了時のフルパス表示・進捗ボタンからの中断はVGM/VGZと共通です。途中のデータはカレントディレクトリの一時ファイルへ保存し、正常完了時だけ出力先を置換します。中断時は一時ファイルを削除し、既存の出力ファイルを保持します。MRL/MRZの読み込み・再生はIndependentMDXなどの対応プレーヤーを使用してください。
バイナリ仕様はdocs/REGISTER_LOG_FORMAT.md、再生変更と検証範囲はdocs/RANDOM_LFO_0.33.5.mdを参照してください。
コード・資料・楽曲・バイナリの適用範囲はTHIRD_PARTY_NOTICES.txtの帰属表を参照してください。ソース版のSTAGE1.musはI.C.KaZe作曲の「Illumination LASER」向け参照楽曲で、CC BY 4.0です(タイトル権利表示: (C) 2000 MYO GAME)。詳細はLICENSE-DATA.md。他のコードの0BSDをこの楽曲に適用しません。
NoteMDXはDIS氏のNOTEのMML仕様に対応する再実装です。NOTEとその原作者DIS氏に謝意を表します。NOTE本体・note.docはこの配布に含めていません。
配布EXEは未署名です。ダウンロードしたファイルの実行時にWindows SmartScreenの警告が表示される場合があります。公開元と同梱SHA-256を確認してください。