Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 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 | | | Calendrier |
|
| | tag mp3 | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Mer 1 Oct 2014 - 18:09 | |
| Eh ben... t'es pas sorti de l'auberge ! J'ai tenté d'extraire l'image d'un mp3, mais je ne trouve pas la logique des délimiteurs... en attendant j'ai trouvé comment faire pour extraire les dimensions d'un jpg, c'est déjà ça. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 1 Oct 2014 - 19:35 | |
| Je sens que je vais mettre la dll de klaus à contribution... Elle a des fonctions sympa pour faire de la recherche. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 2 Oct 2014 - 0:04 | |
| @ JL35,
Je te remercie ici pour ta réponse au sujet de la fonction de la dll. Klaus est déjà à la version suivante et cela aurait embrouillé son sujet.
J' ai mieux ( toujours dans les fonctions de kgf ) pour retrouver rapidement les marqueurs dans un fichier [ res% = dll_call3("SearchPatternInBinaryFile",adr(nom$),adr(pattern$),p%) ] renvoie le premier octet du marqueur.
Autre chose, on n' est pas obligé de récupérer tout les tags et certains sont limité si j' ai bien lu. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Jeu 2 Oct 2014 - 14:11 | |
| Il me semble bien (mais c'est toi qui vois en fonction de ton projet) qu'il y a une grande majorité de tags dont on n'a rien à faire ! | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 2 Oct 2014 - 18:26 | |
| Je pense que les tags en id3v1 sont suffisants : Titre Interprète Album Commentaire ( ) Année ( cela peut faire mal à son égo çà !... ) Piste Genre mais parfois ils sont enregistrés en id3v2.3 et pas dispo dans les id3v1 d' où l' intérêt de les récupérer dans cette norme. La jaquette , c' est une autre paire de manches. Si tout les marqueurs étaient présents, et dans un ordre défini, même vide, sur tous les fichiers... ...Même avec des tailles variables, cela pourrait se faire plus facilement mais malheureusement ce n' est pas le cas. Encore faut il savoir reconstruire l' image dans un picture à partir des données récupérées et ce n' est pas mon cas à ce jours . | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Jeu 2 Oct 2014 - 19:58 | |
| Pour l'image (les images ? recto et verso de la pochette par exemple ?) il me semble, mais ce n'est qu'un avis a priori, qu'il suffit de l'extraire telle quelle dans un fichier, le tout étant de savoir où elle commence et sa taille, ou sa fin, et son type (jpg, png..), mais sinon je ne crois pas qu'elle soit recodée ou compressée ou autre. Je la vois bien en binaire dans mes fichiers exemple, complète, mais je ne vois pas quels sont les délimiteurs. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 2 Oct 2014 - 22:30 | |
| Je crois que ce projet va rejoindre ses copains dans la rubrique " En cours..." Je vois comment faire pour récupérer les données mais je n' arrive pas à le mettre en pratique... J' arrive à : Récupérer les marqueurs présents Récupérer l' ordre des marqueurs (pour savoir qui est présent ou pas et suit qui et donc qui est la fin de l' autre... ) Récupérer l' octet de début du tag mais je bug pour récupérer les données entre deux tag... ( sachant que n' importe lequel peut suivre n' importe qui ou presque ) | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Jeu 2 Oct 2014 - 22:36 | |
| si tu as les pointeurs de début et de fin du tag (ou début du tag suivant), c'est facile de récupérer la zone entre les deux, avec un FileBin_Block_Read par exemple, dans un tableau ? après il n'y a plus qu'à analyser le contenu. Positionnement sur le début: Filebin_Position, lecture des n octets: Filebin_Block_Read.
Mais je reconnais volontiers que tu t'est lancé dans une drôle d'aventure. Pour moi je me serais contenté des ID3v1, avec leurs tags bien carrés, bien définis. Et si le fichier n'a pas de tags ID3v1 tu peux facilement les ajouter (128 octets). Après il faut les remplir, mais c'est une autre histoire. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 2 Oct 2014 - 22:48 | |
| Je me sers d' une fonction de la dll de Klaus pour savoir lesquels des 74 marqueurs existants et placés dans une liste sont présents que je place dans un tableau jusque ou le num corespond à l' octet de depart pour les remettre dans l' ordre Puis, pour raccourcir le traitement, je prends les 3000 premiers octets que je place dans un tableau de % par filebin_block_read. puis je lis mon tableau de la position de départ du tag juqu' à ce que les 4 octets en partant de x% correspondent à un autre marqueur en verifiant tout les marqueurs de la liste. mais en retour , rien... Poutant a$=chr$(id3v2%(x%)) devrait me renvoyer le caractère de l' octet placé dans le tableau... Je crois que le binaire est entrain de me rendre barjot.... | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Jeu 2 Oct 2014 - 23:03 | |
| Je regarde, un peu, de mon côté... | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 3 Oct 2014 - 0:47 | |
| J' ai fait cela et cela à l' air de fonctionner : ( pour l' instant, seul le marqueur TALB est extrait ): - Code:
-
' fichier test dim f$ f$="C:\PROGRA~2\PANORA~1\MES_PR~1\Musique\MP3TAG~1\sources\MP3TAG~1\ROMANE~1.MP3" ' kgf.dll dim kgf$ kgf$="C:\PROGRA~2\PANORA~1\Mes_Dlls\KGF\KGF.dll" dll_on kgf$ ' liste des marqueurs dim Marq$ Marq$="C:\PROGRA~2\PANORA~1\MES_PR~1\Musique\MP3TAG~1\sources\MP3TAG~1\MARQUE~1.TXT" ' objets dim no%,mem%,list% ' Tableau des 3000 premiers octets dim id3v2%(3000) ' Tableau des marqueurs avec position dim M$(3000),M2$(74,2) ' memo de visualisation no%=no%+1 : mem%=no% memo no% full_space no% bar_both no% font_name no%,"Courier" ' dlist des marqueurs no%=no%+1 : list%=no% dlist no% file_load no%,Marq$
Extract_Id3v2() End
Sub Extract_Id3v2() dim_local tf%,res%,pattern$,x%,talb_d%,tit2_d%,tpe2_d%,tcon_d%,trck_d%,tyer_d%,v%,a$,b$,y%,fin%,mf$ no%=no%+1 ' ouverture du fichier en mode binaire filebin_open_read no%,f$ ' recup de la taille du fichier tf%=filebin_size(no%) ' fermeture du fichier en mode binaire filebin_close no% no%=no%-1 ' recup des marqueurs et de leurs positions for x%=1 to count(list%) pattern$=item_read$(list%,x%) res% = dll_call3("SearchPatternInBinaryFile",adr(f$),adr(pattern$),0) M2$(x%,1)=Pattern$ M2$(x%,2)=str$(res%) ' affichage item_add mem%,M2$(x%,1)+" | "+M2$(x%,2) next x% ' seul m' interesse les marqueurs ' TALB => Album ' TPE2 => Interprète ' TIT2 => Titre ' TCON => Genre ' TRCK => Piste ' TYER => Année ' affectation des points de départ for x%=1 to 74 if M2$(x%,1)<>"" if M2$(x%,1)="TALB" :talb_d% =val(M2$(x%,2))-1 :end_if if M2$(x%,1)="TPE2" :tit2_d% =val(M2$(x%,2))-1 :end_if if M2$(x%,1)="TIT2" :tpe2_d% =val(M2$(x%,2))-1 :end_if if M2$(x%,1)="TCON" :tcon_d% =val(M2$(x%,2))-1 :end_if if M2$(x%,1)="TRCK" :trck_d% =val(M2$(x%,2))-1 :end_if if M2$(x%,1)="TYER" :tyer_d% =val(M2$(x%,2))-1 :end_if end_if next x%
no%=no%+1 filebin_open_read no%,f$ filebin_position no%,talb_d%+4
for x%=1 to tf% filebin_read no%,v% a$=chr$(v%) if v%<>0 and v%<253 :b$=b$+a$ : end_if for y%=1 to count(list%) if right$(b$,4)=item_read$(list%,y%) mf$=right$(b$,4) b$=left$(b$,len(b$)-4) fin%=1 end_if next y% if fin%=1 exit_for end_if next x% fin%=0 b$=trim$(b$) message b$+chr$(13)+mf$ filebin_close no% no%=no%-1 End_sub normalement, on devrait pouvoir tout récupérer comme cela à une condition, connaitre le marqueur de fin des tags et la fin de APIC.
Dernière édition par ygeronimi le Ven 3 Oct 2014 - 1:17, édité 1 fois (Raison : modif pour prendre APIC et autres) | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 3 Oct 2014 - 1:34 | |
| Je m' aperçois d' une chose : Un tag a un point de départ a% et de fin b% avec un longueur définie dans le fichier d' origine de x octets. Ce bloc de x octets peut être placé au milieu du fichier ( exemple ). On peut lire ce bloc, remplacer la valeur des octets puis le remettre à sa place. Jusque là, tout va bien... Mais, imaginons que le tag que l' on veut soit plus long en octet que le tag d' origine... en le replacant, on changera les octets d' origine + les octets suivants ( qui n' ont rien à voir avec le tag ) qui appartiennent à un autre bloc... . Il faudra donc, stocker les octets précédent ainsi que les suivants dans deux variables pour ensuite reconstituer le fichier.... Une commande filebin_block_insert qui décale les octets suivant serait la bien venue, non ? à moins que ce soit techniquement impossible. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Ven 3 Oct 2014 - 15:09 | |
| Là tu as raison, si la longueur du bloc à écrire est différente du bloc d'origine tu détruis tout. Il faut reconstituer un nouveau fichier avec ce qu'il y a avant, ton nouveau bloc, et ce qu'il y a après... D'ailleurs c'est probablement ce qu'il faut faire dans tous les cas, à tout hasard. C'est là que la dll de Klaus (File to String) est bien pratique, tu fais tout sous forme de chaîne de caractères, insertions, etc, et puis tu réécris la chaîne (String to File), et le tour est joué. Pour ma part je m'étais lancé dans l'extraction d'image, mais après avoir bien galéré j'y renonce, trop de paramètres variables. Si par hasard j'en ai besoin je ferai appel à un logiciel externe, il n'en manque pas (par exemple tag.txt). | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Ven 3 Oct 2014 - 22:16 | |
| Finalement, pour m'y retrouver, j'ai fait une petite sub qui liste les tags du mp3: - pour les tags ID3v1: liste des tags avec leur contenu - pour les tags ID3v2: liste des tags avec leur nom, leur emplacement binaire dans le fichier, et leur taille totale (nom du tag compris) (et j'ai bien été obligé d'utiliser la dll de l'ami Klaus: File to String, les solutions purement panoramic sont bien trop longues à l'exécution). J'ai essayé avec plusieurs types de fichiers mp3, ça a marché pour tous (les miens...). NB La liste des tags ID3v2, sous forme de DATA, sera sans doute à mettre à jour (il y a eu des extensions), c'est facile, il suffit de rajouter les datas dans la liste (avant le "F" de fin) -> c'est fait pour la v2.4. Et pour la signification des tags, il faut aller voir là: http://en.wikipedia.org/wiki/ID3 - Code:
-
DIM f$, kgf$ f$ = "C:\MP3TEST\APIC_v2.3_ASCII.mp3": ' <<<<<<<<<<<<<<<<<<<<<<< FICHIER MP3 kgf$ = "C:\PANORAMIC\KLAUS\DLLs\KGF.dll": ' <<<<<<<<<<<<<<<<<<<< PATH DE KGF.DLL WIDTH 0,400 MEMO 1: WIDTH 1,380: HEIGHT 1,400: FONT_NAME 1,"Lucida Console": FONT_SIZE 1,10 Listag(f$) CLIPBOARD_PASTE 1 END ' ============================================================================== SUB Listag(f$) ' Liste des tags ID3 d'un fichier mp3 -> clipboard ' ID3v1: Nom du tag + contenu ' ID3v2: Nom du tag, Position, Longueur ' Tags ID3v2: DATA "Tags:" DATA "AENC","APIC","COMM","COMR","ENCR","EQUA","ETCO","GEOB","GRID","IPLS","LINK" DATA "MCDI","MLLT","OWNE","PRIV","PCNT","POPM","POSS","RBUF","RVAD","RVRB","SYLT" DATA "SYTC","TALB","TBPM","TCOM","TCON","TCOP","TDAT","TDLY","TENC","TEXT","TFLT" DATA "TIME","TIT1","TIT2","TIT3","TKEY","TLAN","TLEN","TMED","TOAL","TOFN","TOLY" DATA "TOPE","TORY","TOWN","TPE1","TPE2","TPE3","TPE4","TPOS","TPUB","TRCK","TRDA" DATA "TRSN","TRSO","TSIZ","TSRC","TSSE","TYER","TXXX","UFID","USER","USLT","WCOM" DATA "WCOP","WOAF","WOAR","WOAS","WORS","WPAY","WPUB","WXXX" ' nouveaux tags (v2.4): DATA "ASPI","EQU2","TMCL","TIPL","RVA2","TDRC","TDOR","SEEK","SIGN","TDEN","TDRL" DATA "TDTG","TMCL","TMOO","TPRO","TSOA","TSOP","TSOT","TSST" DATA "F" DIM_LOCAL a$,buf$,sz%,rs%,tab$(100),v%(300),nt,i%,k%,sk%,v1$,id3v1$,v2$,id3v2$,rc$ DIM_LOCAL lg%,ff% rc$ = CHR$(13)+CHR$(10) READ a$: WHILE a$<>"Tags:": READ a$: END_WHILE READ a$: nt=0 WHILE a$<>"F": nt=nt+1: tab$(nt) = a$: READ a$: END_WHILE: ' Table des tags ID3v2 ' 1) lecture du fichier dans une chaîne ascii FILEBIN_OPEN_READ 9, f$: sz% = FILEBIN_SIZE(9) FILEBIN_POSITION 9,sz%-128: FILEBIN_BLOCK_READ 9,128,v%(0): id3v1$ = "" IF v%(0)=84 AND v%(1)=65 AND v%(2)=71: ' 'TAG' FOR i%=0 TO 127: id3v1$=id3v1$+CHR$(v%(i%)): NEXT i%: ' Tags ID3v1 présents END_IF FILEBIN_POSITION 9,0: FILEBIN_BLOCK_READ 9,3,v%(0): FILEBIN_CLOSE 9: buf$="" IF v%(0)=73 AND v%(1)=68 AND v%(2)=51: ' 'ID3' buf$ = STRING$(sz%," ") DLL_ON kgf$ rs% = DLL_CALL2("ReadBinaryFileToString",ADR(f$),ADR(buf$)) DLL_OFF END_IF v1$ = "--- Tags ID3v1: ---"+rc$ ' 1) Tags ID3v1 IF id3v1$ <> "" a$ = MID$(id3v1$,4,30) IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) v1$ = v1$ + "Titre : "+a$+rc$ a$ = MID$(id3v1$,34,30) IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) v1$ = v1$ + "Auteur: "+a$+rc$ a$ = MID$(id3v1$,64,30) IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) v1$ = v1$ + "Album : "+a$+rc$ a$ = MID$(id3v1$,94,4) IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) v1$ = v1$ + "Année : "+a$+rc$ a$ = MID$(id3v1$,98,28) IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) v1$ = v1$ + "Comnt : "+a$+rc$ a$ = STR$(ASC(MID$(id3v1$,127,1))) v1$ = v1$ + "Piste : "+a$+rc$ a$ = STR$(ASC(RIGHT$(id3v1$,1))) v1$ = v1$ + "Genre : "+a$+rc$ END_IF ' 2) Tags ID3v2 v2$ = "--- Tags ID3v2: ---"+rc$ IF buf$ <> "" ' recherche du 1er tag sk%=sz%: ff% = 0 FOR i% = 1 TO nt a$ = tab$(i%): k% = INSTR(buf$,a$) IF k% > 0 AND k%<sk% THEN sk%=k% NEXT i% WHILE ff% = 0 lg% = ASC(MID$(buf$,sk%+7,1))+256*ASC(MID$(buf$,sk%+6,1))+10 v2$ = v2$ + MID$(buf$,sk%,4)+": " + STR$(sk%-1)+", "+STR$(lg%)+rc$: ' tag + posit+longueur sk%=sk%+lg% a$ = MID$(buf$,sk%,4) FOR i% = 1 to nt IF a$ = tab$(i%) THEN EXIT_FOR NEXT i% IF i% > nt THEN ff% = 1 END_WHILE END_IF CLIPBOARD_STRING_COPY v1$+rc$+v2$ END_SUB ' ============================================================================== | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Oct 2014 - 1:54 | |
| Une chose au sujet des id3v2. dans le traitement du tage en lecture, il faut penser à éliminer les caractères "nul" ou "0" et autres bizarreries avant de les afficher.... Autre chose, tu affiches l' octet de départ et de fin d' un tag mais il ne faut pas oublié que ce bloc contiendra le marqueur pour que le bloc ne contienne que le tag lui même, l' octet de départ est o+4... Ceci dit, tes subs sont très rapides et font ce que je fais en moins de ligne . Je suis jaloux de ta faculté à manier "while...end_while" . Si tu peux un peu plus détailler les commentaires, je me ferai un plaisir de mettre ces Sub sur le site. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Sam 4 Oct 2014 - 9:41 | |
| Objection, votre Honneur ! 1) Tags en lecture: j'élimine bien les zéros de fin du contenu avant affichage: - Code:
-
IF INSTR(a$,CHR$(0))>0 THEN a$ = LEFT$(a$,INSTR(a$,CHR$(0))-1) 2) C'est volontairement que je récupère intégralement le tag, sans analyse, pour que l'utilisateur puisse l'analyser lui-même (chaque tag est un cas particulier, mais la structure générale est par exemple (tag image, en hexa): - Code:
-
65 80 73 67 00 00 1D 61 00 00 00 XX ........ XX 00 03 XX ..... XX 00 FF D8 FF ...... A P I C **taille * ? * ** Mime type * typ *nom image* * début image (jpg) totale -10 (type image) - la taille totale indiquée est la taille totale du tag, tout compris, -10 octets. - l'octet à 03 avant le nom image est le picture type: image recto, ou image verso ou ..., ici image recto: cover front. C'est pas fini, je vais essayer de faire quelques subs pour simplifier l'utilisation de tout ça. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Oct 2014 - 12:45 | |
| Ce qui serait intéressant de savoir, au niveau du tag APIC, ce sont les dimensions LxH et le premier et dernier octet couleur de l' image. Cela permettrait de reconstituer l' image et de visualiser cette image dans un picture, après tout est possible ou presque... Je vais regarder toute ces données de près... | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Sam 4 Oct 2014 - 13:37 | |
| Pour avoir les dimensions de l'image (LxH pixels) il faut d'abord la reconstituer, dans un fichier (je ne vois pas ce que tu appelles le premier et dernier octet 'couleur', je dirais le 1er et dernier octet de toute l'image elle-même), et ensuite appliquer une sub qui donne les dimensions.
Je n'ai dans mes exemples que des images jpg incluses, et là c'est facile, ça commence par FF D8, et là je fais l'extraction sans problème, et ensuite la visualisation est facile. Mais je ne sais pas s'il y a d'autres formats (sans doute au moins png), et là je ne sais pas comment ça se présente. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Oct 2014 - 23:45 | |
| Je suis bien arrivé à retrouver les deux octets de départ du fichier "FF D8" mais pas les deux octets de fin "FF D9". J' ai la pochette au format *.jpg d' un album (1441x1454 - 439ko) J' ai la chanson en *.mp3 sans la pochette en APIC (3.5 mo) j' ai la chanson en *.mp3 avec la pochette en APIC (4031 ko) Bref, il semblerait que l' image de la pochette ne soit pas codée mais où est donc passé "FF D9" ?... Edit : Il doit y avoir un truc mais quoi... ...je n' arrive pas à recontituer l' image en son entier. j' ai la bonne taille, les infos du fichiers passent pour du jpg mais l' image est tronquée. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Dim 5 Oct 2014 - 14:06 | |
| Regarde dans le dump du fichier mp3, en notant l'emplacement de la balise APIC contenant l'image, tu ajoutes la taille+10, et dans le dump tu dois tomber sur le ff d9... évidemment ce sont de petits calculs à faire en arithmétique hexa... et si tu n'as pas ce ffd9 dans ton fichier jpg extrait c'est qu'il y a une erreur dans l'extraction... Exemple, dans le dump d'un de mes mp3: - Code:
-
0040: ....... 41 50 49 53 00 00 1d 61 00 00 .......... ff d8 ff e0 00 ........... A P I C taille du tag -10 le 'APIC' est dans le dump à l'adresse 004c Je fais (10 = a en hexa): 4c + 1d61 + a = 1db7 qui est l'adresse du bloc suivant. Je descends le dump jusqu'à la ligne contenant l'adresse 1db7: - Code:
-
1db0 : 00 00 00 00 3f ff d9 00 00 00 ......... c'est plus facile à faire qu'à dire, mais il faut penser en hexa. (j'ai gardé d'autrefois une calculette en hexa, c'est bien pratique, mais je peux encore le faire à la main, j'ai encore en tête les tables d'addition et de multiplication en hexa, du temps où je pratiquais le langage assembleur... c'est loin tout ça) | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Oct 2014 - 16:12 | |
| Ce que je fais : Une fois le marqueur APIC trouver et ses octets de début et de fin identifiés, Je reprends dans une boucle la lecture des octets 1 par 1 dont je convertis la valeur en hexa par hex$(v%) et je recherche l' octet de départ et celui de fin en comparant la suite de octet$ à "FF D8" pour le début et "FF D9" pour la fin. Je retrouve bien la suite FF D8 mais pas FF D9 pourtant présent dans le fichier jpg d' origine de la pochette. Pochette que j' ai incluse en APIC avec MP3 Tagger. et qui apparait en lieu et place de l' icone classique des fichiers sons sur le fichier mp3. Je vais faire des captures... - Code:
-
dim f$ f$="C:\PROGRA~2\PANORA~1\MES_PR~1\Musique\MP3TAG~1\sources\MP3TAG~1\ROMANE~1.MP3"
memo 1 full_space 1 bar_both 1 font_name 1,"Courier"
Extract_APIC(322,56594) end
Sub Extract_APIC(d%,f%) dim_local dep%,fin%,c%,h$,v%,x%,bloc$,lfin$,tf% ,h1$ dep%=d%+4 fin%=f%
filebin_open_read 2,f$ filebin_position 2,dep% tf%=filebin_size(2)
for x%=dep% to fin% caption 0,str$(x%)+" "+lfin$ filebin_read 2,v% h$=hex$(v%) item_add 1,h$ next x% filebin_close 2 filebin_open_write 2,"C:\Users\Yannick\Desktop\Pochette.jpg" filebin_position 2,0 for x%=1 to count(1) if x%>1 if item_read$(1,x%)="D8" and item_read$(1,x%-1)="FF" dep%=x%-1 exit_for end_if end_if next x% for x%=dep% to count(1) filebin_write 2,hex(item_read$(1,x%)) next x%
filebin_close 2 caption 0,"Fin" End_sub fichier *.jpg d' origine : | fichier *.mp3: | Fichier *.jpg reconstitué : | | | |
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Dim 5 Oct 2014 - 18:33 | |
| Je regarderai tout à l'heure, mais déjà je vois que tu devrais faire h$ = right$("0"+hex$(v%),2) pour que tous les caractères aient la même longueur, pour les recherches
chez moi, ton sous-programme marche pour mon fichier mp3, j'ai bien l'image générée correctement dans un fichier à part. | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Oct 2014 - 19:16 | |
| Je vais faire un essai avec un autre fichier...on ne sait jamais... Edit : je viens de faire l' essai sur un autre fichier mp3 et l' extraction fonctionne. Mon premier fichier devait être corrompu... Maintenant, reste à voir si l' insertion fonctionnera aussi bien... Par contre, j' ai remarqué que certains fichier mp3 sans marqueur APIC affichait une image mais là je ne sais pas d' où elle vient celle là. J' ai remarqué cela pour des fichiers extraits depuis une vidéo. | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: tag mp3 Dim 5 Oct 2014 - 21:03 | |
| Il y a peut-être un ou d'autres tags qui peuvent contenir des images ? tu as fait la liste des tags de ce fichier ? | |
| | | Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Oct 2014 - 21:10 | |
| @ JL35, J' ai fait une liste, reste plus qu' à savoir ce qu' il y a dans chaque marqueur... J' ai fait un peu de nettoyage dans ma sub : - Code:
-
dim f$ f$="C:\Users\Yannick\Music\- Grand Corps Malade\J'écris à l'oral.mp3"
width 0,236 height 0,80
Progress_bar 1 top 1,10 : left 1,10 :width 1,200
Extract_APIC(599,36776) end
Sub Extract_APIC(d%,f%) dim_local dep%,fin%,c%,h$,v%,x%,tf% ,h1$,start% dep%=d%+4 fin%=f% min 1,0 : max 1,(fin%-dep%): position 1,0
filebin_open_read 2,f$ filebin_position 2,dep% tf%=filebin_size(2)
filebin_open_write 3,dir_current$+"\Pochette.jpg" filebin_position 3,0 for x%=dep% to fin% filebin_read 2,v% c%=c%+1 position 1,c% display
if c%>1 if start%=0 h1$=h$ h$ = right$("0"+hex$(v%),2) if h1$+h$="FFD8" start%=1 filebin_write 3,hex(h1$) filebin_write 3,v% else if h1$+h$="FFD9" filebin_write 3,v% exit_for end_if end_if else h$ = right$("0"+hex$(v%),2) filebin_write 3,v% end_if else h$ = right$("0"+hex$(v%),2) end_if next x%
filebin_close 2 filebin_close 3 Terminate End_sub | |
| | | Contenu sponsorisé
| Sujet: Re: tag mp3 | |
| |
| | | | tag mp3 | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |