obtenir la durée d'un MP3 dans Microcontroller

Sep 11 2020

Bonne journée

On m'a demandé de faire un projet qui consiste en un STM32 et VS1003, un lecteur MP3 hôte USB FAT32. toutes les parties sont terminées mais maintenant, j'ai besoin de connaître la durée d'une chanson.

Malheureusement, TLEN n'est pas disponible sur toutes les chansons, donc je ne peux pas compter dessus. ma compréhension est qu'un mp3 est fait par images et chaque image est de 0,026 seconde, chaque image commence par 0XFF 0xFX (X peut être n'importe quel) donc je dois rechercher 0xFFFx dans 2 octets séparés et les compter, puis multiplier par 0,026 et obtenir le durée,

puisque Microcontroller a limité le fichier SRAM doit être lu 2048 octets par 2048 octets à partir de l'USB, j'ai décidé de tester cette théorie sur ordinateur par Python, puis de la changer en C sur le microcontrôleur (pour faciliter le test de l'algorithme), mais les nombres i ' m obtenir est beaucoup plus que ce à quoi on s'attend.

par exemple un mp3 me donne 25300 de 0XFF 0XFX ce qui se traduit par 657,5 secondes, mais je sais que c'est en fait 187 secondes

il semble que 0XFF 0xFx soit aussi au milieu de la chanson

existe-t-il un moyen fiable de compter les en-têtes? ou y a-t-il un autre moyen d'obtenir la longueur sans compter l'en-tête? toute note ou code de base (en python ou c ou js) est apprécié à l'avance

Réponses

2 KevinBoone Sep 11 2020 at 21:06

Le marqueur de synchronisation de trame n'est pas 0xFFFx où x est quatre bits, c'est 0xFFFx ou 0xFFEx. Étant donné que les mêmes modèles peuvent apparaître dans les données audio, une recherche par force brute pour les modèles ne fonctionnera pas - vous devrez trouver la première instance du marqueur de synchronisation, puis calculer la longueur en octets de chaque image à partir du débit binaire dans l'en-tête de la trame. Il y a déjà un article sur ce calcul, ici:

Formule à partir de la longueur d'image mp3