flyingnote
flyingnote
マイペースにやってます。

マイルーム

現在のシステム構成
現在のシステム構成
持ち家(戸建) / リビング兼用 / オーディオルーム / 16畳~ / 防音あり / スクリーンなし / ~2ch
(NAS音源システム) NAS (QNAP : HS-210、HS-251)の音源をアップサンプリングサーバーに転送。 (ストリーミングシステム) Deezer等ストリーミング音源をComp…
所有製品

レビュー/コメント

レビュー/コメントはありません

カレンダー

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

最新のレス

日記
製品レビュー/コメント

製品レビュー/コメントへのレスはありません

お気に入り製品

お気に入り製品はありません

お気に入りユーザー

  

お気にいられユーザー

日記

libsamplerate (SRC) について

このエントリーをはてなブックマークに追加
2021年04月23日

前回はUPnPレンダラー兼アップサンプリングサーバーのイメージをアップしました。
せっかくですので、もう少し続けてみようと思います。

先日アップしたイメージは、libsamplerate (SRC) の音を聴くためのものだと書きましたので、libsamplerate について記載します。といっても、過去に当方のブログで書いた記事の焼き直しです。お目汚しご容赦ください。

まず、libsamplerate (Secret Rabbit Code) のサイトです。
http://www.mega-nerd.com/SRC/index.html
ざっくり翻訳、引用します。

Secret Rabbit Code (aka libsamplerate) is a Sample Rate Converter for audio.
シークレットラビットコード(別名 libsamplerate)は、オーディオ用のサンプルレートコンバーターです。
(以下略)
libsamplerate というのは別名なんですね。
しかしmpdではlibsamplerateで設定、説明など行われているので、こちらでもそうします。

次に、品質についての説明から引用、翻訳します。
http://www.mega-nerd.com/SRC/quality.html

When measuring the performance of a Sample Rate Converter, there are three factors to consider:
サンプルレートコンバータのパフォーマンスを測定する場合、考慮すべき3つの要素があります。

Signal-to-Noise Ratio - a measure of how much noise the sample rate conversion process adds to the signal.
SN比 - サンプルレート変換プロセスが信号に追加するノイズの量の尺度。

Bandwidth - most sample rate converters attenuate high frequencies as part of their operation. Bandwidth can be measured by finding the frequency where the attenuation is 3dB and expressing that as a percentage of the full bandwidth at that sampling rate.
帯域幅 - ほとんどのサンプルレートコンバータは、動作の一部として高周波を減衰させます。帯域幅は、減衰が3dBである周波数を見つけ、それをそのサンプリングレートでの全帯域幅のパーセンテージとして表すことによって測定できます。

Speed - the faster the better :-).
速度 - 速いほど良い:-)。

一旦引用終わり。
2つめの「帯域幅」の項目で興味深い記述があります。「ほとんどのサンプルレートコンバータは、動作の一部として高周波を減衰させます」とのこと。一般的に、コンバートされたデータはビットパーフェクトではないだけではなく、DA返還後の高域音声信号への影響があり得るということです。
この点については、libsamplerateの設定とも関連するので後述します。



続いて、他のサンプルレートコンバータとの比較について説明があります。
冒頭にsndfile-resample (libsamplerate を使用)、Resample (by Julius O Smiths)、ResampAudio の3つについて記載されています。
引用、翻訳を続けます。

It should be noted that the first three converters above are based on the algorithm by Julius O. Smith which emulates the conversion of the digital signal to an analogue one and then sampling the analogue signal at the new sample rate.
上記の最初の3つのコンバーターは、Julius O.Smithによるアルゴリズムに基づいており、デジタル信号からアナログ信号に変換し、新しいサンプルレートでアナログ信号をサンプリングするのをエミュレートしていることに注意してください。

引用翻訳終わり。
つまり、libsamplerate はDA-AD変換をエミュレートするリサンプラーだということです。このような面倒な手順を踏むのでPCに高い水準のスペックが要求されるということですが、2020年代ともなれば僕たちが日常的に使用するPCで実用上十分と考えます。

先に挙げられた3つ以外に、いくつか他のリサンプラーについての説明も記述されていますが、エミュレートのようなことは行われないとのことです。
例えば、SoXについては下記のように書かれていますので引用します。
SoX provides three methods of resampling; a linear interpolator, a polyphase resampler and the Julius O. Smith simulated analogue filter method.
SoXは、3つの方法でリサンプリングを提供します。 線形補間器、多相リサンプラー、Julius O.Smithがシミュレートしたアナログフィルター法です。
引用、終わり。



次にMiscellaneous API Documentationから引用、翻訳します。libsamplerateの設定について説明があります。
http://www.mega-nerd.com/SRC/api_misc.html

Currently, the five converters available are:
SRC_SINC_BEST_QUALITY = 0,
SRC_SINC_MEDIUM_QUALITY = 1,
SRC_SINC_FASTEST = 2,
SRC_ZERO_ORDER_HOLD = 3,
SRC_LINEAR = 4

SRC_SINC_BEST_QUALITY - This is a bandlimited interpolator derived from the mathematical sinc function and this is the highest quality sinc based converter, providing a worst case Signal-to-Noise Ratio (SNR) of 97 decibels (dB) at a bandwidth of 97%. All three SRC_SINC_* converters are based on the techniques of Julius O. Smith although this code was developed independantly.
SRC_SINC_BEST_QUALITY - これは、数学的なsinc関数から導出された帯域制限補間器であり、最高品質のsincベースのコンバーターであり、97%の帯域幅で97デシベル(dB)のワーストケースの信号対雑音比(SNR)を提供します。 3つのSRC_SINC_ *コンバーターはすべて、Julius O. Smithの手法に基づいていますが、このコードは独自に開発されたものです。

SRC_SINC_MEDIUM_QUALITY - This is another bandlimited interpolator much like the previous one. It has an SNR of 97dB and a bandwidth of 90%. The speed of the conversion is much faster than the previous one.
これは前のものと同じ方式で、別の帯域を使った制限補間器です。 SNRは97dB、帯域幅は90%です。前のものよりはるかに速い速度で変換します。

SRC_SINC_FASTEST - This is the fastest bandlimited interpolator and has an SNR of 97dB and a bandwidth of 80%.
これは最速の帯域制限補間器であり、SNRは97dB、帯域幅は80%です。

SRC_ZERO_ORDER_HOLD - A Zero Order Hold converter (interpolated value is equal to the last value). The quality is poor but the conversion speed is blindlingly fast.
ゼロ次ホールドコンバーター(補間された値は最後の値と同じです)。品質は悪いですが、変換速度は驚くほど速いです。

SRC_LINEAR - A linear converter. Again the quality is poor, but the conversion speed is blindingly fast.
線形コンバーター。やはり品質は悪いですが、変換速度は目がくらむほど速いです。

以上、引用終わり。
mpdではmpd.confに所定の記載をすることで、libsamplerateの設定が出来ます。
今回アップしたセットでは「SRC_SINC_FASTEST」で設定しています。
これを選択した理由は3つです。

1)BEST_QUALITY、MEDIUM_QUALITYでは、PCへの負担が大きすぎ、特にBEST_QUALITYでは実質的には使用できません。

訂正追記です ---------------------------------------------------------
上記でBEST_QUALITY、MEDIUM_QUALITYでは、PCへの負担が大きすぎと書きましたが、MEDIUM_QUALITYはPC環境によっては充分使用できます。
FASTESTよりも階調が深く広い音になる印象です。
--------------------------------------------------------- 訂正追記、以上

訂正追記です ---------------------------------------------------------
コメントで過誤の指摘をいただきました。
リサンプルに際して高域が減衰する件についてですが、帯域幅に対して80%とした場合、低い方のサンプリングのナイキスト周波数の80%になるということです。
つまりCD音源でFASTESTの設定だと、17640Hzで3dBの減衰ということになります。
下記の2)で記述した内容については、最初から考え直さないといけないということです。
--------------------------------------------------------- 訂正追記、以上

2)FASTESTの設定でも、サンプリング周波数を上げれば十分に良質な変換が期待できます。BEST_QUALITY、MEDIUM_QUALITYの音質上の優位性は、FASTESTと比べて問題視するほどには大きくないと思われます。先に「ほとんどのサンプルレートコンバータは、動作の一部として高周波を減衰させます」という説明がありましたが、ここで併せて説明します。

FASTESTの設定で、3dB低下する帯域幅は80%です。
計算してみます。
368,000*0.80=294,400
368kHzにアップサンプリングした時に高域が3dB減衰するのは、294,400Hzだということです。可聴帯域への影響は極微と思われます。
実際、368kHz、768kHzのハイレゾファイルと44.1/16のアップサンプリングを比較試聴しても、殆ど差は聴き取れません。DA-AD変換をエミュレートするリサンプラーであることが寄与していると考えています。
BEST_QUALITY、MEDIUM_QUALITYを採用したとしても、3dBの減衰が可聴領域に及ばないという意味では同じです。PCへの負担が増えるだけ不利になります。

