FC2ブログ

foobar2000八面六臂

15/03/08初稿

 DSD再生につき、DAC側がどんな動作しているのかはおおよそ解りました。(少なくともUDA-1では)DACユニットは受けたDSDストリームを“ありのままに”アナログ化しているようです(UDA-1ではLPFとしてPCM1795のアナログFIRフィルタを通すだけ)。
 なら、PCMをDSD変換する時、PC側はどんな動作をどう設定すればよいのでしょうか。
 DSDネイティブ再生やPCM→DSDリアルタイム変換再生が可能で、いろんな設定が解放されているプレーヤソフトとして≪foobar2000≫について考えてみようと思います。

 「オーバーサンプリング」「アップサンプリング」などの用語定義については、メインメニューからまとめをご参照いただきたく、よろしくお願いします。


■DSDネイティブ再生

 本項は「UDA-1を活かす」から移築したので「である」調で失礼します。

 必要なコンポーネントは以下の通り。
 記述はPortableModeにて。

・foo_out_asio.dll
 「foo_out_asio.fb2k-component」をfoobarインストールすることで組み込まれる。
 ≪foobar2000≫フォルダ下のuser-compornents下にfoo_out_asio名フォルダが作られ、ASIOhost32.exeとASIOhost64.exeとfoo_out_asio.dllが生成される。WASAPIなどと同列の出力dll。ASIOhost.exeを呼び出して実行するものと推定。

・foo_input_sacd.dll
 「foo_input_sacd.fb2k-component」をfoobarインストールすることで組み込まれる。
 ≪foobar2000≫フォルダ下のuser-components下にfoo_input_sacdフォルダが作られ、foo_input_sacd.dllが生成される。
 DSD形式のファイルを認識するためのプラグインと推定。
 「ASIO Driver Mode」なる設定項を「DSD」にする必要がある。PCMにすると下の設定項目に従ってDSDファイルをPCM変換して渡す模様。名前は「ASIO~」だが、PCMに設定した際のPCM変換結果はWASAPIでも出力される(ASIOに対応していないHDMI-Audio経由で再生でき、DSP-Z7の周波数表示が設定通り176.4kHzになっているのを確認)。

・foo_dsd_asio.dll
 これは本体のインストールではなく「ASIOProxy.exe(*)」を実行することで組み込まれる。
 foo_dsd_asio.dllとfoo_dsd_asio_x64.dllがインストール時に指定したフォルダに生成される。ASIOProxyをインストールしないと、「Performance/Playback/Output/ASIO」の中のASIO driversに「foo_dsd_asio」が出てこない。つまり、「foo_dsd_asio」がASIOProxyということになる。
 これを≪foobar2000≫のcomportnetsフォルダに移動しても認識されない。
 ASIOProxy.exeのインストール先はデフォルトの「Program Files (x86)」以外に変更できるが、PortableModeで持ち歩きはできない模様(実際別PCにコピーしても動かなかった)。「プログラムと機能」にアンインストール項目として登場することからもシステムに食い込むインストールになる模様。

*:単体だけでなく「foo_input_sacd.fb2k-component」とセットされたzipパックでも配布されている。Proxyとは「代理」である。

 「Performance/Playback/Output」下のDeivice選択に「ASIO:ASIO for Sony USB DAC Amplifire」と「ASIO:foo_dsd_asio」というふたつのASIOデバイスが出現するが、後者を選択しないとDSDモードは使えない。実際にアクセスするASIOドライバ(前者)を登録して使用する。DSDに関する代理業という位置づけか。

 ちなみにボリュームは効かない。DSDストリームをネイティブのまま扱っているなら効かないハズなのでその証か。

・注意コンポーネント
 foo_input_dsdiff.dllを入れておくとDSDファイルは有無を言わさずPCM変換されてしまう模様。それを再度DSD変換する処理もできてしまうようなのでDSDインジケータが点灯しても注意。
 挙動がつかみきれていないが、当該dllは入れない方がよさそう。DSDのPCM変換は上記の通り別手段があるし。

