Bonjour j'essaye de faire un programme qui lit l'header d'un mp3 et son tag
, malheureusement pour l'header ça ne fonctionne pas très bien

Pour connaitre les données je me suis inspiré de : http://www.mpgedit.org/mpgedit/mpeg_...MP3Format.html

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
#include <stdio.h>
#include <stdlib.h>
 
void AfficherTAG(char entree[]);
 
int main()
{
	int i, tmp, octets4, bits[32];
	char entree[32] = "HappyEnd.mp3"; 
 
	// Ouverture du mp3 en lecture binaire
	FILE* fichier = NULL;
	fichier = fopen(entree, "rb");
	AfficherTAG(entree); 
 
	// On se place au début du fichier
	// On récupère les 32 bits premiers bits = 4 octets = 1 int
	fseek(fichier, 0, SEEK_SET);
	fread(&octets4, sizeof(octets4), 1, fichier);
 
	// Conversion en binaire dans le bon sens de lecture :)
	tmp = octets4;
	for (i = 32 - 1; i >= 0; i--)
	{
		bits[i] = tmp % 2;
		tmp = tmp /2;
	}
 
	// Affichage
	printf("\nHeader du mp3 :");
	printf("\nEn décimal => %d\n", octets4);
	printf("En binaire => ");
	for(i = 0; i < 32; i++)
		printf("%d  ", bits[i]);
 
	// Type de codage
	if ((bits[20] == 1) && (bits[19] == 0))
		printf("\n=> MPEG 2");
 
	if ((bits[20] == 1) && (bits[19] == 1))
		printf("\n=> MPEG 1");
 
	// Protection
	if (bits[16] == 0)
		printf("\n=> Protégé");
	else
		printf("\n=> Non protégé");
 
	// Layer III
	if ((bits[18] == 0) && (bits[17] == 1))
		printf("\n=> Layer III");		
 
	// Channel Mode
	if (bits[7] == 0 && bits[6] == 0)
		printf("\n=> Stereo");
 
	if (bits[7] == 0 && bits[6] == 1)
		printf("\n=> Joint Stereo");
 
	if (bits[7] == 1 && bits[6] == 0)
		printf("\n=> Dual Channel");
 
	if (bits[7] == 1 && bits[6] == 1)
		printf("\n=> Single Channel");
 
 
	printf("\n");	
 
	// Fermeture du fichier
	fclose(fichier);
	return 0;
}
Conformément à la documentation trouvée, j'ai bien 10 bits à 1 du bit 21 à 31, donc je pense que mon fread est bon, ma conversion binaire a l'air bonne aussi (enfin en comparant avec la calculatrice)...

Le problème est pour le Layer III où je suis censé trouvé le bits 18 et 17 respectivement à 0 et 1 et bien na c'est pas du mp3 selon mon programme... autre soucis concernant le Channel Mode pour le mp3 en question il s'agit d'un Joint Stereo et j'ai des bits qui affirment que c'est du Stereo tout court awww...

Exemple d'execution de mon programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
./a.out 
 
TAG = TAG
Titre = Kaze Wo Atsumete              
Artiste = Happy End                     
Album = Kazemachi Roman               
Annee = 1971
Commentaire = achete en import :)         
Piste = 3
 
Header du mp3 :
En décimal => 1083374591
En binaire => 0  1  0  0  0  0  0  0  1  0  0  1  0  0  1  0  1  1  1  1  1  0  1  1  1  1  1  1  1  1  1  1  
=> MPEG 1
=> Non protégé
=> Stereo


Je ne vois pas d'où ça peut venir, je suis en 64bits mais mon int fait quand même 4 octets donc ça peut pas être là le problème...

Je suis un peu perdu je ne vois pas d'où pourrait venir mon erreur (je sais mon code est (très très très loin) d'être parfait (pas de test pour ouvrir et fermer le fichier etc...).