begin process at 2008 07 18 20:04:36
1 212 565 membres
418 nouveaux aujourd'hui
14 164 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DIRECTX TUTO 7 : DIRECTSHOW, JOUER DES MP3/OGG


Information sur la source

Catégorie :Direct X Classé sous : directx, mp3, player, lecteur, musique Niveau : Débutant Date de création : 05/07/2004 Date de mise à jour : 31/05/2007 01:07:51 Vu / téléchargé: 7 089 / 547

Note :
9,17 / 10 - par 6 personnes
9,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

Description

****** JE CONSIDÈRE QUE VOUS AVEZ LES CONNAISSANCES PRÉSENTES DANS MES PRÉCÉDENTS TUTORIAUX ******

Chose promis chose due, je vous avez promis un tuto sur la lecture du mp3, ceci est fait ...

D'abord qu'est-ce que DirectShow, on pourrait penser que DirectShow et comme pour DirectDraw dans la librairie DirectX, mais en faîte DirectShow est dans Active Movie, seulement si on cherche un peu plus Active Movie se sert de DirectX.

Donc pour nous ce qui changera sera qu'il faut mettre dans les références du projet :Active Movie control type library

Voilà maintenant il ne reste plus qu'à coder pour qu'on puisse lire les MP3...

Source

  • Option Explicit
  • Public DSAudio As IBasicAudio 'IBasicAudio permet d'avoir accès à la création de filtre
  • Public DSevent As IMediaEvent 'IMediaEvent permet d'accéder aux événements sur un filtre
  • Public DScontrol As IMediaControl 'IMediaControl permet d'avoir accès au flux de donner passant par un filtre
  • Public IPosition As IMediaPosition 'IMediaPosition permet d'accéder à la position d'un fichier lu par un filtre
  • 'Chargement d'un fichier en memoire
  • Public Function LoadMp3Ogg(ByRef path As String, _
  • ByRef DSAudio As IBasicAudio, ByRef SEvent As IMediaEvent, _
  • ByRef Control As IMediaControl, ByRef Position As IMediaPosition)
  • If path <> "" Then
  • Set Control = New FilgraphManager ' Initialisation de DirectShow, Filgraphmanager étant un contrôle qui permet d'avoir accède au filtre présent sur un PC
  • Control.RenderFile path ' La méthode RenderFile cré un filtre qui permet de rendre un fichier.
  • Set DSAudio = Control ' On donne l'accès au donné des filtres créés par DirectShowAudio à DScontrol
  • Set SEvent = Control ' On donne accès à DScontrol aux événements des filtres
  • Set Position = Control ' De même pour la position
  • End If
  • End Function
  • 'Joue le fichier
  • Public Function PlayMp3Ogg(ByRef Control As IMediaControl, Position As IMediaPosition)
  • Control.Stop ' Arret de la lecture
  • Position.CurrentPosition = 0 ' Remise à 0
  • Control.Run ' Joue le fichier
  • End Function
  • 'Stop entierement la lecture
  • Public Function StopMp3Ogg(ByRef Control As IMediaControl, Position As IMediaPosition)
  • Control.Stop ' Arret de la lecture
  • Position.CurrentPosition = 0 ' Remise à 0
  • End Function
  • 'Met sur pause
  • Public Function PauseMp3Ogg(ByRef Control As IMediaControl)
  • Control.Pause ' Mise en pause
  • End Function
  • 'Reprise de lecture apres la pause ou de la definission de position
  • Public Function ReStartMp3Ogg(ByRef Control As IMediaControl)
  • Control.Run 'Lancement apres une pause ou une definition de position
  • End Function
  • 'Definition du volume de 0 à 10
  • Public Function SetVolume(ByRef Audio As IBasicAudio, VolumeValue As Integer)
  • Audio.Volume = VolumeValue * -500 ' On multiplie par -500 car le volume va de -10000 à 0
  • End Function
  • 'Définition de la balance, gauche-droite, de -10 à 10
  • Public Function SetBalance(ByRef Audio As IBasicAudio, BalanceValue As Integer)
  • Audio.Balance = BalanceValue * 1000 ' On multiplie par 1000 car la balance va de -10000 à 10000
  • End Function
  • 'Définition de la vitesse de lecture de 1 à 20, 10 est la vitesse normal
  • Public Function SetPlayRate(ByRef Position As IMediaPosition, PlayRate As Integer)
  • Position.Rate = PlayRate * 0.1 ' Le PlayRate vas de 0.1 à 2, 1 étant la vitesse normal
  • End Function
  • 'Définition de la position de départ de 0 à 100%
  • Public Function SetStartPosition(Control As IMediaControl, Position As IMediaPosition, _
  • PositionValue As Integer)
  • Control.Stop ' Arret de la lecture
  • Position.CurrentPosition = (PositionValue * Position.Duration) / 100 ' Calcul pour mettre la position de lecture par rapport au pourcentage
  • End Function
  • 'Suppression du fichier en memoire
  • Public Function DeleteMp3Ogg(ByRef DSAudio As IBasicAudio, ByRef SEvent As IMediaEvent, _
  • ByRef Control As IMediaControl, ByRef Position As IMediaPosition)
  • Control.Stop ' Arrête la lecture
  • Set DSAudio = Nothing ' Vide la mémoire
  • Set Control = Nothing ' Vide la mémoire
  • Set SEvent = Nothing ' Vide la mémoire
  • Set Position = Nothing ' Vide la mémoire
  • End Function
