foobar2000七変化

12/05/20初稿

 現在メインプレーヤとして活躍中のfoobar2000についてまとめておきます。
 奥深いっすね~


■バージョン違わば:本体編

 あんまり違わないだろうとタカをくくってv1.1.7を使い続けていましたが、音質がだいぶ変わったという情報を見て、先日v1.1.11(本日現在最終安定版)に入れ替えてみたところ・・・

 まるで違うちゃないの!(爆)

 低域の分離がよくなりスッキリしたカンジになりました。かなり良くなったと思います。
 Portableモードでminimumインストールしましたが、同じインストール方式で比較しても印象は変わりませんでしたので、プログラム本体の違いだと思います。
 minimumだとDSPプラグインがインストールされませんが、必要なものを入れれば機能自体は動作します。あと目立ったところではconvert機能が入りませんが、Playerとしては不要なので影響ないです。

 foobar2000の音質については、そのバージョンを添えて語らないと意味がなさそうです。


■バージョン違わば:排他WASAPIプラグイン編

 本項12/07/22追記。
 ずっとVer2.1を使ってきましたが、Ver3が出てきているようです(現在まだbeta5)。

・MMCSS
 最大のトピックは「イベントモード」サポートだと思いますが、「MMCSS(Multimedia Class Scheduler Service)」サポートも拡大されているようです。従来の「Playback:Priority3」から「Pro Audio:Priority1」への格上げ? です。
 MMCSSはVistaから導入された名前の通りの機能ですが、実際、Ver3beta5に変更すると再生時に「WASAPIHost64.exe」なるタスクが走るようになります。
 E-350ドライバではイベントモードが使えないのですが、こちらが効いているのか、タイマーモードのままでもVer3beta5の音質改善はかなり感じられます。
 と、ここで気になるのが同じくMMCSSを最適化しているのではないかと思われるFidelizer。こちらも「Fidelizer.exe」なるタスクが常駐しますので、なんかバッティングしてるような気が(苦笑)。
 そこで、Fidelizer2.1(Extremist Mode)をOffして比較してみたところ、Ver3beta5環境下ではそんなに変わらないようです。となると起動時間とバーターになるFidelizerはOffでいいかな。

・インストール
 「foo_out_wasapi.fb2k-components」なるファイルで入手することになります。
 これはfoobar2000に関連付けられたファイルになっているため、foobar2000が「Standard Mode」でインストールされている環境下ではダブルクリックでインストールできますが、「Portable Mode」でインストールしている場合は無反応になっちゃいます(OSから見るとPortableModeは“インストールはしていない”状態なので)。
 そういう場合は「Library/Configure」のcomponets一覧からInstallすればOK。「user-components」なる新フォルダが生成されてその中に3個ファイルが出現します。が、「componets」フォルダに移動しちゃっても動作するようですね。
 ちなみに「Standared Modeでインストールしたfoobar2000」にダブルクリックでインストールした場合、関連ファイルがどこにも出現しません。キモチワルイので探してみたら、ユーザフォルダ下の隠しフォルダAppDataの中にありました。

 なお、いずれの場合も旧バージョンdllは削除してからインストールが吉です。

 12/09/22追記:09/02付けでbetaじゃないVer3がリリースされたようです。従来の「タイマーモード」はおそらく「push」という名前になったようですね。


■楽しいプラグイン

 バージョンが違っても音が違いますが、foobar2000の最大の魅力はDSP機能などによって信号処理をコントロールして音の違いを楽しめることではないでしょうか。
 そういうことができるのもPC-Audioの醍醐味のひとつですから、その一翼を担うPlayerとして貴重だと思います。

 ちなみにDSP設定は「DSP chain presets」で複数保存できますが、それはconfigurationフォルダ下の「Core.cfg」に記録されているようです。ので、フォルダまるごとコピーすれば引き継げます(Portableモードの場合)。

