Dev-Branch

Ja ok, dann ist es halt so :slight_smile:. Hätte jetzt, ohne in den Code zu schauen, auf irgendwas Triviales getippt.
@Wolle Ist das so gewollt, dass getAudioCurrentTime() die Spielzeit seit Start zurückgibt und dabei nicht beachtet, wenn der Startpunkt nicht bei 0 war?

Das ist ein Fehler, das soll so nicht sein. Ich habe eine Korrektur eingestellt. Zu Beginn ist die Bitrate unbekannt. Sie wird durch die Dekoder zurückgegeben. Bei VBR wird der Mittelwert mehrerer Durchläufe bestimmt. Nach wenigen Sekunden (~3s) wird audioCurrentTime hinreichend exakt angezeigt.

9 „Gefällt mir“

Das scheint jetzt zu passen, ein dickes :heart: an @wolle !

Das funktioniert , aber nicht rückwärts. Ich habe ein Liste mit 11 Einträgen bei der 4 und 5 mittlerweile nicht mehr funktionieren. Wenn ich von 1 mittels NEXT incrementiere werden 4 und 5 übersprungen und 6 abgespielt . Zurück mit PREV von 6 geht es nicht. Statt 3 wird immer wieder 6 abgespielt.

Ich weiß nicht, ob ich dich richtig verstehe. Sind das webstreams, die nicht mehr funktionieren oder Dateien, die nicht mehr am angegebenen Ort gespeichert sind?

Wenn eine Datei oder ein Stream nicht abgespielt werden kann, springt er (mittlerweile) immer zur nächsten abspielbaren Datei vorwärts. Von daher kommst du von 6 mit PREV zurück zu 5, da die aber bei dir nicht mehr funktioniert automatisch vorwärts zu 6.

Das ist wie gesagt unabhängig von der Korrektur im PR.

Man könnte dein gewünschtes Verhalten schon programmieren, aber dies ist derzeit nicht umgesetzt.
Wie gesagt, alles unter der Annahme, dass ich dich richtig verstehe.

@compactflash, das klappt bei mir auch rückwärts einwandfrei!
Man muss natürlich entsprechend schnell rückwärts klicken, wenn man zu lange wartet springt es schon wieder nach vorn. Ist genauso wie Trackwechsel rückwärts.

Das ist die M3U-Testdatei, Einträge 4 & 5 sind ungültig (404):

http://www.wdr.de/wdrlive/media/wdr2.m3u
http://wdr-wdr4-live.icecast.wdr.de/wdr/wdr4/live/mp3/128/stream.mp3?ar-distributor=ffa1
http://stream.rockantenne.de/rockantenne
http://edge09.streamonkey.net/zound1-mix
http://edge09.streamonkey.net/zound1-max
http://stream.laut.fm/kinderrockradio
http://stream.laut.fm/kinderohrenkino
http://streamtdy.ir-media-tec.com/gutenacht/mp3-128/web/play.mp3
http://streamtdy.ir-media-tec.com/kinderlieder/mp3-128/web/play.mp3
http://streamtdy.ir-media-tec.com/disco/mp3-128/web/play.mp3
http://streambbr.ir-media-tec.com/kinderhits/mp3-128
http://stream.laut.fm/kinderradio
http://streams.regenbogen.de/rr-kinderlieder-128-mp3

Das funktionieret rückwärts bei mir nicht , weder mit Taste PREV noch im Webfrontend. Taste PREV nur wenn ich schnell hintereinander drücke.

Es ist für mich unlogisch dass ein Unterschied zwischen NEXT und PREV besteht . Man sieht doch nie an welcher Stelle man steht und dann landet man bei 2-3 mal schnell drücken mit Sicherheit nicht beim richtigen Sender.

Ich kann das schon nachvollziehen aber hier muss man auch mal die Kirche im Dorf lassen…

2 „Gefällt mir“

PREV und NEXT reagieren gleich. Das Problem liegt nicht daran, sondern an der Fehlerreaktion zu „Stream / Datei nicht ereichbar“. Hier springen wir aktuell (hart kodiert) nach knapp 2s zu dem nächsten Titel weiter. Bei einem anschließenden PREV-Befehl kämpfst du sozusagen gegen diese Fehlerreaktion an.

Wenn gewünscht, kann durch die Änderung von der Zeile der Timeout verlängert werden:

Dann hat man mehr Zeit die PREV Taste zu drücken :slight_smile:. In Retrospekt ist 2s auch sehr sportlich als Timeout.

Mir ist das nicht so wichtig, mir ist halt aufgefallen dass die Behandlung bei PREV anders ist und @sfields wollte auf evtl. Fehler hingewiesen werden.

Eine Frage in die Runde:
Habe versucht den aktuellen DEV Stand auf einen ESP32 (AZ-Delivery devKIT) mit:
default_envs = az-delivery-devkit-v4
in Betrieb zu nehmen. Compilieren und flashen OK.
Im Betrieb beim Abspielen einer MP3 von der SDCard kam immer wieder die Fehlermeldung, dass der Speicher nicht ausreicht für den Decoder.
Hab es dann auch noch mit:
default_envs = lolin_d32_sdmmc_pe
Gleiches Verhalten.

Läuft die aktuelle Version nur mehr auf ESP32 mit PSRAM, oder sollte oben angeführtes Environment auch noch lauffähig sein?

imho ist derzeit PSRAM zwingend…

Ja, PSRAM ist bei Arduino 2 zwingend notwendig.

Der vollständigkeithalber:

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
E (536) esp_core_dump_flash: No core dump partition found!
E (536) esp_core_dump_flash: No core dump partition found!
I [107] Maximale Inaktivitätszeit wurde aus NVS geladen: 30 Minuten
I [108] Initiale Lautstärke wurde aus NVS geladen: 4
I [109] Maximale Lautstärke für Lautsprecher wurde aus NVS geladen: 21
N [119] Lautsprecher eingeschaltet

 _____   ____    ____            _
| ____| / ___|  |  _ \   _   _  (_)  _ __     ___
|  _|   \__  \  | |_) | | | | | | | | '_ \   / _ \
| |___   ___) | |  __/  | |_| | | | | | | | | (_) |
|_____| |____/  |_|      \__,_| |_| |_| |_|  \___/
         Rfid-controlled musicplayer


N [237] Software-revision: 20240106-1-DEV
N [237] Git-revision: 6a2adf5-dirty
N [237] Arduino version: 2.0.14
N [248] ESP-IDF version: 4.4.6
N [248] Wakeup was not caused by deepsleep: 0
N [248] Versuche SD-Karte im SD_MMC-Modus (1 Bit) zu mounten...
D [259] SD card type: SDHC
N [259] SD-Kartengröße / freier Speicherplatz: 14910 MB / 14868 MB
I [270] FTP-User wurde aus NVS geladen: esp32
I [271] FTP-Passwort wurde aus NVS geladen: esp32
I [272] Hostname aus NVS geladen: ESPuino
N [274] SSID 0 von NVS geladen: FritzBox
N [441] Versuche mit WLAN 'FritzBox' zu verbinden...
D [480] Freier Heap-Speicher nach Setup-Routine: 116256
D [480] PSRAM: --
D [480] Flash-size: 4194304 bytes
N [1233] Verbunden mit WLAN 'FritzBox' (Signalstärke: -52 dBm, Kanal: 13, MAC-Adresse: xx:xx:xx:xx:xx:xx)
N [1233] Aktuelle IP: x.x.x.x
N [1245] Synchronisiere Uhrzeit via NTP...
N [1259] mDNS gestartet: http://espuino.local
N [1270] HTTP-Server gestartet.
N [5146] Datum/Uhrzeit empfangen von NTP-Server: 10.01.2024, 12:21:38
D [10171] ws[/ws][1] connect
D [34613] Freier Speicher: 73672 Bytes
N [34613] Playlist-Generierung
I [34613] Dateimodus erkannt.
N [34614] Modus: Einzelner Track
N [34620] Neue Playlist mit 1 Titel(n) empfangen
D [34620] Free heap: 76764
I [34625] info        : PSRAM not found, inputBufferSize: 13951 bytes
I [34636] info        : buffers freed, free Heap: 65576 bytes
I [34636] info        : Reading file: "/mp3/siren.mp3"
[ 34657][E][mp3_decoder.cpp:1555] MP3Decoder_AllocateBuffers(): not enough memory to allocate mp3decoder buffers
I [34658] info        : The MP3Decoder could not be initialized
I [34668] info        : Closing audio file
N [34669] Ende der Playlist erreicht.

eigentlich läuft sonst soweit ich sehen kann alles einwandfrei.

Wenn PSRAM zwingend notwendig ist, stellt sich die Frage, ob nicht in der platformio.ini die nicht mehr gültigen environment sections entfernt werden sollten.

Wäre aber froh, wenn sich der Decoder doch wie vorher auch ohne PSRAM zufrieden geben könnte.

Evt. ist es nicht nur der freie Heapspeicher sondern auch der größte zusammenhängende Speicherblock. Der ist wohl ohne PSRAM zu klein um den Audiodekoder zu allokieren, 32 KB ?: Hier ein Lolin D32 (ohne Pro/PSRAM):

Die Frage, die ich mir stellte: Der Decoder war früher ja auch mit weniger - also ohne PSRAM – lauffähig.
Fehlt es hier eventuell nur an einer directive, dass er mit weniger auch auskommen soll oder war früher tatsächlich wesentlich mehr verfügbar?

Es scheint nur wenig Speicher zu fehlen um den MP3-Dekoder auch ohne PSRAM wieder starten zu können:

Wir haben z.B. die Stackgröße des Audiotask hier auf 6000 angehoben um auch Webstreams mit SSL Verbindung starten zu können. Der Audiotask starb zuvor den „stack canary“ Tod. Die SSL Verschlüsselung schluckt viel Speicher, das könnte man z.b. abhängig von PSRAM ja/nein wieder etwas reduzieren.
Wenn Board ohne PSRAM → Keine Webstreams mit SSL

Mit ein paar weiteren Tricks wäre das auch auf einem Board ohne PSRAM wieder abspielbar. Macht gern Vorschläge dazu!

Insgesamt liegt die Zukunft mit all den Features aber auf Boards mit PSRAM. Die sind ja mittlerweile auch fast Standard. Wer jetzt einen Lolin D32 einsetzt kann ihn für kleines Geld durch einen Lolin D32 Pro ersetzen ohne weitere Lötarbeit

4 „Gefällt mir“

Gibt’s jetzt eigentlich noch Probleme mit Stottern beim Abspielen von mp3-Files?
Weil ansonsten wäre es langsam Zeit, mal den Stand von dev in master zu überführen.

Bei mir spielt Alles ohne Ruckeln ab.
Einziges Problem sind die Boards ohne PSRAM, aber das könnte man auch im nächsten Schritt erledigen. Von meiner Seite spricht nichts gegen eine Übernahme in den Master.