Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur

VB 6 et antérieur Visual basic 6 et versions antérieures. Avant de poster -> La FAQ VB6, Les tutoriels VB

Réponse
 
Outils de la discussion
Vieux 03/01/2007, 20h48   #1 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut durée d'une musique mp3 et wma

Bonsoir.
Je cherche à réccuperer des informations dans un fichier mp3 ou wma, surtout la durée de la chanson. Si quelqu'un a une idée ou une piste je suis preneur
Merci d'avance à toute contribution.
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 21h21   #2 (permalink)
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Date d'inscription: décembre 2004
Localisation: Haute Savoie
Âge: 53
Messages: 1 767
Envoyer un message via MSN à ProgElecT
Par défaut

bonsoir
je viens de verifier, j'ai ce qu'il te faut, le projet est dans le ZIP
Comme tu pourras le voir, il peu servir pour bien d'autres extentions, par contre je n'est pas de fichier *.WMA pour faire l'essais, pour MP3 s'est bon
Salut
ExtraireInfosFichier.zip (3.5Ko)
Modification adresse du ZIP
__________________
ProgElecT

Il est souvant plus rapide de trouver la reponse à un problème par soit même, A LIRE AVANT DE POSTER, TUTO VB6/VBA/VBScript, Vos contributions VB6 , Recherche dans ce forum

Et ces petits bouts de codes dans ma page de contribution sur DVP

S’il vous plait, les MPs techniques à mon intention ne doivent être qu’exceptionnels.
Soyez sympa, penser au tag

Dernière modification par ProgElecT ; 09/06/2007 à 18h46.
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 23h03   #3 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

Je viens de vérifier mais cela ne me donne pas le temps que dure la chanson et c'est bien la seule chose qui m'interresse
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 23h07   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Date d'inscription: décembre 2004
Localisation: Haute Savoie
Âge: 53
Messages: 1 767
Envoyer un message via MSN à ProgElecT
Par défaut

?
Je viens de verifier a nouveau avec le projet sur mon disque local, je recharge le zip pour verifier !!
__________________
ProgElecT

Il est souvant plus rapide de trouver la reponse à un problème par soit même, A LIRE AVANT DE POSTER, TUTO VB6/VBA/VBScript, Vos contributions VB6 , Recherche dans ce forum

Et ces petits bouts de codes dans ma page de contribution sur DVP

S’il vous plait, les MPs techniques à mon intention ne doivent être qu’exceptionnels.
Soyez sympa, penser au tag
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 23h08   #5 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

En fait je veux le code le plus simple pour réccupérer juste la durée de la chanson et rien d'autre.
Merci ProgElecT pour ton savoir
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 23h20   #6 (permalink)
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Date d'inscription: décembre 2004
Localisation: Haute Savoie
Âge: 53
Messages: 1 767
Envoyer un message via MSN à ProgElecT
Par défaut

Sa fonctionne apres decompression du zip, en tout cas pour *.mp3, *.AVI ....
Il ne faut recuperer que la partie

Code :
Public Sub informationsFichier()
'recuperé sur ce forum pour avoir les infos que tu recherche
'necessite d'activer reference Microsoft Shell Controls and Automation
Dim objShell As Shell
Dim objFolder As Folder
Dim strFileName As FolderItem
Dim TempsChanson As Date
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(Chemin) 'adapter le chemin
Set strFileName = objFolder.Items.Item(Fichier) 'adapter le fichier
 
If objFolder.GetDetailsOf(strFileName, 21) <> "" Then
  'NamIndx(21) = "Duration"
 TempsChanson = cdate(Trim$(objFolder.GetDetailsOf(strFileName, 21)))
End If
 
Set objShell = Nothing: Set objFolder = Nothing: Set strFileName = Nothing
End Sub
 
Citation:
Merci ProgElecT pour ton savoir
J'ai et j'apprend encor beaucoup sur ce forum
__________________
ProgElecT

Il est souvant plus rapide de trouver la reponse à un problème par soit même, A LIRE AVANT DE POSTER, TUTO VB6/VBA/VBScript, Vos contributions VB6 , Recherche dans ce forum

Et ces petits bouts de codes dans ma page de contribution sur DVP

S’il vous plait, les MPs techniques à mon intention ne doivent être qu’exceptionnels.
Soyez sympa, penser au tag
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/01/2007, 23h48   #7 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

Je l'ai un peu modifier et l'ai transformé en fonction, ca donne cela :
Code :
 
Public Function TpsChanson(Chemin As String, Fichier As String) As Date
'recuperé sur ce forum pour avoir les infos que tu recherche
'necessite d'activer reference Microsoft Shell Controls and Automation
Dim objShell As Shell
Dim objFolder As Folder
Dim strFileName As FolderItem
Dim TempsChanson As Date
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(Chemin) 'adapter le chemin
Set strFileName = objFolder.Items.Item(Fichier) 'adapter le fichier
 
If objFolder.GetDetailsOf(strFileName, 21) <> "" Then
  'NamIndx(21) = "Duration"
 TempsChanson = CDate(Trim$(objFolder.GetDetailsOf(strFileName, 21)))
End If
 
Set objShell = Nothing: Set objFolder = Nothing: Set strFileName = Nothing
 
TpsChanson = TempsChanson
 
End Function
 
J'ai mis un fichier nommé tst.mp3 directement sur mon disque C, son adresse est donc : C:\tst.mp3.
J'appel la fonction de la manière suivante :
Code :
 
Dim Duree As Date
Duree = TpsChanson ("c:\", "tst.mp3")
 
Seulement j'obtiens 00:00:00. j'ai fait un pas à pas, il ne rentre pas dans le if

Aurais-je fais une erreur ?

PS: j'ai oublié de préciser que j'étais sous Windows 2000. Cela à peut-être une importance.

Quand au programme que tu m'as passé au départ, celui-ci n'affichait que 8 lignes numérotées de 1 à 8.
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto

Dernière modification par avigeilpro ; 04/01/2007 à 00h14.
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/01/2007, 12h46   #8 (permalink)
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Date d'inscription: décembre 2004
Localisation: Haute Savoie
Âge: 53
Messages: 1 767
Envoyer un message via MSN à ProgElecT
Par défaut

Bonjour

Pour le nombre de ligne affichée, sela depant des infos disponibles dans l'entête du fichier et de son extention.
Je viens de verifier au Pro, etant sous windows 2000 Pack 4 , cela ne fonctionne pas, je ne savais pas qu'il y avais des restrictions
Desolé, car ce moyen est idéal car il n'y a pas besoin d'ouvrir un fichier volumineux en entier pour en retirer des infos.

Est il possible de recuperer sur une version Windows XP la dll shell32, et la mettre sous Windows 2000 ?
Je vais essayer demain, recupe sur mon PC perso, remplacement sur celui du Pro, on verra bien.
__________________
ProgElecT

Il est souvant plus rapide de trouver la reponse à un problème par soit même, A LIRE AVANT DE POSTER, TUTO VB6/VBA/VBScript, Vos contributions VB6 , Recherche dans ce forum

Et ces petits bouts de codes dans ma page de contribution sur DVP

S’il vous plait, les MPs techniques à mon intention ne doivent être qu’exceptionnels.
Soyez sympa, penser au tag
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/01/2007, 12h59   #9 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

Merci j'attend ta réponse avec impatience.

Sinon n'y a-t-il pas une autre façon de faire ? ne peut-on pas trouver cela en éditant le fichier en hexa par exemple ? j'ai essayé mais ne connaissant pas la structure d'un fichier mp3, c'est comme chercher une aiguille dans une botte de foin si quelqu'un connait je suis preneur
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto

Dernière modification par avigeilpro ; 04/01/2007 à 13h51.
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/01/2007, 20h02   #10 (permalink)
Rédacteur/Modérateur
 
Avatar de ProgElecT
 
Date d'inscription: décembre 2004
Localisation: Haute Savoie
Âge: 53
Messages: 1 767
Envoyer un message via MSN à ProgElecT
Par défaut

Desolé

On ne peut pas modifier Shell32.dll, soit par copier/coller, impossible de renommer le fichier existant dans le dossier System32, ni de faire référence a la DLL la plus performante, windows reprend la DLL installée dans le dossier System32
J'ai fait des essais par lecture de fichier en différant mode, pour la même extension, des fois on trouve, d'autres fois non, d'autres fois l'infos n'est pas au même endroit, sans compter le temps de chargement du fichier car l'infos n'est pas toujours dans l'entête.
Si quelqu’un a une astuce ?
Je passe la main

Ce qui est visible sous XP avec le prog en Fichiers attachés (le N° et l'octet fournissant l'info)

Citation:
0 Name : 00 - Mon coeur mon amour (Version radios).mp3
1 Size : 2*973 Ko
2 Type : Fichier audio MP3
3 Date Modified : 03/03/2006 21:48
4 Date Created : 05/01/2007 18:44
5 Date Accessed : 05/01/2007 18:52
6 Attributes : A
7 Status : Connecté
8 Owner : MEORDI\francis
19 Track Number : 1
21 Duration : 00:03:10
22 Bit Rate : 128kbps
23 Protected : Non
32 File Version :
33 Product Name : 44 kHz
34 Product Version : 2 (stéréo)
un autre fichier
Citation:
0 Name : benjamin.jpg
1 Size : 90 Ko
2 Type : Image Paint Shop Pro 6
3 Date Modified : 30/12/2003 13:44
4 Date Created : 23/08/2004 17:57
5 Date Accessed : 05/01/2007 18:28
6 Attributes : A
7 Status : Connecté
8 Owner : MEORDI\francis
13 Pages : 1
26 Dimensions : 1026 x 750
27 Not used (Largeur) : 1026 pixels
28 Not used (Hauteur) : 750 pixels
un autre fichier
Citation:
0 Name : DSCN0785.JPG
1 Size : 392 Ko
2 Type : Image Paint Shop Pro 6
3 Date Modified : 28/10/2006 21:41
4 Date Created : 03/11/2006 10:29
5 Date Accessed : 24/12/2006 18:33
6 Attributes : A
7 Status : Connecté
8 Owner : MEORDI\francis
13 Pages : 1
24 Camera Model : E4100
25 Date du cliché : 28/10/2006 21:41
26 Dimensions : 1600 x 1200
27 Not used (Largeur) : 1600 pixels
28 Not used (Hauteur) : 1200 pixels
31 Description : 2006:10:28 21:41:09
Salut
ProgElecT est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/01/2007, 22h45   #11 (permalink)
Responsable Visual Basic
 
Avatar de ThierryAIM
 
Date d'inscription: septembre 2002
Localisation: Cublize (69)
Âge: 46
Messages: 3 241
Par défaut

le plus étonnant c'est que ça :
http://www.microsoft.com/technet/scr....mspx?mfr=true
ne fonctionne pas non plus avec un W2k SP4

Peut-être poser la question sur le forum Windows 2000
__________________
Vous vous posez une question, la réponse est peut-être ici :
Toutes les FAQs VB
Les Cours et Tutoriels VB/VBA
Les Sources VB/VBA


Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

MioSkins.net : le site de référence pour GPS et PDA Mitac MIO
ThierryAIM est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/01/2007, 23h41   #12 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

Ouai mais si je pose la question sur le forum windows 2000 ils vont me jeter et me dire que je ne suis pas sur le bon forum !!!
Y'a pa moyen d'utiliser un objet OLE ou un control ocx comme un lecteur, d'y mettre le fichier et que lui me donne la durée de la musique ?
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/01/2007, 00h03   #13 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

J'ai enfin une solution !!!!!
J'ai fait une recherche et suis tombé sur cela :

il y a un module nommé mp3.bas, et dans ce module la fonction Return_tps_min

voici le contenu du module :
Code :
 
'''Created By Michael Karathanasis 990728'''''''''''''''''''''
 
'pour executer le fichier texte
Public Declare Function ShellExecuteA Lib "shell32" (ByVal hwnd As Long, ByVal LPFile As String, ByVal PathFile As String, ByVal Other As String, ByVal Other2 As String, ByVal Param As Long) As Long
 
Public Bitrate As Integer
Public durée As Integer
Dim MpegVersion As Integer
Dim MpegLayer As Integer
 
''this function converts Binary string to decimal integer
Public Function BinToDec(BinValue As String) As Integer
BinToDec = 0
For i = 1 To Len(BinValue)
If Mid(BinValue, i, 1) = 1 Then
BinToDec = BinToDec + 2 ^ (Len(BinValue) - i)
End If
Next i
End Function
Public Function BinaryHeader(filename As String) As String
 
On Error Resume Next
 
Dim ByteArray(4) As Byte
FIO% = FreeFile
Open filename For Binary Access Read As FIO%
n& = LOF(FIO%): If n& < 256 Then Close FIO%: Return 'ny
 
Dim X As Byte
'''''start check startposition for header''''''''''''
'''''if start position <>1 then id3v2 tag exists'''''
   For i = 1 To 5000            'check up to 5000 bytes for the header
    Get #FIO%, i, X
    If X = 255 Then             'header always start with 255 followed by 250 or 251
        Get #FIO%, i + 1, X
        If X > 249 And X < 252 Then
            HeadStart = i       'set header start position
            Exit For
        End If
    End If
Next i
'''end check start position for header'''''''''''''
 
'''start extract the first 4 bytes (32 bits) to an array
   For z = 1 To 4 '
      Get #1, HeadStart + z - 1, ByteArray(z)
    Next z
 
Close FIO%
'start convert 4*1 byte array to 4*8 bits'''''
 BinaryHeader = ""
   For z = 1 To 4
    For i = 7 To 0 Step -1
      If Int(ByteArray(z) / (2 ^ i)) = 1 Then
        BinaryHeader = BinaryHeader & "1"
        ByteArray(z) = ByteArray(z) - (2 ^ i)
      Else
            If BinaryHeader <> "" Then
                BinaryHeader = BinaryHeader & "0"
            End If
      End If
  Next
Next z
'stop convert 4*1 byte array to 4*8 bits
End Function
Public Function ReadMP3(filename As String)
 
bin = BinaryHeader(filename)                     'extract all 32 bits
 
Version = Array(25, 0, 2, 1)                        'Mpegversion table
MpegVersion = Version(BinToDec(Mid(bin, 12, 2)))    'get mpegversion from table
Layer = Array(0, 3, 2, 1)                           'layer table
MpegLayer = Layer(BinToDec(Mid(bin, 14, 2)))        'get layer from table
 
Dim LayerVersion As String
LayerVersion = MpegVersion & MpegLayer 'combine version and layer to string
 
Select Case Val(LayerVersion)                        'look for the right bitrate table
    Case 11                                              'Version 1, Layer 1
    Brate = Array(0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448)
    Case 12                                              'V1 L1
    Brate = Array(0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384)
    Case 13                                               'V1 L3
    Brate = Array(0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320)
    Case 21 Or 251                                         'V2 L1 and 'V2.5 L1
    Brate = Array(0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256)
    Case 22 Or 252 Or 23 Or 253                            ''V2 L2 and 'V2.5 L2 etc...
    Brate = Array(0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160)
Case Else                                               'if variable bitrate
    Bitrate = 1                                             'e.g. for Variable bitrate
    Exit Function
End Select
 
Bitrate = Brate(BinToDec(Mid(bin, 17, 4)))
 
End Function
Public Function Return_tps_min(chemin As String)
 Call ReadMP3(chemin)
    
 
     If Bitrate = 1 Then Bitrate = 128
     taille = FileLen(chemin)
     Dim durée As Integer
     durée = CInt(((taille) / (Bitrate)) * 0.008)
     Dim min As Integer
     Dim sec As Integer
            
    min = Int(durée / 60)
    sec = CInt(((CInt((durée / 60) * 100)) - (min * 100)) * 0.6)
    Return_tps_min = min & " : " & Format(sec, "00") & " Min"
End Function
 
Je n'ai pas encore regardé comment il fonctionnait mais ce qui est sûr c'est que ca fonctionne à merveille.

Merci d'avoir essayé de m'aider
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto

Dernière modification par Marc Lussac ; 10/01/2007 à 01h41.
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/01/2007, 00h05   #14 (permalink)
Membre Expert
 
Avatar de sovo
 
Date d'inscription: mars 2004
Localisation: Yaounde
Messages: 1 232
Envoyer un message via MSN à sovo Envoyer un message via Yahoo à sovo Envoyer un message via Skype™ à sovo
Par défaut

Oui pourquoi pas ?? tu peux passer par le controle Windows Media Player, je ne suis pas sur mais je crois que ca devrais marche. Je n'ai pas VB avec moi je vais me pencher sur la question tout a l'heure.
__________________
"Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

En cas de Question resolu, n'oubliez pas

Ne ditent plus que vous n'avez pas MSDN. Vous pouvez desormais le telecharger gratuitement sur le site: MSDN
sovo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/01/2007, 00h28   #15 (permalink)
Membre émérite
 
Avatar de avigeilpro
 
Date d'inscription: janvier 2004
Localisation: Limousin
Âge: 23
Messages: 827
Par défaut

bon je me suis réjouit un peu vite.
J'ai essayé et sur 15 fichier il y en a 4 qui sont faux mais c'est déjà pas mal

Je continu de chercher.
__________________
La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
Règles|FAQ|Tuto
avigeilpro est déconnecté   Envoyer un message privé Réponse avec citation
NEWS VISUAL BASIC 6FAQs VBTUTORIELS VBOUTILS VBSOURCES VBLIVRES VBWIKI

Réponse

Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h03.


Vos questions techniques : forum d'entraide Visual Basic 6 - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2009 www.developpez.com - Legal informations.