MDXWin 雑なMXDRVエミュレータ
日本語 English
ダウンロード 20231214_MDXWin.zip 2023/12/14 履歴 (2,232,979bytes) MD5:7f4ef6527b644145454804786e96c38d
旧バージョン 2022/08/11 2022/08/15 2022/08/19 2022/09/10 2023/09/14
YouTube デモ動画 特にお気に入り

【 タイトル 】 MDXWin 雑なMXDRVエミュレータ
【 カテゴリ 】 音楽再生
【 作 者 】 Moonlight.
【動作ソフト】 Windows10(64bits)以上 .NET8.0実行環境 DirectX12以上
【推奨ハード】 IPv6インターネット環境 192kHzサラウンド環境
【 圧縮方式 】 ZIP
【転載の可否】 転載OK
・はじめに
これは、往年のX68k用MXDRV音楽ファイルをそれっぽく再生するアプリです。
・.NET8.0実行環境について
https://dotnet.microsoft.com/en-us/download/dotnet/8.0
私は上記URLから .NET デスクトップ ランタイムのWindows x64版をインストールして動作確認しました。
・特徴
素直なWindowsアプリを心掛けたので、WindowsUpdateを定期的に実行していれば大抵の環境で動くと思います。
X68kっぽい懐かしい雰囲気を感じられるユーザーインターフェースになったと思います。
YM2151とADPCMの純粋なエミュレーションを無視して直接192kHz/32bitsでレンダリングしているので、ノイズが少なめだと思います。
・悪い点
MXDRVエミュレーションがとても雑です。解釈が間違っているコマンドが沢山あると思うので正確なエミュレーションは期待しないでください。
重いです。最適化をほとんどせずに音質向上に全振りしたのでとてもCPUを食います。
重いので音飛び軽減のため音声バッファを多めに確保したので、普通の音楽アプリよりも遥かにメモリを食います。
・PMDWin/WinFMPのDLLについて
PMDWin.dll と、WinFMP.dll と、ym2608_adpcm_rom.bin を、MDXWin.exe と同じフォルダに入れると、自動的に読み込みます。
私は、PMDWin052.zip内の x64\PMDWin.dll と、WinFMP052.zip内の x64\WinFMP.dll で動作確認しました。
・参考にさせていただいた文献など
MXDRV206.LZH 本家MXDRV
mxdrv200b.lzh GORRY様の完璧なC言語移植版
mxd2063.lzh こうの様の各種解析情報
msm6258.c isaki様のADPCMデコーダ
X68Sound_src020615.zip m_puusan様のYM2151エミュレータのソースコード
mkcgrom.c ゆい様のCGROM.DAT作成コード
LZX042.NAS Mamiya様のLZX展開コード
https://w.atwiki.jp/mxdrv/pages/23.html mxdrv@ウィキ MXDRVデータ資料
https://w.atwiki.jp/mxdrv/pages/24.html mxdrv@ウィキ FM音源レジスタマップX68k
https://github.com/ooISHoo/Arduino_YM2151/tree/develop/SketchMDXPlayer ooISHoo/Arduino_YM2151 SketchMDXPlayer
https://vgmrips.net/wiki/MDX_File_Format VGMRIPS MDX File Format
https://github.com/vampirefrog/mdxtools/blob/master/docs/MDX.md vampirefrog/mdxtools MDX binary format
https://github.com/kuma4649/MDPlayer/issues/33 (MXDRV)まーきゅりーゆにっと専用データの再生に対応して欲しい #33
https://oykenkyu.blogspot.com/2022/05/ym2151.html oy. YM2151の使い方
https://nfggames.com/X68000/index.php/Mirrors/x68pub/x68tools/SOUND/MXDRV/ note.xやtpdxm.xなどの周辺ツールバイナリ
http://c60.la.coocan.jp/ C60様のFFTコードと、FMPMD2000とPMDWinのソースコード
・履歴
2022/07/20
開発開始
2022/07/28
初公開
2022/07/31
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
MXDRVエミュレーションを色々修正しました。
C++だったコードを全てC#で書き直しました。
OPM音源を直接192kHzでレンダリングするようにしました。(エンベロープ、ハードウェアLFO、M1(OP1)フィードバック、ノイズは従来通り62500Hzで処理します)
ADPCM音源の周波数変換を音質向上したつもりですが好みに因りそうです。従来の変換アルゴリズムも設定できます。
マルチスレッド化して高負荷時の音飛びを軽減したとともに、GUIの操作感を軽くしました。
2022/08/11
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
ループ回数を設定できるようにしました。
255回ループは無限ループ(データエンドコマンドと同等)として扱うように変更しました。
同期信号待機コマンドの開始時に1クロック進めていたため、音ズレが発生していたバグを修正しました。
ハードウェアLFOの同期がずれていたバグを修正しました。
PDXファイルが読み込めなかったときは、PCM番号エラーを例外から警告に緩和しました。
MDXタイトルの読み込みに失敗することがあるバグを修正しました。
LZX圧縮されたMDX/PDXファイルに対応しました。
アプリ名を変更しました。
MDXOnlineに対応しました。
CGROM.DATに対応しました。(ドットバイドット描画にならずフォントがぼけてしまったときは指摘お願いします)
yコマンドでYM2151の未定義レジスタに書き込んだときのエラーを例外から警告に緩和しました。(yコマンド以外の未定義書き込みは例外のままです)
AGC(自動音量調整)の対応に伴い、Volumeコマンドの設定値をPCMレベル設定からdB設定に変更しました。
ファイルセレクタを別ウィンドウに独立しました。
ビジュアル表示に対応しました。(要CGROM.DAT)
2022/08/15
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
MDXWinを起動した後にCGROM.DATを入れると認識しないバグを修正しました。
CGROM.DATに存在しない文字を含むMDXタイトルを再生すると落ちるバグを修正しました。
CGROM.DATのフォントレンダラを最適化しました。
CGROM.DATが無い環境で、ファイルセレクタをクリックしても反応しないことがあるバグを修正しました。
ADPCMの音量が大きすぎたので、PCMレベルで80%から65%に調整しました。
チャンネルミュートに対応しました。
ファイルセレクタのディレクトリの読み込みが終わる前にクリックすると落ちるバグを修正しました。
ファイルセレクタの実行をダブルクリックからシングルクリックに変更しました。
ファイルセレクタウィンドウとビジュアルウィンドウを、マウスで閉じた後に再度開くと落ちるバグを修正しました。
MDXタイトルのエスケープシーケンスを除去して表示するようにしました。
起動シーケンスを見直して、起動を高速化しました。
ビジュアルウィンドウの@qコマンドのクォンタイズ表示が異常だったバグを修正しました。
ビジュアルウィンドウのチャンネルVUバーをクリックするとミュートを切り替えられるようにしました。
ビジュアルウィンドウのシークバーをクリックするとシークするようにしました。
Dirコマンドで、ゴミフォルダ名が表示されるバグを修正しました。
演奏中はWindowsのスリープモードを抑止するようにしました。
2022/08/19
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
ビジュアルウィンドウのミュートとシークのマウスクリックレスポンスが向上しました。
ビジュアルウィンドウのチャンネル表記を数字からアルファベットに変更しました。
ビジュアルウィンドウのチャンネルデータ(DAT部分)の表示内容が間違っていたバグを修正しました。
MXMUTEコマンドの引数を、数字またはアルファベットで指定できるようにしました。
シークした後もチャンネルミュート状態を維持するようにしました。
プレイリストに対応しました。PlayModeコマンドとPlayNextコマンドを参照してください。
演奏中にレンダリング周波数を変更できるようにしました。YM2151の分解能(4MHz/64)=62500Hz以上を指定してください。
ヘッダとデータの間にコメントを入れているPDXファイルがあったので、各ProgramBank先頭のサイズエラーはヘッダ終端として扱うように変更しました。
OutputコマンドをONにするとMDX解析結果を出力するようにしました。併せてメニューのログ表示機能を削除しました。
メインウィンドウのメニューにカスタマイズ可能なショートカット機能を追加しました。SetFuncコマンドを参照してください。
まーきゅりーゆにっとに対応しました。(8bits符号付きリニアPCMは使用データを所有していないので未対応です)
ファイルセレクタの文字がない部分(dir .. の右側など)をクリックしても反応しないバグを修正しました。
bos.pdx.hq.zipに対応しました。BosPdxHQコマンドを参照してください。
2022/09/10
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
音関係・続行可能なエラーを無視して続行できるようにしました。IgExceptコマンドを参照してください。
音関係・音割れを検出したら自動で音量を下げるようにしました。
音関係・YM2151のレンダリングで音程単位で約0.5%低い音を出力していたバグを修正しました。
音関係・SoftPhaseLFOとSoftAmpLFOを全面的に作り直しました。SoftLFOに対するKeyOnDelayも修正しました。
音関係・SoftPhaseLFOとポルタメントとYM2151のKeyFineレジスタをDouble型で処理するようにしました。
音関係・停止時間が長いと、再生開始時に最初の音が出ないバグを修正しました。(WASAPIのスリープ動作を抑制します)
音関係・MDXのqコマンド(クオンタイズ指定)でq0を指定したときはq8として扱うようにしました。
音関係・MDXのqコマンド(クオンタイズ指定)で計算結果が0以下(発音しない)になったときでも、1クロックだけ発音するようにしました。
音関係・EX-PCM(PCM8)未使用のMDXファイルでは、PCMチャンネルのボリューム設定を無視するようにしました。
音関係・KeyOnディレイを有効にしているPCMチャネルで、休符と音符の間で消音していたバグを修正しました。
音関係・演奏中の全てのトラックが待機状態になったときは演奏を終了するようにしました。
音関係・待機状態のトラックは総ループ回数の計算対象外にしました。
音関係・YM2151のSlotMaskとKeyCodeとKeyFineは、前回書き込んだ値と同じだった場合は書き込まないようにしました。(yコマンド併用時の互換性向上)
音関係・MDXファイルが入っていたLZHファイル内にPDXファイルが存在した場合は、これを優先して選択するようにしました。
音関係・SURROUNDコマンドを廃止しました。サラウンド環境以外では、5.1chからのダウンミックスをWindows側で行います。
音関係・音色定義で異常なSlotMask値を設定すると落ちるバグを修正しました。
音関係・パンポットを0(無音)に設定すると演奏を中断していたバグを修正しました。
音以外・ファイルセレクタを右クリックでひとつ上のフォルダに移動、スペースキーで次の曲、ESCキーで演奏停止するようにしました。
音以外・半角&を含むディレクトリに移動できないバグを修正しました。
音以外・パンポットに範囲外(4以上)を設定すると落ちるバグを修正しました。
音以外・MXSeekコマンドに割合(例:50%)を指定できるようにしました。
音以外・FileSelコマンドとVisualコマンドのオプションにToggle(表示非表示切り替え)を指定できるようにしました。
音以外・終了時のカレントパスを保存して、次回起動時に復元するようにしました。
音以外・OutputコマンドをONにするとPDXに含まれる全てのPCMデータをWAVE(15625Hz/16bits/Mono)ファイルで書き出すようにしました。
音以外・再生中にテンポを変更するとシークバーが荒ぶるバグを修正しました。
音以外・MDXファイルが入っていたLZHファイル内のドキュメント類を閲覧できるようにしました。DocViewコマンドを参照してください。
2023/09/14
コマンドラインのコマンドを拡充しました。(HELPコマンドを参照してください)
音関係・フェードアウト速度がテンポに依存しなくなりました。
音関係・曲の終端(バッファサイズ0.5秒)が出力される前に停止していたバグを修正しました。
音関係・Windowsのサウンド設定が2chステレオだったときは、5.1chからのダウンミックスをMDXWin側で行うように戻しました。
音関係・使用するNAudioライブラリをV2.2.0に更新しました。
音関係・高音質化bos.pdxの音量を少し上げました。
音以外・実行環境を.NET7.0に更新して、AOT(.NETネイティブ)を有効にしました。CPU使用率が10%程度軽減したようです。
音以外・パイプ記号「|」で区切って複数のコマンドを一行に書けるようにしました。
音以外・DirectXのDirectDrawを使用してビジュアルウィンドウを再描画するようにしました。
音以外・英数字のみのフォント(8x8フォントと12x12フォント)のサポートを止めました。
音以外・CGROM.DATが読み込めなかったときは、Windowsフォントで代替するようにしました。(一応CGROM.DAT無しでビジュアルウィンドウを表示できるようになりました)
音以外・日本語を含むMDXファイル名で、ファイルセレクタの表示桁がズレるバグを修正しました。
音以外・コンソールウィンドウで、HELPコマンドとDIRコマンドの結果の行を左クリックすると、コマンド入力枠に自動入力するようにしました。
音以外・コンソールウィンドウにフォーカスがあるときに、F3キーまたはカーソル上キーを押すと、直前に実行したコマンドを再入力できるようにしました。
音以外・ビジュアルウィンドウの各チャネルの下に、音程音調音量などをそれっぽくグラフィカルに描画するようにしました。
音以外・ビジュアルウィンドウにスペアナを追加して、SpeAnaコマンドを追加しました。
音以外・ビジュアルウィンドウにオシロスコープを追加して、Oscilloコマンドを追加しました。
音以外・MML/MUS/PDL/SPLファイルがある時またはbos.pdx使用時は、ビジュアルウィンドウのノート番号の横に音色名を表示するようにしました。
2023/12/14
音関係・PMDWin/WinFMPの64bit版DLLを読み込めるようにしました。(要ym2608_adpcm_rom.bin)
音関係・「PCM8++ マーキュリー用PCMドライバー ver0.83d」の16bitリニアPCMモードに対応しました。
音関係・無視しても問題ないことを確認したので、YM2151の未定義レジスタに書き込んでも「続行可能な例外」扱いしないように変更しました。
音関係・PDXファイルのヘッダ解析中に、0x0c080808または0x08080808を見つけたときは、その時点で解析を終了するように変更しました。
音関係・ADPCMデコードプログラムを見直して大幅に高速化しました。
音関係・"リピート開始していないのにリピート終端が来た" エラーを致命的なエラーから続行可能な例外に緩和しました。
音関係・"リピート開始していないのにリピート脱出が来た" エラーを致命的なエラーから続行可能な例外に緩和しました。
音関係・PDXのヘッダ異常を致命的なエラーから続行可能な例外に緩和しました。
音関係・起動時に、音生成周波数と音出力周波数を合わせるようにしました。(Windowsのサウンド設定が62500Hz未満の時は62500Hzで生成します)
音関係・ファイルセレクタの右クリックメニューで、FLACファイルに出力できるようになりました。(要flac.exe)
音以外・演奏を開始後に停止してからビジュアルウィンドウを開くと、Null pointer exceptionが発生するバグを修正しました。
音以外・ビジュアルウィンドウをダブルクリックするかFキーを押すと、フルスクリーンモードになります。
音以外・ファイル名の終端がアンダーバーだった(TEST.MDXとTEST_.MDXが同じフォルダにある)とき、同じファイルとして処理していたバグを修正しました。
音以外・ファイルセレクタなどに表示するタイトル文字列を、連続するスペースを纏めるなどで冗長性を減らしました。
音以外・ヴィジュアルウィンドウの色設定を、ファイル MDXWin_Visual.ini から読み込むようにしました。
音以外・ヴィジュアルウィンドウの背景を、ファイル MDXWin_VisualBG.jpg から読み込むようにしました。
音以外・実行環境を.NET8.0に更新しました。
音以外・高DPI環境で文字がぼけるバグを修正しました。
音以外・環境設定機能を追加しました。
音以外・IPv4に対応しました。