tags des fichiers audio

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

tags des fichiers audio

Message par Parole De JOJO »

Bonjour

je sais que j'ai deja pose la question ici, mais comme je n'ai pas compris la reponse, je me permet de la reformuler

je cree un programme qui gere les tags des fichiers audio, tel que nom d'artiste, d'album etc
le probleme c'est comment manipuler ces details. on m'a conseille la librairie tag lib, mais je n'ai pas compris quoi en faire. sur le forum anglais quelqun a mis un exemple qui ne marche pas apparement avec la version de tag lib telechargeable, et je suis completement confus.

si quelqun pourrait me donner un petit exemple (je ne demande pas qu'on me mache le boulot, juste un petit exemple), je lui en serais tres recconnaissant

merci
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: tags des fichiers audio

Message par Ar-S »

Donne un lien vers cette lib stp
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: tags des fichiers audio

Message par Ar-S »

Je ne vois pas trop en quoi cette lib est compatible PB mais j'ai une solution trouvé sur codeArchive :

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1350&highlight=
; Author: Momo (corrected by J-The-Grey, updated for PB4.00 by blbltheworm)
; Date: 14. June 2003
; OS: Windows
; Demo: Yes

OpenWindow(1,12,12,300,250,"ID3 Infos:",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 

AboutText.s="Programmer: Moritz Wagner" + Chr(13) + Chr(13) + Chr(169) + " 2003 by Moritz Wagner"+Chr(13)+"Programmed in Pure Basic" + Chr(13) + Chr(13) + "Contact: Wagnergitti@vr-web.de" 

File.s=OpenFileRequester("Bitte Wählen sie eine MP3 Datei aus die ID3 V1 Tags enthält","","MP3 Tracks (*.MP3)|*.mp3;Alle (*.*)|*.*",0) 
If File<>"" 
  If ReadFile(0,File) 
    MemPointer =  AllocateMemory(128) ; 128 byte reservieren
    If  MemPointer
      FileSeek(0,Lof(0)-128) 
      ReadData(0,MemPointer, 128) ; die letzten 128 byte der Datei auslesen 
      ; Debug mempointer 
      CloseFile(0) 
      header$    = PeekS(MemPointer, 3) 
      
      If header$ = "TAG"                               ;  3 Zeichen 
        songtitle$ = Trim(PeekS(MemPointer +   3,30)) ; 30 Zeichen 
        artist$    = Trim(PeekS(MemPointer +  33,30)) ; 30 Zeichen 
        album$     = Trim(PeekS(MemPointer +  63,30)) ; 30 Zeichen 
        year$      = Trim(PeekS(MemPointer +  93, 4)) ;  4 Zeichen 
        comment$   = Trim(PeekS(MemPointer +  97,30)) ; 30 Zeichen 
        genre      = PeekB(MemPointer + 127)          ;  1 Zeichen 
        CreateGadgetList(WindowID(1)) 
        TextGadget(7,10,10,80,20,"Titel:") 
        TextGadget(8,10,40,80,20,"Künstler: ") 
        TextGadget(9,10,70,80,20,"Album: ") 
        TextGadget(10,10,100,80,20,"Jahr: ") 
        TextGadget(11,10,130,80,20,"Kommentar: ") 
        TextGadget(12,10,160,80,20,"Genre: ") 
        StringGadget(0,80,10,200,20,songtitle$) 
        StringGadget(1,80,40,200,20,artist$) 
        StringGadget(2,80,70,200,20,album$) 
        StringGadget(3,80,100,200,20,year$) 
        StringGadget(4,80,130,200,20,comment$) 
        StringGadget(5,80,160,200,20,Str(genre)) 
        ButtonGadget(6,20,190,70,30,"About") 
        ButtonGadget(13,120,190,70,30,"OK") 
      EndIf 
    EndIf 
  EndIf 
Else 
  MessageRequester("Error","Bitte Wählen Sie eine MP3 Datei aus!",0) 
EndIf 

Repeat 
  eventid = WaitWindowEvent() 
  If eventid = #PB_Event_CloseWindow 
    Ende=1 
  EndIf 
  If eventid = #PB_Event_Gadget 
    If EventGadget()=6 
      MessageRequester("About",AboutText,OK) 
    EndIf 
    If EventGadget()=13 
      songtitle.s=GetGadgetText(0) 
      artist.s=GetGadgetText(1) 
      album.s=GetGadgetText(2) 
      year.s=GetGadgetText(3) 
      comment.s=GetGadgetText(4) 
      genre=Val(GetGadgetText(5)) 
      
      
      If OpenFile(0,File)
        MemPointer = AllocateMemory(128)
        If MemPointer
          FileSeek(0,Lof(0)-128) 
          PokeS(MemPointer,header$, 3) 
          ;  3 Zeichen 
          PokeS(MemPointer+3,songtitle.s,30) ; 30 Zeichen 
          PokeS(MemPointer+33,artist.s,30) ; 30 Zeichen 
          PokeS(MemPointer+63,album.s,30) ; 30 Zeichen 
          PokeS(MemPointer+93,year.s,4) ;  4 Zeichen 
          PokeS(MemPointer+97,comment.s,30) ; 30 Zeichen 
          PokeB(MemPointer + 127,genre)          ;  1 Zeichen 
          
          WriteData(0,MemPointer, 128) 
          CloseFile(0) 
          ;     Debug songtitle 
          
        EndIf 
      EndIf 
    EndIf 
  EndIf 
Until Ende=1 
End 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP

A toi de l'examiner et de l'adapter pour tes besoin mais j'ai testé et ça marche. (j'ai modifié le tag d'un morceau)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

Merci effectivement ca marche mais pas pour les fichiers wma. de plus j'ai reussi seulement a lire les tags et pas a les ecrire
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: tags des fichiers audio

Message par Ar-S »

=> je pesais que tu voulais que tagguer des mp3... Les autres formats .. mystère.

sinon pour l'écriture, as tu essayé d'ouvrir un fichier mp3 avec le programme, de modifier un des champs puis de le fermer.
ensuite en ré-ouvrant tu t'apercevras que le contenu du champ a bien été gardé. En tout cas ça a fonctionné pour moi.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

oui j'ai fais cela et ca n'a pas marche
je suis sous win 7 peut etre que c'est un probleme. si j'ai bien compris il y a un trus qui s'apelle id3 qui a change
avant c'etait id1 et id2. donc il faut un code de id3. sur celui que tu m'as mis c'ect ecrit id1 je crois

bref je suis desespere :)
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: tags des fichiers audio

Message par Geo Trouvpatou »

Salut.

Tu trouveras peut-être ton bonheur ici : http://fr.wikipedia.org/wiki/ID3

Regardes bien le 1er tableau : Structure des métadonnées ID3v1

0_____3____Identifiant "TAG" <- Le Header
3____30____Titre de la chanson
33___30____Nom de l'interprète
63___30____Nom de l'album
93____4____Année de parution
97___30____Commentaire sur la chanson
127___1____Genre musical



Maintenant regardes le code :

header$ = PeekS(MemPointer, 3)
If header$ = "TAG" ; 3 Zeichen

songtitle$ = Trim(PeekS(MemPointer + 3,30)) ; 30 Zeichen
artist$ = Trim(PeekS(MemPointer + 33,30)) ; 30 Zeichen
album$ = Trim(PeekS(MemPointer + 63,30)) ; 30 Zeichen
year$ = Trim(PeekS(MemPointer + 93, 4)) ; 4 Zeichen
comment$ = Trim(PeekS(MemPointer + 97,30)) ; 30 Zeichen
genre = PeekB(MemPointer + 127) ; 1 Zeichen


Pour simplifier, imagines que ton "Header" démarre à 0 et qu'il prend 3 octets (3 cases mémoire : 0,1,2), donc la prochaine valeur "Titre de la chanson" sera 3 et prend 30 octets etc...
Bref! les valeurs s'additionnent en fonction de la place qu'elle prend mémoire pour trouver la valeur suivante.

Les tags se trouvent à la fin du fichier et prennent 128 octets de place, c'est pour cela qu'il y a cette ligne : FileSeek(0,Lof(0)-128)
Par rapport à la fin du fichier, on recule pour trouver le "T" de TAG.
Si tu as du mal à comprendre, lis la procedure FileSeek.

Les Peeks te permettent de récupérer les valeurs, les Pokes eux te permettent de modifier ces valeurs.

Le code chez moi fonctionne pour les mp3.
Pour les wma, c'est une autre histoire.

[EDIT]D'ailleurs en lisant moins entre les lignes du côté de wikipedia, j'ai perdu mon temps à t'expliquer un truc pour rien :
Wikipédia a écrit :Elle consiste en un espace de 128 octets placés à la fin du fichier. Les 3 premiers octets commencent par la chaîne « TAG », cela permet de trouver le début des informations par les lecteurs MP3. Le reste des octets est partagé entre les différents champs d'informations.
[EDIT2]Ce programme n'a pas marché pour un autre mp3, donc je l'ai ouvert avec un éditeur Hexa, et il n'y avait aucunes infos, j'ai donc ajouté moi-même le "TAG" et derrière un titre bidon.
Ensuite le programme cette fois-ci, à bien ouvert le fichier mp3 et lu les infos du titre.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: tags des fichiers audio

Message par Backup »

Geo Trouvpatou a écrit : [EDIT2]Ce programme n'a pas marché pour un autre mp3, donc je l'ai ouvert avec un éditeur Hexa, et il n'y avait aucunes infos, j'ai donc ajouté moi-même le "TAG" et derrière un titre bidon.
Ensuite le programme cette fois-ci, à bien ouvert le fichier mp3 et lu les infos du titre.

il suffit donc, de tester la présence de "TAG" , et de faire selon :)
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

