J'essaie d'extraire l'en-tête mp3 d'un fichier. Ceci est différent des tags ID3 - l'en-tête mp3 est l'endroit où sont conservées les informations sur la version MPEG, le débit binaire, la fréquence, etc.Accéder à l'en-tête mp3 binaire en C via fopen
Vous pouvez voir un aperçu de la structure d'en-tête mp3 ici: http://upload.wikimedia.org/wikipedia/commons/0/01/Mp3filestructure.svg
Mon problème est, en dépit du chargement du fichier et de réception maintenant valide (pour autant que je sache) sortie binaire, je ne suis pas voir les valeurs attendues . Les 12 premiers bits du fichier mp3 devraient être tous ceux, pour le mot de synchronisation mp3. Cependant, je reçois quelque chose de différent pour les 8 premiers bits seulement. Cela pourrait suggérer un problème pour moi.
Comme une note de côté, j'ai un fichier mp3 valide étant attaché via fopen
// Main function
int main (void)
{
// Declare variables
FILE *mp3file;
char requestedFile[255] = "";
unsigned long fileLength;
// Counters
int i;
// Tryout
unsigned char byte; // Read from file
unsigned char mask = 1; // Bit mask
unsigned char bits[8];
// Memory allocation with malloc
// Ignore this at the moment! Will be used in the future
//mp3syncword=(unsigned int *)malloc(20000);
// Let's get the name of the file thats requested
strcpy(requestedFile,"testmp3.mp3"); // lets hardcode this into here for now
// Open the file
mp3file = fopen(requestedFile, "rb"); // open the requested file with mode read, binary
if (!mp3file){
printf("Not found!"); // if we can't find the file, notify the user of the problem
}
// Let's get some header data from the file
fseek(mp3file,0,SEEK_SET);
fread(&byte,sizeof(byte),1,mp3file);
// Extract the bits
for (int i = 0; i < sizeof(bits); i++) {
bits[i] = (byte >> i) & mask;
}
// For debug purposes, lets print the received data
for (int i = 0; i < sizeof(bits); i++) {
printf("Bit: %d\n",bits[i]);
}
Je crois me souvenir que ID3v2 s'intègre dans la structure MP3 pour stocker ses informations au début du fichier, mais avec les bits de synchronisation qui ne correspondent pas. Ce n'est pas votre problème principal, cependant - référez-vous aux autres réponses pour cela. –
Même avec le bit de synchronisation commençant à zéro, le même problème se produit. Je m'excuse de ne pas le remettre à zéro (je l'ai changé à un à des fins de test) – BSchlinker
Dans ce cas, jetez un oeil à votre image SVG: "La structure du fichier MP3 peut être" encapsulée "dans un tag ID3." Ouvrez votre fichier MP3 avec un éditeur (hexadécimal) de votre choix, vous verrez très probablement qu'il commence par 'ID3' ce qui signifie que vous allez analyser/ignorer les métadonnées ID3 avant de commencer avec l'en-tête MP3. – schnaader