・バージョン
 以下バージョンにてネイティブDSD、リアルタイムPCM→DSD変換再生を確認。現時点の最新版を集めたつもり。

 foobar2000本体 1.2.9
 foo_out_asio 2.1.2
 foo_input_sacd 0.6.5
 ASIOProxy 0.6.5(foo_input_sacd-0.6.5に同梱)

 本体をアップデートしたらインストール必要なコンポーネントは再インストールした方がよさそう。48kHz系DSDが通らなくなったりした。Portableモードだけのハナシかも知れないが。

 Output-ASIOでfoo_dsd_asioが開けなくなくなることがある。正確ではないが、再生デバイス変更時に発生するような気がする。そうなったら別バージョンをインストールするとデバイス設定できるようになることがあるので、接続されているデバイスを設定してバージョンを戻す。

 ≪foobar2000≫のDSD設定に関する情報はRATOC社のページがよいのではと思う。ブログも含め、ネイティブ再生からリアルタイム変換再生まで記事にされている。
 あと、「foobar DSD YAMAHA」とかで検索するとワリと解りやすい解説pdfがヒットしたり。

・スケール違い
 DSDはPCMより最大6dBフルスケールレベルが低いというハナシあり。
 foobarのsacdのPCM変換オプションに「PCM Volume」なる項目(+6dBまでUp方向のみ)があるのはそのため?
 ややこしい事情があるようで、UDA-1のDSD再生フルスケールはPCMフルスケールより+3.1dB大きい模様。


■「PCM to DSD」機能を調べる

・「PCM to DSD Method」とは何か
 いろいろ試す前に、まず用語の意味について確認しておきたいと思います。

 SDMは「Sigma-Delta Modulation」の略でしょう。

 FP32は「32bit FloatingPoint」の略でしょう。
 asioproxy_readmeにある通り0.6.3には無く0.6.4で登場しますので、間違いないかと。

05/06/13:Version 0.6.4 - PCM to DSD multithreading, floating point SDMs.

 ですので、無印は言ってみれば“INT32”だと思います。
 同じTypeなら無印よりFP32の方がCPU負荷(ASIOhost64のCPU使用率)は低いですし、SDMを敢えて固定小数点演算するメリットは思いつきませんから、無印系ではなくFP32系を使うことにします。

 ちなみに、FP32については以下ページにも浮動小数点であるという記述があります。
https://diyaudioheaven.wordpress.com/digital/pc-software/foobar-2000-for-dummies-part-2/

・FP64登場
 本項15/09/07追記:ASIOProxy-0.8.3を入れてみたら「無印」がなくなって「FP64」が追加されてました。びっくりした~(笑)
 0.8.1からのようです(その前は0.7.3。foo_input_sacdのバージョンと一致しないところがヤヤコシイ)。
 言うまでもなく「64bit FloatingPoint」でしょう。
 イマドキのPCシステムなら64bit処理しても負荷は増えないでしょうから(バス幅が64bitなので。実際変わらないみたい)、FP64系の方がキモチイイかも知れませんね。
 個人的感想ですが、FP32とは結構違うと感じます。FP64にすると分離が良くなって中低域の付帯音が減少する気がします。気に入りました。
 もちろん“64bit演算だから”かどうかは解りませんけれど。ざっとみてみたところでは、DSD64のノイズスペクトルに違いはなさそうでした。ちなみに32bitWindowsでも選べて鳴ります。
 この他にも、ASIOProxyはバージョンによって「48kHz系対応」や「受け付けるアップサンプリング倍数」などの機能も変わるようです。楽しみですが要注意でもありますね。
 本稿のASIOProxyバージョンは0.7.2.1です。

・タイプ違い
 ということを踏まえて、では、Typeを変えると何がどう変わるのでしょうか。
 おそらくDSDエンコーディングパラメータ(アルゴリズム?)の違いと推察されますが、普通に試聴してみてもなかなか判りませんよね。
 しかしスペクトルキャプチャしてみると一目瞭然でした。採取条件は以下の通りです。

・441Hz/-6dBサイン波の24176ファイル再生
 純音ですので88.2kHzまで余計なスペクトルはなく、イメージングノイズも「176kHz-441Hz」まで発生しないハズで、さらにそのあたりはポストフィルタでカットされてるので事実上倍音やイメージングノイズがないスペクトルになるハズ
・アップサンプリングなどの処理はナシ
 上記の通りなので余計な処理はなくていいハズ
・ノイズシェイピングの差が一番判りやすいであろうDSD64にて
・Z68+Core i7-2600K自作機のUSB3.0拡張カードPP2U-E経由UDA-1にて

 参考までにCPU負荷を添えておきます。
 2600Kを2コア・1.6GHzに固定かつTBとHTをDisableにしてパフォーマンスを下げ、DSD256で負荷を上げた状態でのASIOhost64の値をタスクマネージャ読みしたものですので、フラフラしてる中でのざっくり値ですけれど。


1.TypeA (FP32) (アナログキャプチャ)  約28%

TypeA:DSD64