Option Explicit

Public DSAudio As IBasicAudio         'IBasicAudio permet d'avoir accès à la création de filtre
Public DSevent As IMediaEvent        'IMediaEvent permet d'accéder aux événements sur un filtre
Public DScontrol As IMediaControl    'IMediaControl permet d'avoir accès au flux de donner passant par un filtre
Public IPosition As IMediaPosition  'IMediaPosition permet d'accéder à la position d'un fichier lu par un filtre

'Chargement d'un fichier en memoire
Public Function LoadMp3Ogg(ByRef path As String, _
       ByRef DSAudio As IBasicAudio, ByRef SEvent As IMediaEvent, _
       ByRef Control As IMediaControl, ByRef Position As IMediaPosition)
        
If path <> "" Then
    Set Control = New FilgraphManager             ' Initialisation de DirectShow, Filgraphmanager étant un contrôle qui permet d'avoir accède au filtre présent sur un PC
    Control.RenderFile path                       ' La méthode RenderFile cré un filtre qui permet de rendre un fichier.

    Set DSAudio = Control                         ' On donne l'accès au donné des filtres créés par DirectShowAudio à DScontrol

    Set SEvent = Control                          ' On donne accès à DScontrol aux événements des filtres
    Set Position = Control                        ' De même pour la position
End If

End Function

'Joue le fichier
Public Function PlayMp3Ogg(ByRef Control As IMediaControl, Position As IMediaPosition)
    
    Control.Stop                                    ' Arret de la lecture
    Position.CurrentPosition = 0                    ' Remise à 0
    Control.Run                                     ' Joue le fichier
    
End Function

'Stop entierement la lecture
Public Function StopMp3Ogg(ByRef Control As IMediaControl, Position As IMediaPosition)
    
    Control.Stop                                    ' Arret de la lecture
    Position.CurrentPosition = 0                    ' Remise à 0
    
End Function

'Met sur pause
Public Function PauseMp3Ogg(ByRef Control As IMediaControl)

    Control.Pause                                   ' Mise en pause
    
End Function

'Reprise de lecture apres la pause ou de la definission de position
Public Function ReStartMp3Ogg(ByRef Control As IMediaControl)
    
    Control.Run                                     'Lancement apres une pause ou une definition de position
    
End Function

'Definition du volume de 0 à 10
Public Function SetVolume(ByRef Audio As IBasicAudio, VolumeValue As Integer)
    
    Audio.Volume = VolumeValue * -500               ' On multiplie par -500 car le volume va de -10000 à 0
    
End Function

'Définition de la balance, gauche-droite, de -10 à 10
Public Function SetBalance(ByRef Audio As IBasicAudio, BalanceValue As Integer)
    
    Audio.Balance = BalanceValue * 1000             ' On multiplie par 1000 car la balance va de -10000 à 10000
    
End Function

'Définition de la vitesse de lecture de 1 à 20, 10 est la vitesse normal
Public Function SetPlayRate(ByRef Position As IMediaPosition, PlayRate As Integer)
    
    Position.Rate = PlayRate * 0.1                  ' Le PlayRate vas de 0.1 à 2, 1 étant la vitesse normal
    
End Function

'Définition de la position de départ de 0 à 100%
Public Function SetStartPosition(Control As IMediaControl, Position As IMediaPosition, _
                                                                PositionValue As Integer)
    
    Control.Stop                                    ' Arret de la lecture
    Position.CurrentPosition = (PositionValue * Position.Duration) / 100      ' Calcul pour mettre la position de lecture par rapport au pourcentage
    
End Function

