Re: Lire et ecrire les tags des fichiers mp3
Publié : mer. 01/déc./2010 0:27
....................
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
EnableExplicit
Define.s FichierImage
Define.i TailleFichierImage
Define.b Processeur
Define *Image
Procedure.b Fc_TestProcesseur() ; Retourne le type de processeur utilisé
; #True = Motorola - #False = Intel
Define.w Valeur
Valeur=1
If PeekB(@Valeur)=Valeur:ProcedureReturn #True:EndIf
EndProcedure
Procedure.u Fc_AlignementValeurW(ArgValeur.u,ArgAlignement.u,ArgProcIntel.b) ; Inverse l'alignement d'un Word selon le type de processeur
If (ArgAlignement='II' And Not ArgProcIntel) Or (ArgAlignement='MM' And ArgProcIntel)
ArgValeur=(ArgValeur&$FF)<<8+ArgValeur>>8
EndIf
ProcedureReturn ArgValeur
EndProcedure
Procedure.q Fc_AlignementValeurL(ArgValeur.q,ArgAlignement.u,ArgProcIntel.b) ; Inverse l'alignement d'un Long selon le type de processeur
If (ArgAlignement='II' And Not ArgProcIntel) Or (ArgAlignement='MM' And ArgProcIntel)
ArgValeur=(ArgValeur&$FF)<<24+((ArgValeur>>8)&$FF)<<16+((ArgValeur>>16)&$FF)<<8+(ArgValeur>>24)&$FF
EndIf
ProcedureReturn ArgValeur
EndProcedure
FichierImage="d:\folder.jpg"
TailleFichierImage=FileSize(FichierImage)
Processeur=Fc_TestProcesseur()
If TailleFichierImage>0
If CreateFile(1,"d:\temp.mp3")
; Octest 0 à 3 : Tag ID3 => 'APIC'
; Octets 4 à 7 : Taille du tag
; Octets 8 à 9 : Flag du tag
; Octet 10 : Description image qui suit en Unicode (BOM) ou non => Là dans notre exemple, non donc $0
; Octets 11 à 21 : Description image ('image/jpeg' pour une une image JPG ;)) + $0
; Octet 22 : Type image => Jaquette avant = $3
; Octet 23 : Texte de description => Ici, chaine vide donc $0
;
; On créé l'en-tête APIC
WriteString(1,"APIC",#PB_Ascii)
WriteLong(1,Fc_AlignementValeurL(TailleFichierImage+13,'MM',Processeur)); => +13 correspond aux octets 10 à 23 ci-dessus : On ne doit pas prendre en compte les 10 premiers
WriteWord(1,0) ; Octets 8 à 9
WriteByte(1,0) ; Octet 10
WriteString(1,"image/jpeg",#PB_Ascii) ; Octets 11 à 20
WriteByte(1,0) ; Octet 21
WriteByte(1,3) ; Octet 22
WriteByte(1,0) ; Octet 10
; On charge l'image JPEG qu'on souhaite insérer
If ReadFile(0,FichierImage)
*Image=AllocateMemory(TailleFichierImage)
If ReadData(0,*Image,TailleFichierImage)
CloseFile(0)
; On insère l'image
WriteData(1,*Image,TailleFichierImage)
EndIf
EndIf
CloseFile(1)
EndIf
EndIf
Je crois que c'est selon l'ordre dans lequel tu sauvegardes les données sous MP3Tag...Dobro a écrit :[MP3Tag] colle le tag "APIC" en premiere position , alors que mes fonctions permettent
de lire les tag, quelque soit leur position !!
boddhi a écrit :@Dobro
Attention : Pour info, sous processeur Motorola, ton code ne fonctionnera pas à cause de tes procédures to_little_indian (NB : normalement c'est endianrien à voir avec les indiens
) qui ne sont écrites que pour du Intel...
Alors que le mien...