44.1kHzの設定でlibsamplerateを通すと、35,280Hzで3dB減衰することになりますから、高域の減衰が可聴領域に影響する可能性があると思います。実際、アップサンプリングなしでの再生音よりも、なんとなく大人しめの音になります。
つまり、libsamplerateは高い周波数で使った方が、本領を発揮するということです。

3)ZOH、LINEARでは、僕の経験上、むしろ使用しない方が良いことも多いです。
理論上はそれで問題ないと言われることがありますが、現実的には悪影響の方が大きい場合があり、使ってみないと分からないところがあります。
またFASTESTの設定で得られるほどの音質は得られません。



昔、mpdでlibsamplerateによるアップサンプリングが試みられたとき、BESTを諦めFASTESTを使うことに抵抗感があった人は、多かったのではないでしょうか。また当時使われたサンプリング周波数は88.2kHzか、96kHz、高くても192kHzだったのではないでしょうか。
BESTでは音声再生できないと思われ、明らかな改善効果が聴き取りにくいサンプリング周波数で使用されたことが、libsamplerateは使っても意味がないと判断された理由だったのではないかと考えています。

次回の日記→

←前回の日記

レス一覧

  1. flyingnoteさん はじめまして
    リサンプリングってなかなか厄介ですよね。音質の善し悪しや、良いと思える物でも常用しているソフトから使用できないって物やハード面で厳しいこともありますし。

    私は以下の理由でsoxrをメインに使用しています。
    1.ハード及びソフトとの兼ね合い
    2.音質は追求していないが好みの音にはしたい
    下記URLにいくつか設定例があり、設定次第で音は随分違ってきます。
    好みの音に設定するには時間も必要になりますが、面白いので結構はまってます。
    http://archimago.blogspot.com/2017/12/howto-musings-playing-with-digital_23.html

    soxr以外ではRubatoというリサンプラーも1台だけ使用しています。
    音的には、プリセットの状態でもsoxrより好みです。
    ただ使用できる環境が限定されますし、設定上の妥協も必要になりますが。
    https://github.com/HEnquist/camilladsp/tree/v0.5.0-beta6#resampling

    bycoal at2021-04-24 12:01

  2. 私は速度も品質も十分だと思っているのでsoxrを使ってます。

    少し誤解があるようなので
    「帯域幅95%」なら-3dBになるのは低い方のサンプリングのナイキスト周波数の95%になります。
    つまり44.1KHzを176.4KHzにアップサンプリングした場合に-3dBになるのは
    44.1/2*0.95 = 20.9475KHz になります。
    つまり、アップサンプリングすることによって高域が減衰することになります。
    そもそも完璧なアップサンプリングならナイキスト周波数以上の成分はゼロなので何倍にアップサンプリングしたとしても22.05KHz以上の成分は全く無い(-無限大dB)ことになります。

    ちなみにサンプルレート変換の比較をしたサイトがあります。96 kHz を 44.1 kHz にダウンサンプリングしたものの比較ですが、参考になります。

    https://src.infinitewave.ca/

    byassi at2021-04-24 12:09

  3. coalさん はじめまして

    soxrは、残念ながらこちらでは上手く使えていません。soxrのサイトを読もうとしたこともあったのですが、なにしろよく分からなかったのです。
    Archimago's Musingsはちらっと読んだだけですが、興味深い内容ですね。教えてくださってありがとうございます。
    piCorePlayerでのアップサンプリングですが、SoXは設定しようと思ったら細かいんですね。今は手が出せないので、余裕ができたときに、なんとかできたらと思います。
    Rubatoは、これはなんだかすごいですね、、、いよいよ手に負えない感じがします。

    こちらでは音質でlibsamplerateを選んでいます。mpdとインストールするだけでいいので、私のようなのでも簡単に使えます。
    しかしpulseaudioでは対応しなくていいということになっていますし、なくなったりしたら、もっと難しいソフトを使えるようにならないといけない。SoXでもお手上げ状態なので、まずいなあと思っています。

    byflyingnote at2021-04-24 23:06

  4. assiさん

    誤解の件、ありがとうございます。勘違いしていました。てっきり変換される先の周波数で計算するのだろうと思っていました。
    ご紹介いただいたサイトは見たことがありますが、私には理解が及びませんでした。
    すみませんが、理解不十分なので質問させてください。

    1)低い方のサンプリングのナイキスト周波数ということは、アップサンプリングでは変換される前のナイキスト周波数、ダウンサンプリングした場合は、変換される先のナイキスト周波数ということでいいんでしょうか。

    2)libsamplerateは、DA-AD変換をエミュレートするということらしいです。
    エミュレートの過程でPCによる計算で得られるヴァーチャルなアナログ波形が、AD変換のエミュレートでリサンプリグされるというのが私のイメージです。
    その過程の何処で元の信号の高域(CDからリッピングされたWAVだとしたときに「帯域幅95%」なら-3dBになるのは20.9475KHz)が減衰するのかよく分かりません。
    ダウンサンプリングされるのなら、変換される先のナイキスト周波数で、決まるということになります。
    アップサンプリングされるのなら、変換される前のナイキスト周波数で、決まるということになります。
    エミュレートする過程のイメージ自体が違っているのでしょうか。もっと簡単にはイメージできない数学的な処理なのかなと考えたりしています。

    byflyingnote at2021-04-24 23:09

  5. assiさん

    書き換えるのは大変なので、訂正追記しました。

    byflyingnote at2021-04-25 00:52

  6. >1)低い方のサンプリングのナイキスト周波数ということは、アップサンプリングでは変換される前のナイキスト周波数、ダウンサンプリングした場合は、変換される先のナイキスト周波数ということでいいんでしょうか。

    この理解で良いと思います。

    >2)libsamplerateは、DA-AD変換をエミュレートするということらしいです。

    これについては私にはわかりません。
    デジタル信号処理を学んだことのない素人なので、整数倍のアップサンプリング、整数分の1のダウンサンプリングについてしか理解してません。
    (理解はしてませんが、SOXで非(整数/整数)の変換を行っても品質に問題ないことは数値計算ソフトを使って確認してます)

    まあ、どんな処理をしているにしても最初のステップでアップサンプリングした結果には不要なノイズ(折り返しノイズ)が含まれているはずです。含まれていなければこの時点でアップサンプリング完成です。
    不要なノイズは除去する必要があるのでアップサンプリングの最終段階でローパスフィルタを通す必要があります。
    元のサンプリング周波数の半分(ナイキスト周波数)以下が必要な信号で、それ以上はすべてノイズです。
    したがってナイキスト周波数以下を完全に通して、それ以上を完全に遮断する理想フィルタが必要になります。
    理想フィルタは実現できないので、特性が理想ではない現実のフィルタを使用することになります。このフィルタによってナイキスト周波数以下が減衰したり、ナイキスト周波数以上の成分が残ったりします。

    3年ほど前に整数倍のアップサンプリングについて考察した日記を書いてますので読んでみてください。
    なんとなくイメージがつかめるかもしれません。

    アップサンプリング(整数倍)はどう補完するべきか? https://community.phileweb.com/mypage/entry/4253/20180415/59199/

    現実のアップサンプリング1〜5 https://community.phileweb.com/mypage/entry/4253/20180421/59256/

    byassi at2021-04-25 08:46

  7. assiさん

    返信ありがとうございます。

    >元のサンプリング周波数の半分(ナイキスト周波数)以下が必要な信号で、それ以上はすべてノイズです。
    したがってナイキスト周波数以下を完全に通して、それ以上を完全に遮断する理想フィルタが必要になります。

    ああ、、、なるほど!
    必要な信号だけ通す必要がありますね。
    それでナイキスト周波数から計算するということにもなるのですね。
    DA-AD変換をエミュレートするというイメージにつられて後の方の周波数だと思い込んでいました。しかしコンピューター上のシミュレーションで本当のアナログになるわけないですから、低い方のナイキスト周波数で、ということになるのでしょうか。
    先ほどSRCのサイトを確認したら、Q&Aに記述がありました。読んだことはあるはずですが理解出来ないままになっていたんだと思います。assiさんの説明を受けて理解できました。
    おかげさまで、分かっていなかったことへの理解が進んだように思います。有難うございます。

    >SOXで非(整数/整数)の変換を行っても品質に問題ないことは

    それが、当方では上手くいきません。
    こちらでは高域減衰しているであろうにもかかわらずlibsamplerateのほうが良いです。といいますか、libsamplerateだからアップサンプリングして聴いていると言っていいと思います。
    これが使えなくなったら、うちのオーディオシステムは瓦解します。

    過去の日記へのリンクありがとうございます。
    当時、読ませていただいたときは難しいと思いました。再読させていただきます。

    byflyingnote at2021-04-25 11:17

レスを書く

レスを書くにはログインする必要があります
ログインする