'Suppression du fichier en memoire
Public Function DeleteMp3Ogg(ByRef DSAudio As IBasicAudio, ByRef SEvent As IMediaEvent, _
                        ByRef Control As IMediaControl, ByRef Position As IMediaPosition)
                                
    Control.Stop                                    ' Arrête la lecture
    Set DSAudio = Nothing                           ' Vide la mémoire
    Set Control = Nothing                           ' Vide la mémoire
    Set SEvent = Nothing                            ' Vide la mémoire
    Set Position = Nothing                          ' Vide la mémoire
    
End Function

Conclusion

Pour avoir un exemple concret allé voir dans le zip, j'utilise tous se qui à était dis ci-dessus.

Bon code

Et bien sûr tous les commentaires sont les biens venus.

a+
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

29 mai 2007 00:01:29 :
Complete réécriture du tuto et du zip, ajout de fonction : volume, valance, playrate, position de lecture
31 mai 2007 01:07:51 :
Correction sur le scroll bar permettant de modifier la position de depart. Le scroll bar de position est maintenant mis à jour lors de la lecture.
  • signaler à un administrateur
    Commentaire de Light Angel le 06/08/2004 08:48:42

    Salut, ce petit bout de code m'aide énormément, merci. (Je m'explique : Je taff sur un jeu, j'ai trouvé un son d'intro qui fait deux 2.3 mo, c'est résonable, sauf que je savais pas comment jouer du MP3 avec DirectX. Il a donc fallut transformer le .mp3 en .wav, et la tout de suite sa change : 2.2 mo vs 32 mo). Donc, ton code me sert énormément. Pour la peine, 10.
    Light_Angel

  • signaler à un administrateur
    Commentaire de ciberrique le 06/08/2004 10:21:58

    Mon code est la pour sa ....

    Merci pour ton commentaire.

  • signaler à un administrateur
    Commentaire de Mechanicman le 03/11/2004 22:56:27

    Bizarre....
    J'ai suivi ton tutoriel...et ça ne fonctionne pas...
    j'ai bien tout respecté, et j'ai même recopié ton code pour voir si le mien etait fautif...

    Message d'erreur:
    "Compil error :  User-defined type not defined "
    La compilation se bloque à la toute première ligne.

    Aidez moi SVP...

  • signaler à un administrateur
    Commentaire de ciberrique le 03/11/2004 23:01:51

    essaye de telecharger le fichier zip pour voir si tu as rien oublier ....

    Autrement essaye un autre mp3 des fois sa fait une erreur de lecture suivant la compression.

  • signaler à un administrateur
    Commentaire de Mechanicman le 04/11/2004 01:48:22

    ...même problème.
    J'ai essayé un autre MP3...que dalle
    Je comprends pas...les sources de vbfrance marchent et lorsque je compile moi même (exactement le même code) ça ne fonctionne pas....je suis perdu là

  • signaler à un administrateur
    Commentaire de ciberrique le 04/11/2004 19:09:21

    Si tu es interressé tu peux m'envoyer ton code, et je le regarderais avec plaisir, si oui je t'enverrai mon mail par mp.

  • signaler à un administrateur
    Commentaire de Mechanicman le 05/11/2004 00:46:49

    Le truc c'est que c'est "exactement" le même code que toi...alors ça peut pas venir du code je pense....j'ai DIRECTX 9.0b (ou c je sais plus)...Je me disais que ça venait peut être d'içi mais en fait non vu que les differents codes des autres auteurs de vbfrance fonctionnent...

    ça doit venir de mon ordi mais d'ou exactement...?
    Je vais essayer un truc : commencer un nouveau projet et l'ecrire directement...on verra...

  • signaler à un administrateur
    Commentaire de ciberrique le 05/11/2004 19:46:59

    Vérifie aussi si directx et bien présent dans les références ...... Puis en plus sans le message d'erreur ca risque d'etre dur de t'aider ....

  • signaler à un administrateur
    Commentaire de ciberrique le 05/11/2004 19:47:03

    Vérifie aussi si directx et bien présent dans les références ...... Puis en plus sans le message d'erreur ca risque d'etre dur de t'aider ....

  • signaler à un administrateur
    Commentaire de Mechanicman le 05/11/2004 20:39:30

    Pour le message d'erreur, regardes plus haut je l'ai ecrit....sinon pour la vérification de directx dans les références....euh moi pas comprendre :)

  • signaler à un administrateur
    Commentaire de ciberrique le 05/11/2004 20:58:15

    A oui dsl j'avais mal lu ....

    Si je me trompe pas le compilateur s'arrete sur une ligne, et si je ne me trompe toujours pas c'est une déclaration ... Si ce n'est pas une déclaration de variable c'est la référence de directx qui n'est pas presente, si c'est la variable essaye de changer dim en public, si se n'est pas la variable tu as dans le menu projet un bouton référence, dedans les references tu cherche active movie control type library et tu le selectionne tu fais ok et tu enregistres la source ......

    Ne me dis pas je l'ai pas dis car c'est ecrit tout en haut du tutaux, je cite :
    Donc pour nous ce qui changera sera qu'il faut mettre dans les références du projet :Active Movie control type library

    Mais se n'est peut etre pas pour sa que tu as cette erreur, si sa ne corrige pas ton probleme, reinstalle vb....

  • signaler à un administrateur
    Commentaire de Mechanicman le 05/11/2004 21:02:26

    arf...viens juste de le reinstaller...enfin j'essaie ça et je te dis ça plus tard...merci de l'aide :)

  • signaler à un administrateur
    Commentaire de Mechanicman le 06/11/2004 00:47:24

    Bon bien, merci pour l'aide ça marche enfin à part que j'ai dû changer ton code:

    DSControl.Play  par  DSControl.Run
    car la méthode Play n'existe pas chez moi...va savoir :/
    Pour info j'ai XP Pro...donc voilà...peut etre que c'est ça

  • signaler à un administrateur
    Commentaire de ciberrique le 06/11/2004 09:13:55

    Non non ce n'est pas xp pro car je suis sous xp pro ....
    Je pense que c'est ta version de dx qui fait bug, mais ce n'est pas grave car maintenant sa marche ...

  • signaler à un administrateur
    Commentaire de benefy le 21/03/2005 12:08:42

    Salut et merci pour ce petit tuto très intéressant.

    Je recherche le moyen, via directshow, de cibler une carte son lorsqu'il y en a plusieurs d'installées sur le PC (sans changer la carte son par défaut...).
    Ton exemple lit le mp3 sur la carte son par défaut...

    Sais-tu si c'est possible et comment on peut le faire ?

    Merci par avance.

  • signaler à un administrateur
    Commentaire de ciberrique le 21/03/2005 17:17:34

    Je suis desolé je n'ai jamais eu se probleme a traiter... Tu devrais essayer de dl le sdk de dx7.
    Bonne chance ....

  • signaler à un administrateur
    Commentaire de yukarira le 30/05/2005 15:12:24

    salut Ciberrique !
    Merci aussi pour ton code il m'aide bcp !
    Par contre comment se sert on de la variable volume dans (ici avec tes noms de variables) :
    DirectShowAudio.volume

    j'aimerais affecter le volume du son avec une slidebar mais ca ne fonctionne pas si je mets dans l'évènement scroll du slidebar :
    DirectShowAudio.volume = slidebar1.value

    aurais tu une astuce (peut etre que ce n'est pas le volume du son)

    merci d'avance !

  • signaler à un administrateur
    Commentaire de ciberrique le 18/06/2005 19:54:37

    Sa fait quelque temps que j'ai posté ce code, mais je vais essayer de t'aider ... Donc si je me souvien bien il fallait faire une multiplication car en effet si ton slide va de 0 a 100 sa ira pas. 100 est un chiffre trop petit pour que le son soit modifier, mais je promet rien ... dsl.

  • signaler à un administrateur
    Commentaire de bubbathemaster le 30/12/2005 21:29:15

    Je profite pour laisser un petit message ici :

    MERCI BEAUCOUP CIBERRIQUE !

    Grace a toi jai pu m'initier sans soucis au DirectX, c'est vraiment les meilleurs sources que j'ai pu trouver sur le net pour débuter.
    Merci merci merci !

  • signaler à un administrateur
    Commentaire de ciberrique le 30/12/2005 21:36:44

    BUBBATHEMASTER sa me fait franchement plaisir, et la suite reste à venir car je suis sur le code d'animation de personnage 3d. Donc peut etre un tuto. Puis de même je vais vous donner un petit editeur pour les tiles. Enfin pourquoi pas lire d'autre format que le mp3, wma, ogg, avi, mpg ... Je verrais.

  • signaler à un administrateur
    Commentaire de bubbathemaster le 01/01/2006 21:32:34

    Petite astuce au passage : si vous voulez un son qui se répète indéfiniment, rajoutez ceci dans la boucle principale du programme :

    If CLng(DSPosition.CurrentPosition) = CLng(DSPosition.Duration) Then
        DSPosition.CurrentPosition = 0
    End If

  • signaler à un administrateur
    Commentaire de ciberrique le 01/01/2006 23:35:02

    oui c'est pas une mauvaise idée.
    Merci pour l'astuce BubbaTheMaster (dsl pour la casse mais je trouve que c'est plus jolie).

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS