2015-02-26 1 views
0

Je souhaite décoder un fichier MP3. Je parviens à trouver les 32 bits dans l'entête (mot de synchronisation, identifiant, calque, bitrate, etc). Le problème est que je n'ai aucune idée sur la façon de trouver le début (la position) de main_data_begin (informations secondaires). J'utilise MATLAB dans ce cas. Je sais que ce peut être une question simple, mais j'ai vraiment besoin de votre aide. S'il vous plaît. Merci.Recherche main_data_begin dans un fichier MP3

Répondre

0

MPEG1/2 La couche III utilise main_data_begin comme une sorte de pseudo-VBR sur les en-têtes de granules &. La manière la plus simple de le faire est d'implémenter un tampon circulaire qui reçoit toutes les données de trame physique après les informations de côté et rejette les octets inutilisés au début du tampon (comme indiqué par main_data_begin) avant de commencer le décodage de trame.

Votre meilleur pari est de lire la source d'un décodeur existant. La spécification est également très bonne pour cela, mais main_data_begin est mal documenté dans les versions disponibles publiquement (du mieux que je peux trouver).

+0

Merci @ioctILR :-) Btw, avez-vous des livres à recommander pour le décodeur MP3? – Cyan

+0

Pas vraiment. J'ai piraté un décodeur de la spécification en utilisant le décodeur Fluendo gstreamer pour "vérifier" ma logique. Si vous voulez voir comment fonctionne main_data_begin dans ce décodeur, essayez de lire BitReservoir.cs dans nlayer.codeplex.com (en particulier la méthode AddBits). – ioctlLR