Equalizer über WebUI einstellen

Hallo und erst mal danke für das großartige Projekt! Wir haben schon eine Box im Einsatz, lieben sie heiß und sind schon fleißig am Verbreiten im Freundeskreis :slight_smile:

Auf der Suche was beizutragen hab ich mich in der Todo-Liste umgesehen und der Equalizer im WebUI erschien mir als am ehesten machbar und war für uns auch grad ein Thema.

Oh boy, da hab ich natürlich wieder die Fresse zu voll genommen, das is ordentlich ein Brett geworden :joy:

Konkrete Änderungen:
Das ganze lebt momentan mal auf diesem branch, geforkt von dev.

Ich habe mich für mehr oder weniger eine Kopie der Lautstärke-Queue entschieden, da ich dachte, dass das die beste responsiveness bietet. Wenn das für einen ersten Pull-Request zu aufdringlich ist oder für diese eher spezielle Funktion übertrieben ist, können wir natürlich über Alternativen reden. Im Code war mir das erstmal der einleuchtendste rote Faden dafür.

Um die Einstellungen (drei Werte: Bass, Mitten und Höhen wie ->setTone() von ESP32-audioI2S erwartet) über Neustarts hinweg zu erhalten, schreibe ich sie in gPrefsSettings und initialisiere sie in der AudioPlayer_Task(void *).

Die UI:
Neue Slider auf der Einstellungsseite, Werte kommen vom WebSocket und bei slideStop telefonieren die Slider nach hause. Das ist auch der Grund, warum ich mich unter dem „Senden“-Knopf außerhalb des Forms entschieden hab.

Ich könnte mir auch vorstellen, das ganze auf der Steuerungsseite in einem Dialogfenster hinter einem Button um den Lautstärkeregler herum unterzubringen. Damit wär es nicht mit den restlichen „härteren“ Einstellungen verwurstet sondern wär bei Gleichgesinnten.

Offene Fragen:
Ein Problem, zu dem ich keine Antwort finden konnte, waren die Mono-Einstellungen. Mono triggert zweimal audio->setTone(3, 0, 0); und ich hab nicht wirklich herausgefunden, warum oder was in diesem Fall passieren sollte - drum ist es jetzt im Entwurf auch noch genauso.
Es wäre vermutlich übertrieben, ein zusätzliches Triplet von EQ-Werten zu speichern oder gar weitere Bedienfelder für den Fall in der UI unterzubringen …
Aber vielleicht ist das auch eine Frage für die Zukunft :smiley:

hmm dann haben wir 2 Varianten auf einer Seite, finde ich irgendwie doof…

Das ist auch ein Grund dass ich das nicht ganz optimal finde dort. Die Trennung „es ist eh unter dem Senden-Button“ ist nicht so obvious…
Vielleicht probier ich mich an dem Dialog.

Oder gibts andere Ideen?

Ggf. echtzeit Anderungen sofort ausführen (dürfte die beste usability sein, jedesmal auf absendne zu klicken zum speichern fände ich nervig) und dauerhaftes speichern erst durch klicken auf Absenden? Dann am besen noch ein Hinweis einblenden wenn die Werte geändert wurden, aber noch nicht gespeichert.

Also erstmal finde ich den Entwurf fein gelungen! Das Thema steht ja schon lange auf der Todo-Liste.

Das wurde wohl mal eingeführt um die Bässe bei kleinen Lautstärken etwas anzuheben. Wenn Bässe,Mitten & Höhen einstellbar werden bräuchte man keine Unterscheidung zwischen Mono/Stereo. Man stellt sich das ein & gut ist.

Von der Oberfläche finde ich Equalizer besser aufgehoben in Player-Steuerung beim Lautstärkeregler. Ein Button mit Dialog wäre das Sahnehäubchen. Aber das ist Geschmackssache.

Evt. macht man im Settings-JSON noch eine eigene Section „equalizer“ die dann auch einzeln über das Websocket übertragen werden. Echtzeitaktualisierung ist dann möglich so wie jetzt z.B. die Lautstärkeregelung. Die Lösung mit der Queue finde ich passend zum bestehenden System.

2 „Gefällt mir“

Danke :slight_smile:

Dann würd ich die Sonderbehandlung raus nehmen :wink:
Irgendwo hab ich mal was gelesen, dass das bei Kopfhörern auch greift oder so … find das aber grad nicht wieder. Nur dass wir da nix übersehen.

Dann gibts demnächst ein Sahnehäubchen, ich würd ungern die Steuerung mit drei Slidern verunstalten :smiley:

Ich habs in den Settings in einen eigenen Unterpunkt "equalizer" gepackt. Oder meinst du als eigene Übertragung beim ersten Laden wie das Volumen?
Oder oder meinst du Echtzeit in beide Richtungen? :thinking:

Echtzeitaktualisierung von UI nach ESPuino funktioniert bereits, da schick ich nur "equalizer" rum. Nicht die gesammelten Settings natürlich.

:+1:

1 „Gefällt mir“

Bin ich mir grad nicht sicher. Ist halt die Frage ob die Equalizer Einstellungen auch für den Kopfhörer gelten sollen. Im Zweifel würd ich da nix ändern. Falls doch, aus Praxissicht sehe ich den Equalizer eher nur für den Lautsprecher, weil Höhen/Bässe sind sehr vom gewählten Lautsprecher und Gehäuse abhängig sind, da macht die individuelle Einstellung Sinn.

Echtzeitaktualisierung von UI nach ESPuino funktioniert bereits, da schick ich nur "equalizer" rum. Nicht die gesammelten Settings natürlich.

Perfekt, so meinte ich es :+1:

Wg. Beschriftung: Nennen wir das „Low Pass“, „Band Pass“, „High Pass“ oder lieber „Bass“, „Mitten“ „Höhen“, also etwas weniger technisch?

Ich würde eventuelle noch die Einheit (dB) dranschreiben, da versteht man auch, warum der Bereich -40…+6 ist

Läuft das setTone() am Kopfhörer vorbei? Ich hab keinen eingebaut, kann das nicht testen … Werd es mal mit Bluetooth Kopfhörern probieren, ob die auf den EQ reagieren.

Ich war so verbissen in der technischen Doku der lib, dass mir jegliche Kreativität gefehlt hat :smiley: Natürlich sind Bass, Mitten, Höhen die besseren Begriffe :wink:

Auch ein guter Punkt! Werd ich noch einbauen.

1 „Gefällt mir“

Das ist alles andere als elegant, weils das irgendwie nicht eingebaut gibt … Oder ich habs nicht gefunden :joy:
Aber es geht. Meistens :innocent: Wer den Edge Case findet darf ihn sich einrahmen :yum:

Ist in den Übersetzungen eingefügt. Französisch hab ich einfach Google Translated - oder gibts da einen anderen Prozess?

Ich würde eventuelle noch die Einheit (dB) dranschreiben, da versteht man auch, warum der Bereich -40…+6 ist

dB-Beschriftung/Einteilung macht für mich keinen Sinn, wer soll etwas mit dem dB-Wert anfangen können? Eine Anpassung macht man doch nur über Gehör. Es reicht doch der Schieberegler ohne Skala.

Französisch hab ich einfach Google Translated - oder gibts da einen anderen Prozess?

Ich verwende als Übersetzer Deepl.com

Möglicherweise ist es auch gescheit, den Bereich -40 bis 6 standard mäßig auf hörbare Werte einzuschränken und erst per Profi-Button dir ganze Skala freizuschalten. Dann könnte ich auch ohne Labels durchgehen lassen im Standard-Modus.
Aber mir fällt grade auf, ein reset button macht auch Sinn vmtl, wenn man gar nix mehr hört und zurück finden schwer wird.

Und ein infontext wird auch noch kommen, der ein bissl das handling erläutert.

Da kommt bei mir vielleicht der Naturwissenschaftler durch aber ne Einheit finde ich schon wichtig. Es geht um die Vollständigkeit. Wahrscheinlich hätte ich "Hochpass [db]: " geschrieben. Mir ist schon klar, dass niemand sagt „oh ich habe mein Gehäuse nach audiophilen Standards berechnet und ich brauche -2,4db“ aber ein Schieberegler von -6 bis 44 ohne Einheit würde bei mir Fragen aufwerfen

Oben beim Zeitabständen schreiben wir ja auch „(in Minuten)“ hin.

Das war jedoch als Vorschlag gemeint, wenn ich der Einzige mit Einheitenmacke bin, dann lasst es halt weg. :slight_smile:

Hier eine schöne Umsetzung in der Teufel-App (Hifi-Lautsprecher Hersteller),. das ist doch Alles was Papa braucht::

Soweit ich es gesehen habe arbeitet @trainbird an einem Tooltip für die Regler. Dort wäre eine exakte dB-Textanzeige natürlich gut aufgehoben & alle glücklich…

Genau, ich werd auch morgen mal Umsetzungen in anderer Software anschauen und mich inspirieren lassen :wink:

Okidoks, es geht weiter!

Der Equalizer ist jetzt in einen Dialog auf der Steuerungsseite übersiedelt und funktioniert auch dort einigermaßen tadellos. Leider ist das Modal überhaupt nicht happy mit bootstraps col/row-System … Aber wie gesagt, es funktioniert :wink:

Änderungen sind wieder auf dem Branch Trainbird/ESPuino/equalizer zu finden.

PS: Ich hab jetzt die Regler mal auf +/- 6db limitiert um der Asymmetrie Herr zu werden - weiter nach unten wird es nur immer unhörbarer auf meinem System. Vielleicht mach ich da aber auch was gravierend falsch und es sollte schon bei -40db als Minimum bleiben? Kenn mich leider nicht genug aus :man_shrugging:

1 „Gefällt mir“

@trainbird Danke fürs Dranbleiben!

Habe es mal oberflächlich mit offener Box getestet: Bässe sind OK, aber bei den Höhen bekomme ich das gegenteilige Ergebnis. Also Höhen auf Max → es wird dumpfer, Höhen scheinen umgedreht. Kannst aber nicht auf Anhieb sagen, woran es liegt, Du scheinst ja alle drei Werte korrekt zu übertragen.

Zum Interface: Vielleicht kannst Du den Equalizer-Button rechts in die Leiste mit den Player-Buttons oder zum Lautstärkeregler schieben? Jetzt scheint der Button etwas verloren zu sein:


Ist aber evt. Geschmackssache.

Im modalen Fenster kann ich auf den ersten Blick nicht erkennen, welcher Regler für Bass/Mitten/Höhen zuständig ist, hier evtl. die Zeilenumbrüche korrigieren oder Text voranstellen:

Das sind jetzt Kleinigkeiten die mir aufgefallen sind

1 „Gefällt mir“

Interessant, das kann ich nicht so ganz nachvollziehen. Bei mir wird es auf Maximum irgendwie „blasser“, also sehr dünn vom Sound her. Wenn ich aufs Minimum gehe wird es satter, weil der Bass wieder mehr durch kommt.
Insgesamt hat jede Einstellung einen direkten Einfluss auf die Gesamtlautstärke, aber scheinbar nicht vollständig intuitiv → bei Höhen auf Minimum wird es gefühlt lauter, bei Maximum leiser. Vielleicht kann das jemand mit Verständnis erklären? Oder wirklich als Fehler einstufen? @lensis vielleicht?

Ja … das liegt leider an dem völlig vergurkten col/row-Bootstrap in dem Bereich … vor allem die Slider halten sich nicht an die Weitenvorgaben, weshalb es auch auf mobile oft das rechte Icon in die nächste Zeile schiebt … Ich hab mich da einfach an den rechten Rand der col geschoben, mit dem Track-Fortschritt ist der Button rechtsbündig.
Ich hatte in Erinnerung, das den Bug jemand angegangen hatte? Find jetzt leider den Thread nicht mehr …
Ich mach es mal direkt neben den Lautstärke-Titel. Bei den Play-Controls hats thematisch nix verloren und neben dem Lautstärke-Slider werden die Umbrüche wirklich abenteuerlich auf mobilen Bildschirmen …

Das stimmt! Bei so viel herumprobieren sieht man solche Unstimmigkeiten irgendwann nicht mehr :joy: :see_no_evil:
Hab es jetzt (auch wieder wegen sonst unmöglicher Umbrüche bei kleineren Bildschirmen) mit <hr /> gelöst:

PS: Im letzten Push hab ich jetzt auch die Sonderbehandlung Mono/Stereo entfernt :wink:

Ich hab heute irgendwo überflogen, dass Webstreams nicht über audiolib laufen, aber nicht weiter drüber nachgedacht. Jetzt erst hab ich realisiert was das heißen würde: setTone kann nicht funktionieren bei Streams.
Ein kurzer Test scheint das zu bestätigen …

Gibts da eine äquivalente Möglichkeit? Weil wenn nicht, dann sollte der Infotext auf die Inkonsistenz hinweisen.

Hmm, würde mich jetzt wundern. Auch Webstreams werden über die Audiobibliothek abgewickelt & ich würde erwarten das auch hier die Equalizer Einstellungen greifen. Muss das aber mal testen.

Ansonsten sieht Deine Erweiterung soweit gut aus! Kannst Du Deinen Branch auf den aktuellen DEV-Stand bringen & dann einen Pull-Request erzeugen?