OVH Cloud OVH Cloud

MP3 frame header

4 réponses
Avatar
Franck
Salut,

J'ai besoin d'un petit coup de main pour lire les informations d'un
fichier MP3 (Contenues dans le frame header, PAS dans le tag IDv3).

J'ai bien trouvé quelques informations ici:

http://www.mp3-tech.org/programmer/frame_header.html
http://websound.ru/programming/info/mp3head.htm

Mais je dois visiblement mal m'y prendre :-(

Merci par avance pour toute aide que vous pourrez m'apporter.

Bonnes fêtes à tous

4 réponses

Avatar
Romain PETIT
Franck a émis l'idée suivante :

J'ai besoin d'un petit coup de main pour lire les informations d'un fichier
MP3 (Contenues dans le frame header, PAS dans le tag IDv3).


[...]
Merci par avance pour toute aide que vous pourrez m'apporter.



Tu devrais pouvoir te débrouiller avec ce code en C++ et les
explications associées :
http://www.codeproject.com/audio/MPEGAudioInfo.asp

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Vincent Barré
Franck a écrit
...
J'ai besoin d'un petit coup de main pour lire les informations d'un
fichier MP3 (Contenues dans le frame header, PAS dans le tag IDv3).



Bonjour,
Je peux te donner cela, c'est un peu long et simplifié mais tu devrai
pouvoir te débrouiller avec. C'est écrit. en 5.5 mais facilement
modifiables.
(J'ai enlevé le calcul pour les VBR, si vraiment tu en a besoin, dis le moi)

@+
Vincent Barré
//---------------------------------------------------------------------
// Lectrure Trame

BitRates_1L3 est un tableau de 16 entiers
BitRates_1L2 est un tableau de 16 entiers
BitRates_1L1 est un tableau de 16 entiers
BitRates_2L1 est un tableau de 16 entiers
BitRates_2Lx est un tableau de 16 entiers

SampleRates_1 est un tableau de 4 entiers courts
SampleRates_2 est un tableau de 4 entiers courts
SampleRates_25 est un tableau de 4 entiers courts

TableRates est un tableau de 512 entiers longs // Pour le VBR, Mémorise le
Nbr de trame par BitRate
MaxKilo est un entier = 512
MinKilo est un entier = 32

Head est un tableau de 4 entiers courts

//-----------------

BitRates_1L3[1] = 0
BitRates_1L3[2] = 32
BitRates_1L3[3] = 40
BitRates_1L3[4] = 48
BitRates_1L3[5] = 56
BitRates_1L3[6] = 64
BitRates_1L3[7] = 80
BitRates_1L3[8] = 96
BitRates_1L3[9] = 112
BitRates_1L3[10] = 128
BitRates_1L3[11] = 160
BitRates_1L3[12] = 192
BitRates_1L3[13] = 224
BitRates_1L3[14] = 256
BitRates_1L3[15] = 320
BitRates_1L3[16] = 0

BitRates_1L2[1] = 0
BitRates_1L2[2] = 32
BitRates_1L2[3] = 48
BitRates_1L2[4] = 56
BitRates_1L2[5] = 64
BitRates_1L2[6] = 80
BitRates_1L2[7] = 96
BitRates_1L2[8] = 112
BitRates_1L2[9] = 128
BitRates_1L2[10] = 160
BitRates_1L2[11] = 192
BitRates_1L2[12] = 224
BitRates_1L2[13] = 256
BitRates_1L2[14] = 320
BitRates_1L2[15] = 384
BitRates_1L2[16] = 0

BitRates_1L1[1] = 0
BitRates_1L1[2] = 32
BitRates_1L1[3] = 64
BitRates_1L1[4] = 96
BitRates_1L1[5] = 128
BitRates_1L1[6] = 160
BitRates_1L1[7] = 192
BitRates_1L1[8] = 224
BitRates_1L1[9] = 256
BitRates_1L1[10] = 288
BitRates_1L1[11] = 320
BitRates_1L1[12] = 352
BitRates_1L1[13] = 384
BitRates_1L1[14] = 416
BitRates_1L1[15] = 448
BitRates_1L1[16] = 0

BitRates_2L1[1] = 0
BitRates_2L1[2] = 32
BitRates_2L1[3] = 48
BitRates_2L1[4] = 56
BitRates_2L1[5] = 64
BitRates_2L1[6] = 80
BitRates_2L1[7] = 96
BitRates_2L1[8] = 112
BitRates_2L1[9] = 128
BitRates_2L1[10] = 144
BitRates_2L1[11] = 160
BitRates_2L1[12] = 176
BitRates_2L1[13] = 192
BitRates_2L1[14] = 224
BitRates_2L1[15] = 256
BitRates_2L1[16] = 0

BitRates_2Lx[1] = 0
BitRates_2Lx[2] = 08
BitRates_2Lx[3] = 16
BitRates_2Lx[4] = 24
BitRates_2Lx[5] = 32
BitRates_2Lx[6] = 40
BitRates_2Lx[7] = 48
BitRates_2Lx[8] = 56
BitRates_2Lx[9] = 64
BitRates_2Lx[10] = 80
BitRates_2Lx[11] = 96
BitRates_2Lx[12] = 112
BitRates_2Lx[13] = 128
BitRates_2Lx[14] = 144
BitRates_2Lx[15] = 160
BitRates_2Lx[16] = 0

SampleRates_1[1] = 44
SampleRates_1[2] = 48
SampleRates_1[3] = 32
SampleRates_1[4] = 0

SampleRates_2[1] = 22
SampleRates_2[2] = 24
SampleRates_2[3] = 16
SampleRates_2[4] = 0

SampleRates_25[1] = 11
SampleRates_25[2] = 12
SampleRates_25[3] = 08
SampleRates_25[4] = 0

StMode[1] = " Stereo "
StMode[2] = " Js-Str "
StMode[3] = " 2-Voie "
StMode[4] = " -Mono- "

//-----------------

....

Lut = flit(Fichier, 4, &Head )

si valide_Entete_Mp3() alors Set_TrameMpeg

....

//------------------------------------------------------------------
Procédure Valide_Entete_Mp3()

Renvoyer (EtBinaire(Head[1],0xFE) = 0xFE) et ...
(EtBinaire(Head[2],0xE0) = 0xE0) et ...
(EtBinaire(Head[2],0x06) <> 0) et ... // Layer 0
(ETBinaire(Head[3],0xF0) <> 0xF0) et ... // Kbs 0
(ETBinaire(Head[3],0x0C) <> 0x0C) // KHz 0

//-------------------------------------------------------------------
Procédure Set_TrameMpeg()

Trame = 0
T est un entier court = (etbinaire(Head[2],0x18) / 8)
selon T
cas 0
Mpeg = 25
cas 2
Mpeg = 2
cas 3
Mpeg = 1
fin

T = etbinaire(Head[2],0x06) / 2
selon T
cas 1
Layer = 3
cas 2
Layer = 2
cas 3
Layer = 1
fin

si (Mpeg > 0) et (Layer > 0) alors

T = etbinaire(Head[3],0x0C) / 4
T++

selon Mpeg
cas 1
Freq = SampleRates_1[T]
cas 2
Freq = SampleRates_2[T]
cas 25
Freq = SampleRates_25[T]
fin

T = etbinaire(Head[3],0xF0) / 16
T++

si Mpeg = 1 alors
selon Layer
cas 1
Kilo = BitRates_1L1[T]
cas 2
Kilo = BitRates_1L2[T]
cas 3
Kilo = BitRates_1L3[T]
FIN
sinon
si Layer = 1
Kilo = BitRates_2L1[T]
sinon
Kilo = BitRates_2Lx[T]
fin
fin

ModeMpeg = etbinaire(Head[4],0xF0) / 64
ModeMpeg++

si (Freq > 0) et (Kilo > 0) alors
Lg est un entier long = 1152
Lg = Lg * Kilo
Lg = Lg * 1000
selon Freq
cas 8
Echant_Sec = 08000
cas 11
Echant_Sec = 11025
cas 12
Echant_Sec = 12000
cas 16
Echant_Sec = 16000
cas 22
Echant_Sec = 22050
cas 24
Echant_Sec = 24000
cas 32
Echant_Sec = 32000
cas 44
Echant_Sec = 44100
cas 48
Echant_Sec = 48000
fin

Lg = Lg / Echant_Sec

Trame = Lg / 8
fin
fin

Tag_Mode = "MP"+VersChaine(Mpeg)+"
L"+VersChaine(Layer)+StMode[ModeMpeg]+VersChaine(Kilo)+"Kbs
"+VersChaine(Freq)+"Khz"

//TailleFich -= TailleMoins
TailleFich -= (TaillePlus + TailleSeek)

si (TailleFich > 0) et (Trame > 0) alors
NbEch = TailleFich
NbEch = NbEch * 1152
NbEch = NbEch / Trame
Tag_Duree = Arrondi(NbEch / (Echant_Sec / 100))
sinon
Trame = 0
FIN
Avatar
Franck
Bonjour,

Je peux te donner cela, c'est un peu long et simplifié mais tu devrai pouvoir
te débrouiller avec. C'est écrit. en 5.5 mais facilement modifiables.
(J'ai enlevé le calcul pour les VBR, si vraiment tu en a besoin, dis le moi)



Je suis également preneur pour les VBR ;-)

J'ai également trouvé quelques sources WD très interessantes ici:

http://www.qpratools.com/mp3tools/code/id3.html

Merci pour le coup de main!

@+
Avatar
Vincent Barré
Franck écrit dans le message de news:
Bonjour,

Je peux te donner cela, c'est un peu long et simplifié mais tu devrai
pouvoir te débrouiller avec. C'est écrit. en 5.5 mais facilement
modifiables.
(J'ai enlevé le calcul pour les VBR, si vraiment tu en a besoin, dis le
moi)



Je suis également preneur pour les VBR ;-)

J'ai également trouvé quelques sources WD très interessantes ici:

http://www.qpratools.com/mp3tools/code/id3.html

Merci pour le coup de main!

@+



Bonjour et bonne année,
Je peux t'envoyer mes procédures, elles gèrent les tags + les tags ID3v1 et
v2, les wav et les mp3 + vbr, mais c'est assez long, envoie moi ton mail.
@+
Vincent Barré
Clique ici pour m'envoyer un mail :
http://www.cerbermail.com/?fk8tCJ6coj