JUDstyle PMDRC All your MML R belong 2 us.
Dialies
単発駄日記
日常堕日記
Musics
PMD関連
雑多
Computers
Games


since 8,Aug,1999

最新の情報

最新の情報は、PMDRC - JUDSTYLE Wikiで扱っています。ここの更新は終了したので、リンク先を参照してください。

近況

 十分な機能と動作を確認できたため、PMDRCとそのシリーズの開発は停止しました。故障の対応は報告やリクエストがあれば出来る限り行いますが、保証は出来ません。まれに、作者の気分で更新します。

 また、開発の停止に伴いPMDRCシリーズの(V1.01c)全ソースコードを公開します。ただしこれは公開するだけで諸々の権利を放棄するものではありませんし、実行ファイル同様、十分い注意を払い利用してください。当プログラムはVisualC++ (R) 6.0 Enterprise Editionにて開発していました。PMDRC内部構造やPMDデータ構造についての質問はは可能な限り答えますが、ソースコードそのものに関する質問はご遠慮ください。

2005.11.20追加情報

 V1.11を公開しています。ソースはさらに汚くなったので公開しません :-) V1.10でのクレジット表示に不具合があり、直しました。/dodumpで2バイトコードが業を跨いだときにゴミが混じる現象も解決しました。
 機能追加として、同期ポイントと称して、指定した小節数毎に小節番号を表示する機能を加えましたが、小節線処理自体に問題があるため、こちらも完全ではありません。PMDRCを耳コピ代わりに使っている人にはもしかしたら有効かもしれませんが、あくまでもオマケ程度です。おそろしく長い曲の後半数節だけを揃えて抜き取りたいときには有効でしょう。

2005.9.18追加情報

 PMDRC V1.10にて、機能的に重要な問題点と回避方法が発見されています。PMDRCにPMD演奏データを入力した際、PMDRC.DLL内で問題が発生しプログラムが異常終了します。これはある条件を満たすデータであれば確実に発生しますが、これをおよそ8割程度(手持ちデータ調べ)回避する方法もあります。
 エラーが発生する場合の多くが、小節線処理(小節の切れ目を自動判定して半角空白を挿入する処理)に起因しています。この場合は、小節線処理を行わないことで問題を回避することが出来ます。 /nobarline をコマンドラインに挿入して逆コンパイルを行ってください。

 また、 /dodump にて行末に2バイトコードがあった場合、次行の1バイト目に余計な"z"が混入しています。これらの問題点については、もう少し分析できたらまとめてfixする予定です。 fix

概要

 PMDRCは、PMD演奏データを逆コンパイルしMMLを生成するアプリケーションである。従来型の「演奏データを完全に再現するMMLの出力」ではなく、「再利用に適したMMLの出力」に注力しているのが特徴である。ただ、デバッグの都合上「完全に再現させる」方がやりやすいので最近その傾向が強い。デバッグでいちばん簡単な方法が、「再度コンパイルしてみる」という方法だからだ。

 PMDRCのコアはPMDRC.DLLである。PMDRC.DLLは単にMMLを生成するだけでなく、特殊な条件付けや設定の変更、出力されるMMLの編集など、多機能なインターフェースを持つ。

 また、FMPデータの読み込みに対応するため、FMPデータからPMDデータを生成するF2PCV.DLLを開発した。全てのファンクションを正確には表現できないが、PMDRCレベル4相当のMMLをPMD形式にコンバートする。

 現在完成しているアプリケーションはPMDRCC.EXEのみであり、今後GUIを開発する予定であるが、万にひとつの可能性だとしても、GUIを作成してくれる勇者が現れることを願ってPMDRC.DLLを公開するものである。まぁ、いないだろうけどな。

Professional Music Driver / P.M.D. は M.Kajihara 氏が作成したFM音源ドライバです。
FMP は Osamu "Guu" Nagai 氏が作成したFM音源ドライバです。
PMDRC / PMDRC.DLL は JUD(T.Terata) が作成したアプリケーションです。

構成

PMDRC.DLL

 PMDRCコア。入力した設定情報とPMDデータから、MMLを出力する。

F2PCV.DLL

 FMP→PMDデータ変換コア。入力した設定情報とFMPデータから、PMDデータを出力する。ただし、このデータはPMDで演奏できない(保証しないだけで出来ないわけではないがかなり危険。PMDRCで読まない部分はダミーデータであったりするため)

PMDRCC.EXE

 PMDRCコマンドラインアプリケーション兼サンプル。旧バージョン(Ver.0.93以前)と同様の機能を持ち、DLL化したPMDRC・F2PCVをロードし逆コンパイルを行う。

PMDRCG.EXE

 PMDRCGUIアプリケーション。コマンドラインアプリケーションにはないインターフェースを提供する。のらりくらりと作成中。

バージョン情報

 アプリケーションからコア(DLL)を切り離したため、バージョン合わせに注意する必要があるため、バージョン管理を設けた。コアは、一致しないインターフェースにて呼び出される処理を拒否することができる。また、新しすぎる(古すぎる)アプリケーションからの処理も拒否することができる。

 アプリケーションは、DLLをコールする際に、以下の項目をDLLに知らせる必要がある。
・アプリケーションのバージョン
・インターフェースのバージョン

 DLLはアプリケーションからの処理に対し、以下の項目をアプリケーションに知らせる。
・DLLのバージョン

 アプリケーションは、DLLから処理が戻ってきた際にリザルトコードとDLLバージョンをチェックし、DLLバージョンが意にそぐわないものであった場合は処理を中断するのが望ましい。
 なお、インターフェース構造体における各バージョン情報とリザルトコード情報の場所は不変であるものとする。

 バージョンの記述に関しては、バージョン値を1000倍したものを整数で示す。但し、この末尾一桁は任意の値を使用できるものとする。

ex.)
1.00 → 1000
1.03 → 1030
1.23d → 1234

PMDRC.DLL / F2PCV.DLL 配布条件

 自作・他作に関わらず、当DLLを利用するアプリケーションプログラムとともに無償配布する場合、以下の条件に従う限り自由に(現行法の定める範囲で)行うことができる。この場合、パッケージにこだわらない(PMDRC.DLL/F2PCV.DLL単体で添付可能)。
・当DLLの作成者が JUD(T.Terata) である旨を明記すること
・改変したものである場合、改変前のバージョンと作者名、改変者名をを明記すること

制限・免責

 このソフトウェアの著作権保持者は JUD(T.Terata) である。
 P.M.D.の著作権保持者は KAJA(M.Kajihara) である。
 FMP の著作権保持者は Osamu "Guu" Nagai である。
 このプログラムは、リバースエンジニアリングを行うソフトであるため、データ作成者の認めない形で利用することは概ね違法(但し、国内法・国際法の定める法のもとでの意)となる。一般的に、営利ソフトウェアの一部を当プログラムへの入力ファイルとして利用することは違法である可能性が高い確率で発生する。
 プログラム作者は、このプログラム実行時に発生した全ての問題における全ての責を負わない。
 作者は、機能向上のため、予告なくプログラムの改変を行う場合がある。
 作者は、機能向上のため、予告のうえプログラムの改変を行う場合がある。
 有償無償を問わず、上記配布条件を満たさずプログラム作者の許諾もない場合、実行ファイル・中間オブジェクト・ソールファイルの再配布・転載を認めない。紙面・誌面への掲載・添付については、これを一切認めない。
 当プログラムの実行ファイル・中間オブジェクト・ソールファイルを改変したものの公開については、改変版であることを明記すること、バージョン番号に変更を加えること、何らかの技術で保護されないコンテンツに掲載すること、の3点を条件に暗黙で認める。ただし、作者である JUD(T.Terata) に改変した全てのソースコード及び実行ファイルを渡した場合はこの限りではない。

履歴

Version Date
新規 1.00 2004/4/1 旧jpr.exe Ver.0.93から新規リリース。
pmdrc.dll 1.00 リリース。
pmdrcc.exe 1.00 リリース。
pmdrcc.c と pmdrcif.h をリリース。
Ver.UP 1.00a 2004/4/21 pmdrc.dll 1.00a リリース。アプリケーションは変更ナシ(そのまま使用できる)。
 →K/Rパート制御系MMLが出ると異常終了してしまう問題を修正
Ver.UP 1.00b 2004/5/17 pmdrc.dll 1.00b リリース。
 →まれにメモリ一括解放に失敗→ダウンとなる問題を修正
 →#PPZExtend/#FM3Extend 出力処理を追加、
  インターフェース構造体上のパラメータを有効にした
 →音符長が1小節の 9/16 , 5/16 , 5/8 である場合に、
  音符長が出力されないことがある問題を修正
