Skip to content

Commit 11ade33

Browse files
fhirschmannclaude
andcommitted
feat: equalizer profiles in the web interface
Add selectable equalizer profiles on top of the existing 3-band tone control (low/band/high pass gain). A profile dropdown in the equalizer modal switches presets: - Flat (neutral) - Music (fuller bass) - Audiobook / Speech (cuts bass, lifts mids/highs) - Deep voices (stronger mid/high boost for low narrator voices) - Custom (manual sliders) The speech-oriented profiles improve intelligibility of deep narrator voices, where the fundamental sits low but clarity lives in the mids/highs. The active profile is persisted in NVS (eqProfile) and restored in the UI; moving a slider switches to Custom. Gains still drive playback via Audio.setTone() unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 96039b6 commit 11ade33

12 files changed

Lines changed: 458 additions & 30 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ neon logo that doubles as the SVG favicon ([`8d9725c`](../../commit/8d9725c)):
6666
| --- | --- |
6767
| PWA support: web app manifest + app icon, "add to home screen" with proper icon and name | [`a59fe0b`](../../commit/a59fe0b) |
6868
| Full backup: export/import of all settings + RFID assignments as JSON, WiFi credentials optional | [`7f2e4ae`](../../commit/7f2e4ae) |
69+
| Equalizer profiles: dropdown presets (Flat / Music / Audiobook-Speech / Deep voices / Custom) on top of the 3-band tone control; speech presets cut bass and lift mids/highs so deep narrator voices stay intelligible, persisted in NVS. Profiles can also be assigned per file or directory (right-click in the file browser) — e.g. set the speech profile for all Bibi Blocksberg episodes at once. The active profile can be cycled with the bindable command **154** (button/RFID modifier) and set/reported via the MQTT topic `equalizer` (`flat`/`music`/`speech`/`voiceBoost`) | [`300b9dd`](../../commit/300b9dd) |
6970
| SD card cleanup: removes macOS metadata (`.DS_Store`, `._*`, Spotlight/Trashes) with one click | [`5f38a51`](../../commit/5f38a51) |
7071
| Live log: the log dialog refreshes every 2 s and follows the end of the log | [`d326faa`](../../commit/d326faa) |
7172
| Drag & drop: upload files by dropping them from the file manager onto the file tree | [`e4972fe`](../../commit/e4972fe) |

