YouTube Music's defekter Lautstärkeregler

Warum wirkt YouTube Music lauter als jede andere Plattform, selbst wenn man den Lautstärkeregler kaum bewegt hat?

Das Problem

Als ich es das erste Mal ausprobiert hatte, fiel mir schnell auf dass die Musik irgendwie zu laut war. Zuerst bin ich davon ausgegangen, dass das Problem an mir lag, aber nach einigem Suchen fand ich Beiträge von anderen Nutzern, die sich darüber beschwerten, dass YouTube Music tatsächlich zu laut ist.

Lasst uns das Problem richtig formulieren:

„Bei der höchsten Einstellung funktioniert der Lautstärkeregler wie erwartet. Wenn man jedoch versucht, ihn zu verringern (weil es zu laut ist), fühlt sich die Abnahme der Lautstärke nicht proportional an.“

Zum Beispiel scheint der Sprung von Stumm (0 %) zu nur ein paar Schritte nach rechts (5 %) viel lauter zu sein, als er sollte.

Was schief gelaufen ist

Die Lautstärkeregelung von YouTube Music ist linear implementiert.

volume = slider_position * some_constant

Was der Frontend-Entwickler, der die Lautstärkeregelung implementiert hat, wahrscheinlich nicht wusste, ist, dass die meisten menschlichen Sinne logarithmisch auf Veränderungen reagieren. Um das Problem zu veranschaulichen, hier ein Beispiel, damit man den Unterschied selbst hören kann.

Linear slider
Exponential slider

Wie man sieht, bietet der exponentielle Schieberegler viel mehr Kontrolle über die Lautstärke. Man sieht auch, warum es so schwer ist, eine kleine Lautstärke mit dem linearen Schieberegler einzustellen.

Wie menschliche Sinne reagieren

Unsere Ohren reagieren auf Schallwellen, und der damit verbundene Druck wird als Lautstärke interpretiert. Die Art und Weise, wie unser Gehirn den Druck interpretiert, erfolgt logarithmisch.

Das bedeutet, dass man den Druck mehr als verdoppeln müsste, um die Lautstärke zu verdoppeln. Deshalb messen wir Lautstärke auch in dB, oder 'Dezibel' – eine logarithmische Einheit.

Andere Sinne funktionieren auf die gleiche Weise. Auch unter dem Weber-Fechner-Gesetz bekannt. Es ergibt so tatsächlich sehr viel Sinn, da unsere Sinne so auf eine breite Spanne von Reizen reagieren können.

Nur so können wir sowohl sehr schwache als auch sehr helle Sterne am Nachthimmel sehen.

Wie man das Problem löst

Die einfachste Lösung ist, die Lautstärkeregelung wie folgt zu ändern:

volume = slider_position ** some_constant

wobei ** für die Exponentiation steht. Ein guter Wert für some_constant wäre 3.

Es ist nicht sofort ersichtlich, warum wir slider ** constant anstelle von constant ** slider verwenden. Obwohl wir Lautstärke logarithmisch wahrnehmen, gibt es Gründe, warum ein polynomialer Ansatz besser für die Lautstärkeregelung ist. Weitere Details findet man unter dieser Quelle.

Die Lautstärkeregelung beheben

Hier ist ein cleveres Userscript, das diese Lautstärkeregelung behebt, indem es den Getter und Setter der volume-Property von HTMLMediaElement überschreibt. Eine vereinfachte Version des Skripts ist hier gezeigt.

Object.defineProperty(HTMLMediaElement.prototype, 'volume', {
  get () {
    return get.call(this) ** (1 / EXPONENT);
  },
  set (volume) {
    set.call(this, volume ** EXPONENT);
  }
});

Lautstärkeanpassung

Eine weitere fehlende Funktion ist richtige volume normalization. Diese passt die Rohdaten der Songs so an, dass sie alle die gleiche Lautstärke zu haben scheinen.

Das ist wichtig, weil man nicht möchte, dass die Lautstärke bei jedem Song wechselt, wenn man eine Playlist durchhört.

YouTube Music hat zumindest eine gewisse Normalisierung. Manche sagen, es senkt die Lautstärke nur, aber erhöht sie nicht, sodass die Lautstärke nicht angehoben wird, wenn sie zu leise ist. Andere sagen, es senke nur die Lautstärke von Songs, die lauter als 0 dB sind.

Diese Faktoren zusammen machen die Lautstärkeregelung noch unintuitiver.

Fazit

Das Problem wurde vor 6 Jahren gemeldet. Vor 3 Jahren beschwerten sich Nutzer noch immer über dieses Problem. Bis heute wurde es nicht behoben.

Es scheint verrückt zu sein, dass bei einer Musikplattform, auf der die Lautstärkeregelung eine zentrale Funktion ist, dieses Problem besteht.

Wenn wir wissen, wie der Mensch funktioniert, können wir unsere Benutzeroberfläche dafür optimieren. Das Verständnis der menschlichen Sinne sollte eine grundlegende Voraussetzung für das Frontend-Design sein, insbesondere für etwas so Wesentliches wie einen Lautstärkeregler.

Natürlich muss man sich die meiste Zeit nicht mit solchen Problemen auseinandersetzen. Wenn man das integrierte audio-Element verwendet, kommt der Schieberegler mit dem integrierten UI-Element und funktioniert einwandfrei.

Das Problem entsteht nur, weil YouTube Music eine Audiobibliothek für die Lautstärkeregelung verwendet.