Pour la partie ID3v2, tu ne veux pas spécialement lire une image 'pochette album' contenue dans le tag, mais plutôt intégrer dans ce tag, une image prise sur le net.
Dès lors que tu veux modifier/sauvegarder l'ID3v2 (et non pas seulement le lire), tu es ammené à devoir gérer toutes les frames peut-être déjà existantes dans ton tag. Ceci afin de ne pas les voir disparaitre lors de la sauvegarde (je t'en avais parlé si tu voulais utiliser les sources existantes VB6).
Par contre, pour limiter un peu ton travail et partant du principe que tes MP3 sont nouvellement encodés par Lame et donc sans tag existant, on peut supposer que la gestion des frames existantes devient superflue. Et donc que seules les quelques frames que tu veux utiliser te suffisent à la gestion de l'ID3v2.
Et dans ce cas, l'exemple de Yomm suffit amplement... Faut juste adapter un peu pour lire une image 'pochette album'.
Si dans le cas inverse, tu veux tout maîtriser, donc modifier dans un MP3 un tag qui contient déjà une multitude de frames diverses que tu ne veux pas effacer, le travail devient plus compliqué.
drum_ab
Messages postés37Date d'inscriptiondimanche 29 janvier 2006StatutMembreDernière intervention29 mars 20101 20 janv. 2010 à 08:56
Salut titicar
merci pour ta réponse
En fait, j'ai parcouru en long en large et en travers tous les sujets relatifs au tag Mp3.
J'ai fait un encodeur avec Lame et reconnaissance tag (et ce site m'a bien aidé)
Il me manquait un truc à la mode! Pouvoir afficher la pochette et c'est là que le bas blesse.
J'ai crée un sujet dédié et en est reçu des réponses constructives auquel je vais m'attacher d'y remédier...
En tout cas, il n'y a pas de recette miracle : il faut récupérer le contenu d'une page html et l'analyser pour en extraire le lien vers l'image ... il faut de l'huile de coude quoi. lol
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 19 janv. 2010 à 22:16
Houlà, quel vieux post : bientôt 6 ans !
Il n'y en a pas d'autres plus récents depuis tout ce temps ?
C'est vrai qu'il y a 2 ans, j'avais commencé à écrire quelques fonctions concernant l'ID3v2 car ceux trouvés ici et là ne correspondaient pas à mes attentes... Mais je n'ai jamais terminé !
Si! Il est possible en VB6 de gérer n'importe quelle frame de l'ID3v2, y compris les images (pochette, artiste, etc).
Je parle de la lecture ou l'écriture d'une frame quelconque.
Pour ce qui est de l'affichage des données d'une frame, c'est moins évident :
1). La norme ID3v2 propose les caractères de l'unicode. Ce qui reste quasi incompatible avec VB6.
2). Concernant l'affichage des images, la norme prévoit les types JPEG et PNG. Le format PNG n'est pas pris en compte nativement dans VB6. Faut passer par GDI+ (ou quelque chose comme ça et que je ne connais pas; celà dit y a pleins d'exemples sur ce site, concernant le GDI+). Pour le JPEG, aucun problème !
Plus haut, je disais que les sources trouvées ici et là ne correpondaient pas à mes besoins. A l'époque, les seules sources que je trouvais (y compris celle de ce post) se focalisaient sur quelques frames programmées, et le fait de sauvegarder un tag ID3v2 modifié supprimait purement et simplement les autres frames non gérées. Donc méfiance si tu testes un code source: teste sur une copie de ton mp3.
C'est là le gros problème. De mémoire, il y a environ 80 noms de frames différents dans la norme ID3v2, et souvent avec un 'formatage' différent.
Une frame 'simple' comme le nom de l'artiste ne contient que 2 infos (de mémoire) : son code de caractères (unicode ou non) et le nom de l'artiste (écrit avec ce code de caractères).
Une frame plus élaborée comme justement ta fameuse image 'pochette album' contient beaucoup plus d'informations : L'image JPEG ou PNG en question, le format de l'image, un commentaire, etc... En plus, cette frame est 'multiple' car elle peut exister plusieurs fois, contrairement à d'autres.
C'est tout le problème : le 'formatage' d'une frame n'est pas le même d'une frame à une autre. Il faut donc distinguer tous les formats possibles y compris les indépendants ou multiples, et en écrire leur gestion.
Je ne vais pas développer d'avantage. Visiblement, tu recherches surtout à récupérer une 'pochette-album' d'un MP3 (à sauvegarder en tant que fichier?), et donc juste un type de frame. C'est largement possible, même en VB6 :).
D'ailleurs, ton sujet de récupération d'image dans le tag ID3v2 avait déjà été demandé dans le forum VB, et dans le passé. Il n'y a pas de nouvelle réponse à ce jour? Perso, je n'avais pas répondu à l'époque. Et je ne suis plus au courant des sujets actuels.
Sinon, dans ce même post, Yomm avait écrit quelque chose en rapport avec ton image recherchée. Ca ne fonctionne pas ? Cela dit, perso et de mémoire, je n'ai pas testé sa procédure.
Il n'y a pas de secret : faut connaitre un peu VB, et surtout la norme ID3v2 pour en extraire une info. Après, il y a une façon de programmer face à un problème dédié... pas toujours évident.
drum_ab
Messages postés37Date d'inscriptiondimanche 29 janvier 2006StatutMembreDernière intervention29 mars 20101 19 janv. 2010 à 10:10
Bonjour
quelqu'un sait il comment récupérer l'image de la pochette contenu dans un tag... apparemment certain dise qu'on peut, d'autre pas...ce qui est sur c'est que je n'y arrive pas... lol
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 17 janv. 2008 à 00:09
Et oui, comme quoi même un 'vieux' dev peut encore servir pour quelques 'acharnés'!
Cela dit si tu as des nouveautés, tu peux toujours nous tenir au courant :-).
Facile à dire car perso, je n'ai encore jamais rien 'partagé' (bouhh!).
Concernant ta class Mpeg (nameTypeTagMpeg), j'ai tout de même un gros problème de compréhension : dans cette même classe Mpeg, la function (Friend) 'GetTag(...) As TypeTagMpeg' appelle elle même sa propre class 'TypeTagMpeg' en tant que résultat de cette function.
Je m'explique sans doute mal, mais tout ça pour dire que des fois, j'ai une erreur n°91 (ne me demande pas la description de l'erreur) qui signifie (il me semble) que le résultat de la fonction 'GetTag(...)' est Nothing. Donc et dans ce contexte d'erreur, je ne peux pas appeler une quelconque 'Public Property' liée à la variable (nouvelle instance?) résultante de 'GetTag(...)'.
C'est vrai que je n'utilise pas la totalité de tes sources, et que je fais appel à cette fonction par mes propres lignes de prog.
C'est vrai aussi que quand je me relie, j'ai du mal à croire que quelque puisse comprendre ce que je veux expliquer.
Si tu as compris mon problème (là, je te félicite!), essais de répondre plus vite qu'en octobre :-)
Sinon, je vais essayer de traduire ça par un exemple plus concret (plus généraliste et plus simple!) que je posterai dans le forum.
@+ et (je n'en doute pas) bon prog!
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 14 janv. 2008 à 23:13
Salut TITICAR,
je suis content de voir qu'un dev de 2004 serve encore aujourd'hui ;-)
Avec tous les devs en ligne de commande qu'il doit exister à ce jour, je suis content de voir qu'il y a des acharnés comme moi qui essai de faire ça "à l'ancienne" ;-), même si en effet, mon dev date un peu et qu'il n'a donc pas suivi les modifs des tags...
pour répondre à ta question d'octobre dernier (OK il était temps ;-)) en effet, cela correpondait au décalage de l'entête de l'header plus le déplacement à la zone suivante. Mais comme tu t'en est rendu compte, c'est pas facil de trouver des infos clair pour le traitement du tag Mpeg, surtout avec les différentes compression dont le VBR.
@+ et bon devs
Yomm
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 14 janv. 2008 à 19:52
Bonjour,
Merci à Yoom pour la classe concernant la gestion de l'entête Mpeg car j'ai utilisé son code.
Toutefois Yoom et pour ton info, j'ai modifié très légèrement ton code dans Friend Function GetTag(...):
- J'ai préféré écrire 'Optional ByVal Advanced As Boolean = True' ...pour forcer Advanced=True
- Et j'ai ajouté 'Optional ValInit As Long = 1'
Donc :
Friend Function GetTag(ByVal fichier As String, Optional ByVal Advanced As Boolean = True, _
Optional ValInit As Long = 1) As ...
Pourquoi cette dernière modif : parce que je suis tombé sur un mp3 qui posséde une frame 'GEOB' mémorisant une 'séquence Mpeg' (quel idée!).
(pour rappel, 'GEOB' est une frame qui peut mémoriser une séquence quelconque binaire, normalement accès sur le contenu d'un fichier externe)
Dès lors la class 'Mpeg', cherchant le début de l'entête Mpeg, 'indexe' uniquement le contenu d'une frame. Ce qui crée un beau désordre si l'on modifie le tag ID3v2.
Pour palier à ce problème, j'ai modifié la procédure qui sauvegarde l'ID3v2. A savoir que si le début de l'entête Mpeg est inférieur à la taille de l'ID3v2, alors on fait une deuxième recherche d'entête Mpeg, non plus à partir du début du mp3, mais à partir de la fin de l'ID3v2.
Ce qui m'a donc forcer à introduire ValInit en tant que paramètre à l'appel de GetTag (du Mpeg).
Voilà, c'était juste pour info.
Je n'ai pas précisé les modif dans la classe traitant de l'ID3v2 car j'en ai écrit une autre, pas encore finie dans les détails, mais qui sauvegarde TOUTES les frames existantes.
Celà dit, merci encore pour ton traitement du Mpeg, la gestion du 'VBR'... et la conversion du décimal en binaire.
Moi qui pensais que la gestion de l'ID3v2 passerait simplement par une procédure traitant l'ID3v2, je me suis rendu compte que ce traitement pour un Mp3 passe obligatoirement par la gestion de son Mpeg!
Comme quoi, tout est lié... Mais quel idée de tout lié !
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 11 oct. 2007 à 22:52
J'annule ma question précédente car j'ai compris le fameux 11.
Je vais faire les questions réponses : Contrairement aux frames (ou champs, ou balises...), la taille donné dans l'header du tag tient compte de l'header lui-même, donc 10 octets de plus (j'avais compris autrement dans une doc... en anglais). Et vraisemblablement 1 octet de plus pour se placer sur l'octet suivant.
cs_titicar
Messages postés181Date d'inscriptionjeudi 30 mai 2002StatutMembreDernière intervention19 août 2012 10 oct. 2007 à 22:30
Salut,
Incroyable, depuis toutes ces années, ce post est toujours d'actualité :-)
Ca tombe bien, je viens de le télécharger.
Cependant, y a un truc que je n'ai pas compris dans la classe du TagV2 : lors de la 'convertion de la taille de la chaine des tags en binaires', y a la ligne suivante : 'i = Len(FicTag) + 11'.
D'où provient ce fameux 11?
Est-ce une constante dû à ce calcul binaire en 7 bits et donc quelque soit la longueur de FigTag? Ou est-ce autre chose ?
... Oui c'est vrai, je ne pose pas une question sur un bug ou une fonction supplémentaire, mais juste sur un problème de compréhension.
tich3012
Messages postés39Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention15 octobre 2004 4 juin 2007 à 11:49
Hello
merci pour avoir ajouter la fonctionnalité que je t'ai demandé
j'essaie ce soir si ca fonctionne bien avec mon archos.
Bonne prog
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 2 juin 2007 à 01:00
modif pour tich3012 qui m'a demandé en MP si l'on pouvait gérer l'image inclue dans certain mp3:
c'est fait dans cette nouvelle version :
---------------------------------------------------------------
pour récupérer l'image en variable Picture :
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
set Image1.Picture = toto.Pic
---------------------------------------------------------------
pour récupérer l'image dans un fichier:
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
open "c:\MonFichier.jpg" For Binary Access Write As #1
put #1 , 1 , toto.PictureBinary
close #1
---------------------------------------------------------------
pour affecter une image à un mp3:
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
Call toto.SetPicFromFile("c:\MonFichier.jpg")
Call toto.SetTag("c:\MonFichier.mp3")
Attention : on ne peut affecter qu'un fichier d'extension jpg !!!
PS : en même temps j'ai réglé un problème que personne n'avait soulevé mais je m'en suis aperçu là ;-)
federki
Messages postés2Date d'inscriptionjeudi 3 août 2006StatutMembreDernière intervention 2 septembre 2006 2 sept. 2006 à 04:50
Merci bp.
j'avais trouvé une autre façon de le faire, le résultat est ce dernier( le même).
Gracias
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 29 août 2006 à 00:06
re FEDERKI
j'ai trouvé très vite l'info dont tu as besoin:
dans la class TypeTagMpeg
dans la fonction GetTag
il y a un ligne comme ça:
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
en fait le fix coupe la partie entière (4.545 devient 4)
toi, il faut que tu prenne:
((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp
par contre, en effet, il faut mettre un autre type à la variable DureeTmp ou créer une autre variable ce qui serait plus propre
proposition : dans la class TypeTagMpeg
*************************************************
private ReelTimeTmp as Single
Public Property Get RealTime() As Single
RealTime = RealTimeTmp
End Property
Public Property Let RealTime(ByVal Param As Single)
RealTimeTmp = Param
End Property
'et dans la fonction GetTag:
'remplace
If BitRatetmp <> 0 Then
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
End If
'par
If BitRatetmp <> 0 Then
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
RealTimeTmp = ((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp
End If
'et plus loin
.Vbr = Vbrtmp
End With
Exit Function
'par
.Vbr = Vbrtmp
.RealTime = RealTimeTmp
End With
Exit Function
*************************************************
tu auras ainsi la durée en single
d'ailleurs, au lieu de 5,545 tu auras : 5,54525
Voilà
@+ et bon devs
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 28 août 2006 à 23:47
Salut FEDERKI
je me suis jamais posé la question...il faudrait que je cherche un peu...dès que j'ai le temps je regarde ça...
federki
Messages postés2Date d'inscriptionjeudi 3 août 2006StatutMembreDernière intervention 2 septembre 2006 10 août 2006 à 02:26
Hola YOMM..
1º) je ne parle pas très bien français, pardon si je me trompe.
Ton source est IMPRESSIONNANT!!
Je veux te faire une question:
Pour mon programme, j'ai besoin d'obtenir le temps précis que durent les archives mp3. Je veux: heures, minutes, seconds et frames.(Bitrate variable évidemment)
Ton code: j'ai vu que le résultat, par exemple, pour ton archive test.mp3 est 4 seconds.
Il est exactament 4.545 seconds. 1 seconde - 100 frames
J'ai modifié BitRatetmp a single et Dureetmp aussi a single, mais le résultat n'est pas bon..Pourquoi?
Est-ce que tu peux m'aider??
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 13 mai 2006 à 00:45
Avec Visual Basic 6 :)
mazty
Messages postés3Date d'inscriptiondimanche 30 avril 2006StatutMembreDernière intervention12 mai 2006 12 mai 2006 à 17:01
Mais comment utilisez-vous les classes vous ?
cs_JLN
Messages postés371Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention17 juin 2013 12 mai 2006 à 16:54
Je pense qu'il faut adapter les classes VB6 à VB .NET 2005 et là je ne serai d'aucun secours parce que je n'utilise pas. Regarde les forums à ce sujet.
@+ JLN
mazty
Messages postés3Date d'inscriptiondimanche 30 avril 2006StatutMembreDernière intervention12 mai 2006 12 mai 2006 à 16:47
Comment puis-je faire pour les utiliser dans ce cas (utilisation d'un autre environnement de dévelloppement ?, conversion ?) ?
cs_JLN
Messages postés371Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention17 juin 2013 12 mai 2006 à 16:37
Il s'agit de classes VB6 et je pense qu'elle ne sont pas compatiblent directement sans adaptation.
mazty
Messages postés3Date d'inscriptiondimanche 30 avril 2006StatutMembreDernière intervention12 mai 2006 12 mai 2006 à 15:45
Salut, je suis débutant en VB (pas en programmation...). Je viens d'installer "Visual Basic 2005 Express Edition". Je crée un nouveau projet, ouvre tes classes (.cls) et dans le main de mon module1 crée un objet d'une de tes classes mais celui-ci n'est pas reconnu, la syntaxe de tes .cls ne semble pas être reconnue... Si quelqu'un pouvait me dire comment régler ca ou m'envoyer vers un tutoriel qui puisse le faire. Merci à tous
cs_JLN
Messages postés371Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention17 juin 2013 16 avril 2006 à 14:27
Merci à toi surtout Yomm pour avoir bien voulu partager le fruit de tes efforts et en effet le pdf est dans le zip, je n'avais pas encore ouvert et j'ai de plus testé et ca marche nickel.
@+ JLN
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 16 avril 2006 à 13:23
oups...j'avais oublié, il est dans le zip...donc le lien n'est plus très util ;-)
Au fait, merci pour tes comments JLN
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 16 avril 2006 à 13:21
Salut, en effet le lien ne fonctionne plus et depuis longtemps ;-)
si tu veux les infos pdf , envoie moi ton mail en MP et je ferais le necessaire
cs_JLN
Messages postés371Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention17 juin 2013 16 avril 2006 à 11:47
Salut à tous,
A en juger des remarques de tous les utilisateurs de ta classe (et precedament de ton ocx) je pense sans me tromper pouvoir dire BRAVO et mon respect le plus profond. Je cherchais quelques chose qui me mette sur la voie des tags mp3 et je tombe sur une Rolls, que dire de plus, je suis comblé et je m'en vais mettre ca dans ma prochaine appli. Bonne continuation et merci au nom de tous. Ha ! juste une chose (il fallait que j'en trouve une) le lien http://www.yomm.fr.st/dl.php?ID=1 ne fonctionne pas.
Bonne prog,
@+ JLN
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 24 janv. 2006 à 22:29
>> Firens
Salut,
déjà, il ne te mankerait pas une truc du genre "NEW" ???
-----------------------------------------
dim mp3File as New TagType
-----------------------------------------
en fait , j'ai même testé sans le new et ça marche....c'est peut etre plutot un probleme de déclaration générale je pense...mais en tous les cas , ce que tu as tapé là devrait fonctionner sans problème!!!!
firens
Messages postés68Date d'inscriptionlundi 6 novembre 2000StatutMembreDernière intervention24 août 2008 23 janv. 2006 à 15:54
Hello,
j'ai testé le module de Yomm avec les tags mp3 mais j'ai un petit soucis....
j'ai donc déclaré tout ca pour pouvoir lire le fichier mp3 test.mp3
Dim mp3File As TagType
Set mp3File = YommTag1.GetAllTags("C:\test.mp3")
mais ca me mets un type mismatch...seulement on voit très bien que lorsqu'on écrit la fonction GetAllTags elle demande un type String...
J'ai essayé de mettre str("C:\test.mp3) pour voir.. mais ça plante mon prog....
Quelqu un aurait une solution ? Merci
cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007 20 janv. 2006 à 13:55
Question, est ce que tu gères le tags des covers. A première vu non, car à la base je cherchais ce genre de code (j'en ai trouvé un) mais il plante pour l'écriture.
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 10 oct. 2005 à 22:52
>>MANDARK
je regarderai cela dès ke possible...merci de l'info...
mandark
Messages postés16Date d'inscriptiondimanche 25 janvier 2004StatutMembreDernière intervention10 mai 2006 9 oct. 2005 à 21:21
Super code mais j'ai un probléme avec :
La pluspart des éditeurs de tag V2 proposent de mettre "a la main" le genre, par exemple, dans la liste habituelle, y'a pas le genre "Bachata", donc dans le champ "Genre" on écrit "Bachata" a la main, ce que propose de faire ton programme, mais si on le fait, il plante dans GetGenreIndexFromTag, index hors de plage.
Je ne sais pas comment corriger ce probléme car je n'ai pas comprit comment étaient gérés ces "genres" non "numérotés"
Sinon ta source est super et j'aimerait vraiment pouvoir l'utiliser ! (:
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 7 mars 2005 à 16:15
Je suis entrain de me poser une question ... Est-il possible d'aller plus loin comme MediaMonkey ki ajoute les lyric dans le tag ?
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 7 sept. 2004 à 17:16
Je suis désormais sûr et certain qu'il y a un problème avec le vbr et les headers vu le nombre de message que j'ai pu croiser sur différents forums...
Cela vient vraissemblablement des paramètres passés en ligne de commande à l'encoder...J'ai rien de plus precis car j'ai vu que cela dépendait de pas mal de chose...Toutefois comme je te l'ai dit, moi je n'ai pas eut le problème avec la version 3.92...Peut etre que ce bug est corrigé...
Bon courage à toi...
@+ ;-)
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 7 sept. 2004 à 14:50
Quand je parlais de boucler c'est suite à une erreur qui déclenche le resume et donc tu n'avances pas tant que l'erreur existe(et c'est seulement quand tu forces le code!!! :-) j'avais une division par 0).... Je parlais pas de tes boucles qui sont très bien faites. 8-) comme le reste du code d'ailleurs.
Je viens de réencoder le fichier avec la même version de Lame mais cette fois ci sans vbr et là ç'est nickel. Surement que le bug concerne le vbr de la version Lame 3.90
Je te remercie pour ton attention. Je ne sais pas combien de fichiers posent problème, une toute petite minorité certainement. Mais je vais pister tout ça à l'occasion. Encore un nouveau Projet. Je te donnerai des nouvelles.
Merci pour tout
et bonne continuation
A+
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 7 sept. 2004 à 13:20
euh.....normalement tu devrais pas boucler à l'infini...en effet dans la gestion d'erreur le test 'If EntetePostmp < FileLen(Fichier) Then' est justement sencé éviter cela...ce qui est sûr c'est qu'il va bouclé jusqu'à avoir parcouru la totalité du fichier...
Je comprend en effet que tu préfères trouver une solution qui te permettes de gérer tes fichiers mais ce que j'ai fait est sencé être un 'standard' et donc cela doit fonctionner avec n'importe quelle version...De plus je vois mal comment gérer le problème s'il manque les infos nécessaire...toutefois j'ai peut etre une solution, ou tout du moins une piste , qui pourrait t'éviter de réencoder tout tes mp3, cherche du coté des 'Lame Header Fix' j'ai pas encore chercher mais j'ai vu que l'on en parlait sur certain forum...peut etre trouveras tu ton bonheur là dedans...je cherche de mon coté si je trouve quelque chose et je te tiendrai au courant
@+
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 7 sept. 2004 à 12:48
Je suis d'accord qu'en réencodant les fichiers qui posent problème on calme le jeux ;-) c'est ce que j'ai fait en partie.
Ceci dit, on peut toujour forcer le passage dans ton test (on peut en plus vérifier la version de lame) mais là on génére une erreur et on boucle à l'infini a cause du resume. Si on force le else c'est tout pareil le calcul fait une division par 0.
Merci Yomm je vais approfondir le cas de forçage sur XING.
A+
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 7 sept. 2004 à 12:30
J'ai la réponse à ton problème (du moins je pense) mais malheureusement, contrairement aux autres problèmes, cette fois je ne peux rien pour toi...
Quelques explication tout de même:
Le problème vient du fait que ton mp3 ne possède pas de 'header' correcte...En effet, il manque une parti du header, c'est un problème connu sous Lame (bien que cela reste mon encoder préféré ;-) )...J'ai en effet lu des problème de header sur plusieurs forums...
Pour plus de détail , je t'ai fait un comparatif entre un fichier vbr encodé en Lame 3.92 et ton fichier (encodé lui en Lame 3.90)
Pour voir le résultat voici le lien : http://yomm.no-ip.com/vbr_3.90.jpg Légende :
-mauve : début de l'entête
-vert : chaine de caractères ( 'XING' ) devant figurée afin de lire les infos de l'encodage VBR , tu constateras qu'à l'endroit même où dans mon fichier je lis bien 'XING' on trouve 'LAME' dans ton fichier tandis que dans mon fichier , 'LAME' ce trouve plus loin
-turquoise : section manquante
Voilà, c'est du moins mon explication et elle me semble tenir la route...Mais bon j'ai pas codé Lame donc il y a peut etre une notion qui m'a échappé...Toutefois le fait que le problème ne se pose pas avec Lame 3.92 signifie peut etre bien qu'il y avait un problème avec la version 3.90...Enfin bref...
Ma Solution : Ré-encode ton mp3 LOL ;-)
@+ et désolé de rien pouvoir faire de plus pour toi :-(
PS: j'espère que finalement mon source te servira ;-)
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 7 sept. 2004 à 08:56
Y a pas de problème Yomm.
Sur ce fichier tu passes pas dans le code pour le vbr :
testbuffer != XING donc tu vas dans le else et là tu ne récupères pas sur ce fichier la valeur VBRI donc pas de calcul... donc pas de surcharge de durèe :-(
Y a forcément un problème de calage sur le buffer. Je regarde plus en détail.... aussi de mon coté.
Salut
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 7 sept. 2004 à 08:10
normalement je gère le vbr...
c'est étrange...
je vais te contacter en mp pour faire comme avec d'autre et que tu m'envoi un de tes mp3 ki poz problème!
OK?
madbob
Messages postés285Date d'inscriptiondimanche 14 décembre 2003StatutMembreDernière intervention13 mars 2012 6 sept. 2004 à 21:40
Bonjour,
Flute alors :-).... Je croyais que tu récupérais les Vbr dans ton outils... En fait on récupère les même infos que winamp... Il pète un fusible désqu'il s'agit de calculer la durée en seconde sur les encodages vbr. c'est drôle meme si c'est pénible. Windows à l'air d'avoir corrigé le problème.
Sinon l'est bien, ton outil même si il m'aide pas.
Fait ça pour tes dirlistesboxes afin d'éviter les problèmes pour ceux qui donnent des noms à leurs lecteurs !!! (comme moi :-) )
Ca marchera à tous les coups au lieu de planter ou d'y alller au débogage.
Bien sur on peut aussi faire autrement.
Bonne continuation
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 11 juil. 2004 à 15:31
bon voilà tout est corrigé...
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 9 juil. 2004 à 22:26
info de dernière minute :
j'ai trouvé un bug ...et oui ;-)
Le problème concerne les fichiers mp3 comportant une entete RIFF...j'aurai pu ne pas le voir sur 12 fichiers testés 1 seul ma posé un problème... ;-) ....Pourkoi celui là et pas les autres ? Simplement parce ke le 5ème bite (cad celui qui suis l'entete "RIFF"...) de ce fichier vaut &HFF (héxa) et ke la class comprend que c'est le début du l'entete du mp3...Mais non ;-).....
bon je vais bossé dessus et je mettrai a jour dès ke ce petit problème sera corrigé .....
@+
PS : :-( ooouuuuuuuiiiiiiiiinnnnnn..........pourkoi y a pas UNE et une seule norme ;-).......
cs_Totov
Messages postés4Date d'inscriptionlundi 24 mars 2003StatutMembreDernière intervention 5 juillet 2004 5 juil. 2004 à 09:43
Je vais passer à la cls alors (mais bon, ça m'arrange de toute façon).
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 4 juil. 2004 à 21:37
>>spy166
attention ! ne va pas comprendre ke mon controle est meilleur ke celui de winamp, loin de là...dans ce ka préci oui...mais winamp gère plein d'autres choses notament au niveau du genre des TagV2 ke je n'ai pas voulu prendre en compte dans ma class...enfin voilà je voulais préciser cela...
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 4 juil. 2004 à 21:26
sur cet exemple là oui ...
spy166
Messages postés207Date d'inscriptionjeudi 21 novembre 2002StatutMembreDernière intervention29 mars 2006 4 juil. 2004 à 21:16
Alors winamp se plante dans ton exemple c'est bien ça ?
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 4 juil. 2004 à 18:45
le 118 est l'info fourni par ma class
le 157 est l'info fourni par winamp
si tu regardes le display time en haut a droite tu lis une durée de 1min58 soit 118 secondes....c'est juste pour montrer que sur ce cas , ma class donne un résultat plus proche de la réalité...
spy166
Messages postés207Date d'inscriptionjeudi 21 novembre 2002StatutMembreDernière intervention29 mars 2006 4 juil. 2004 à 11:02
Euh pourquoi sur ta capture il y a deux infos différentes ?
118 secondes et 157 ?
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 4 juil. 2004 à 01:33
chez moi c la SP6
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 4 juil. 2004 à 01:02
chez moi ça fonctionne très bien avec Dir1.Path = Drive1.Drive & ""
mais bon je sais pas...peut etre une question de service pack...
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 3 juil. 2004 à 23:42
Ce code est comme la version diffrente, du pur jus.
Une erruer s'est quand meme glissé :
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive & ""
End Sub
Il faut remplcer :
Dir1.Path = Drive1.Drive & ""
par :
Dir1.Path = Drive1.Drive
Sinon y a erreur :)
10/10
yomm
Messages postés515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 3 juil. 2004 à 22:35
le code ne diffère pas des masses de la version un mais j'ai eut besoin de tout passer en class car vb commencait a perdre les pédale avec mes ocx perso....donc je n'utilise plus d'ocx sauf si c'est vraiment nécessaire...enfin bref comme j'ai fait la modif et vu ke les modif futures seront désormais faites sur cette version, je la mets en ligne...
20 janv. 2010 à 22:01
D'accord, maintenant je comprends mieux ce que tu essayes de faire.
J'avais fais fausse route vu que j'ai lu ton post (http://www.vbfrance.com/forum/sujet-RECONNAISSANCE-TAG-RECUPERER-POCHETTE-ALBUM_1397423.aspx?p=2)
Je ne réponds dans ce post ci-dessus, vu que ça me parait un peu hors sujet.
Pour la partie ID3v2, tu ne veux pas spécialement lire une image 'pochette album' contenue dans le tag, mais plutôt intégrer dans ce tag, une image prise sur le net.
Dès lors que tu veux modifier/sauvegarder l'ID3v2 (et non pas seulement le lire), tu es ammené à devoir gérer toutes les frames peut-être déjà existantes dans ton tag. Ceci afin de ne pas les voir disparaitre lors de la sauvegarde (je t'en avais parlé si tu voulais utiliser les sources existantes VB6).
Par contre, pour limiter un peu ton travail et partant du principe que tes MP3 sont nouvellement encodés par Lame et donc sans tag existant, on peut supposer que la gestion des frames existantes devient superflue. Et donc que seules les quelques frames que tu veux utiliser te suffisent à la gestion de l'ID3v2.
Et dans ce cas, l'exemple de Yomm suffit amplement... Faut juste adapter un peu pour lire une image 'pochette album'.
Si dans le cas inverse, tu veux tout maîtriser, donc modifier dans un MP3 un tag qui contient déjà une multitude de frames diverses que tu ne veux pas effacer, le travail devient plus compliqué.
20 janv. 2010 à 08:56
merci pour ta réponse
En fait, j'ai parcouru en long en large et en travers tous les sujets relatifs au tag Mp3.
J'ai fait un encodeur avec Lame et reconnaissance tag (et ce site m'a bien aidé)
Il me manquait un truc à la mode! Pouvoir afficher la pochette et c'est là que le bas blesse.
J'ai crée un sujet dédié et en est reçu des réponses constructives auquel je vais m'attacher d'y remédier...
http://www.vbfrance.com/forum/sujet-RECONNAISSANCE-TAG-RECUPERER-POCHETTE-ALBUM_1397423.aspx#7
En tout cas, il n'y a pas de recette miracle : il faut récupérer le contenu d'une page html et l'analyser pour en extraire le lien vers l'image ... il faut de l'huile de coude quoi. lol
19 janv. 2010 à 22:16
Il n'y en a pas d'autres plus récents depuis tout ce temps ?
C'est vrai qu'il y a 2 ans, j'avais commencé à écrire quelques fonctions concernant l'ID3v2 car ceux trouvés ici et là ne correspondaient pas à mes attentes... Mais je n'ai jamais terminé !
Si! Il est possible en VB6 de gérer n'importe quelle frame de l'ID3v2, y compris les images (pochette, artiste, etc).
Je parle de la lecture ou l'écriture d'une frame quelconque.
Pour ce qui est de l'affichage des données d'une frame, c'est moins évident :
1). La norme ID3v2 propose les caractères de l'unicode. Ce qui reste quasi incompatible avec VB6.
2). Concernant l'affichage des images, la norme prévoit les types JPEG et PNG. Le format PNG n'est pas pris en compte nativement dans VB6. Faut passer par GDI+ (ou quelque chose comme ça et que je ne connais pas; celà dit y a pleins d'exemples sur ce site, concernant le GDI+). Pour le JPEG, aucun problème !
Plus haut, je disais que les sources trouvées ici et là ne correpondaient pas à mes besoins. A l'époque, les seules sources que je trouvais (y compris celle de ce post) se focalisaient sur quelques frames programmées, et le fait de sauvegarder un tag ID3v2 modifié supprimait purement et simplement les autres frames non gérées. Donc méfiance si tu testes un code source: teste sur une copie de ton mp3.
C'est là le gros problème. De mémoire, il y a environ 80 noms de frames différents dans la norme ID3v2, et souvent avec un 'formatage' différent.
Une frame 'simple' comme le nom de l'artiste ne contient que 2 infos (de mémoire) : son code de caractères (unicode ou non) et le nom de l'artiste (écrit avec ce code de caractères).
Une frame plus élaborée comme justement ta fameuse image 'pochette album' contient beaucoup plus d'informations : L'image JPEG ou PNG en question, le format de l'image, un commentaire, etc... En plus, cette frame est 'multiple' car elle peut exister plusieurs fois, contrairement à d'autres.
C'est tout le problème : le 'formatage' d'une frame n'est pas le même d'une frame à une autre. Il faut donc distinguer tous les formats possibles y compris les indépendants ou multiples, et en écrire leur gestion.
Je ne vais pas développer d'avantage. Visiblement, tu recherches surtout à récupérer une 'pochette-album' d'un MP3 (à sauvegarder en tant que fichier?), et donc juste un type de frame. C'est largement possible, même en VB6 :).
D'ailleurs, ton sujet de récupération d'image dans le tag ID3v2 avait déjà été demandé dans le forum VB, et dans le passé. Il n'y a pas de nouvelle réponse à ce jour? Perso, je n'avais pas répondu à l'époque. Et je ne suis plus au courant des sujets actuels.
Sinon, dans ce même post, Yomm avait écrit quelque chose en rapport avec ton image recherchée. Ca ne fonctionne pas ? Cela dit, perso et de mémoire, je n'ai pas testé sa procédure.
Il n'y a pas de secret : faut connaitre un peu VB, et surtout la norme ID3v2 pour en extraire une info. Après, il y a une façon de programmer face à un problème dédié... pas toujours évident.
19 janv. 2010 à 10:10
quelqu'un sait il comment récupérer l'image de la pochette contenu dans un tag... apparemment certain dise qu'on peut, d'autre pas...ce qui est sur c'est que je n'y arrive pas... lol
17 janv. 2008 à 00:09
Cela dit si tu as des nouveautés, tu peux toujours nous tenir au courant :-).
Facile à dire car perso, je n'ai encore jamais rien 'partagé' (bouhh!).
Concernant ta class Mpeg (nameTypeTagMpeg), j'ai tout de même un gros problème de compréhension : dans cette même classe Mpeg, la function (Friend) 'GetTag(...) As TypeTagMpeg' appelle elle même sa propre class 'TypeTagMpeg' en tant que résultat de cette function.
Je m'explique sans doute mal, mais tout ça pour dire que des fois, j'ai une erreur n°91 (ne me demande pas la description de l'erreur) qui signifie (il me semble) que le résultat de la fonction 'GetTag(...)' est Nothing. Donc et dans ce contexte d'erreur, je ne peux pas appeler une quelconque 'Public Property' liée à la variable (nouvelle instance?) résultante de 'GetTag(...)'.
C'est vrai que je n'utilise pas la totalité de tes sources, et que je fais appel à cette fonction par mes propres lignes de prog.
C'est vrai aussi que quand je me relie, j'ai du mal à croire que quelque puisse comprendre ce que je veux expliquer.
Si tu as compris mon problème (là, je te félicite!), essais de répondre plus vite qu'en octobre :-)
Sinon, je vais essayer de traduire ça par un exemple plus concret (plus généraliste et plus simple!) que je posterai dans le forum.
@+ et (je n'en doute pas) bon prog!
14 janv. 2008 à 23:13
je suis content de voir qu'un dev de 2004 serve encore aujourd'hui ;-)
Avec tous les devs en ligne de commande qu'il doit exister à ce jour, je suis content de voir qu'il y a des acharnés comme moi qui essai de faire ça "à l'ancienne" ;-), même si en effet, mon dev date un peu et qu'il n'a donc pas suivi les modifs des tags...
pour répondre à ta question d'octobre dernier (OK il était temps ;-)) en effet, cela correpondait au décalage de l'entête de l'header plus le déplacement à la zone suivante. Mais comme tu t'en est rendu compte, c'est pas facil de trouver des infos clair pour le traitement du tag Mpeg, surtout avec les différentes compression dont le VBR.
@+ et bon devs
Yomm
14 janv. 2008 à 19:52
Merci à Yoom pour la classe concernant la gestion de l'entête Mpeg car j'ai utilisé son code.
Toutefois Yoom et pour ton info, j'ai modifié très légèrement ton code dans Friend Function GetTag(...):
- J'ai préféré écrire 'Optional ByVal Advanced As Boolean = True' ...pour forcer Advanced=True
- Et j'ai ajouté 'Optional ValInit As Long = 1'
Donc :
Friend Function GetTag(ByVal fichier As String, Optional ByVal Advanced As Boolean = True, _
Optional ValInit As Long = 1) As ...
Pourquoi cette dernière modif : parce que je suis tombé sur un mp3 qui posséde une frame 'GEOB' mémorisant une 'séquence Mpeg' (quel idée!).
(pour rappel, 'GEOB' est une frame qui peut mémoriser une séquence quelconque binaire, normalement accès sur le contenu d'un fichier externe)
Dès lors la class 'Mpeg', cherchant le début de l'entête Mpeg, 'indexe' uniquement le contenu d'une frame. Ce qui crée un beau désordre si l'on modifie le tag ID3v2.
Pour palier à ce problème, j'ai modifié la procédure qui sauvegarde l'ID3v2. A savoir que si le début de l'entête Mpeg est inférieur à la taille de l'ID3v2, alors on fait une deuxième recherche d'entête Mpeg, non plus à partir du début du mp3, mais à partir de la fin de l'ID3v2.
Ce qui m'a donc forcer à introduire ValInit en tant que paramètre à l'appel de GetTag (du Mpeg).
Voilà, c'était juste pour info.
Je n'ai pas précisé les modif dans la classe traitant de l'ID3v2 car j'en ai écrit une autre, pas encore finie dans les détails, mais qui sauvegarde TOUTES les frames existantes.
Celà dit, merci encore pour ton traitement du Mpeg, la gestion du 'VBR'... et la conversion du décimal en binaire.
Moi qui pensais que la gestion de l'ID3v2 passerait simplement par une procédure traitant l'ID3v2, je me suis rendu compte que ce traitement pour un Mp3 passe obligatoirement par la gestion de son Mpeg!
Comme quoi, tout est lié... Mais quel idée de tout lié !
11 oct. 2007 à 22:52
Je vais faire les questions réponses : Contrairement aux frames (ou champs, ou balises...), la taille donné dans l'header du tag tient compte de l'header lui-même, donc 10 octets de plus (j'avais compris autrement dans une doc... en anglais). Et vraisemblablement 1 octet de plus pour se placer sur l'octet suivant.
10 oct. 2007 à 22:30
Incroyable, depuis toutes ces années, ce post est toujours d'actualité :-)
Ca tombe bien, je viens de le télécharger.
Cependant, y a un truc que je n'ai pas compris dans la classe du TagV2 : lors de la 'convertion de la taille de la chaine des tags en binaires', y a la ligne suivante : 'i = Len(FicTag) + 11'.
D'où provient ce fameux 11?
Est-ce une constante dû à ce calcul binaire en 7 bits et donc quelque soit la longueur de FigTag? Ou est-ce autre chose ?
... Oui c'est vrai, je ne pose pas une question sur un bug ou une fonction supplémentaire, mais juste sur un problème de compréhension.
4 juin 2007 à 11:49
merci pour avoir ajouter la fonctionnalité que je t'ai demandé
j'essaie ce soir si ca fonctionne bien avec mon archos.
Bonne prog
2 juin 2007 à 01:00
c'est fait dans cette nouvelle version :
---------------------------------------------------------------
pour récupérer l'image en variable Picture :
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
set Image1.Picture = toto.Pic
---------------------------------------------------------------
pour récupérer l'image dans un fichier:
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
open "c:\MonFichier.jpg" For Binary Access Write As #1
put #1 , 1 , toto.PictureBinary
close #1
---------------------------------------------------------------
pour affecter une image à un mp3:
Dim toto As New TypeTagV2
Set toto = YommTag1.GetTagV2("c:\MonFichier.mp3")
Call toto.SetPicFromFile("c:\MonFichier.jpg")
Call toto.SetTag("c:\MonFichier.mp3")
Attention : on ne peut affecter qu'un fichier d'extension jpg !!!
---------------------------------------------------------------
PS : en même temps j'ai réglé un problème que personne n'avait soulevé mais je m'en suis aperçu là ;-)
2 sept. 2006 à 04:50
j'avais trouvé une autre façon de le faire, le résultat est ce dernier( le même).
Gracias
29 août 2006 à 00:06
j'ai trouvé très vite l'info dont tu as besoin:
dans la class TypeTagMpeg
dans la fonction GetTag
il y a un ligne comme ça:
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
en fait le fix coupe la partie entière (4.545 devient 4)
toi, il faut que tu prenne:
((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp
par contre, en effet, il faut mettre un autre type à la variable DureeTmp ou créer une autre variable ce qui serait plus propre
proposition : dans la class TypeTagMpeg
*************************************************
private ReelTimeTmp as Single
Public Property Get RealTime() As Single
RealTime = RealTimeTmp
End Property
Public Property Let RealTime(ByVal Param As Single)
RealTimeTmp = Param
End Property
'et dans la fonction GetTag:
'remplace
If BitRatetmp <> 0 Then
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
End If
'par
If BitRatetmp <> 0 Then
Dureetmp = Fix(((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp)
RealTimeTmp = ((TailleTmp - EntetePostmp) * 8 / 1000) / BitRatetmp
End If
'et plus loin
.Vbr = Vbrtmp
End With
Exit Function
'par
.Vbr = Vbrtmp
.RealTime = RealTimeTmp
End With
Exit Function
*************************************************
tu auras ainsi la durée en single
d'ailleurs, au lieu de 5,545 tu auras : 5,54525
Voilà
@+ et bon devs
28 août 2006 à 23:47
je me suis jamais posé la question...il faudrait que je cherche un peu...dès que j'ai le temps je regarde ça...
10 août 2006 à 02:26
1º) je ne parle pas très bien français, pardon si je me trompe.
Ton source est IMPRESSIONNANT!!
Je veux te faire une question:
Pour mon programme, j'ai besoin d'obtenir le temps précis que durent les archives mp3. Je veux: heures, minutes, seconds et frames.(Bitrate variable évidemment)
Ton code: j'ai vu que le résultat, par exemple, pour ton archive test.mp3 est 4 seconds.
Il est exactament 4.545 seconds. 1 seconde - 100 frames
J'ai modifié BitRatetmp a single et Dureetmp aussi a single, mais le résultat n'est pas bon..Pourquoi?
Est-ce que tu peux m'aider??
13 mai 2006 à 00:45
12 mai 2006 à 17:01
12 mai 2006 à 16:54
@+ JLN
12 mai 2006 à 16:47
12 mai 2006 à 16:37
12 mai 2006 à 15:45
16 avril 2006 à 14:27
@+ JLN
16 avril 2006 à 13:23
Au fait, merci pour tes comments JLN
16 avril 2006 à 13:21
si tu veux les infos pdf , envoie moi ton mail en MP et je ferais le necessaire
16 avril 2006 à 11:47
A en juger des remarques de tous les utilisateurs de ta classe (et precedament de ton ocx) je pense sans me tromper pouvoir dire BRAVO et mon respect le plus profond. Je cherchais quelques chose qui me mette sur la voie des tags mp3 et je tombe sur une Rolls, que dire de plus, je suis comblé et je m'en vais mettre ca dans ma prochaine appli. Bonne continuation et merci au nom de tous. Ha ! juste une chose (il fallait que j'en trouve une) le lien http://www.yomm.fr.st/dl.php?ID=1 ne fonctionne pas.
Bonne prog,
@+ JLN
24 janv. 2006 à 22:29
Salut,
déjà, il ne te mankerait pas une truc du genre "NEW" ???
-----------------------------------------
dim mp3File as New TagType
-----------------------------------------
en fait , j'ai même testé sans le new et ça marche....c'est peut etre plutot un probleme de déclaration générale je pense...mais en tous les cas , ce que tu as tapé là devrait fonctionner sans problème!!!!
23 janv. 2006 à 15:54
j'ai testé le module de Yomm avec les tags mp3 mais j'ai un petit soucis....
j'ai donc déclaré tout ca pour pouvoir lire le fichier mp3 test.mp3
Dim mp3File As TagType
Set mp3File = YommTag1.GetAllTags("C:\test.mp3")
mais ca me mets un type mismatch...seulement on voit très bien que lorsqu'on écrit la fonction GetAllTags elle demande un type String...
J'ai essayé de mettre str("C:\test.mp3) pour voir.. mais ça plante mon prog....
Quelqu un aurait une solution ? Merci
20 janv. 2006 à 13:55
10 oct. 2005 à 22:52
je regarderai cela dès ke possible...merci de l'info...
9 oct. 2005 à 21:21
La pluspart des éditeurs de tag V2 proposent de mettre "a la main" le genre, par exemple, dans la liste habituelle, y'a pas le genre "Bachata", donc dans le champ "Genre" on écrit "Bachata" a la main, ce que propose de faire ton programme, mais si on le fait, il plante dans GetGenreIndexFromTag, index hors de plage.
Je ne sais pas comment corriger ce probléme car je n'ai pas comprit comment étaient gérés ces "genres" non "numérotés"
Sinon ta source est super et j'aimerait vraiment pouvoir l'utiliser ! (:
7 mars 2005 à 16:15
7 sept. 2004 à 17:16
Cela vient vraissemblablement des paramètres passés en ligne de commande à l'encoder...J'ai rien de plus precis car j'ai vu que cela dépendait de pas mal de chose...Toutefois comme je te l'ai dit, moi je n'ai pas eut le problème avec la version 3.92...Peut etre que ce bug est corrigé...
Bon courage à toi...
@+ ;-)
7 sept. 2004 à 14:50
Je viens de réencoder le fichier avec la même version de Lame mais cette fois ci sans vbr et là ç'est nickel. Surement que le bug concerne le vbr de la version Lame 3.90
Je te remercie pour ton attention. Je ne sais pas combien de fichiers posent problème, une toute petite minorité certainement. Mais je vais pister tout ça à l'occasion. Encore un nouveau Projet. Je te donnerai des nouvelles.
Merci pour tout
et bonne continuation
A+
7 sept. 2004 à 13:20
Je comprend en effet que tu préfères trouver une solution qui te permettes de gérer tes fichiers mais ce que j'ai fait est sencé être un 'standard' et donc cela doit fonctionner avec n'importe quelle version...De plus je vois mal comment gérer le problème s'il manque les infos nécessaire...toutefois j'ai peut etre une solution, ou tout du moins une piste , qui pourrait t'éviter de réencoder tout tes mp3, cherche du coté des 'Lame Header Fix' j'ai pas encore chercher mais j'ai vu que l'on en parlait sur certain forum...peut etre trouveras tu ton bonheur là dedans...je cherche de mon coté si je trouve quelque chose et je te tiendrai au courant
@+
7 sept. 2004 à 12:48
Ceci dit, on peut toujour forcer le passage dans ton test (on peut en plus vérifier la version de lame) mais là on génére une erreur et on boucle à l'infini a cause du resume. Si on force le else c'est tout pareil le calcul fait une division par 0.
Merci Yomm je vais approfondir le cas de forçage sur XING.
A+
7 sept. 2004 à 12:30
Quelques explication tout de même:
Le problème vient du fait que ton mp3 ne possède pas de 'header' correcte...En effet, il manque une parti du header, c'est un problème connu sous Lame (bien que cela reste mon encoder préféré ;-) )...J'ai en effet lu des problème de header sur plusieurs forums...
Pour plus de détail , je t'ai fait un comparatif entre un fichier vbr encodé en Lame 3.92 et ton fichier (encodé lui en Lame 3.90)
Pour voir le résultat voici le lien : http://yomm.no-ip.com/vbr_3.90.jpg
Légende :
-mauve : début de l'entête
-vert : chaine de caractères ( 'XING' ) devant figurée afin de lire les infos de l'encodage VBR , tu constateras qu'à l'endroit même où dans mon fichier je lis bien 'XING' on trouve 'LAME' dans ton fichier tandis que dans mon fichier , 'LAME' ce trouve plus loin
-turquoise : section manquante
Voilà, c'est du moins mon explication et elle me semble tenir la route...Mais bon j'ai pas codé Lame donc il y a peut etre une notion qui m'a échappé...Toutefois le fait que le problème ne se pose pas avec Lame 3.92 signifie peut etre bien qu'il y avait un problème avec la version 3.90...Enfin bref...
Ma Solution : Ré-encode ton mp3 LOL ;-)
@+ et désolé de rien pouvoir faire de plus pour toi :-(
PS: j'espère que finalement mon source te servira ;-)
7 sept. 2004 à 08:56
Sur ce fichier tu passes pas dans le code pour le vbr :
testbuffer != XING donc tu vas dans le else et là tu ne récupères pas sur ce fichier la valeur VBRI donc pas de calcul... donc pas de surcharge de durèe :-(
Y a forcément un problème de calage sur le buffer. Je regarde plus en détail.... aussi de mon coté.
Salut
7 sept. 2004 à 08:10
c'est étrange...
je vais te contacter en mp pour faire comme avec d'autre et que tu m'envoi un de tes mp3 ki poz problème!
OK?
6 sept. 2004 à 21:40
Flute alors :-).... Je croyais que tu récupérais les Vbr dans ton outils... En fait on récupère les même infos que winamp... Il pète un fusible désqu'il s'agit de calculer la durée en seconde sur les encodages vbr. c'est drôle meme si c'est pénible. Windows à l'air d'avoir corrigé le problème.
Sinon l'est bien, ton outil même si il m'aide pas.
Fait ça pour tes dirlistesboxes afin d'éviter les problèmes pour ceux qui donnent des noms à leurs lecteurs !!! (comme moi :-) )
Ca marchera à tous les coups au lieu de planter ou d'y alller au débogage.
'* Lettre (lecteur) & ":"
Dir1.Path = Mid(Drive1.Drive, 1, 3)
Bien sur on peut aussi faire autrement.
Bonne continuation
11 juil. 2004 à 15:31
9 juil. 2004 à 22:26
j'ai trouvé un bug ...et oui ;-)
Le problème concerne les fichiers mp3 comportant une entete RIFF...j'aurai pu ne pas le voir sur 12 fichiers testés 1 seul ma posé un problème... ;-) ....Pourkoi celui là et pas les autres ? Simplement parce ke le 5ème bite (cad celui qui suis l'entete "RIFF"...) de ce fichier vaut &HFF (héxa) et ke la class comprend que c'est le début du l'entete du mp3...Mais non ;-).....
bon je vais bossé dessus et je mettrai a jour dès ke ce petit problème sera corrigé .....
@+
PS : :-( ooouuuuuuuiiiiiiiiinnnnnn..........pourkoi y a pas UNE et une seule norme ;-).......
5 juil. 2004 à 09:43
4 juil. 2004 à 21:37
attention ! ne va pas comprendre ke mon controle est meilleur ke celui de winamp, loin de là...dans ce ka préci oui...mais winamp gère plein d'autres choses notament au niveau du genre des TagV2 ke je n'ai pas voulu prendre en compte dans ma class...enfin voilà je voulais préciser cela...
4 juil. 2004 à 21:26
4 juil. 2004 à 21:16
4 juil. 2004 à 18:45
le 157 est l'info fourni par winamp
si tu regardes le display time en haut a droite tu lis une durée de 1min58 soit 118 secondes....c'est juste pour montrer que sur ce cas , ma class donne un résultat plus proche de la réalité...
4 juil. 2004 à 11:02
118 secondes et 157 ?
4 juil. 2004 à 01:33
4 juil. 2004 à 01:02
mais bon je sais pas...peut etre une question de service pack...
3 juil. 2004 à 23:42
Une erruer s'est quand meme glissé :
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive & ""
End Sub
Il faut remplcer :
Dir1.Path = Drive1.Drive & ""
par :
Dir1.Path = Drive1.Drive
Sinon y a erreur :)
10/10
3 juil. 2004 à 22:35
bonne prog a tous...