Posts tagged ‘Spotify volume normalization oddity’

先日、Spotifyアプリを現行版に切り換えた。アンプなどの改良の効果か、以前試した時に起こった耳の問題が起こらず安心していたのだが、別の問題が発覚した。それは、音量正規化をonにしているのに、他より小さく聞こえる曲(演奏)があることだ。

実は少し前から気付いていて、その時に調べたのだが、正規化しても演奏ごとの音量に ある程度の幅ができることや、主観的な差(音の作りで聞こえ方が違うのと耳の調子)ではないかと思って居た。しかし、今日、TOTOの"Africa"が明らかに小さく聞こえたので、ebumeterというプログラムで音量(ラウドネス)を測ってみた。比較のため、普通の音量に聞こえるELOの"Don't bring me down"も測った。以下にIntegrated loudness("I")を示す。なお、アプリの音量正規化のモードは"Normal"である。

  • Spotifyの音量正規化Normalでの音量(ラウドネス, LUFS)
    • Africa: -22.8
    • Don't bring me down: -17.0

両者の差は5.8 LUFS(dB)と2倍近く、Africaが小さく聞こえるのも無理はない。

参考までに、"Africa"の正規化offの場合と旧版Spotifyと別の再生アプリ(gmusicbrowser, GMB)での正規化なしでの音量(ラウドネス, LUFS)を示す。

    • Spotify(新版, 音量正規化: off): -22.8
    • Spotify(旧版, 音量正規化: Normal): -17.6
    • GMB(音量正規化: off): -15.2

不思議なことに、正規化をoffにしても同じ音量となった。これは、正規化をonにしているのにonになっていないように感じたことに合っている。

旧版での"Don't bring-"の音量は測定していないが、新版と同じとすれば 音量が揃っているので、聴感に合う。それから、メディアやバージョンが異なるせいか(手持ちはBlu-spec CD, Spotifyは無印)、GMBでの音量はSpotifyより大きい。

アプリの設定を いろいろ変えて試したが、効果はなかった。それで、アプリにバグがあって、"Normal"モードでは正規化されないのかと思った。

それで、(別の理由で以前やっていたように、)全体的に音量が小さいQuietモードの出力をJACKのアンプで増幅して音量を上げるようにしてみた。すると、どういう訳か、耳に問題(軽い耳閉感)が起こった。原因は、ピークの大きい演奏を増幅すると、ピークがオーバーフローしてクリップして音が歪むからではないかと推測している。だから、Quietモードでも増幅しなければ良さそうなことが分かった。

それで更に、そもそも どういうことか検討したら、音量が小さい演奏があるのはアプリのバグではなさそうなことが分かった。: Spotifyの音量正規化に関する資料を良く読み、試しにゲインなどを計算したら分かった。以下に重要な箇所を引用する(太字は筆者)。

Positive or negative gain compensation gets applied to a track while it’s playing.

    • Negative gain is applied to louder masters so the loudness level is -14 dB LUFS. This lowers the volume in comparison to the master - no additional distortion occurs.
    • Positive gain is applied to softer masters so the loudness level is -14 dB LUFS. We consider the headroom of the track, and leave 1 dB headroom for lossy encodings to preserve audio quality.

Example: If a track loudness level is -20 dB LUFS, and its True Peak maximum is -5 dB FS, we only lift the track up to -16 dB LUFS.

上の例(Example)の計算を細かくすると、以下になるだろう。

本来のゲインG= 基準音量 Ref(-14) - Loudness(-20)= 6 dB
Gで増幅した場合のヘッドルーム H= TruePeak(-5) + G(6)= 1dB (オーバーフロー → クリップ)
確保したいヘッドルーム H'= -1dB なので、修正ゲイン G'= H'(-1) - TruePeak(-5) = 4dB
修正後の基準音量 Ref'= L(-20) + G'(4)= -16 LUFS:上に合う

それで、問題の"Africa"(True peakは推定-0.6dBFS)では どうなるかと言うと、

本来のゲインG= 基準音量 Ref(-14) - Loudness(-22.8)= 8.8 dB
Gで増幅した場合のヘッドルーム H= TruePeak(-0.6) + G(8.8)= 8.2dB (オーバーフロー)
確保したいヘッドルーム H'= -1dB なので、修正ゲイン G'= H'(-1) - TruePeak(-0.6) = -0.4dB
修正後の基準音量 Ref'= L(-22.8) + G'(-0.4)= -23.3 LUFS: 元の音量-22.8 LUFSとほとんど変わらない。

と、音量正規化後の音量は聴感や実測した音量(LUFS)に合う。更に、想像だが、修正後のゲイン(G')が負の場合には正規化しないとすると音量が変わらないので、実測値と一致する。

なお、Quietの場合も、修正ゲインG'と修正後の基準音量Ref'はNormalと同じ-23.3LUFSとなり、基準音量(-19LUFS)より小さいが、Normal(基準音量は-14LUFS)より差が小さくなる(9.3 dB (2.9倍) → 4.3 dB (1.6倍))ために目立たないのではないか。

実際にQuietで聴き・音量を実測したら、聴感も数値も見事に揃った。実測の音量は以下である。

  • Spotifyの音量正規化Quietでの音量(ラウドネス, LUFS)
    • Africa: -22.8
    • Don't bring me down: -22.0

また、別のレベルメータで調べたところ、クリップしていない(最大値が0dBFS未満)ことも確認した。

そのためか、今のところ耳の問題も起こっていないので、これで一件落着か。

とは言え、いつものように、以下のような余計な考え・こだわりはあるw

Quietにして全体の音量が小さくなったため、(本物の)アンプのボリュームを少し(5dB, 約1.8倍)大きくする必要があるが、まあ仕方ない。1.8倍は大きく見えるが、ボリュームの特性上、今までより少し(時計の5分分未満, 10°くらい?)回転が増える程度だ。

ただ、(上に書いた、以前のJACKのアンプでの増幅の理由に関係するが、)DACからの出力の精度やダイナミックレンジ(有効数字的なもの)が約1ビット減る(1/2になる)ので、その分音質は悪くなるはずだ。増幅してクリップするのと、ビット数が減るのとどちらが良いかの話になった。

丁度良いゲインと良いコンプレッサーで「うまく」増幅するといいのだろうが、JACKには良いコンプレッサーがなさそう、かつ、設定が難しいので、とりあえずは これで行こう。

あと、期待混じりであるが、ほとんどの音源は16ビット精度で、PCの内部では浮動小数点数で処理され、DACは24ビットなので、DACに出す時の変換で1ビット分が消えずに残る可能性がある。それなら音は悪くならない。せいぜい、DACから出る信号が弱いために雑音が入りやすくなる程度だ。そうであれば、コンプレッサーを入れて常に音を変質させるより ずっと良い。

ただ、そうは言っても、アナログ信号が弱いと雑音が入りやすいのは確かだ。そこで、音量正規化の時だけ(JACKで)クリップしない程度に増幅して、ちょっと大き目に出せれば(気分が)良さそうだ。

が、Spotifyが音量正規化しているかどうかは設定だけでは分からないという問題がある。: 音量正規化の設定がonでもアルバムを再生する時はoffになる、賢く便利だけど ある意味余計な お世話的機能があるためだ。

実際に音量正規化しているかの状態は外部から取得できないので、例えば再生キュー内の曲のアルバムが同じかどうかで判断(推測)することが考えられるが、面倒なうえに時間が掛かる。仮に再生開始時に判断して増幅するかどうかを変更するとすれば、演奏の先頭の音量がおかしくなる可能性がある。

と、ちょっとした思い付きでも実現は面倒だ。どうにかできないかAIに聞けば、教えてもらえるのだろうか??

例によって だらだらしたので まとめると、(現行版の)Spotifyアプリで音量正規化をNormalにしていて、やたらに音量が小さい曲(演奏)がある場合は、Quietにしてボリュームを上げれば良いことが分かった。これはLinux版だけなのか、他のプラットフォームでも有効なのかは分からない。

 

参考・補記

検索して この問題(現象)を調べたけど同じものは見付からず、Spotifyのフォーラムに類似のもの(2022)があったものの、例によって未解決だった。もしかしたら同じなのかも知れないが、分からない。

それから、これはLinux版固有なのかも不明だ。想像だが、Linux版が新しくなった時に音量正規化の方法が変わり、他のアプリ(例: スマフォ用)と共通になったのかも知れない。そうであれば、Linux版以外でも起こるかも知れない。

最初に書いた、以前新版を試した時に起こった耳の問題は、これとは関係なさそうだ。というのは、上に書いたように、Normalではクリップするほど無理に増幅しないため、音量が小さい代わりに歪みが発生しないからである。

それでは旧版(音量が揃っていた)では どうなのかは気になるところだが、(結果的にピークがオーバーフローすることになっても)増幅しているものの、うまく圧縮してひどい歪みが起こらないようにしていたのではないだろうか。これは他の再生アプリや配布される音源(例: 「海苔弁」)と同じことで、多少音を悪くする代わりに ひどいことにならないようにしているのだろう。

この問題に関して検索した時に、「(音が悪くなるから)音量正規化はoffにすべきだ」みたいな意見があったが、僕は全くそうは思わない。音量正規化をするのは音質よりも便利さを求めるからで、耳に問題が起こるほど音が悪くならない(「それなりに聴ける」)なら問題ない。

逆に、現行版のSpotifyアプリのNormalの動作は音質の点では正しいとは思うが、一貫性がなくて不便で、無意味だとすら思う。せめて、デフォルトをQuietにすべきなのではないだろうか?

てことは、つまり、Spotifyが-14 LUFSに合わせているのが おかしいってことでは? -22や-23辺りで良かったんじゃないの?? と思うが、YouTubeなどの他のサービスは-14辺りのようなので、仕方なさそうだ。

あと、平均音量を下げるとダイナミックレンジが小さくなって音質が劣化する演奏が増えそうだ。その点では、24ビットで配信をすれば まるっと解決しそうだ。

  •  0
  •  0
Keys:

オーディオと格闘していたって、他のトラブルは手加減などしてくれない。

少し前からSpotifyアプリ(以前のLinux版(1.1.42.622.gbd112320)のレイアウトをspicetifyで修正しているもの)のレイアウトがおかしくなり出した。: "Made for you"のタブ(?)で表示されるアイコンが全ウインドウくらいに大きくなってしまった。※

※曲が勝手に追加されるのに業を煮やしてspicetifyを無効にして試してみたが、レイアウトも曲が勝手に追加される(後述)のも直らなかったので、アプリ自体とSpotifyの整合性が悪くなったのだろう。 (2/3 19:56)

spicetifyがそれほど使いやすくなくてレイアウトを直すのが面倒なので(オーディオで忙しいせいもある)、安直な対処が ないか探したら、"Home"なら問題なく、その中にMade for youもあるので、それで使っていた。

が、レイアウト以外にも問題が起こった。設定でAutoplayを解除しているのに、アルバムやプレイリストやミックスが終わったあとに、勝手に選ばれた新しい曲が再生されるのだ。ミックスならいいけど、アルバムで そうされると嫌だ。

それで、仕方なく最新版に移ることにして試したのだが、こっちにも問題はある。Minispという自作のミニプレーヤーとの相性が悪く、曲の再生開始や一時停止イベントが来ない。。。@ 苦労して それにも対応して使っていたら、どうも音が悪い感じがする。※ 耳の問題が起こるのだ。* 他にもいくつか問題があった気がする。

@ その後、イベントが来ないのは現行Spotifyの問題ではなく、僕のプログラムの問題だったことが分かった。詳細は新しい稿を参照のこと。 (2023/6/4 17:23)

※例によって、少し特性を比べても違いは見られなかった。

特性は、Spotify中のオーディオテスト用のアルバム("Bunker Analog – Stereo Test: Speaker Setup, Calibration Tones, Soundcheck")の中のスイープ信号をREWのRTAに入れて、簡易に振幅特性を測定した。そのために今一つ差が出なかった気がする。ローカルなテスト信号(REWの信号)のファイルを使おうにもMP3しか認識せず、劣化が気になるので止めた。

*再度試してみたら、やっぱり、旧版から切り替えて すぐに高域が良くない感じ(こもっているような感じ)がし、少し経って耳閉感が起こった。それで旧版に戻したら、ほとんどすぐに治った。何が悪いのかは分からないが、音関係のライブラリ(コーデック?)が違うとか、内部処理が悪いのだろうか? (2/3 19:50)

更に試してみたら、音量正規化をoffにすると問題が起こらない感じなので、アプリ内の音量正規化処理が違うのだろうか? ただ、音量正規化をoffにして使うのは不便だから充分に試してなく、確かではない。 (2/5 0:25)

その後、更に調べたら、やはり、音量正規化をoffにすると問題が起こらないようだ()。が、当然ながら、曲ごとの音量変化があって不便だ。また、on(normal)にして数曲(再生した曲は異なる)の新旧のピークレベルを調べたら、新版は-0.3dBFS, 旧版は-1.0dBFSと、新版は少しクリップしてそうな感じで、それが音が悪く感じることに関係しているのかも知れない。

ただ、平均音量の小さいon(quiet)でも駄目だったので、クリップでなく正規化の処理が違うのかも知れない。

なお、今回も、新版を聞き続けると耳に問題(軽い耳閉感)が起こり、旧版に戻すと治ったので、新版は何かが悪いことは確かだ。 (2/9 19:06)

仕方ないので、元の以前の版を「騙し騙し」使っている。全く面倒だ。どうするかねえ・・・

以前の版の「勝手に曲が追加される問題」は、同じアルバムの曲が続いたら(ミックスやプレイリストでなく)アルバムを再生していると みなして、アルバムが変わったところで停めるようにすることを考えたが、面倒だし やり過ぎの感があるので、保留している。

 

(2/1 22:27, 2/2 16:46 若干補足)

  •  1
  •  0
Keys: , ,