スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

foobar2000八面六臂

15/03/08初稿

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

 ≪foobar2000≫のいろんなバージョンは「基音と倍音」について考えた時と同じです。


■≪foobar2000≫の「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系を使うことにします。

 ちなみに、FB32については以下ページにも浮動小数点であるという記述があります。
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にて
・アナログキャプチャ環境は基音と倍音を見て聞いた時と同じ(録音レベルのみ50)

 参考までに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”を使ってみようと思います。

・リ・サンプラーV!
 アルゴリズムはSoXかSSRCを使っており、どちらか選べるようになっています。それぞれのプラグインが無くても動作しましたので≪Resampler-V≫が内蔵しているようです。とりあえずこれまで使っていたSoXの方でちょっと弄ってみます。
 設定項目は以下の通りです。

・PassBand・・・LPFの減衰開始周波数でしょう
・StopBand・・・LPFの遮断周波数でしょう
・StopBandAttenuation・・・遮断帯域での減衰レベルでしょう
                SoXなら-96dB~-198dB、SSRCだと-240dBまで調整可です
・PhaseResponse・・・フィルタ特性と理解しておけばよいかと

 ≪SoX Resampler≫では、「aliasing/imaging」をAllowするとStopbandが高周波数に移動するようです。比率で設定しているためPassbandも一緒に移動しますので、Vではそれを独立させたというカンジですね。
 逆にPhaseResponseはスライダじゃなくて3種類の選択にしたようです。それはそれでいいかも(16/02/24追記:VでPhaseResponseについて調べました)。
 Attenuation設定があるのはいいですね。減衰特性を強くすると演算対象のサンプルが増えてエコーが拡散するデメリットがあるようですから、あまり欲張らない方がいいと思いますので。

 ちょっと弄っていたら面白い仕掛け(?)を発見しました。PassBandとStopBandの組み合わせでメッセージが出るんですね。Gentleは「ゆるゆる」、Mediumは「フツー」、Steepは「きっつぅ」かな? 作者さんの推奨値なのでしょうか。
 以下発見した組み合わせをメモしておきます。

 StopBand/PassBand
   100.0% 98.2%(Steepest) -144dB以下にしないと出てこない
   100.1% 選択できず
   100.2% 83.4%(Medium)  StopBand最低(100%だとメッセージはない)
   100.3% 93.4%(Steep)
   100.4% 選択できず
   100.5% なし
   100.6% 93.7%(Steep)
   100.6% 83.8%(Medium)
   100.6% 66.9%(Gentle)
   101.7% 68.0%(Gentle)
   102.0% 95.1%(Steep)
   102.3% 68.6%(Gentle)
   102.7% 95.8%(Steep)
   102.7% 69.0%(Gentle)
   103.0% 96.1%(Steep)
   103.0% 86.2%(Medium) 
   103.0% 69.3%(Gentle) 
   106.4% 89.6%(Medium)
   106.8% 90.0%(Medium)
   108.8% 92.0%(Medium)
   110.5% 93.7%(Medium)
   111.9% 95.1%(Mesdium)
   116.1% 82.4%(Gentle)
   115.0% 98.2%(Medium)

 さて、どんな設定がいいのでしょう? 最終的には“聴いて決める”のはアタリマエとしても、どんな設定も出来てしまいますから、何か“アタリ”は欲しいところです。

 ちょっと考えて、「市販ソフトの特性をパクる参考にさせていただく」のはどうだろうかと(笑)。
 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:諸事」をご参照ください
・アフィリエイトはAmazonのみです
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

最新記事
カテゴリ
検索フォーム
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。