Lire et ecrire les tags des fichiers mp3

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

....................
Dernière modification par Backup le dim. 20/mars/2011 13:30, modifié 1 fois.
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Lire et ecrire les tags des fichiers mp3

Message par Parole De JOJO »

en fait, une fois j'ai essaye une procedure qui coupe les tags, les efface et les reecrits
le probleme est que je perdais l'image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

je bosse justement la dessus ;)

ma procedure d'ecriture ID3v2
fait appel a une procedure qui coupe l'entete
et reconstruit a partir de Zero

je ne gere pas encore l'image
je suis sur un petit bug d'un décalage.... pas grand chose
mais il faut que je prenne le temps de m'y interresser ..

j'ai refait une bonne partie du code

je vais retirer celui qui est ici, car, il est obsolette ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

Code modifié en page 1 de ce topic

je propose 6 procedures :


procedure read_tag_mp3(file$); lit le tag ID3 V1 (celui qui est en fin de fichier)

procedure read_tag_mp3v2(file$); lit le tag ID3 V2 (celui qui est en debut de fichier)
je conseille de les utiliser toutes les 2...
car le plus courant reste le ID3 V1
Le tag ID3V2 peut contenir une image,(pochette de disque) ;si c'est le cas
l'image est sauvé avec comme nom "temp.jpg" a coté de l'emplacement du prg
(sauvegarder avant de lancer la première fois) , sinon l'image risque de s'écrire dans le dossier compiler


procedure write_tag_mp3(file$,titre$,interprete$,album$,annee$,commentaire$,numero_piste$,genre_musical$)
;Ecrit le Tag format ID3V1 (celui de fin de fichier)

procedure write_tag_mp3v2(file$,album$,composeur$,interprete$,titre$,copyright$,annee$,numero_piste$,lien$,commentaire$, genre$, longueur$) ;
;Ecrit le Tag format ID3V2 (celui du debut de fichier)

cette procedure supprime automatiquement tout tag ID3V2 , et en refait un a neuf !
elle ne gere pas l'incorporation d'image...pour le moment.... ;)

procedure delete_tagV1(file$) ; supprime le Tag ID3V1

procedure delete_tagV2(file$) ; supprime le tag ID3V2 ; cette procedure est appelé
par la procedure d'ecriture de tag ID3V2 , si un tel tag existe dans le fichier..
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

j'ai modifié les procedures

delete_tagV1(file$)
et
delete_tagV2(file$)
pour qu'elle vérifie si le tag existe avant d'éffacer une partie du fichier !! :lol:

et modification de la procedure de Lecture du Tag ID3V2
sur les Commentaire , qui ne s'affichaient pas en entier .. ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

pffff ! re corrections !! ;)

là ça devrai etre stable !

je vais attaquer l'insertion d'image
Avatar de l’utilisateur
venom
Messages : 3134
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Lire et ecrire les tags des fichiers mp3

Message par venom »

Merci pour se super taf Dobro tu assure :wink: Ont ne l'arête plus :D







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Lire et ecrire les tags des fichiers mp3

Message par boddhi »

Un petit coup de main pour l'écriture de l'image...

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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

.....................
Dernière modification par Backup le dim. 20/mars/2011 13:31, modifié 1 fois.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Lire et ecrire les tags des fichiers mp3

Message par boddhi »

Dobro a écrit :[MP3Tag] colle le tag "APIC" en premiere position , alors que mes fonctions permettent
de lire les tag, quelque soit leur position !! :)
Je crois que c'est selon l'ordre dans lequel tu sauvegardes les données sous MP3Tag...
J'ai la version 2.46a et mes images sont en fin de bloc ID3.
J'ai toujours pour habitude de modifier les champs album, titre, etc... d'abord, de sauvegarder cette première étape puis ensuite de traiter les images avant une nouvelle sauvegarde. D'où j'en tire cette conclusion...
Avatar de l’utilisateur
venom
Messages : 3134
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Lire et ecrire les tags des fichiers mp3

Message par venom »

Merci Dobro je testerais des que j'ai 5min. :wink:

ps: tous mes audio ont étaient éditer avec songbird.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Lire et ecrire les tags des fichiers mp3

Message par boddhi »

@Dobro
Attention : Pour info, sous processeur Motorola, ton code ne fonctionnera pas à cause de tes procédures to_little_indian (NB : normalement c'est endian :wink: rien à voir avec les indiens :D ) qui ne sont écrites que pour du Intel...
Alors que le mien... :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lire et ecrire les tags des fichiers mp3

Message par Backup »

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 endian :wink: rien à voir avec les indiens :D ) qui ne sont écrites que pour du Intel...
Alors que le mien... :mrgreen:

oui je sais , mais j'men fou :lol:
Purebasic ne fonctionne pas sur mon Falcon 030 :)

ps : Petit indien, c'est plus cool hug !
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Lire et ecrire les tags des fichiers mp3

Message par boddhi »

Mouais, mais fonctionnera pas sous mon vieil A4030 :wink:

PS : Toi, être petit cheval fou sous ton scalp :lol:
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Lire et ecrire les tags des fichiers mp3

Message par Parole De JOJO »

ou la la
je suis perdu...
bon je vais voir ca trankillement ce soir
merci dobro, boddhi, et tout le monde
Répondre