"mpeg file info box + id3 tag editor" (ocx) et non, pas encore un!!! ;-)

Soyez le premier à donner votre avis sur cette source.

Vue 11 899 fois - Téléchargée 1 146 fois


Description

Tout ce qui est écrit est à prendre au 2nd degré, c'est histoire de présenter mon code moins académiquement
Pour vous amusez, j'ai mis dans le zip 3 types de mp3 (cbv, vbr et vbri)

Pour ce qui on dit "ENCORE UN!!!!!!" voici quelques petites notions qui je pense vous feront changer d'avis
(Pour les autres allez voir les infos dans la zone code!!!)

Tout d'abord mon code gère les TagV1, TagV2 et Mpeg comme Winamp
>>normal!

je gère les TagV1 et TagV2 en lecture/écriture et les Mpeg en lecture
>>normal!

je gère pour les TagV2 les différents modes d'écriture du "Genre"
>>ha bon y a plusieurs mode d'écriture pour les genres des TagV2?
>> >> OUI!!!
>> >>ex : 42 , (42) , (42)Punk , (42)(15) , Punk , (42)((Mon_Punk)
>> >>tout ceci sera considéré comme étant du Punk
>> >> ((MonGenre) sera concidéré comme "Aucun Genre"

Pour les TagMpeg, je gère les fichiers MP3 de type
-CBR (Constant BitRate constant pour ce qui savent pas)
-VBR (Variable BitRate)
aussi bien les VBR Xing (lame) que les VBRI
>>VBRI c'est quoi? (encodé pa musicmatch par exemple
-ABR (Average BitRate)
Pour info, mon XP (version pro sans service pack) ne gère pas les mp3 VBRI
L'information de la durée n'est pas correcte. idem pour winamp 2.87 au moins , mais winamp5 le gère

Pour les TagMpeg je calcule le nb de frames et donne les infos complémentaires pour le mp3 en "Joint Stereo"

Et enfin, il y a la manière dont est organisé le code...L'ocx est assez simple d'utilisation...voir plus bas zone code!!!

Source / Exemple :


'Voici les infos pour l'utilisation de l'ocx
'
'---------------------------------------------------------------------
'		   les types de variables utiles
'---------------------------------------------------------------------
'
'
'	- TagType:
'
'Déclarer une variable en TagType permet de travailler sur tous les
'tags d'un mp3 facilement...On peut accéder au TagV1, au TagV2 ainsi
'qu'au TagMpeg...
'
'Pour l'utilisation voir "Utilisation des Variables"
'
'
'	-TypeTagV1
'
'Déclarer une variable en TypeTagV1 permet de travailler sur tous les
'TagV1 d'un mp3
'
'Pour l'utilisation voir "Utilisation des Variables"
'
'
'	-TypeTagV2
'
'Déclarer une variable en TypeTagV2 permet de travailler sur tous les
'TagV2 d'un mp3
'
'Pour l'utilisation voir "Utilisation des Variables"
'
'
'	-TypeTagMpeg
'
'Déclarer une variable en TypeTagMpeg permet de lire tous les TagMpeg
'd'un mp3
'
'Pour l'utilisation voir "Utilisation des Variables"
'
'---------------------------------------------------------------------
'		   	les fonctions utiles
'---------------------------------------------------------------------
'
'
'	-GetAllTags 	as TagType
'Cette fonction permet de lire toutes les informations d'un mp3
'	(TagV1, TagV2 et TagMpeg)
'
'
'	-GetTagV1 	as TypeTagV1
'Cette fonction permet de lire les TagV1 d'un mp3
'
'
'	-GetTagV2 	as TypeTagV2
'Cette fonction permet de lire les TagV2 d'un mp3
'
'
'	-GetTagMpeg 	as TypeTagMpeg
'Cette fonction permet de lire les TagMpeg d'un mp3
'
'
'	-SetAllTags 	as Boolean
'Cette fonction permet d'écrire les TagV1 et les TagV2 d'un mp3
'
'
'	-SetTagV1 	as Boolean
'Cette fonction permet d'écrire les TagV1 d'un mp3
'
'
'	-SetTagV2	as Boolean
'Cette fonction permet d'écrire les TagV2 d'un mp3
'
'
'	-ClearAllTags	as Boolean
'Cette fonction permet d'effacer les TagV1 et les TagV2 d'un mp3
'
'
'	-ClearTagV1	as Boolean
'Cette fonction permet d'effacer les TagV1 d'un mp3
'
'
'	-ClearTagV2	as Boolean
'Cette fonction permet d'effacer les TagV2 d'un mp3
'
'
'---------------------------------------------------------------------
'		   	Utilisations des Variables
'---------------------------------------------------------------------
'(dans les exemples, YommTag est le composant placé sur la form)
'
'	-TypeTag
'voici des extraits expliqués de codes relatifs à une variable TypeTag
'
'-exemple 1: lecture ,modification et sauvegarde de tags
'
'	******************************************************
	dim VarTags as TagType
	
	set VarTags = YommTag.GetAllTags("c:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mon_Fichier.mp3")
'	(...)
'	******************************************************
'	
'	dans cet exemple on récupère tous les Tags du fichier mp3
'	dans la variable VarTags
'
'	******************************************************
'	(exmple de suite du code précédente)
'	(...)
	txtv1Artiste.text = VarTags.TagV1.Artiste
'	(...)
	txtv2Album.text = VarTags.TagV2.Album
'	(...)
	lblDurée.caption = VarTags.TagMpeg.Duree & " secondes"
'	(...)
'	******************************************************
'	
'	ici on attribut les valeurs récupérées à des zones de 
'	texte ou label.
'	notez comme il est simple de récupérer les valeurs
'	il y a trois type de tags organisé ainsi:
'		VarTag.TagV1
'		      .TagV2
'		      .TagMpeg
'	Ensuite vous accédez aussi facilement au valeur
'		VarTag.TagV1.Valide  (y a-t-il des TagV1?)
'			    .Artiste 		(string)
'			    .Album   		(string)
'			    .Piste   		(integer)
'			    .Titre   		(string)
'			    .Genre   		(integer)
'			    .Annee   		(string)
'			    .Commentaire	(string)
'		VarTag.TagV2.Valide (y a-t-il des TagV2?)
'			    .Artiste		(string)
'			    .Album		(string)
'			    .Piste		(integer)
'			    .Titre		(string)
'			    .Genre		(integer)
'			    .Annee		(string)
'			    .Commentaire	(string)
'			    .Compositeur	(string)
'			    .Original		(string)
'			    .Copyright		(string)
'			    .Url		(string)
'			    .Encode		(string)
'		VarTag.TagMpeg.Valide (TagVMpeg valide?)
'			      .Taille		(long)
'			      .EntetePos	(long)
'			      .Duree		(long)
'			      .Mpeg		(string)
'			      .Layer		(string)
'			      .CRC		(boolean)
'			      .BitRate		(integer)
'			      .Frequence	(long)
'			      .Padded		(boolean)
'			      .Frames		(long)
'			      .PrivateBit	(boolean)
'			      .Mode		(string)
'			      .ModeExt		(string)
'			      .Copyright	(boolean)
'			      .Original		(boolean)
'			      .Emphasis		(string)
'			      .Vbr		(string)
'
'	******************************************************
'	(suite du code précédente)
'	(...)
	dim Retour as Boolean
'	(...)
	VarTags.TagV1.Titre = txtv1Titre.text
'	(...)
	VarTags.TagV2.Genre = GenreIndex
'	(...)
	Retour = YommTag.SetAllTags("c:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mon_Fichier.mp3,VarTags)
'	(...)
	set VarTags = Nothing
'	******************************************************
'
'	là on mémorise les Tags dans le fichiers
'	Pensez à cette petite ligne de code : 
'		'set VarTags = Nothing'
'
'-exemple 2: travail sur une version de Tag (ici TagV1)
'
'
'	******************************************************
	dim VarTagV1 as TypeTagV1
'	
	set VarTagV1 = YommTag.GetTagV1("c:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mon_Fichier.mp3")
'	(...)
'	******************************************************
'	
'	dans cet exemple on récupère uniquement les TagV1
'
'	******************************************************
'	(suite du code)
'	(...)
	txtv1Artiste.text = VarTagV1.Artiste
	txtv1Titre.text = VarTagV1.Titre
'	(...)
'	******************************************************
'	
'	la variable étant de type TagV1 on obtient directement
'	les informations après le nom de la variable
'	(les propriétés étant les même que dans l'exemple 1)
'
'	******************************************************
'	(suite du code)
'	(...)
	dim Retour as Boolean
'	(...)
	Retour = YommTag.SetTagV1("c:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mon_Fichier.mp3,VarTagV1)
'	(...)
	set VarTagV1 = Nothing
'	******************************************************
'	
'	ici on mémorise les TagsV1
'
'	******************************************************
'	(...)
	Retour = YommTag.ClearTagV2("c:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Mon_Fichier.mp3")
'	(...)
'	******************************************************
'	
'	et on pourrait ensuite, comme ici, effacer tous les 
'	TagV2 vu qu'on travail avec les TagV1...
'

Conclusion :


J'ai pas mal cherché afin de proposer cet OCX qui me semble à peu près complet...
J'ai toutefois pas pu tester tous les mp3 du monde entier donc merci de me faire par de toutes vos remarques!!!

Idem s'il y a des informations que vous ne comprenez pas, mais je pense que les explications présentent dans la "zone code" doivent suffir

LIRE LES MESSAGES POSTES POUR LE DETAIL DES UPDATES DU SOURCE

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
68
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
24 août 2008

Hello,

j'ai testé ce code qui est génial entre nous soit dis... mais j'arrive avec certains fichiers à une erreur de dépassement de capacité au niveau des tags..
et la.. je suis perdu...
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
2
voici la version Class du YommMp3Tag...:
http://www.vbfrance.com/code.aspx?ID=24252

Desormais je ne toucherai plus a la version ocx...elle restera tel kel..toutes les modifs seront faites sur la verion Class...désolé pour ce ke ça gène mais je ne ve pas avoir 2 sources a modifier a chaque fois...

>>Patate :
tu t'en doutes si j'intègre la gestion des Tag ogg ce sera dans la nouvelle version ;-)

PS: je laisse touefois ce source en ligne pour ceux ki voudrait un ocx tout fait...
Messages postés
2103
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
25 octobre 2020
2
ok no problem.

J'ai posté ici parce que ca me paraissais plus simple mais c vrai que ca fait fouilli et ca ralentis le chargement de page.

Faut être pris pour être appris, j'le f'rais plus commissaire ;)

En tout cas ravi que cela t'aide au moins un peu ;)

@++
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
2
a premiere vue ça a l'air pas mal en effet....plus facile ke pour le mp3 en tout cas ;-)

par contre je vais te faire une remarque...c'est pas méchant du tout rassure toi..d'ailleurs c'est plus une faveur ke je vais te demandé plutot k'une remarke ke je vais te faire ...enfin bref...a l'avenir , stp envoi moi ce genre de message en privé...non pas ke je ne veuille pa ke les autres ai l'info...simplement ke c'est pas vraiment sa place...même mieux , en cherchant bien sur vbfrance , tu trouveras mon mail....

enfin merci comme même pour l'info elle est certe tout a fait précieuse....

sur ce je vous laisse tous car une douche s'impose après une bonne rando roller ;-)...et bonne nuit a vous
Messages postés
2103
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
25 octobre 2020
2
J'ai trouvé un code pour lire (et seuelement lire mais c un debut) les tag OGG. J'ai testé sur kelkes fichier que j'avais en ma poccession et j'ai pas eu de problème :)

modVorbis.bas
=========

Option Explicit

Public Type VorbisTag
Title As String
Artist As String
Album As String
Genre As String
Date As String
Comment As String
TrackNumber As Integer
EncodedUsing As String
Error As String
End Type

Public Function GetTag(Filename) As VorbisTag
Dim phase As Integer
Dim filelength As Long
Dim fileremaining As Long
Dim fileopened As Long
Dim filehandle As Integer
Dim errmsg As String
Dim tmp As Integer
Dim tmp4 As Integer
Dim tmp2 As Integer
Dim tmp3 As Integer
Dim foundatag As Boolean
Dim s$
GetTag.Album = ""
GetTag.Artist = ""
GetTag.Comment = ""
GetTag.Date = ""
GetTag.EncodedUsing = ""
GetTag.Error = ""
GetTag.Genre = ""
GetTag.TrackNumber = 0
GetTag.Title = ""
foundatag = False
s$ = Space$(2048)
'Phase is used so the error handler knows
'what we are up to
On Error GoTo Errhandler
phase = 1
'Phase 1: We're trying to open the file.
filelength = FileLen(Filename)
fileremaining = filelength
filehandle = FreeFile()
Open Filename For Binary Access Read As filehandle

'Phase 2: File open.. so it exists..
phase = 2
Do
Get filehandle, , s$
fileopened = fileopened + Len(s$)
fileremaining = fileremaining - Len(s$)
If fileremaining < 2048 Then
s$ = Space$(fileremaining)
End If
tmp = InStr(1, s$, "vorbis")
tmp2 = InStr(1, s$, "vorbis ")