html/locales/de.json

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,9 @@
175175
"refresh": "Aktualisieren",
176176
"delete": "Löschen",
177177
"rename": "Umbenennen",
178-
"download": "Herunterladen"
178+
"download": "Herunterladen",
179+
"eq": "EQ-Profil",
180+
"eqRemove": "Kein EQ (entfernen)"
179181
},
180182
"files": {
181183
"title": "Dateien",
@@ -259,6 +261,7 @@
259261
"151": "IP-Adresse ansagen",
260262
"152": "Uhrzeit ansagen",
261263
"153": "Ambient Light umschalten",
264+
"154": "Equalizer-Profil durchschalten",
262265
"0": "Lösche Zuordnung",
263266
"170": "Play/Pause",
264267
"171": "Vorheriger Titel",
@@ -402,10 +405,18 @@
402405
},
403406
"equalizer": {
404407
"title": "Equalizer",
408+
"profile": {
409+
"title": "Profil",
410+
"flat": "Neutral (linear)",
411+
"music": "Musik (kräftiger Bass)",
412+
"speech": "Hörbuch / Sprache",
413+
"voiceBoost": "Tiefe Stimmen (max. Verständlichkeit)",
414+
"custom": "Benutzerdefiniert"
415+
},
405416
"gainLowPass": "Tiefen (in dB)",
406417
"gainBandPass": "Mitten (in dB)",
407418
"gainHighPass": "Höhen (in dB)",
408-
"info": "Die Frequenzen sind laut Bibliothek (ESP32-audioI2S) 500 Hz LowShelf, 3000 Hz PeakEQ und 6000 Hz HighShelf."
419+
"info": "Die Frequenzen sind laut Bibliothek (ESP32-audioI2S) 500 Hz LowShelf, 3000 Hz PeakEQ und 6000 Hz HighShelf. Die Profile „Hörbuch / Sprache“ und „Tiefe Stimmen“ senken den Bass und heben Mitten/Höhen an, damit tiefe Erzählerstimmen besser verständlich sind."
409420
},
410421
"rfid": {
411422
"title": "RFID Reader",
@@ -477,6 +488,11 @@
477488
}
478489
},
479490
"tools": {
491+
"eqrules": {
492+
"title": "EQ-Regeln (pro Datei/Ordner)",
493+
"desc": "Übersicht der per-Pfad zugewiesenen Equalizer-Profile. Hier kannst du sie ansehen und löschen.",
494+
"empty": "Keine EQ-Regeln gesetzt."
495+
},
480496
"backup": {
481497
"title": "Backup",
482498
"desc": "Exportiert bzw. importiert alle Einstellungen und RFID-Zuweisungen als JSON-Datei.",

html/locales/en.json

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,9 @@
176176
"refresh": "Refresh",
177177
"delete": "Delete",
178178
"rename": "Rename",
179-
"download": "Download"
179+
"download": "Download",
180+
"eq": "EQ profile",
181+
"eqRemove": "No EQ (remove)"
180182
},
181183
"files": {
182184
"title": "Files",
@@ -260,6 +262,7 @@
260262
"151": "Announce IP-Address",
261263
"152": "Announce current time",
262264
"153": "Toggle Ambient Light",
265+
"154": "Cycle equalizer profile",
263266
"0": "Remove assignment",
264267
"170": "Toggle Play/Pause",
265268
"171": "Previous track",
@@ -403,10 +406,18 @@
403406
},
404407
"equalizer": {
405408
"title": "Equalizer",
409+
"profile": {
410+
"title": "Profile",
411+
"flat": "Flat (neutral)",
412+
"music": "Music (fuller bass)",
413+
"speech": "Audiobook / Speech",
414+
"voiceBoost": "Deep voices (max. clarity)",
415+
"custom": "Custom"
416+
},
406417
"gainLowPass": "Lows (in dB)",
407418
"gainBandPass": "Mids (in dB)",
408419
"gainHighPass": "Highs (in dB)",
409-
"info": "According to the library (ESP32-audioI2S), the frequencies are 500 Hz LowShelf, 3000 Hz PeakEQ and 6000 Hz HighShelf."
420+
"info": "According to the library (ESP32-audioI2S), the frequencies are 500 Hz LowShelf, 3000 Hz PeakEQ and 6000 Hz HighShelf. The \"Audiobook / Speech\" and \"Deep voices\" profiles cut the bass and lift mids/highs so deep narrator voices stay intelligible."
410421
},
411422
"rfid": {
412423
"title": "RFID Reader",
@@ -479,6 +490,11 @@
479490
}
480491
},
481492
"tools": {
493+
"eqrules": {
494+
"title": "EQ rules (per file/folder)",
495+
"desc": "Overview of the per-path equalizer profiles. View and delete them here.",
496+
"empty": "No EQ rules set."
497+
},
482498
"backup": {
483499
"title": "Backup",
484500
"desc": "Exports or imports all settings and RFID assignments as a JSON file.",

html/locales/fr.json

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@
168168
"refresh": "Actualiser",
169169
"delete": "Supprimer",
170170
"rename": "Renommer",
171-
"download": "Télécharger"
171+
"download": "Télécharger",
172+
"eq": "Profil EQ",
173+
"eqRemove": "Pas d'EQ (retirer)"
172174
},
173175
"files": {
174176
"title": "Fichiers",
@@ -253,6 +255,7 @@
253255
"152": "Annoncer l'heure actuelle",
254256
"0": "Supprimer l'affectation",
255257
"153": "Basculement de la lumière ambiante",
258+
"154": "Changer de profil d'égaliseur",
256259
"170": "Basculer Lecture/Pause",
257260
"171": "Piste précédente",
258261
"172": "Piste suivante",
@@ -395,10 +398,18 @@
395398
},
396399
"equalizer": {
397400
"title": "Égaliseur",
401+
"profile": {
402+
"title": "Profil",
403+
"flat": "Neutre (linéaire)",
404+
"music": "Musique (basses renforcées)",
405+
"speech": "Livre audio / Voix",
406+
"voiceBoost": "Voix graves (clarté maximale)",
407+
"custom": "Personnalisé"
408+
},
398409
"gainLowPass": "Graves (en dB)",
399410
"gainBandPass": "Médiums (en dB)",
400411
"gainHighPass": "Aigus (en dB)",
401-
"info": "Les fréquences sont, selon la bibliothèque (ESP32-audioI2S), 500 Hz LowShelf, 3000 Hz PeakEQ et 6000 Hz HighShelf."
412+
"info": "Les fréquences sont, selon la bibliothèque (ESP32-audioI2S), 500 Hz LowShelf, 3000 Hz PeakEQ et 6000 Hz HighShelf. Les profils « Livre audio / Voix » et « Voix graves » réduisent les basses et rehaussent les médiums/aigus pour que les voix de narrateurs graves restent intelligibles."
402413
},
403414
"rfid": {
404415
"title": "RFID Reader",
@@ -466,6 +477,11 @@
466477
}
467478
},
468479
"tools": {
480+
"eqrules": {
481+
"title": "Règles EQ (par fichier/dossier)",
482+
"desc": "Aperçu des profils d'égaliseur attribués par chemin. Vous pouvez les consulter et les supprimer ici.",
483+
"empty": "Aucune règle EQ définie."
484+
},
469485
"backup": {
470486
"title": "Sauvegarde",
471487
"desc": "Exporte ou importe tous les réglages et attributions RFID dans un fichier JSON.",

0 commit comments

Comments
 (0)