2010-09-04

WSD2DSDIFF(DFF)変換

変換編もそろそろ終盤、またハードいじりに戻ることになると思いますが、もうちょっとだけ。

WSDデータも聴きたいなぁ、ということで、仕様を見比べてみて、変換を考える!

ざくっと変換方針をメモ

File_SZ ファイル全体のバイト数、ここからData_SPの位置を引き算すると、データ量がわかる
Data_SP Stream Data の開始位置…まぁ、普通にヘッダ読み進めれば関係ないんですが、すっとばす場合には重要
基本的には 0x0800 固定っぽいが、今後は不明

PB_TM 再生時間長、注意すべきは、2バイトで10進2ケタ目、1ケタ目を表現すること。つまり0xAみたいな値は0x1 0x0 として表現される。

fs 0000 0000 0010 1011 0001 0001 0000 0000b で 2822400Hz。これ以外の時は要検討

Ch_N 0000 0010 で2chを表現、それ以外は対応しないでおく。

Stream Data
並び順はMSBから、DSDIFFと同じかな… L R L R と1byte置きにサンプルが置かれる。
よくよく考えると、まんまコピーでいいんぢゃね?

というわけで、適当にDFFで必要なヘッダを作って、後はデータをそのまま貼り付けてやれば、うまくいくだろうという結論に…

で、やってみたら、普通に再生できました。とても簡単でした(笑)

これで、WSD→DSDIFF(DFF)とDSF→DSDIFF(DFF)の変換は完成。どうせ聴けるのは、DFFしかないので、逆変換は不要。
PCM→DFFはそのうち考えたいが…難しそう…

===追記===
とおもったら、1ビットオーディオのコンソーシアムにある曲の半分くらいがうまく再生できず。
新しいのは再生できるんだが、古いのがダメみたい…何が違うんぢゃろか?

===追記===
判明、どーやら、現在DSDの認識はES9018の自動認識機能に依存しているが、これがいきなり曲が始まるよーなデータだと判別しきれてないくさい。フロアノイズが乗った状態からの再生であれば問題なくDSDとして認識できる(している)が、データ先頭からどかーん、と鳴るようなデータではダメくさい。

解決案は
・最初に自動認識できるようにダミーデータを入れる
・ES9018の制御をI2Cで経由で行い、DSDデータが入ってくる事を事前認識させる…ってそんな指定あったっけな…

USB-AUDIO基板経由でSPDIF化し、DAC-1に突っ込んだら普通に聴けてちょっとびっくりしたのでした…Buffalo II経由の場合だけ再生できるものとできないものがあるっぽい…

2 件のコメント:

bunpei さんのコメント...

ES9018にDSDであることを教えてやるレジスタ設定はありません。Buffalo IIのD1はPCM I2SのときはLRCLK,DSDのときはDATA1ですが、この両者の自動判別がデータに依存するのでしょうか?

ひよひよ さんのコメント...

原因がはっきりつかめていない、というのが正直な処です。
DSD1794A基板を製作して、DSDプレイさせてみたらなんかわかるかなぁ、と思いつつ…

データ的にはなんら特殊な事をやっている雰囲気もなく、ざっとDSDで鳴るものと鳴らないものとがよくわからない状況です。鳴らない奴は、途切れ途切れに、ざっ、って感じの音が入るのでなんらかの設定になってるんだろうとは思いますが…そこらが判別できるレジスタとかあれば、それを読み出せば、とも…

メーカーに直接質問しても返答ないでしょうしねぇ…