2.TypeB (FP32) (アナログキャプチャ)  約30%

TypeB:DSD64


3.TypeC (FP32) (アナログキャプチャ)  約23%

TypeC:DSD64


4.TypeD (FP32) (アナログキャプチャ)  約32%

TypeD:DSD64


・A:処理負荷とノイズシェイプ結果とのバランス型
・B:とにかくノイズシェイピングによるノイズの最大値を抑える
   (Dよりノイズエネルギーの帯域は低くなる)
・C:とにかく負荷を下げる?
・D:とにかくノイズエネルギーを極力高域に持っていく
   (Bより最大値は大きくなる)

ってところでしょうか。実際の音質の善し悪しは一概には言えませんが、TypeBかDがよさそうな気がします。

 TypeCの意図はヨクワカリマセン(笑)。負荷を下げるにしても明確な効果があるほどとは思えませんし。理由は解りませんがかなりノイジーですし(添付キャプチャは中でも穏やかな瞬間を選んだものです)。

 なお、無印もFP32と原則同じ特性のようです。若干異なるようにも見えましたが意図したものではないと思います。


■≪foobar2000≫ VS ≪JRiver MediaCenter≫

 ところで、リアルタイムPCM→DSD変換できるプレーヤとしては≪JRiver MediaCenter≫というソフトもありますよね。有料ですけれど。よく≪foobar2000≫と音質比較されているみたいですので、特性にどんな違いがあるのか気になったので調べてみました。有料ソフトの有意性や如何に?
 以下、JRMC20にて。

・DSD変換Method
 1xDSD(DSD64)、2xDSD(DSD128)、4xDSD(DSD256)、8xDSD(DSD512)が選択できます(UDA-1ではDSD512は通りません)。ちなみに「ビットストリーミング」はHDMI,S/PDIF,DSD,カスタムが選べますが「無し(推奨)」で変換再生もネイティブ再生も問題ありません。何の設定なんでしょうかね?

JRMC20:DSPスタジオ2

 それぞれのノイズシェイピング状態を見てみます。


1.DSD64(アナログキャプチャ)

サイン441-6dBDSD64:JR:PP2U-E


2.DSD128(アナログキャプチャ)

サイン441-6dBDSD128:JR:PP2U-E


3.DSD256(アナログキャプチャ)

サイン441-6dBDSD256:JR:PP2U-E


 最大値は高めでもその発生をなるべく高域に追いやる変換タイプのようです。≪foobar2000≫で言うとTypeDの方向性みたいですが、20kHzあたりを見ると差がありますね。

・DSD変換とアップサンプリング
 PCM→DSD変換再生を選択するとアップサンプリングは選択できなくなります。通常楽曲のスペクトルを見るとイメージングノイズがありませんので、DSD変換の場合は自動的にアップサンプリングをかけているようです。DACチップ内の動作を再現しているのですね。「4xDSD(DSD256)」でもイメージングノイズは見えませんので、4倍以上のOSDF処理をしてからDSD変換しているようです。
 ですので、≪foobar2000≫と≪JRiverMediaCenter≫のDSD変換音質を比較するなら、fb2k側にアップサンプリング設定しないと同条件にならないです。「DSD変換」を有効にしただけだとフィルタなし=イメージングノイズまみれと比較することになってしまいますので。

 アップサンプリングかけて比較したところ、強いて言えばJRMC20の方が厚みやエネルギーを感じるでしょうか。もちろんfb2kの設定にも依りますが。

 ということで、JRMC20では“なんちゃってNOS-DAC”的な使い方はできないということですが、リクツを考えるとDSD変換するなら強制的にアップサンプリングフィルタ入れるのはスジでしょうね。

 ちなみに、2xDSDと4xDSDではバッファリングをデフォルトより大きくとらないと音跳びしてました。また、同じDSD倍率でもfb2kよりCPU負荷は高めで、マルチスレッドではありますが複数コアにまんべんなくではなく1コアに集中処理させてるようでした。ですのでfb2kよりCPUパフォーマンス要求は高くなります。もしかしてそのあたりも音質チューニング?


■≪foobar2000≫ VS ≪AudioGate≫

 PCM→DSD変換できるソフトとしては≪AudioGate≫も有名ですよね。音質も評判いいです。
 KORG製DACユニットじゃないとリアルタイム再生は出来ませんけれどファイル変換(エクスポート)はできますから、dsfファイル化して≪foobar2000≫でネイティブDSD再生したスペクトル採取しました。
 TwitterWareだったバージョン2.3.2にて。

 みせてもらおうか、業務用DSD機器開発メーカの実力とやらを!