・リアルタイムアップサンプリングして聴く
 「SoX Resampler」を使っています。
 本稿以下に詳細を記していますが、導入その他に関してはHDMI-Audio構築記事にちょろっと記しています。

 ところで、ふと気になることが。当プラグインを通すとサンプリング周波数は確かに上がっています。
 が、bit深度の方は何bitで出力しているのでしょうか?

 どうすれば調べられるかちょっと考えた結果、foobar2000(v1.1.7)の「Convert機能」でファイル化したものがUpSampling結果だろうと想定しました。

 結果、bit深度「Auto」で出力したファイルは「16bit」でした(SoX Version0.7.0にて)。
 「24bit」に設定すれば24bit深度のファイルができます。バイナリ覗いてみるとFFでも00でもない8bit分が増えていますが、全くランダムな値ではなく規則性がありそうです。もともと無かった下位8bitを演算で作り出しているのでどうしてもゼロ近傍の値になるからでしょうか? UpSampling処理に依る有意性のある8bitなのか否か、ちょっと判断つかない状態です。
 SoXを入れないで24bit設定にすると単純に8bit分ゼロ詰めされています。

 念のため元々24bitデータ(2496)のConvert出力も確認してみました。SoX(DSP)は入れていません。
 「Auto」で出力すると24bitになりました。「8bit」に設定すれば8bitになりました。きっと「16bit」設定なら16bitでしょう。

 う~む、「Auto」設定だとbit深度はDSP出力になるのではと思っていたのですが、“元データのフォーマット”と一致しますので、そうとは言えない結果に(苦笑)。
 Convert機能についてちょっと調べたところ、「bit深度の設定はエンコーダに入力する値」だというような記載がありましたので、DSPの前段の設定なのかも知れません。「Auto」ならフォーマットのままDSPに渡し、「24bit」なら下位bitをゼロ詰めしたりカットしたりして渡す、ということかも。
 どうも、Convert機能ではResamplerが出力するbit深度は確認できなそうです。

 なお、Convert機能の動作は出力APIの設定(DeviceやOutput formatで選択するbit深度)には関連しないようです。DeviceがNulでもConvert出力は可能ですので、そもそも無関係と推定されます。

・DSDをリアルタイムPCM変換して聴く
 上記リンク先記事の通り、DSDファイルも聴けちゃいます(マルチも!)。HDMI経由だとPCM変換になりますけれど。本来規格にあるのにUSBに先を越されるのは歯がゆいですが、記事の通り仕方ないですね。

 さて、こちらの出力bit深度はいくつでしょうか。「DSD Decorder」の出力bit数をConvert機能で確認してみたところ、「Auto」設定では16bitのWAVファイルを出力しました。「24bit」なら24bitファイルで、中身も24bit有効なようです。
 こちらの場合はDecoder出力の設定っぽいですね。やはりDSPの前段なのでしょうか。

・DSDをネイティブで聴く
 DSDファイルをそのまま再生することも出来るようになりましたね。もちろん対応DACじゃないとダメですけど。DoPでもASIOでも可。DSD512設定も可(!)

・PCMをリアルタイムDSD変換して聴く
 上記リンク先記事の通り、ついでに「PCM→DSDリアルタイム変換再生」もできます。
 そういう変換する意味はΔΣDAC動作について考えた記事に記した通りです。

・つまるところのbit深度
 本項12/12/29追記。
 リアルタイムアップサンプリングとDSD再生で懸案だった本件を「実際の出力データ」で確認。「Output format」を24bitに設定してS/PDIFに出力し、RecPcmWin1.04で24bit録音してみました。

 SoXもDSDも下位8bitが00hなどの特定パターンになるようなことはなく、一応24bit有効なデータが出力されているようです。
 foobar2000(排他WASAPI運用)におけるbit深度設定は原則「Output format」だけだと思いますので、foobar2000の内部処理は24bit以上であり(*)、最終的に「Output format」で文字通り“出力フォーマット”としてbit深度を決めている、と理解しておこうと思います。

*:本体ではなくプラグインですが後述の通りSoXは32bitFloat処理の模様。

 なお、DSP処理のハナシではありませんが、ファイルとプレーヤ設定のbit深度の関係についても考えてみた中でfoobar2000も例に引いています。


■SoX Resamplerのパラメータ

 SoXとは「Sound eXchange」の意味のようですね。各種フォーマット変換やエフェクトやフィルタなどを開発しているプロジェクトのようです。詳しくは判りませんが(苦笑)。

