diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aef6a1..2f96332 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,7 @@ Die Android-App zählt eigenständig weiter (mehrere APKs pro Release). Welche d | Dominant color background | ✅ | ✅ | | Cover art scale animation | ❌ | ✅ | | Synced lyrics (LRCLIB) | ✅ | ✅ | -| Lyrics autoscroll | ✅ | ✅ | +| Lyrics-Mitlaufen (umschaltbar) | ✅ | ✅ | | Star / favorite song | ✅ | ✅ | | Multi-artist navigation | ✅ | ✅ | | Album detail page | ✅ | ✅ | @@ -79,6 +79,49 @@ Die Android-App zählt eigenständig weiter (mehrere APKs pro Release). Welche d --- +## [3.2] — 2026-10-01 + +**Android:** 1.25 (versionCode 28) → 1.26 (versionCode 29). + +### Added +- **Lyrics: Mitlaufen ein- und ausschalten (Web + Android)** — im Lyrics-Reiter sitzt jetzt ein + kleiner Schalter *Mitlaufen / Folgt*. Aus heißt: der Text bleibt stehen, man scrollt selbst. + An heißt: der Text springt mit und hält die laufende Zeile bei 40 % Höhe. + - **Vorgabe ist AUS.** Wer mitliest, blättert auch mal zurück oder vor — und genau dann sprang + der Text bisher bei jeder neuen Zeile unter dem Finger weg. + - **Nur bei synchronen Texten sichtbar.** Ohne Zeitstempel gibt es nichts mitzuführen; bei + reinem Text erscheint der Schalter nicht. + - Hervorgehoben wird die laufende Zeile **immer**, auch bei ausgeschaltetem Mitlaufen — man will + ja sehen, wo man ist. Einschalten richtet sofort aus, statt bis zur nächsten Zeile zu warten. + - Gespeichert wird pro Gerät (`ns_lyrics_folgen` im Web, `lyrics_autoscroll` in den Android- + Einstellungen). Der Android-Schlüssel wird **einzeln** geschrieben: würde ihn das Speichern im + Einstellungsbildschirm mitschreiben, setzte es ihn jedes Mal auf die Vorgabe zurück, weil + dieser Bildschirm das Feld gar nicht führt. + +### Fixed +- **Mischen war nicht zufällig (Web)** — `liste.sort(() => Math.random() - 0.5)` ist keine + Mischung: ein Vergleicher, der bei derselben Paarung mal so und mal anders antwortet, ist für + eine Sortierung ungültig, und das Ergebnis ist messbar verzerrt. Gemessen (V8, 3000 Durchläufe) + blieb der erste Titel drei- bis fünfmal zu oft vorn — bei 10 Titeln in 18,8 % der Fälle statt + 10 %, bei 100 in 3,1 % statt 1 %, bei 2000 in 0,23 % statt 0,05 %. Die Grobordnung sah dabei + gemischt aus, weshalb es lange nicht auffiel; bevorzugt wurden trotzdem immer dieselben Titel. + Ersetzt durch Fisher-Yates in `src/player/queueMath.js` (`mischeListe`), verwendet an allen vier + Stellen: Warteschlange starten, Mischen umschalten und die beiden Genre-Knöpfe. +- **Der letzte Titel lief mehrfach wieder los (Web/PWA)** — am Ende der Warteschlange ohne Repeat + steht nichts mehr an, trotzdem spielte der letzte Titel bei jedem Zurückholen der Seite erneut. + Ursache: ein beendetes `