・DSD変換Method
 2.8MHz(DSD64)と5.6MHz(DSD128)のみ選択できます。


1.DSD64(アナログキャプチャ)

AudioGate:DSD64


2.DSD128(アナログキャプチャ)

AudioGate:DSD128


 うおお、これはさすがと言うべきでしょうか。シェイピングしたノイズの抑えっぷりは見事、これは音良さそうだなぁと思わせるスペクトルですね。DACユニット選ばなければ(*)≪AudioGate3≫買うのになぁ(苦笑)。

 こちらも同じく、DSD変換すると自動的にアップサンプリングかかっています。普通の楽曲のスペクトル見たところイメージングノイズは認められませんでしたので、4倍以上と推定されます。
 あ、つまりそういうことかな。ソフト側で全てのデジタル処理を行うワケですが、その特性は「自社製DACユニットのDSDストリーム→アナログ変換部用にチューンしてあるから他社製では鳴らさせない」ということかな。まあそれを言ったらPCMのアップサンプリングもそうかも知れないけど。

*:KORG社の説明は以下の通り。有償版でもDSD再生に他社製DACは使えないと読める。

※:AudioGate 3 を使ってDSDネイティブ再生をするにはDS-DACシリーズが必要となります。他社のDACではサンプリング周波数を2.8Hz/5.6MHzには設定することができないことをご了承頂きました上で、ライセンスをご購入くださいますようお願い申し上げます。
出典:http://www.korg.com/jp/news/2014/0530/


 以上、Type設定の参考にしようと思います。

 なお、DSD変換の違いをノイズシェイピング状態で見ているのは私にはとりあえずそれしか手がないからで(笑)、実際のパラメータやアルゴリズムの違いは解っていません。

 ところで、PCM→DSD変換を「アップサンプリング」と呼ぶことがあるようですが、どうなんでショ?
 確かにサンプリング周波数は格段に上がってますがビット深度は劇的に減少してますし、そもそもPCMとDSDは基本原理からして違うのですから、当BlogではPCM→DSD変換は「アップサンプリング」とは呼ばないようにしています。


■必須のアップサンプリングを考える

 先の考察で、「≪foobar2000≫でDSD変換するならアップサンプリングしておかないとイメージングノイズまみれになる」ことが解りました。ですので、組み合わせるアップサンプラを選びその設定を決める必要があります。

 といっても、2496以上などの場合はこれまでみてきた通り「イメージングノイズを許容してフィルタによる変形を防ぐ」考え方もあるでしょうから、その場合は不要です。が、44.1kHzや48kHz音源の場合はイメージングノイズは可聴域のすぐ隣にありますから一般的には必要でしょう。もちろん、それでもフィルタヤダって考え方もアリですし、「DSD64だとどうせシェイピングしたノイズまみれぢゃん」と言われればそれまでですけれど(笑)。

 fb2k用のリサンプラとしては≪SoX Resampler≫プラグインが代表的だと思いますが、最近登場した≪Resampler-V≫なるプラグインは設定項目が多彩で視覚的にも解りやすくなっています。
 本稿では“V”を使ってみようと思います。

 さて、DSD再生する際のアップサンプリングはどんな設定がいいのでしょう? Attnuationは高性能な方がいいでしょうけれど、StopBandとPassBandは難しいところです。
 最終的には“聴いて決める”のはアタリマエとしても、どんな設定も出来てしまいますから、何か“アタリ”は欲しいところです。

 ちょっと考えて、「市販ソフトの特性をパクる参考にさせていただく」のはどうだろうかと(笑)。
 DSD変換の前段のLPFも同じ特性と仮定して、PCM再生におけるアップサンプリングスペクトルを採取してみます。


■商用ソフトのアップサンプリング特性

 「SoundBlaster DigitalMusic PremiumHD」のS/PDIFループバック機能を使ってデジタルドメインで比較してみます。DSD再生ではデジタルダイレクトキャプチャできませんが、PCMならお手の物、デジタルで録らない手はありません。
 SB-DM-PHDの最大スペックが2496ですので、2448ファイルの2倍アンプサンプリングを行います。
 再生ファイルは≪WaveGene 1.50≫で生成した「ホワイトノイズ-3dB」です。人工波形ですのでLPFかかってません(ナイキストのヘソはありません)し、ホワイトノイズですのでナイキスト周波数以降もホワイトノイズのイメージングノイズが連続しますから、LPF特性がそのまま現れると考えたためです。
 APIは、JRMC20はWASAPI排他モードにて(ボリューム効きませんしWMPが同時動作できませんので排他でしょう)。≪AudioGate≫のWASAPIは排他じゃない(ボリューム効くしWMP同時動作します)ようなのでASIOにて。