pmdrcc.exe 1.00b リリース。
 →F2PCV.DLL があればFMPデータを変換して出力する機能を追加
 →F2PCV.DLL一時ファイル出力名用にコマンドライン引数 /@<filename> を追加
Ver.UP 1.00c 2004/5/21 pmdrc.dll 1.00c リリース。
 →標準音長(構造体内i_deflen)にゼロが設定された場合の処理を変更
  ( 前:「デフォルト値自動算出」 → 後:「標準音長を使用しない」 )
pmdrcc.exe 1.00c リリース。
 →標準音長(コマンドライン引数 /l )にゼロが指定された場合、
  プログラムがダウンする場合がある問題を修正
Ver.UP 1.00d 2004/5/27 pmdrc.dll 1.00d リリース。
 →不良トラックが存在した場合、それより後のトラック長さ管理が
  出来なくなることがある問題を修正
 →音符長が1小節の 9/16 , 5/16 , 5/8 である場合に、
  音符長の連結に使用している記号を変更( '+' → '&' )
pmdrcc.exe 1.00d リリース。
 → /@ オプション指定時に、ファイル名を正しく認識しない問題を修正
f2pcv.dll 1.00d リリース。
 →新規リリース
Ver.UP 1.00e 2004/5/28 f2pcv.dll 1.00e リリース。
 →未対応のFMPコードに対し異常終了する問題をある程度修正
  ( PCM:0x63/71/73 , FM:0x73 )
Ver.UP 1.01 2004/7/7 pmdrc.dll 1.01 リリース。
 →YAMAHA製V2・V50・TX81Z向けのFM音色出力機能を追加
 →標準音長の重み付き自動算出機能を追加
 →Zコマンドが複数パートに存在している場合に
  エラーとなり異常終了する場合がある問題を修正
pmdrcc.exe 1.01 リリース。
 →TX81Z向けFM音色出力を行うコマンドライン引数として
  /dotx81z を追加
 →標準音長の重み付き自動算出機能を禁止するコマンドライン引数として
  /noautolen を追加
 →生成MMLをファイルに出力するコマンドライン引数として
  /. を追加
 →コマンドライン引数なし実行時に表示される案内メッセージの間違いを修正
f2pcv.dll 1.01 リリース。
 →バージョン打ち直し。
Ver.UP 1.01a 2004/7/12 pmdrc.dll 1.01a リリース。
 →ゼロ番FM音色があるとFM音色が出力できない問題を修正
 →FM音色領域終端を認識できないことがある問題を修正
 →FM音色出力ルーチン全体を見直し
pmdrcc.exe 1.01a リリース。
 →VED.exeのデータファイル Filename.FF の入力に対応
  (データファイル内部の全てのFM音色を出力)
Ver.UP 1.01b 2004/7/17 pmdrc.dll 1.01b リリース。
 →V4.8のMC.EXEで作成されたデータを処理する際、MC.EXEが記録した
  曲の長さを表示し、解析結果と突き合わせチェックする機能を追加
 →V1.01aにて発生した、V4.2以前のMC.EXEで作成された一部のデータを
  逆コンパイルできなくなる問題を修正
 →V4.5以降のMC.EXEで生成されたデータファイルに対し、
  全体制御コマンド出力機能で出力される情報を追加
  (#PZI/PCM/PPSFile,#Title,#Composer,#Arrenger,#Memo)
 →以前のバージョンで逆コンパイルできない一部のデータに対し
  矛盾を解決して逆コンパイルできるよう一部のデータ整合チェックを変更
  (が、逆に一部の不正データを出力レベル3以下で処理できなくなった)
pmdrcc.exe 1.01b リリース。
 →Filename.FFからコンバートしたデータに不整合が含まれる問題のを修正
 →MML出力レベル4以上で、#PPZExtend,#FM3Extend以外の
  全体制御コマンド出力機能を抑制するよう変更
 →プログラム終了コードにエラーコードが出力されていない問題を修正
 →出力するMMLの整合性が信頼できない場合、標準出力に対し
  その旨を出力するように変更
f2pcv.dll 1.01b リリース。
 →出力するPMDデータに不整合が含まれる問題の一部を修正
 →入力FMPデータ内のFMPコメント文字列を、#Memo定義文として
  出力PMDデータにコンバートして出力する機能を追加
Ver.UP 1.01c 2004/11/22 pmdrc.dll 1.01c リリース。
 →V1.01bで変なバージョン番号を出力する問題を修正
 →小節線区切り機能において、小節線区切りの起点を
  自動・[L]基準・データ先頭基準 の3つから選択出来るよう変更
 →上記変更に伴いインターフェース構造体の i_autothresh を
  「未使用」から「使用」に変更
pmdrcc.exe 1.01c リリース。
 →小節線区切り機能において、小節線区切りの起点を選択できる
  コマンドライン引数 /B を追加
 →小節線区切り機能において、小節線のオフセットを指定できる
  コマンドライン引数 /F を追加(インターフェース変更なし)
Ver.UP 1.10 2005/ 1/ 5 pmdrcc.exe 1.10 リリース。
 →F2PCV.DLLのインターフェース変更に対応
 →FM音色データ出力抑制コマンドライン引数 /novdump において
  F2PCV.DLLにコンバートを抑制させるよう変更
f2pcv.dll 1.10 リリース。
 →インターフェースを変更
 →FMP音色をコンバートできる機能を追加
Ver.UP 1.11 2005/11/20 pmdrcc.exe 1.11 リリース。
 →同期ポイント用オプション /G<数値> に対応
pmdrc.dll 1.11 リリース。
 →小節線代わりに挿入している空白を、同期ポイントとして
  指定小節ごとに `#数値` で表示する機能を追加
 →dump時(/dodump)に、余計な字が混じる問題を修正
f2pcv.dll 同封のみで更新なし

ダウンロード(1.10系)

PMDRC110.LZH (Ver.1.10)

実行用ファイル一式。

PMDRC111.LZH (Ver.1.11)

実行用ファイル一式。


ダウンロード(1.01系)

PMDRC101.LZH (Ver.1.01)

実行用ファイル一式。

PMDRC101aP.LZH (Ver.1.01a)

バージョンアップ差分(F2PCV.DLL除く)

PMDRC101b.LZH (Ver.1.01b)

実行用ファイル一式。

PMDRC101cP.LZH (Ver.1.01c)

バージョンアップ差分(F2PCV.DLL除く)

PMDRC101SALL.LZH (Ver.1.01c)

ソースファイルを含むフルセット。

J_QQQ.MZ

データファイルサンプル。

J_QQQ2.MML.txt

MML出力レベルをに設定した場合の、データファイル逆コンパイル後のサンプル(プレーンテキスト)。ほぼ全てのMMLが出力される。

J_QQQ3.MML.txt

MML出力レベルをに設定した場合の、データファイル逆コンパイル後のサンプル(プレーンテキスト)。音色番号(@)を簡略化(PCMループアドレスの非表示)し、タイ/スラー・音符・休符・ループ制御以外の出力が抑制される。

J_QQQ4.MML.txt

MML出力レベルをに設定した場合の、データファイル逆コンパイル後のサンプル(プレーンテキスト)。音符・休符・ループ制御以外の出力が抑制される。

J_QQQTX.MML.txt

TX81Z型の音色出力を行った場合の、データファイル逆コンパイル後のサンプル(プレーンテキスト)。音色出力方式が変更されている。

J_QQQ0.MML.txt

ダンプのサンプル(プレーンテキスト)。

J_QQQ1.MML.txt

スーパーダンプのサンプル(プレーンテキスト)。

J_QQQORG.MML.txt

参考までに、元のMMLファイル(プレーンテキスト・8タブ・80カラム)。

既知の問題点

 チェックも甘いので、たまにバグのせいで落ちる。とくにF2PCVは、バンバン落ちる。F2PCVは認識率もまだ半々といったところ。
 PMD68専用・PX専用コード等、PMD98以外のデータに対応していない。
 F2PCV.DLLが、コメントのないデータをPMD形式にコンバートする際、末尾に無用な2バイトが付加される(何の影響もないので無視している)。また、コメント部のエスケープ文字・(俗に言う)FMP外字・2バイト改行文字に対して何の対処も行っていない。
 小節線処理でダウンすることがある。

最後に

 インターフェース・DLLに関する質問・要望・問題報告等はないと思うけど掲示板まで。

written by ©JUD / powered by FreeBSD, FedoraCore, APACHE, MediaWiki.