OVH Cloud OVH Cloud

MciSendString (STATUS)

2 réponses
Avatar
Pascal
bonsoir,

je m'emmele un peu les pinceaux
1)
je cherche à récupérer des infos sur le fichier musique joué
j'essaie d'afficher, entre-autre, la durée du morceau joué comme ceci :
Label5.Caption = mciSendString("status MP3_device timeformat length ",
vbNullString, 0&, 0&)
label5 à le format hh:mm;ss
visiblement cela ne fonctionne pas la réponse est toujours 290 !!

2) toujours avec mciSendString j'ai une listBox remplie de morceau prêt à
jouer
je souhaiterai lancer la totalité de la liste au player, comment dois-je m'y
prendre?
Dans une boucle de 1 à listcount-1 ? surement pas propre!

la commande ci-dessous ne permet que de lire le titre choisis
Tmp = mciSendString("play Mp3_Device", vbNullString, 0&, 0&)
et ne sais comment on détecte la fin du morceau joué

toutes idées bienvenue
Merci

Pascal

2 réponses

Avatar
Picalausa François
Hello,

Tu peux essayer mciSendCommand au lieu de mciSendString qui a l'avantage de
ne pas présenter d'ambiguité quand à la syntaxe.
timef format et length sont deux informations d'état différentes que tu peux
récupérer. Pour définir le temps, il faudra plutôt procéder comme ceci (non
testé):
mciSendString("set device time format hms wait")

Ensuite, il ne faut pas confondre la valeur de retour avec la valeur
retournée:
MCIERROR mciSendString(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,

Ce qui donnerait le code suivant (non testé)
Dim strBuffer As String
strBuffer = string$(MAX, vbnullchar)
if mciSendString("status MP3_device timeformat length ", strBuffer , 0&, 0&)
= 0 Then
Label5.Caption = left$(strBuffer,instr(1,strBuffer,vbnullchar)
end if

Il y a aussi directshow qui AMHA propose en cadre de développement plus
convivial...

Sinon, je ne vois pas pourquoi l'ajout de fichiers dans une boucle serait
inadéquat... peux-tu nous en dire plus?

Pour détecter la fin du morceau jouer, tu peux le faire soit de manière
synchrone avec mciSendString("play ... wait")soit de manière asynchrone en
utilisant le flag notify : mciSendString("play ... notify", , , hWnd)

Cette deuxième méthode nécessite une fenêtre pour récupérer le message
MM_MCINOTIFY et donc l'utilisation de sousclassement... Avec une message
only window (Win2k,Xp,2k3), il est possible d'éviter le sous-classement, et
ça ne plante pas trop ce qui est pratique en débuggage...

--
Picalausa François

"Pascal" a écrit dans le message de news:
e$
bonsoir,

je m'emmele un peu les pinceaux
1)
je cherche à récupérer des infos sur le fichier musique joué
j'essaie d'afficher, entre-autre, la durée du morceau joué comme ceci :
Label5.Caption = mciSendString("status MP3_device timeformat length ",
vbNullString, 0&, 0&)
label5 à le format hh:mm;ss
visiblement cela ne fonctionne pas la réponse est toujours 290 !!

2) toujours avec mciSendString j'ai une listBox remplie de morceau prêt à
jouer
je souhaiterai lancer la totalité de la liste au player, comment dois-je
m'y
prendre?
Dans une boucle de 1 à listcount-1 ? surement pas propre!

la commande ci-dessous ne permet que de lire le titre choisis
Tmp = mciSendString("play Mp3_Device", vbNullString, 0&, 0&)
et ne sais comment on détecte la fin du morceau joué

toutes idées bienvenue
Merci

Pascal





Avatar
Pascal
Bonsoir,
merci pour la réponse détaillée, je m'empresse d'essayer cela

===================== Sinon, je ne vois pas pourquoi l'ajout de fichiers dans une boucle serait
inadéquat... peux-tu nous en dire plus?
===================== rien de spécial en fait, ne connait pas le fonctionnement du mcisendString
et pensais que le fait de boucler de 1 à 10 aurait déclencher le dernier
seulement
dans la boucle l'appel à cette commande ne suspend pas la boucle non?

pas simple cette commande

merci pour l'aide

"Picalausa François" a écrit dans le message de news:

Hello,

Tu peux essayer mciSendCommand au lieu de mciSendString qui a l'avantage


de
ne pas présenter d'ambiguité quand à la syntaxe.
timef format et length sont deux informations d'état différentes que tu


peux
récupérer. Pour définir le temps, il faudra plutôt procéder comme ceci


(non
testé):
mciSendString("set device time format hms wait")

Ensuite, il ne faut pas confondre la valeur de retour avec la valeur
retournée:
MCIERROR mciSendString(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,

Ce qui donnerait le code suivant (non testé)
Dim strBuffer As String
strBuffer = string$(MAX, vbnullchar)
if mciSendString("status MP3_device timeformat length ", strBuffer , 0&,


0&)
= 0 Then
Label5.Caption = left$(strBuffer,instr(1,strBuffer,vbnullchar)
end if

Il y a aussi directshow qui AMHA propose en cadre de développement plus
convivial...

Sinon, je ne vois pas pourquoi l'ajout de fichiers dans une boucle serait
inadéquat... peux-tu nous en dire plus?

Pour détecter la fin du morceau jouer, tu peux le faire soit de manière
synchrone avec mciSendString("play ... wait")soit de manière asynchrone en
utilisant le flag notify : mciSendString("play ... notify", , , hWnd)

Cette deuxième méthode nécessite une fenêtre pour récupérer le message
MM_MCINOTIFY et donc l'utilisation de sousclassement... Avec une message
only window (Win2k,Xp,2k3), il est possible d'éviter le sous-classement,


et
ça ne plante pas trop ce qui est pratique en débuggage...

--
Picalausa François

"Pascal" a écrit dans le message de news:
e$
> bonsoir,
>
> je m'emmele un peu les pinceaux
> 1)
> je cherche à récupérer des infos sur le fichier musique joué
> j'essaie d'afficher, entre-autre, la durée du morceau joué comme ceci :
> Label5.Caption = mciSendString("status MP3_device timeformat length ",
> vbNullString, 0&, 0&)
> label5 à le format hh:mm;ss
> visiblement cela ne fonctionne pas la réponse est toujours 290 !!
>
> 2) toujours avec mciSendString j'ai une listBox remplie de morceau prêt


à
> jouer
> je souhaiterai lancer la totalité de la liste au player, comment dois-je
> m'y
> prendre?
> Dans une boucle de 1 à listcount-1 ? surement pas propre!
>
> la commande ci-dessous ne permet que de lire le titre choisis
> Tmp = mciSendString("play Mp3_Device", vbNullString, 0&, 0&)
> et ne sais comment on détecte la fin du morceau joué
>
> toutes idées bienvenue
> Merci
>
> Pascal
>
>
>