kuma4649 / MDPlayer

GNU General Public License v3.0
126 stars 15 forks source link

(MXDRV)まーきゅりーゆにっと専用データの再生に対応して欲しい #33

Closed kuma4649 closed 3 months ago

kuma4649 commented 6 years ago

知識  mdx、pdxは両方ともまーきゅりーゆにっと向けに作られている  mdx    Fコマンドにて周波数指定    内部コマンドは0xed    パラメータを分解し、指定されたデータ形式と周波数を取得    (キーオンやボリューム指定などは既存のコマンドを使用する?)  pdx   内部フォーマットは基本同じ   ファイルごとの配置場所32bitテーブルが並んだ後、    リニア8bit/16bitなど各種ADPCM/PCMデータ形式のデータが並ぶ。    (mdx側でPCMデータの形式が指定される)   *偶数バイトに整形が行われる(68000CPU向けの加工?)

関連技術  PCM8++(まーきゅりーゆにっと向けpcmプレイバックプログラム)PCM8の上位互換 tpdxm.x(pdxメーカー)

まーくん2さんよりご要望

kuma4649 commented 6 years ago

内部の仕様を探すものの見つからず。。。難航。

DeltaRazero commented 5 years ago

First of all, excuse me for writing in English. My Japanese is not great and I would end up relying too much on Google Translate.

I saw this issue and I think I can hopefully provide some insights. My knowledge on MXDRV and the Mercury Unit is limited, but I hope it has some value.

First of all it is important to specify the relation between PCM8 and the Mercury Unit:

Also informative:

So what does this mean in terms of emulation? To support Mercury Unit, PCM8 code of the MXDRV emulation has to be changed to mimic PCM8PP. Perhaps emulation of the Mercury Unit itself can be reused from px68k https://github.com/ptitSeb/px68k/tree/master/x68k (mercury.c mercury.h), so you only need to write the code for PCM8PP's read/write actions. However, as far as I know there is no sourcecode of PCM8PP available, so I don't know if it does anything special compared to normal PCM8 (minus the final encoding to ADPCM).

I have a huge archive of Mercury Unit documentation (in Japanese) and a lot of software for it. If you have any interest, you can reach out to me through Twitter, E-mail, etc. and I'll send you whatever I have.

kuma4649 commented 5 years ago

ご意見ありがとうございます! マーキュリーユニットのスペック自体はそこそこ理解しているつもりでいます。

>If you have any interest, you can reach out to me through Twitter, E-mail, etc. and I'll send you whatever I have. ありがとうございます!助かります(TvT)

わからないことは以下の通りです。 1.mdx/pdxファイルから、マーキュリーユニットを使用しているかどうか判定するための情報を得るにはどうすればよいか。 2.mdx/pdxファイルから、ADPCM/PCM、周波数などの各種情報を取得するにはどうすればよいか。 3.mdx中のマーキュリーユニット関連のデータフォーマットはどうなっているのか。 4.マーキュリーユニットを利用したデータを作成するためのツール。 5.マーキュリーユニットを利用した検証用のデータ。(mml含む)

ほぼ全てファイル関連ですね。。。

DeltaRazero commented 5 years ago

Regarding your questions:

  1. mdx/pdx files do not specify whether to use OKI MSM or Mercury Unit. mdx files can only specify normal mode (1ch ADPCM) or EX-PCM/PCM8 mode (up to 8ch ADPCM). The user must specify operation by OKI MSM or Mercury Unit. On a real X68000 machine PCM8 or PCM8PP would already be in computer memory before MXDRV would be started. MXDRV will only send information to an external PCM driver through an interface. The interface MXDRV uses, is the interface from the PCM8 technical specification. PCM8 will use the OKI MSM, PCM8PP will use the Mercury Unit.

  2. Frequency and 8bit-PCM/16bit-PCM/ADPCM mode is changed with the command 0xED value. It must be used on the sample channels (P-W in MML) to change. The values for PCM8PP: image (PCM8 values only have 0~6)

  3. mdx file format remains the same. pdx file format follows the EX-PDX specification (I have documented it here https://vgmrips.net/wiki/PDX).

  4. I am currently working on a new PDX tool for my MXDRV compiler. It supports assigning 8bit-PCM/16bit-PCM/ADPCM with basic resampling capabilities. It is not done yet, but I am working very hard to have it finished by the end of this year.

  5. I will need to search for verification files. In theory everything that uses 8-bit PCM or 16-bit PCM should sound much brighter/detailed/crisper/etc. when used by Mercury Unit. By the time I have finished my compiler, I can make such data.

kuma4649 commented 5 years ago

ありがとうございます!大分理解できました。

1.ファイル内部にOKIを使うかMercuryを使うかを示す情報は無い。 演奏データ中のedコマンドで使用される値できまる。 →プレイヤーでは、常にMercuryUnit相当の動作をさせておけば問題なさそう。

2.3.9kHzは3900Hz? 小数部分以下の数値も知る必要がありますか?

3.承知しました。edコマンドのパラメーターが増えただけで、 フォーマットは変更なしということですね。

4.5. おぉ!完成が待ち遠しいです(^_^

kuma4649 commented 3 months ago

PCM8PPに切り替えることによりいくつかは再生できるようになったと思われるので、一旦対応完了とさせていただきます。