・≪JRiver MediaCenter20≫

ホワイトノイズ2448-3dB x2:JRMC20


・≪AudioGate 2.3.2≫ 高品位
 ちなみに「リアルタイム変換:低品位」だと、どうもWindowsSoundEngineのリサンプラを使ってるような? DSD変換エクスポートの場合はノンリアルタイムでもあるので高品位だと思いますが…

ホワイトノイズ2448-3dB:AudioGateでx2


 ≪AudioGate≫はDSD変換の時のような驚きはありませんでした(笑)。StopBandはナイキストをオーバーしてる=イメージングノイズを許容するタイプのようです。
 JRMC20はずいぶんと急峻なLPFかけてるんですね。ナイキスト周波数たる24kHzで“真っ逆さま”です。念のためインパルス応答も見てみましたが一般的なプリ・ポスト対象型(Linear型)のようです。フィルタ特性には自信たっぷりってことでしょうか。

・≪Resampler-V≫設定を詰める
 fb2kのSoXアルゴリズムも劣らないと仮定し、JRMC20の特性とニアリーになる≪Resampler-V≫設定を詰めてみました。

JRMC20と近似設定(WN2448-3dBx2にて)

 スペクトルはこんなカンジです。x2だけのものなので、厳密には上記商用ソフトと条件異なりますけれど。

ホワイトノイズ2448-3dB:Resampler-V近似設定でx2

 PassBandはこれ以上キツくできないので落ち始めはちょっと丸くなってます。
 Attenuationは、-96dBだと減衰が安定しないように見えますが(VのGUI表示上の問題かも知れませんが)、-120dBもあれば充分っぽいです。

 とりあえずエコー状態を1200Hz-3dBのノコギリ波で比較してみましたが、おおむね同じに見えました。

 近似設定になってるかどうか本当のところは解りませんしもちろん似せるほどいいとも思っていませんが、参考にはなるかなと思います。少なくとも闇雲にチャレンジするよりいいかなと。

 なお、例えばTI製DACチップでのPCM再生では、ΔΣブロックの前で8倍オーバーサンプリングデジタルフィルタ処理されています。
 よって、極力DACチップ動作に近づけるコンセプトでいくなら、少なくとももう一段2倍アップサンプリングを入れて合計4倍とし、3fsイメージングノイズ除去くらいまでは行う必要があるでしょう。
 ただ、二段目以降の設定は「一番ゆるゆる」でいいのではと思っています。有効な信号は初段のナイキスト周波数までしかないので。

・そもそもDACチップのLPF特性は
 本項15/08/12追記。
 一応、「本家」の特性も参考にすべきでしたね(笑)。データシートを紐解いてみます。
 旭化成製AK4490は、シャープロールオフモードで44.1kHz時PassBand=20.0kHz(fs x0.4535),StopBand=24.1kHz(fs x0.546)。
 x0.4535はそのまんま20/22.05でしょう。「20kHzまでしか有効周波数はないと仮定している」と推察します。とするとイメージングノイズも22.05+(22.05-20)=24.1kHzまでは存在しないことになりますので、SBはx0.546になります。
 TI製PCM1795も、PBがx0.454、SBがx0.546となっています(具体的は周波数の表記はなし)。考え方はシンプルなようです。
 「DACチップのOSDFをシミュレートする」コンセプトで行くなら、PB=90.6%,SB=109.2%あたりがResampler-V設定になるでしょうか。
 世の中の音源制作中の再生は「DACチップの設定」のハズですから、その点からすると「DACシミュレーション」が一番無難かも知れませんね。


 これで、DACユニット側の動作に加えてPC側ソフトの処理特性もおおよそ解りました。
 DSD128かDSD256、TypeB(FP32)かTypeD(FP32)、アップサンプリングは上記設定を中心に、いろいろ聴きこんでいこうと思っています。

 しょわしょわノイズが気になりますけれど。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

最新記事
ERIへようこそ

Author:らかせ
「最新記事」または
「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です

・一応、拍手にコメント(非公開)付けられるようにしてあります

・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください

・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください

・引用の考え方については「007:諸事」をご参照ください

・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

・Amazonアソシエイトに参加しています(アフィリエイトはAmazonのみです)

カテゴリ
検索フォーム
FC2カウンター