begin process at 2012 02 17 02:19:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimedia

 > DURÉE D'UN FICHIER AUDIO ET VIDÉO GRÂCE À L'API MCISENDSTRING

DURÉE D'UN FICHIER AUDIO ET VIDÉO GRÂCE À L'API MCISENDSTRING


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Multimedia Classé sous :duree, video, mcisendstring, audio, temps Niveau :Débutant Date de création :18/03/2006 Date de mise à jour :18/03/2006 19:43:28 Vu :7 963

Auteur : clementio

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

Voilà un morceau de code pour récupérer la durée de fichiers vidéos (avi, mpg, wmv, asf...) et audios (mp3, wav...).
Avec à l'API mciSendString, on ouvre le fichier, on récupère sa durée et on le ferme.

Il existe aussi l'API AVIFileInfo mais elle met trop de temps à renvoyer cette valeur d'après mes tests.
Essayez de tester avec vos fichiers et dites-moi ce que ça donne. Dites-moi aussi si avez d'autres mèthodes pour effectuer cette opération rapidement et avec peu de code.

Source

  • Option Explicit
  • 'API Windows Multmedia à laquelle on envoit des commandes
  • Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
  • Private Sub Form_Load()
  • Dim sFichierTest As String
  • Dim sDureeTrouvee As String
  • 'Pour tester, indiquez un nom de fichier multimédia (vidéo et son)
  • sFichierTest = "D:\Documents\Mes Vidéos\MOV029.MOD"
  • 'on récupère la durée du fichier
  • sDureeTrouvee = DureeFichier(sFichierTest)
  • 'on affiche le tout
  • MsgBox "Fichier :" & vbTab & sFichierTest & vbCrLf & _
  • "Durée :" & vbTab & sDureeTrouvee
  • End Sub
  • Private Function DureeFichier(sFichier As String) As String
  • 'On crée un buffer de 128
  • Dim sRetString As String * 128
  • On Error Resume Next
  • 'on ferme fichier au cas où il serait ouvert
  • mciSendString "close fichier", 0, 0, 0
  • 'on ouvre le fichier passé en paramètre
  • mciSendString "open """ & sFichier & """ type MPEGVideo alias fichier", 0, 0, 0
  • 'on règle le format temporel sur milliseconde
  • mciSendString "set fichier time format ms", 0, 0, 0
  • 'on récupère la durée du fichier dans le buffer
  • mciSendString "status fichier length", sRetString, 128, 0
  • 'on passe cette durée à la fonction FormatTemps et on l'affecte à la valeur de notre fonction
  • DureeFichier = FormatTemps(CDbl(Replace(sRetString, Chr(0), "") / 1000))
  • 'et enfin on ferme fichier
  • mciSendString "close fichier", 0, 0, 0
  • End Function
  • 'Fonction qui renvoie la durée formatée ainsi 00:00:00
  • Private Function FormatTemps(dTemps As Double) As String
  • Dim lHeure As Long
  • Dim lMinute As Long
  • Dim lSeconde As Long
  • Dim lTemps As Long
  • lTemps = Round(dTemps)
  • lHeure = Int(lTemps / 3600)
  • lMinute = Int((lTemps - 3600 * lHeure) / 60)
  • lSeconde = lTemps - 3600 * lHeure - 60 * lMinute
  • FormatTemps = Format(lHeure, "00") & ":" & Format(lMinute, "00") & ":" & Format(lSeconde, "00")
  • End Function
Option Explicit

'API Windows Multmedia à laquelle on envoit des commandes
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Sub Form_Load()
   
   Dim sFichierTest As String
   Dim sDureeTrouvee As String
   
   'Pour tester, indiquez un nom de fichier multimédia (vidéo et son)
   sFichierTest = "D:\Documents\Mes Vidéos\MOV029.MOD"
   'on récupère la durée du fichier
   sDureeTrouvee = DureeFichier(sFichierTest)
   'on affiche le tout
   MsgBox "Fichier :" & vbTab & sFichierTest & vbCrLf & _
          "Durée :" & vbTab & sDureeTrouvee
   
End Sub

Private Function DureeFichier(sFichier As String) As String
   
   'On crée un buffer de 128
   Dim sRetString As String * 128
   
   On Error Resume Next
   
   'on ferme fichier au cas où il serait ouvert
   mciSendString "close fichier", 0, 0, 0
   'on ouvre le fichier passé en paramètre
   mciSendString "open """ & sFichier & """ type MPEGVideo alias fichier", 0, 0, 0
   'on règle le format temporel sur milliseconde
   mciSendString "set fichier time format ms", 0, 0, 0
   'on récupère la durée du fichier dans le buffer
   mciSendString "status fichier length", sRetString, 128, 0
   'on passe cette durée à la fonction FormatTemps et on l'affecte à la valeur de notre fonction
   DureeFichier = FormatTemps(CDbl(Replace(sRetString, Chr(0), "") / 1000))
   'et enfin on ferme fichier
   mciSendString "close fichier", 0, 0, 0

End Function

'Fonction qui renvoie la durée formatée ainsi 00:00:00
Private Function FormatTemps(dTemps As Double) As String

   Dim lHeure As Long
   Dim lMinute As Long
   Dim lSeconde As Long
   Dim lTemps As Long
   
   lTemps = Round(dTemps)
   lHeure = Int(lTemps / 3600)
   lMinute = Int((lTemps - 3600 * lHeure) / 60)
   lSeconde = lTemps - 3600 * lHeure - 60 * lMinute
   FormatTemps = Format(lHeure, "00") & ":" & Format(lMinute, "00") & ":" & Format(lSeconde, "00")

End Function


 Conclusion

Pour tester, ouvrez un nouveau projet et collez le code dans Form1.

Si vous voulez une source complète utilisant mciSendString, j'ai fait un lecteur complet ici:

http://www.vbfrance.com/codes/CLM-DIVX-PLA YER-LECTEUR-VIDEOS-DIVX-MPG-MPEG_18199.aspx


 Historique

18 mars 2006 18:38:59 :
faute de frappe
18 mars 2006 19:43:28 :
ajout du lien vers mon autre source

 Sources du même auteur

Source avec Zip Source avec une capture DICO ACCORDS GUITARE
Source avec Zip Source avec une capture CLM'S GUITARE : DICO ACCORDS + ACCORDAGE
Source avec Zip Source avec une capture CLM'S EMERGENCY : REFROIDISSEUR DE CPU
Source avec Zip Source avec une capture CLM'S MESSENGER : AJOUT DE FONCTIONS À WINDOWS LIVE MESSENGE...
Source avec Zip Source avec une capture CLMOOGLE : MOTEUR DE RECHERCHE INTUITIF

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MON LECTEUR MP3 par kentharold
Source avec Zip Source avec une capture LECTEUR MULTIMÉDIA par lartiguef
Source avec Zip Source avec une capture RENOMMER SOUS-TITRES par memejoueur
Source .NET (Dotnet) "PARLEUR" EN VB 2010 par clementgeek41
Source avec Zip Source avec une capture CHANGER LE VOLUME SYSTÉME SANS ACTIVEX par kayoub5

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) TIMELINE - AVEC EVENTS par madaal
Source avec Zip Source avec une capture Source .NET (Dotnet) ENIGMA WEB TV - DREAMBOX / ITGATE STREAMING TOOL par sattaz
Source avec Zip Source avec une capture DREAMBOX MEDIA STREAMER (SERVER) par sattaz
Source avec Zip Source avec une capture CREER FILM AVI VIDEO ET AUDIO STREAM par hackademius
Source avec Zip LECTEUR AVI (AUDIO VIDEO INTERLEAVED) par NeoMorph

Commentaires et avis

Commentaire de Cacophrene le 18/03/2006 19:36:46

Salut !

J'ai testé ton code sur une dizaine de fichiers .mp3 volumineux (des symphonies), et je dois reconnaître que l'affichage du temps est très rapide. Un seul truc amusant : pour l'un des fichiers, l'API renvoie 50:08, et le lecteur Windows Media Player 50:07. Mais bon, je n'ai trouvé ça qu'une seule fois, et puis bon on n'a rien à faire d'une seconde :D. Ce code est super. Mais juste une question : pour les deux APIs, tu as comparé les vitesses avec une API du type GetThickCount, ou bien la différence est-elle "sensiblement" visible (je veux dire facilement repérable par un être humain) ?

Cordialement,
Cacophrène

Commentaire de clementio le 18/03/2006 19:40:32 administrateur CS

En fait, je me suis plus concentré sur des vidéos volumineuses et chez moi le temps de réponse est de 3 à 4 secondes avec AVIFileInfo. Alors que là c'est quasi instantané.

Par contre j'ai remarqué que sur des mp3 encodés en VBR, le résultat est faux. Testez et dites-moi...

Commentaire de clementio le 18/03/2006 19:48:31 administrateur CS

Cacophrene --> Pour ta seconde qui diffère c'est que j'utilise la fonction round de VB qui arrondi à l'entier supèrieur ou inférieur. Windows Media Player doit arrondir à l'entier inférieur tout simplement...

Commentaire de Beotien le 30/05/2006 22:36:02

sauf erreur de ma part le resultat est seulement valable pour des fichier encodés en CBR je ne crois pas que cela fonctionne en VBR

Commentaire de clementio le 31/05/2006 00:27:51 administrateur CS

Oui, c'est ce que j'ai dit plus haut...

Commentaire de christiansnif le 11/01/2008 11:14:54

Je débute en VB2005
J'ai copier ce code mais ne parviens pas à le faire fonctionner
A la création du buffer de 128 une erreur "fin d'instruction attendu" alors j'ai mis "Dim Variable as string=space(128)"
A l'utilisation le programme plante à l'appel de mciSendString erreur "mciSendString à déséquilibré la pile"
J'ai l'impression d'avoir tout essayé, mais sans doute pas la bonne manoeuvre, Si tu peux m'aider. D'avance je te remercie
Snif

Commentaire de Le Pivert le 10/06/2009 13:54:58 10/10

Merci à Clementio pour ce code qui m'est bien utile.
Pour répondre à Christiansnif, j'ai eu besoin de ce code en VB2005, voici les lignes de code a changer:

Option Explicit On, a remplacer au bébut

Dim sRetString As String = Space(128) à remplacer dans la Function DureeFichier

lTemps = Math.Round(dTemps) à remplacer dans la Function FormatTemps
C'est tout et cela fonctionne.
@+ Le Pivert

Commentaire de Querieux le 21/02/2011 18:11:17

Bonjour,
J'ai testé avec un fichier Wav et il ni y a pas de retour de la durée..!
Il faut certainement un autre paramètre que:
type MPEGVideo alias fichier

????

Commentaire de Querieux le 21/02/2011 18:32:54

Rien non plus avec type WAWAUDIO!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

infos sur le cd audio (temps + nombre de pistes) [ par db2p ] hello tousje suis en train de me faire un chti programme qui va me permettre de gerer ma collection de cd. ce que je voudrais c'est une fonction qui q et de 2!!! MciSendString avi [ par pcpunch ] Je repost ma question vu que la précedente n'est pas passé decidement ca deconne ce soir!!!Je test avec MciSendString si un fichier avi est lisible po AVI (Audio/Video) [ par hackademius ] salut , je vois tout dabord que tout le monde s'en fou des questions qu'on pose alors je reitaire ma question(sous une autre forme ) puisque persone n AVI(Audio/Video) [ par hackademius ] j'ai apris que AVI -> Audio / Video) - j'ai un fichier video AVI dans lequel j'ai un stream video- j'ai un fichier audio WAV dans lequel j'ai un st VB, lancer deux video simultanement !!!!! [ par m_heff2002 ] Bonjour Je voudrais savoir s'il y a moyen avec Visual Basic d'avoir deux video en memes temps. j'utilise  #If Win32 Then    Private Temps complet d'un fichier audio avec MMcontrol [ par didlette62 ] Bonjour tout le monde !!Voila j'ai un soucis, j'aimerais faire en sorte que l'utilisateur de mon lecteur puisse avancer dans la musique, mais je ne sa Renommer des fichiers audio video [ par ricomiracle ] J'aimerais pouvoir renommer des fichiers video .avi et photo .jpg Je suppose que je dois d'abord les ouvrir mais comment faire? Dim fso As New Script Lecture audio et video [ par shadow1779 ] Bonjour,je cherche comment faire en VB.NET, une lecture d'un mp3 ou autre fichier musicaux et la lecture de fichier vidéo comme les avi ou autre, Videochat & visioconference & streaming Audio/Video [ par wilgrass1 ] BonjourJe viens de déposer une source de visioconference sur ce site http://www.vbfrance.com/code.aspx?ID=34074 en y évoquant quelques Lire et enregistrer une video en même temps est-ce possible? [ par Egalon ] Bonjour les amis,ca fait un long moment que je ne suis pas venu vous voir ^^.Je vous expose mon problème mais je doute qu'il existe une réelle solutio


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,758 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales