Hörbuchmodus mit .m4a Files

Hallo zusammen,

ich habe auf meinem Espunio verschiedene Filetypen im Einsatz (mp3, aac und m4a). Mir ist aufgefallen das im Hörbuchmodus sowohl bei mp3 als auch bei aac die Logik mit der Abspielposition korrekt funktioniert und er dort weitermacht wo man aufgehört hat. Bei sämtlichen m4a Files fängt er immer wieder bei Position 0 an was man auch auf der Monitorschnittstelle nachvollziehen kann:

Beispiel (selbes Hörbuch in unterschiedlichen Encodings):

.aac

Titel pausiert bei Position: 2744988 (2461725)
Schreibe '#/Titel.aac#2461725#3#0' in NVS für RFID-Card-ID 166080076172 mit Abspielmodus 3 und letzter Track 0
#/Titel.aac#2461725#3#0
Lautsprecher ausgeschaltet
deep-sleep, good night.......

[... Neustart ...]

RFID-Karte empfangen: 166080076172
Modus: Hoerspiel
Neue Playlist empfangen mit 1 Titel(n)
info        : Reading file: "/Titel.aac"
Titel wird abgespielt ab Position 2461725
'/Titel.aac' wird abgespielt (1 von 1)

.m4a

Titel pausiert bei Position: 584549 (301316)
Schreibe '#/Titel.m4a#301316#3#0' in NVS für RFID-Card-ID 166080076172 mit Abspielmodus 3 und letzter Track 0
#/Titel.m4a#301316#3#0
Lautsprecher ausgeschaltet
deep-sleep, good night.......

[... Neustart ...]

RFID-Karte empfangen: 166080076172
Modus: Hoerspiel
Neue Playlist empfangen mit 1 Titel(n)
info        : Reading file: "/Titel.m4a"
Titel wird abgespielt ab Position 0
'/Titel.m4a' wird abgespielt (1 von 1)

Hat das jemand schonmal nachvollziehen können?

Gruß

Wenn ich das richtig sehe, dann ist das für M4A Dateien in der ESP32-audioI2S Library nicht implementiert:

Vielleicht kann @Wolle helfen :slight_smile:

1 „Gefällt mir“

M4A Dateien sind intern aus „Atome“ aufgebaut. Das MDAT Atom enthält die AAC Audiodaten im RAW Format. Um an einen Punkt immerhalb des MDAT zu springen muss dessen interne Struktur bekannt sein. Dis Sprungadresse muss genau der Anfang eines AAC Blocks sein. Für eine Analyse das MDAT reicht die Geschwindigkeit des ESP32 im Zusammenhang mit Lesevorgängen auf der SD Karte (mit meinen Mitteln) kaum aus. Daher ist setFilePos() für m4a Dateien augenblicklich gesperrt.
P.S. In ESPRESSIFs ESP-ADF gibt es einen M4A Parser der solche Sprünge kann. Leider ist der Quelltext nicht zugänglich, sind *.a Dateien.

4 „Gefällt mir“

Mega cool, danke euch für die detaillierte Analyse und Erklärung!

Ich hatte das Problem auch schon bemerkt und dann einfach per Batchkonvertierung alles auf MP3 transcodiert :wink:
Falls es dich interessiert - ich habs hiermit gemacht: https://soundconverter.org/
Das Tool kann auch direkt Sonderzeichen (zB emojis) aus dem Titel entfernen, die zB bei Youtube-Downloads öfter mal anzutreffen sind.

2 „Gefällt mir“