Problèmes fichiers audio

mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 6 nov. 2007 à 14:00
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 7 nov. 2007 à 07:46
Bonjour,

Je veux faire un petit jeu en vb6, avec une musique de fond et des soundfx en même temps.

J'utilise l'API mciSendString pour le son, qui permet, contrairement à l'API playsound, de jouer plusieurs fichiers audio en même temps.

Seulement, j'ai deux problèmes:
      Le premier, c'est que je ne trouve pas de commande pour lancer les fichiers en boucle.
(Je pourrais faire celà avec un timer par exemple, mais je trouve ça un peu barbare, alors peut être y a-t-il une fonction pour le faire?)
      Mon deuxième problème est que j'arrive à lire des fichiers .wav, mais je n'arrive pas à lire les fichiers .mp3 et .mid, alors que plusieurs sources sur le site montrent que celà est possible, toujours en utilisant mciSendString.
J'utilise exactement le même code que ces sources, et pourtant, aucun son ne sort.
Quelqu'un saurait comment faire pour faire marcher ces deux formats avec mciSendString?

J'utilise:

Dim ret AsLong, mp3file AsString

PrivateDeclareFunction mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand AsString, ByVal lpstrReturnString AsString, ByVal uReturnLength AsLong, ByVal hwndCallback AsLong) AsLong

PrivateSub Form_Load()
mp3file = "c:\xxx.mp3"
ret = mciSendString("OPEN " & mp3file & " Alias Sonido", 0, 0, 0) 'ouvre
ret = mciSendString("Play sonido", 0, 0, 0) 'Joue
EndSub
PrivateSub Form_QueryUnload(Cancel AsInteger, UnloadMode AsInteger) ret mciSendString("Stop sonido", 0, 0, 0) 'Pause (si on fait lecture ca reprendra la) ret mciSendString("Close sonido", 0, 0, 0) 'Arret (si on fait lecture ca recommence au debut)EndSub

Merci infiniment.

11 réponses

mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 14:19
Apparamment, pour les mp3, ça ne veut pas lire dans les sous-dossiers... quelqu'un aurait une idée pour ça? je ne vais pas tout mettre dans C:\     :/
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 14:25
Ah, ça j'ai trouvé, il faut mettre:

mp3file = App.path  & "\xxx.mp3"
ret = mciSendString("OPEN " & mp3file & "<gras>""
Alias Sonido", 0, 0, 0) 'ouvre

Comme ça, les mp3 marchent.

Reste le problème des Midi, et comment faire tourner la musique en boucle.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 14:40
Pour le fichier .mid, j'ai mis exactement ça:

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
Public FichierMid As Variant
Public Alias As String '----- identifiant du son en cours




Sub Play_Mid()
  ' indiquer ci-dessous le nom du fichier Midi à jouer
  ' ce fichier doit se trouver dans le meme repertoire que ce classeur
  FichierMid = "Shadoogie.mid"
  Alias = Left$(FichierMid, Len(FichierMid) - 4)
    '--------play midi
  r% = mciSendString("OPEN " + FichierMid + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
  r% = mciSendString("PLAY " + Alias + " FROM 0", 0&, 0, 0)
  r% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
End Sub


Sub Stop_Mid()
  On Error GoTo Finstop
  r% = mciSendString("OPEN " + FichierMid + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
  r% = mciSendString&("STOP " + Alias, 0&, 0, 0)
  r% = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)
Finstop:
End Sub


Private Sub Command1_Click()
Play_Mid
End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Stop_Mid
End Sub

et le fichier shadoogie.mid est dans le même dossier que mon programme...
Pourtant, ça ne marche pas.
0
medelidrissi Messages postés 180 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 26 novembre 2007 2
6 nov. 2007 à 14:41
Bonjour,

Pour le relecteur automatique :

ret = mciSendString("Play sonido repeat", 0, 0, 0) 'Joue

et pour toute autre information : http://msdn2.microsoft.com/en-us/library/ms712842.aspx
Bonne programmation.

Cordialement medelidrissi

<hr />En Informatique, rien n'est impossible. Mais, ce n'est pas toujours évident.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 15:10
Merci pour la commande repeat medelidrissi!
Ca marche impec pour les mp3, mais j'ai toujours deux problèmes: je n'arrive pas à faire marcher repeat avec les .wav, et les .mid ne fonctionnent pas du tout!
Je continue de chercher.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 15:34
Je m'explique: pour ouvrir le fichier mp3, je mets:



    Dim sFichier As String
    Dim r As Long
    sFichier = App.Path & "\FFVII.mp3"
   
    r = mciSendString("OPEN """ & sFichier & """ ALIAS FFVII" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY FFVII FROM 0", 0&, 0, 0)
    r = mciSendString("CLOSE ANIMATION", 0&, 0, 0)

Pour lancer le repeat, j'intercale repeat entre FFVII et FROM, et tout marche bien.

Pour le fichier wav, j'ai:

    Dim sFichier As String
    Dim r As Long
    sFichier = App.Path & "\Metrocross.wav"
   
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV1" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY WAV1 FROM 0", 0&, 0, 0)
    r = mciSendString("CLOSE ANIMATION", 0&, 0, 0)

Ca lance bien le programme, tout est ok, mais si j'essaie d'intercaler repeat entre WAV1 et FROM, la musique ne se lance pas.

Pour le mid, j'ai:

    Dim sFichier As String
    Dim r As Long
    sFichier = App.Path & "\Descent.mid"
   
    r = mciSendString("OPEN """ & sFichier & """ TYPE SEQUENCER ALIAS MID1" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY MID1 FROM 0", 0&, 0, 0)
    r = mciSendString("CLOSE ANIMATION", 0&, 0, 0)

Et la, ça lance carrément rien, je n'ai aucun son qui sort.
J'ai bien vérifié les adresses des fichiers audio, et j'ai ouvert les fichiers en dehors du programme, tout fonctionne.
Sais tu d'où vient le problème?
0
medelidrissi Messages postés 180 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 26 novembre 2007 2
6 nov. 2007 à 15:52
Re-Salut,

Pour les midis, chez moi ca marche sans prob :
ret = mciSendString&("CLOSE SonMidi", 0&, 0, 0)
ret = mciSendString("OPEN ""C:\WINDOWS\Media\flourish.mid"" TYPE SEQUENCER Alias SonMidi", 0, 0, 0) 'ouvre
ret = mciSendString("Play SonMidi", 0&, 0, 0) 'Joue

En ce qui concerne le repeat d'une sequence wav, c'est vrai ca ne marche pas !!!!!!.

Bonne programmation.

Cordialement medelidrissi

<hr />En Informatique, rien n'est impossible. Mais, ce n'est pas toujours évident.
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 16:12
Re,

Je viens de copier coller ton code dans mon pgme:

Private Sub Command5_Click()
Dim ret As Long
ret = mciSendString&("CLOSE SonMidi", 0&, 0, 0)
ret = mciSendString("OPEN ""C:\WINDOWS\Media\flourish.mid"" TYPE SEQUENCER Alias SonMidi", 0, 0, 0) 'ouvre
ret = mciSendString("Play SonMidi", 0&, 0, 0) 'Joue
End Sub

J'ai bien vérifié que le midi était là, tout ok, à part que je n'ai toujours aucun son :'(
Et pour les fichiers wav, c'est bizarre que le repeat marche pas non plus :'(
Il doit y avoir quelque chose à configurer pour que tout ça marche, si quelqu'un sait, je suis preneur :'(

Merci beaucoup, et merci encore une fois medelidrissi
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 18:25
Ca yest, j'ai trouvé pour le mid, j'avais un problème de config (niveau son, et niveau vb6)
Par contre, je trouve toujours pas comment faire marcher la fonction repeat pour les .wav et les .mid.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 nov. 2007 à 04:51
salut
cette source devrait t'aider

par contre, plus trop sûr pour le repeat....

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
7 nov. 2007 à 07:46
Salut,

Très intéressant ton code, merci !
J'ai toujours mo problème de repeat, mais à la limite, je mets un timer, comme pour ta barre de pourcentage, c'est pas un problème.
Par contre, si ton code est beaucoup plus complexe que le mien en ce qui concerne la lecture des fichiers, j'ai l'impression que les API que tu utilises sont bien plus pratiques que mciSendString si on veut faire un lecteur multimedia (ce qui sera pour moi surement un autre projet).
Merci donc pour ta source, cela me sera très utile!
Je ne mets pas encore de réponse acceptée à tous les deux, en attendant de voir si quelqu'un connait la réponse au problème du repeat pour les .wav et les .mid, mais ça ne saurait tarder ;-)
0
Rejoignez-nous