M3u playlist - 'mp3 format is not supported'

Hallo,

ich hab mir eine m3u Datei zusammengebastelt, um dort aus verschiedenen Ordnern eine Playlist zu erstellen - 2 Dateien sind der Inhalt:

Die 1. Datei kann nicht abgespielt werden, die 2. schon.

I [1860330] info        : Reading file: "/Kinder/Hoerbuecher/Der Raeuber Hotzenplotz/Folge 01 - Der Raeuber Hotzenplotz.mp3
"
I [1860369] info        : The .mp3 format is not supported
I [1860369] info        : Closing audio file "Folge 01 - Der Raeuber Hotzenplotz.mp3
"
I [1860400] info        : buffers freed, free Heap: 124036 bytes
...
I [1860867] info        : Reading file: "/Kinder/Hoerbuecher/Der wilde Raeuber Donnerpups/04. Der Raeuberschatz.mp3"
I [1860890] info        : MP3Decoder has been initialized, free Heap: 100568 bytes , free stack 3208 DWORDs

An dem Log sieht man schon, dass der Inhalt der m3u Datei anscheinend fehlerhaft geparsed wird und der ‚Carriage Return‘ das abspielen scheitern lässt.

Ich hab ein wenig rumprobiert und mit einem simplen „linefeed“ können die angegebenen Dateien abgespielt werden.

Mode: Webstream (local .m3u-file)
N [2615255] New playlist received with 2 track(s)
D [2615256] Free heap: 96976
I [2615277] info        : buffers freed, free Heap: 121772 bytes
I [2615296] info        : Reading file: "/Kinder/Hoerbuecher/Der Raeuber Hotzenplotz/Folge 01 - Der Raeuber Hotzenplotz.mp3"
I [2615326] info        : MP3Decoder has been initialized, free Heap: 98060 bytes , free stack 3208 DWORDs

Das Format der m3u Datei ist UTF-8.

ESPuino Software-revision: 20240504-1

Ist das so gedacht? Oder sollte man das parsen an der Stelle korrigieren/robuster gestalten?

Gehe mal in die SdCard.cpp und dort in Zeile 296:

	// normal m3u is just a bunch of filenames, 1 / line
	f.seek(0);
	while (f.available()) {
		String line = f.readStringUntil('\n');
		if (line.endsWith("\r")) {
			line.trim();
		}
		// save string
		if (!SdCard_allocAndSave(playlist, line)) {
			return std::nullopt;
		}
	}

Die drei Zeilen, die nachfolgend grün markiert sind, habe ich dort eingefügt. Teste das bitte mal, ob das dein Problem behebt, wenn du das auch bei dir einfügst. Hab’s selbst nicht getestet. Vielleicht geht das auch eleganter @laszloh!?

Hi, danke.
Ich komme leider aktuell nicht dazu die Box zu flashen und zu testen. Aber der ‚trim‘ Befehl an der Stelle klingt mMn sinnvoll.
Müsste man ggf. nicht mal auf „\r“ checken und einfacher immer trimmen. Wenn es nichts zu trimmen gibt, macht der Befehl ja nichts.

Hab mich jetzt auch ein wenig von der m3u Liste verabschiedet. Man kann dort keinen Fortschritt der Datei speichern und eine endless loop ist wohl auch nicht so einfach zu realisieren.

MfG

Hi, hab heute Abend dochmal ein wenig Zeit freischaufeln können.

Ich hab mir die entsprechende Stelle im Source Code mal angeschaut. Der „Trim“ Befehl hilft an dieser Stelle. Ich hab mir trotzdem erlaubt einen PR (@tueddy, @biologist) zu stellen SdCard.cpp -> simplify 'SdCard_ParseM3UPlaylist' and fix parsing by h4kun4m4t4t4 · Pull Request #351 · biologist79/ESPuino · GitHub der die Methode ein wenig vereinfacht. Aus meiner Sicht ist es nicht nötig an der Stelle zw. „extended“ und „normalem“ M3U Format zu unterscheiden. Kommentare mit „#“ werden einfach immer ignoriert und es wird immer „getrimmt“. Bei mir funktioniert es soweit.

1 „Gefällt mir“

Sieht soweit gut aus & meine M3U-Testdateien spielen weiterhin ab.
Hab’s übernommen, @h4kun4m4t4t4 Vielen Dank für deine Mitwirkung!

1 „Gefällt mir“