If tmp <> 0 Then
If tmp2 < tmp Then
If tmp2 <> 0 Then
tmp = tmp2
End If
End If
Else
If tmp2 <> 0 Then
tmp = tmp2
End If
End If
If tmp <> 0 Then Exit Do
If fileremaining = 0 Then Exit Do
Loop
If tmp 0 Then phase 3: GoTo Errhandler
'Ok, we've found the vorbis header.
'Let's get a big chunk of data
Get filehandle, tmp, s$
'Ok, we've got 2kb of data after the header
'lets find the header close
tmp = InStr(7, s$, "vorbis")
If tmp 0 Then phase 4: GoTo Errhandler

'now we can get the required info

tmp = InStr(1, s$, "TITLE=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Title = Mid$(s$, tmp + 6, tmp2 - (tmp + 6))
End If

tmp = InStr(1, s$, "ARTIST=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Artist = Mid$(s$, tmp + 7, tmp2 - (tmp + 7))
End If

tmp = InStr(1, s$, "COMMENT=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Comment = Mid$(s$, tmp + 8, tmp2 - (tmp + 8))
End If

tmp = InStr(1, s$, "ALBUM=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Album = Mid$(s$, tmp + 6, tmp2 - (tmp + 6))
End If

tmp = InStr(1, s$, "DATE=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Date = Mid$(s$, tmp + 5, tmp2 - (tmp + 5))
End If

tmp = InStr(1, s$, "TRACKNUMBER=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.TrackNumber = Val(Mid$(s$, tmp + 12, tmp2 - (tmp + 12)))
End If

tmp = InStr(1, s$, "GENRE=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.Genre = Mid$(s$, tmp + 6, tmp2 - (tmp + 6))
End If

tmp = InStr(1, s$, "ENCODED_USING=")
If tmp <> 0 Then
foundatag = True
tmp2 = InStr(tmp, s$, Chr$(0) + Chr$(0) + Chr$(0))
tmp3 = InStr(tmp, s$, Chr$(1) + Chr$(5) + "vorbis")
If tmp3 < tmp2 Then tmp2 = tmp3 + 1
tmp2 = tmp2 - 1
GetTag.EncodedUsing = Mid$(s$, tmp + 14, tmp2 - (tmp + 14))
End If
If foundatag False Then phase 5: GoTo Errhandler
Exit Function
Errhandler:
Close filehandle
If phase 1 Then errmsg "Error opening file! Not found? Already in use, perhaps?"
If phase 2 Then errmsg "Error processing file. Ouchage."
If phase 3 Then errmsg "Vorbis header not found?!"
If phase 4 Then errmsg "Vorbis header not closed!"
If phase 5 Then errmsg "I found a vorbis header, but no tag information seems to exist.."

GetTag.Error = "ERR:" + errmsg
Exit Function
End Function


Form1.frm
=====

Function VorbisReader(Filename As String)
Dim p As VorbisTag
Dim tmp As Integer
If LCase$(Right$(Filename, 3)) <> "ogg" Then
tmp = MsgBox("Le fichier " & Filename & " n'est pas un fichier Vorbis !" & bnewline & "Voulez-vous quand même contninuer ?", 36, "Conflit")
If tmp = 7 Then Exit Function
End If
p = GetTag(Text1.Text)
If p.Error = "" Then
MsgBox "Title: " + p.Title & vbNewLine _
& "Artist: " + p.Artist & vbNewLine _
& "Genre: " + p.Genre & vbNewLine _
& "TrackNo: " + Format$(p.TrackNumber) & vbNewLine _
& "Year: " + p.Date & vbNewLine _
& "Album: " + p.Album & vbNewLine _
& "EncodedUsing: " + p.EncodedUsing
Else
MsgBox "Error: " + Right$(p.Error, Len(p.Error) - 4)
End If

Private Sub Form_Load()
VorbisReader ("C:\Mys Music\Treck 01.ogg")
End Sub


Dis moi ce que tu en pense.

@++
Afficher les 52 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.