http://sox.sourceforge.net/SoX/Resampling

 「SoX Resampler」は、そのプロジェクトの中で開発されているサンプリングレート変換アルゴリズムを用いてlvqclさんが作られたDSPプラグイン、ということになるのでしょう。

 ということで、パラメータの意味を知るには上記ページやプラグイン作者lvqclさんのBBSなどを読み込むしかなさそうです。もちろん、web上の先達の方々の記事を参考にしながらなのは言うまでもありません。
 以下、私の理解ですので間違ってる可能性も(すごく)ありますことご承知おきください。私的な備忘録ということで。

 聴感上の評価による設定は、(少なくとも自分なりには)理屈上の変化は何かを知った上で行いたいと思いますが、それにはSoX本家サイトにありますインパルス応答におけるエコー発生を示した「Impulse Graphs(from 44.1kHz to 96kHz)」(*)を見ていくしかなさそうです。

*:http://sox.sourceforge.net/rate-44k1-96k.png

 エコーは本来元の音の後=ポストに付くものですので、前に付くプリエコーは不自然な音として音質に影響するであろうとのこと。ただし、あくまでも上記グラフは「インパルス応答」であって自然音声ではないことは意識しておくべきでしょう。

 本家SoXはパラメータスイッチを付けて制御するCUIらしいので、GUIたる「SoX Resampler」のパラメータと対照させながら考える必要があります。
 順に見ていきたいと思います。
 ちょっとうろ覚えですが、本体1.1.11、SoXは0.7.9だったと思います。

foobar2000.jpg

・Quality
 Resampling品質でしょう。Normal/Good/Bestが選択できます。おそらく処理負荷と精度がバーターだと思われます。
 Version 0.6.6から名称と内容が変更されているようです。
  ・Best -- the same as old 'Very high' mode
  ・Good -- old 'Very high' mode but with single precision (instead of double precision in 'Best' mode)
  ・Normal -- old 'High' mode with single precision

 「single precision=単精度」「Double precision=倍精度」のようです。PCにおける数値表現方式の違いですが、前者が32bit、後者が64bitという理解でもよいかも知れません。
 つまり、「倍精度処理のVery high=Best」「単精度処理のVery high=Good」「High(単精度処理のみ)=Normal」ってことでしょうか。

 また、SoXの基本的考え方として以下のようになっている模様です。

SW Quality Band-width Rej[dB]   Typical Use
-q  quick     n/a    ≈30@Fs/4  playback on ancient hardware
-l  low      80%     100      playback on old hardware
-m medium    95%    100       audio playback
-h  high      95%    125      16-bit mastering(use with dither)
-v  very high  95%    175      24-bit mastering

 quickとlowは当プラグイン作者さんも「そんな古いハードを使うことは考えてない」と仰ってるように、気にしなくてよさそうです。というかお言葉通りVersion 0.6.6以降は「High(Normal)」と「Very High(Good,Best)」しか選択の余地ないし。

 省略すると「-m」と推定されます。

 作者登場のBBSによると、Jul 30 2011, 16:54付けのコメントで「多くの人がVery Highを使ってるけど“much point”とは思わない」とおっしゃってます。
Since there's no difference between 0.6.0 'Very high' and 0.7.0 'Best' and most people use this resampler in 'Very high' mode, I don't think there is much point in doing this.

 これと上記のモード解説とあわせて考えると、もしかすると16bit/44.1kHzソースの場合は「Normal」が(理屈上は)最適なのかも知れません。
 SoX本家FAQ5番(*)を見ても、16bitより深い場合は-v、そうでない場合は-hを使え、とありますので。
Quality setting: if resampling (or changing speed, as it amounts to the same thing) at/to > 16 bit depth (i.e. most commonly 24-bit), use VHQ (-v), otherwise, use HQ (-h, or don't specify).

*:http://sox.sourceforge.net/Docs/FAQ

 エコーについては、「Impulse Graphs」で「-v/-h/-m/-l」を比較する限り、-lを除いてそれほど違いはなさそうです。SoX Resamplerでは-vか-hに相当するモードしか選択できませんので、この点では悩む必要はなさそうです。

 May 7 2011, 14:32のコメントで「ditherは持ってない」とあります。プラグインとしてのInput・Outputは32bitFloatのようですね。
The plugin doesn't dither. It receives 32-bit float samples and sends 32-bit float samples back to foobar2000 core.

 上記モード解説によると「16bit masteringのソースの場合はditherを使え」と読めますが、当プラグインはditherを持ってないということですから、Output側のdither(WASAPIだと出てくる)をONした方がよいのかも知れません。
 FAQ5番を見ても、16bitではditherをONするのが推奨されてるっぽいですし。
If you're mastering to 16-bit, you also need to add 'dither' (and in most cases noise-shaping) after the rate.

 なお、Jan 3 2010, 13:12のコメントで「LPFは持ってない」とありますが、正確な意味は解りません。
That's because it doesn't have lowpass filter.

・Passband
 文字通り「通過帯域」で、90%~99.0%まで選択できます。「阻止帯域(ナイキスト周波数)」に対する比率のようですね。帯域を広くとると負荷が上がってエコーが増えるデメリットがありますが、Resampling精度は上がるというバーターのようです。
 オリジナルSoXは-bオプションで帯域を74~99.7%まで指定できるようですが、エコーが酷いので99.0%以上は推奨されないとのこと(これがプラグインで99.0%までしか設定できない理由でしょう)。
The -b option allows the band-width to be set to any value in the range 74-99.7%, but note that band-width values greater than 99% are not recommended for normal use as they can cause excessive transient echo.

 比率が高いということは「通過を許可する帯域」が「通しちゃいけない帯域」に近づいていきデジタルフィルタでのカットオフがどんどん急峻になっていくため、過激なフィルタリングする結果エコー(リンギング)が多くなるってイメージかな?(理屈は解りません!)

 Feb 17 2011, 20:00付けで以下のコメントがありますので、-sは「-b 99」と同じだそうです。実際には「steep filter」というオプションのようですが。
Yes, -s is the same as -b 99.

 という理解で「Impulse Graphs」の「-v(おそらく95%)」と「-vs(おそらく99%)」と「-vb 99.7」を比較すると、いかにも99.7%は問題ありそうに見えますね。また、medium品質になりますが「-mb 90」と「-m(おそらく95%)」との比較では前者の方が半分くらいに見えます。エコー増加は95%を越えるあたりから急峻になるのでしょうか。
 上記FAQ5番ではデフォルトの95%から変えるな、とありますね。

・Allow aliasing
 Aliasingとは「折り返し歪(雑音)」のようです。サンプリング理論によるナイキスト周波数(サンプリング周波数の1/2)より高い周波数成分がナイキスト周波数で折り返してそれ以下の周波数に出現するもの。
 それをAllow(許可)するしない、ということです。
 オプションSWとしては「-a」のようなので、「-vM」と「-vMa」を比較すればよいようです。
 許可する(チェックする)と処理負荷低下とエコーが減る(約半減だとか)メリットがあるようですが、折り返し雑音は増えるハズ。しかし、そもそもこれが“アップサンプリング”時にどんな影響があるのかはよく解りません。ダウンサンプリングする場合はターゲットのナイキスト周波数が下がるので新たな雑音が発生するのは解る気もするのですが…
 一応、許可した方が負荷とエコーが減るが歪は増える、というイメージでしょうか。

 14/10/18追記:その後いろいろ経験した中で、ダウンサンプリングもアップサンプリングも基本原理はLPFみたいだと思うようになりました。

・ダウンサンプリング・・・例として96kHzを48kHzにする場合
      折り返し歪み(エイリアシングノイズ)が発生しないよう、24kHz以上の成分をカットするLPFかけてから
      間引き。

・アップサンプリング・・・例として48kHzを96kHzにする場合
      ひとつおきにゼロサンプルを挿入。
      それによって発生してしまう「存在してはならない周波数成分(イメージングノイズ)」を除去するため、
     24kHz以上をカットオフするLPFかける。
      するとそれが補間フィルタ(インターポレーションフィルタ)になる。

 だとすると、この設定は要するにLPF特性を変化させるということでいいのかな。「許可する・しない」とか言われるとゼロイチっぽいですけどそうじゃないみたい。
 実際の波形を稿末に示しましたので、詳しくはそちらで。
 ちなみに、だとするとPassbandの設定もズバリLPFの通過帯域をナイキスト周波数の何%にするかってことでよさそうな。

・Phase response
 デジタルフィルタの位相応答を調整できる、ということですが私のような素人には理解できません。
 パラメータSWは以下の意味のようです。

  -L・・・Linear Phase、50%だと思います。省略するとこれのようですね。
  -I・・・Intermediate Phase、つまり中間点の25%のことでしょう。
  -M・・・Minimum Phase、つまり一番低い0%のことだと思います。

 そのつもりで「Impulse Graphs」の「-v/-vI/-vM」や「-vs/-vsI/-vsM」を比べてみると、そのまんまパーセンテージがエコー成分を前につけるか後ろにつけるかの違いになっていると理解すればよさそうです。
 50%に近づけるほど位相応答がよくなるのがメリットのようですが、エコー成分が「プリエコー」に回ってくるのがデメリットになるようです。リニア(50%)だとポストとプリの比率が50:50になるようです。
 上記FAQ5番では40kHzを越える場合はLinearにしろとあります。

 16/02/04追記:パラメータ名の「Phase response」についてやっと調べました。


■SoX Resamplerの“邪道な?”使い方

 「SoX Resampler」でx4にするにはふたつ方法があることを思いつきました。「x4設定で1段」が普通ですが、foobar2000ってDSP処理を重ねられるので「x2設定で2段」という方法もあり得ます(後者でもDSP-Z7が176.4kHzで受けているのを確認)。
 試してみると「x2設定で2段」の方が解像感などアップしたみたいな。Convert機能で出力した2種類のファイルをWaveCompareで比較するとすべてではなくかなり飛び飛びですが「1」程度異なるサンプルが出現しています。バッチリ音質変化として聴きとれる違いとは思えませんので、データ自体が変化しているからと言うよりfoobar2000の再生動作の違いが効いてるということになるでしょうか。
 “x2x2”はおそらくプレーヤソフトの負荷は増える方向=一般論としては悪い方向だと思いますが、変化を楽しむソフトウェアチューンのひとつということで。
 ちなみに「Passband」を変化させるとほぼすべてのサンプルの値が異なるようです。また、「44.1x4」と「176400指定」のConvert出力結果はWaveCompareで一致しました。

 さて、パラメータについていろいろ調べていて、ふと思い立ったことが。
 44.1kHz→88.2kHzと88.2kHz→176.4kHzの2段に分けるだけでなく、それぞれパラメータを変えて処理したら意味があるのではないかと。邪道かも知れませんが…

 ・アップサンプリングによる音質変化効果が高いと推定される44.1kHz→88.2kHzでは「品質重視」
 ・どちらかと言うとDACの前段で上げておくことに意味がありそうな88.2kHz→176.4kHzでは「エコー抑制重視」

 そういうコンセプトで設定で2段重ねにしてたみたところ、なんだかどえらくいいカンジというか何とも言えない魅力がある音に(fb2k1.1.11&SoX0.7.9にて)。
 まだまだいろいろ確認してみる必要はありそうですが、こんな「自分なりの理屈を付けて音の変化を楽しむ使い方」もアリかなということで。

 15/02/16追記。「トランジスタ技術2013年12月号」P.124によると、ΔΣ型DACのデジタルフィルタは2段または3段構成になっているそうです。1段目は急峻な減衰特性、2段目以降は高周波数帯の処理なので甘くなっているとのこと。
 上の設定、あながちハズレじゃなかったスかね?


・SoX Resampler専用BBS(配布,解説)
http://www.hydrogenaudio.org/forums/index.php?showtopic=67373

・作者さん登場の議論BBS
http://www.hydrogenaudio.org/forums/index.php?showtopic=67376&hl=

・14/11/03追記:SoXの日本語訳ページのリサンプリング関連項目(rate項)
http://www.hcn.zaq.ne.jp/___/unix/sox-ja.html#E-rate


■Ditherの正体

 本項13/01/20追記。
 上にも出てきますが、排他WASAPIの16bit出力設定では「Dither」が使えます。敢えて高域にノイズ成分を加えて聴感上の音質改善を図る? 機能です。
 iTunesの挙動に関して実験した時、ついでにその“波形”を確認してみたので追記しておきます。
 「サイン波:440Hz:-10dB」1644ファイルをfoobar2000の排他WASAPIでDitherオン再生し、デジタルループバック録音して得たファイルと元ファイルを反転mixして“ディザによる差分のみ”ファイルを得ます。
 それを、SoXでリサンプルして2496排他WASAPI再生表示したのが以下のスペクトルです。

 USB DAC/ADC・・・SoundBlaster DigitalMusicPremiumHDのデジタルループバック
 再生ソフト・・・foobar2000 1.1.15 + WASAPI 3.0
 録音・表示ソフト・・・WaveSpectra 1.50

fb2k 1644Dither 2496SoX-WASAPIplay 2496WASAPirec

 リサンプリングが入りますが、カットオフ周波数がより大きい方が見やすいので2496変換再生してみました。
 スペクトル見れば一目瞭然ですが、データ値は-1,0,1だけじゃなく、もっと大きな値もあります(0と±1しかない場合はおそらく演算誤差ですね)。

 ちなみに、この音をHD650で聞いてみましたがなんにも聞こえませんでした(このDACのヘッドホン出力をボリュームMaxにて)。


■Aliasingの正体

 本項14/10/12追記。
 以下の手法で「許可するしないによるエイリアシングノイズのスペクトル」をとってみました。

 再生ソフト・・・foobar2000 1.2.9
 リサンプラ・・・SoX 0.8.3
 ソース・・・e-onkyoのハイレゾ無料サンプル 24bit96kHz版
       “【無料サンプル音源】 SOUVENIR part II_01_【無料サンプル音源-WAV-96 24】
       SOUVENIR de Florence op. 70 I. Allegro con spiri.wav”
 SoX設定・・・「Allow aliasing/imaging(*)」のチェックなしとありで「Downsample x2」を実施、24bit48kHz化
         ちなみにQualityはNormal、Passbandは95.0%、Phase responseは50%。
 波形生成・・・Sound Engine Free 5.02で反転mix

*:以前のバージョンではなかった「imaging」って表示が出現しています。ANALOG DEVICES社などの資料では、どうもDA変換する場合にサンプリング周波数(ナイキスト周波数ではありません)を中心に繰り返し発生する折り返しノイズのことを「imaging」と言ってるようですが、統一用語ではなさそう?
 もしかするとSoXではダウン時(ADC動作と対比)はaliasing、アップ時(DAC動作と対比)はimagingと言っているのかも知れません。


 なお、本調査はリサンプリング結果を見るのが目的ですので、スペクトル表示見やすさのためのリサンプリングは行っていません。以下すべて10秒目です。

・元スペクトル(2496)
                                                           続きアリ⇒
Souvenir2496.png

 20kHz以上にも有意と思われる周波数成分が出現しています(どんな機器で録音したのかはワカリマセンが…特にマイク?)。
 ところで、このソースには48kHz付近のLPFによるカットが見られません。そのあたりにエイリアシングノイズが発生したとしても問題ないのであえてLPFかけてないってことでしょうか。ハイレゾってそういうモンなんでしょうかね?

・「Allow aliasing/imaging」チェックなし(エイリアシングノイズ出現を許可しない)

Souvenir2448.png

 24kHz手前でLPF帯域カットが見られます。チェックしない=許可しない=事前にカット、ということでいいようです。

・「Allow aliasing/imaging」をチェックする(エイリアシングノイズ出現を許可する)

Souvenir2448 Allow aliasing

 こちらは急峻なカットはしてません。24kHz以下にエイリアシングノイズ=「折り返し雑音」が発生しているハズです。

・反転mix

Souvenir2448mix.png

 チェックありなしの音声ファイルを反転mixしたスペクトルが上記です。
 およそ23kHz以上の部分はLPFによる差分が大半だと思います(もちろんそこ以外にもフィルタ演算による影響は出ているでしょうけれど)。
 ですので、22~23kHzあたりの成分がエイリアシングノイズでしょうか。
 チェックをどうするかは、この周波数帯の「このレベルの歪み発生」と「エコー量」とのバーターをどう考えるか、ということですね(リアルタイムでやる時はCPU負荷も考慮対象になるでしょうけれど)。
 もちろん、この音声ファイルだけ再生しても聞こえません。

 このチェック有無による「エイリアシングノイズ(折り返し雑音(歪み))」音質悪化はもっと酷いものだと思ってましたが、どうも「許可するしない」というゼロイチの設定ではなく、「LPF特性差」のようです。


 なお、≪Wavosaur≫で24kHzをカットオフ周波数にしたLPFかけてから≪WAVEフォーマット変換プラス≫で48kHz化したものとSoXの「許可しない」変換との差分は、「許可する」との差分に非常に似ていました。


■アップサンプリングで増えた高域の正体

 本項14/10/12追記。
 上記の「Downsample x2」で得たサンプルを「Upsample x2」で元に戻したのが以下のスペクトルです(設定はDown時と同じ。Aliasingはチェックなし)。ちょっと変則的かも知れませんが、一般的なアップサンプリング結果と見て問題ないと思います。
                                                           続きアリ⇒
Souvenir2496→2448→2496

 増えた高域には何もないみたいですね(笑)。
 アップサンプリングの基本原理は上述の通りLPFがキモみたいなので、“ないのは当然”なのでしょうね。
 SoX Resamplerは高域を新たに生成しているワケではないということです。
 高域が生成されていないのにサンプルレートを上げる「アップサンプリング」の意味・効果については、デジタルオーディオの原理を勉強した記事に記していますのでよろしければ。


■Imagingの正体

 本項14/11/08追記。本稿では、アップサンプリング時の除去すべきノイズを「イメージングノイズ」と呼ぶことにしています。
 さて、上記で「Aliasing/Imagingを許可しない」アップサンプリングのスペクトルを提示しました。
 「許可する」は以下のスペクトルになります。
                                                           続きアリ⇒
Souvenir2496→2448→2496 AllowAliasing

 「Aliasingの正体」と同じ手法で採った差分スペクトルは以下の通りです。
                                                           続きアリ⇒
Souvenir2496→2448→2496 許可するしないmix

 こちらもLPF特性の差とみていいと思います。ちっちゃい山は“LPFでカットされなかったイメージングノイズの裾野”でしょうね。
 SoXはリアルタイムアップサンプリングとして使われることが大半ですよね。「このレベルのノイズ出現」と「CPU負荷&エコー」とのバーターをどう判断するか、というところでしょうか。
 「半減」とか言われちゃうと、エコー少ない方がいいような気もしますね。


■LPF特性

 本項15/03/03追記。
 考え方などはPCM→DSD変換再生について考えた記事に詳述していますが、SB-DM-PHDのS/PDIFループバックで2448-3dBのホワイトノイズファイルをSoXでx2することで採取した「aliasing/imaging許可するしない」のLPF特性を添付します。

・許可しない

SoX aliasing許可しない

・許可する

SoX aliasing許可する

 高域側にスライドするイメージみたいですね。


■もうひとつのSoX

 本項15/02/10追記。
 「Resampler-V」なるプラグインが登場(*)しているのですね。リサンプリングアルゴリズム自体ウリではなく既存のSSRCまたはSoXを用いており、PassBandやStopBand、Attenuationなどのパラメータを「処理特性を視覚的に確認しながら調整できるGUI」がミソのようです。Impulse応答の変化も確認できます。VはVisualのVかな?
 本家SoX ResamplerにはないStopBandパラメータがあるなど調整にも便利ですが、まさに「アップサンプリングすると(LPFかけると)どうなるのか」をイメージするのにも役立つと思います。

*:http://www.hydrogenaud.io/forums/index.php?showtopic=107779

 これもDSD変換再生でいろいろ弄りましたので詳しくは上記リンク先にて。


メインメニューへ

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

ERIへようこそ

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

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です
・一応、拍手にコメント(非公開)付けられるようにしてあります
・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください
・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください
・引用の考え方については「007:諸事」をご参照ください
・アフィリエイトはAmazonのみです
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

最新記事
カテゴリ
検索フォーム
FC2カウンター