2012年5月7日月曜日

DoPをADATで DSD64/DSD128/PCMの自動切替

DoPのDSD Marker 0x05/0xFA:DSD64 0x06/0xF9:DSD128 左記以外:PCMというロジックでDSD64,DSD128,PCMの自動切り替えを実装しました。
全く保護を取らないのは、意図しない切り替えが発生する可能性が高まるので、デフォルト連続3回検出でモード切替を実行するようにしました。

 また、FPGAのアーキテクチャとして、任意数の入力ポートと出力ポートをMatrixSwitchを介して接続する構成をとっていることと、DSD128の時はADAT2portを使用し、それらを連動させること、また入力ポート側のモード変更検出で出力ポートもモード変更が必要になるので入力ポート0をマスタポートとし、このポートのDSD Markerのみを監視して制御するようにしました。

 なんとかDSD Marker識別で自動的に切り替わるようになりましたが、モード切替時には、ポツッとノイズがのります。
 次はこれをどうやって消すかですが、今のところ妙案はありません。

7 件のコメント:

  1. I2Cでミュートを放り込む…ってか、DSDデータの曲間ノイズをハード処理でとるのは大変かとー…1bitストリームのフェードイン・フェードアウト処理を用意しないとダメなので…SACDP南下に使われてるチップには入ってるようですが

    なので、ソフト側で工夫する、のが一番なのですが…PCMとDSD混在だとそれも大変だろなぁ

    ってわけで、I2Cでボリューム処理、が…質的にどうかはアレとして…

    返信削除
  2. Audio GateにFade In ,Fade Outを付加する機能があり、それを試してみましたが、完全ではないようですが、ある程度効果があるようです。
    DSD再生開始前の波形を見ると、L/Rのデータはいずれも"L"固定から開始するので、これがノイズを大きくする原因のようにも思います。無音時は、H/Lオルタネートにしておけばある程度効果があるかもしれません。

    返信削除
  3. SDTrans384のDSDサポートでも同じ問題があって、解決は結局DSD信号のフェード機能をFPGAで実装する羽目に…

    ES9018相手なら電子ボリュームでも良さそうですが、他のDACチップには使えませんしねぇ…

    返信削除
  4. DSDのフェードってどうやっているんでしょうね? 
     ちなみにAudio Gateのフェードつけるとファイルサイズが大きくなっていて前後に指定した時間分フェードが足されているのかと思われます。この方式をDDCでのハード化は無理ですし... とりあえず無音時は、H/Lオルタネートパターンにして効果があるか試してみますか....

    返信削除
  5. Bunpeiです。
    私がちあきさんから少し聞いた話では対象オーディオデータのフェードインではなくて、その前にスムーズにつなげるためのプリアンブルを付けているとのことでした。AudioGateのその部分を参考にされてはいかがでしょうか?

    返信削除
  6. だとすると、曲間に無音バターンを挿入すれば回避できそうですね。
    AudioGateは、フェードパターンが選択できるので、本当にフェード処理していそうです。どう処理しているか参考のため見てみます。

    返信削除
  7. http://www.sony.co.jp/Products/SC-HP/cx_pal/vol41/pdf/tw_sacd.pdf
    をみると、DSD処理チップ中に「フェード」ってのが入ってます。

    http://www.npc.co.jp/ja/general/sm5951a_1.pdf
    ここらにもうちょっと詳しい話が…

    無音は、なにも処理せずに無音にすると、DSDデータの末尾とのゲイン差でプチっと言う音がモロに…
    (SDTransのDSD出力をオシロ眺めてたら結構がくっと違いが…今のは改善されていますが)

    返信削除