super. j'ai compris comment lire les tags

mais je n'arrive toujours pas a les ecrire
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: tags des fichiers audio

Message par Progi1984 »

Juste pour infos, tu as la lib id3Lib (http://code.google.com/p/rwrappers/wiki/RWid3Lib)
avec son wrapper et les exemples (http://code.google.com/p/rwrappers/sour ... unk/id3Lib)
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: tags des fichiers audio

Message par Geo Trouvpatou »

Dobro a écrit :il suffit donc, de tester la présence de "TAG" , et de faire selon :)
Exactement et c'est d'ailleurs ce qui est fait avec le : If header$ = "TAG" ,mais c'est le programme qui est mal foutu, puisque que l'interface se dessine correctement uniquement si le mot TAG est présent, mais quand ce n'est pas le cas alors on n'entre pas dans la condition et donc l'interface ne se dessine pas et cela donne l'impression que le programme est bloqué.
Parce que mieux conçu, sur un fichier non taggué, on pourrait ajouter nos infos.

Pour modifier les infos Jojo, c'est pareil que les lire.
Voici le code :

Code : Tout sélectionner

If OpenFile(0,File)
        MemPointer = AllocateMemory(128)
        If MemPointer
          FileSeek(0,Lof(0)-128)
          PokeS(MemPointer,header$, 3) ;  3 Zeichen
          PokeS(MemPointer+3,songtitle.s,30) ; 30 Zeichen
          PokeS(MemPointer+33,artist.s,30) ; 30 Zeichen
          PokeS(MemPointer+63,album.s,30) ; 30 Zeichen
          PokeS(MemPointer+93,year.s,4) ;  4 Zeichen
          PokeS(MemPointer+97,comment.s,30) ; 30 Zeichen
          PokeB(MemPointer + 127,genre)          ;  1 Zeichen
         
          WriteData(0,MemPointer, 128)
          CloseFile(0)
          ;     Debug songtitle
         
        EndIf 
EndIf 
On calcul le nombre d'octets total du Mp3 grâce à Lof (Voir doc).
Comme on sait que les tags sont stockés à la fin du fichier sur une longueur de 128 octets on prend donc : Taille totale du fichier - 128 octets grâce à : Lof(0)-128
On sait qu'au début on doit avoir le mot TAG.
En sachant qu'un caractère prend 1 octet donc TAG = 3 caractères = 3 octets d'où
PokeS(MemPointer,header$, 3)
Actuellement header$ vaut TAG, mais tu aurais pu aussi coder en dur comme ceci :
PokeS(MemPointer,"TAG", 3)
Cela aurait donné le même résultat.
Et étant donné que les 1ère infos sont du texte (String) on utilise PokeS.

Quand on lit Wikipédia, pour la dernière info il est dit :
Les différents genre musicaux sont définis par une valeur numérique de 0 à 79. Le logiciel Winamp a étendu cette liste jusqu'à 147.
C'est pour cela que cette fois-ci pour la dernière donnée, on met : PokeB

Avec Peek (Moyen mnémotechnique : Tu PIQUEs la valeur) tu récupères une valeur en mémoire, avec Poke tu modifies une valeur en mémoire.

Mais plutôt que de te casser la tête utilise le wrapper de Progi1984.
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

merci beaucoup les gars, j'ai presque tout compris

en fait la premiere version de id3 stockait les tags dans les 128 deniers bits du fichier mp3.
la deuxieme version stock au debut et sans limite de taille.
donc on fait une verification si le fichier commence par id3 c'est la 2eme version et si a la fin il y a TAG c'est la 1ere

pour changer les tags a la fin, c'est tres facile, il y a juste a remplacer les derniers 128 bits

le mystere est comment remplacer les tags dans la deuxieme version, et comme aujourd'hui tout est dans la 2eme (en tout cas dans win 7), il faut trouver une solution. le probleme est que puisque les tags n'ont pas une longueur predefini et de plus ne sont pas dand un ordre predefini, il faut donc trouver une astuce pour les gerer. (en effet, dans la 2eme version, pour entrer le nom de l'album par exemple on met tout simplement TALM (ou qqchose comme ca), suivi d'un signe bizzarre suivi du nom de l'album.

bref, en fait les tags sont facilement voyables en ouvrant le fichier mp3 dans notepad, l'editeur de texte

bon, si qqelqun a une idee, il serait gentil de m'en faire participer
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: tags des fichiers audio

Message par Ar-S »

J'ai ouvert à mp3 avec un editeur hexadécimal.
Le fichier commence comme ça :

Code : Tout sélectionner

4944330300000001135D434F4D4D000048C8000001656E67FFFE0000FFFE
ceci est suivi du commentaire qui lui peut être très long.
puis une autre série en hexa

Code : Tout sélectionner

00760054414C4200000029000001FFFE
etc...

On observe que chaque fin de champ se termine par [FF FE] sauf le dernier qui est [FF FB]
ceci sont précédés par d'autres valeur hexa et par des mots clés comme TCOP pour copyright, TYER pour Year etc...
Donc je me dis que ce qui compte ce n'est pas forcément le nombre de caractères mais ces valeurs hexa et ces mots clés qui déterminent la taille des champs. (champ auteur, champ commentaire etc..)

C'est unidée à creuser je pense.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: tags des fichiers audio

Message par Parole De JOJO »

ca a l'air une bonne idee, mais comment utiliser cette info?

de plus je ne comprends pas comment changer les tags, puisqu'ils ne suivent pas un ordre predefinis, et donc comment dire a mon programme quoi lire?

la wrapper de progi1984 a l'air interressante mais je n'ai pas reussi a l'utiliser. un message d'erreur s'affiche
Répondre