Directx tuto 7 : directshow, jouer des mp3/ogg

Soyez le premier à donner votre avis sur cette source.

Vue 11 493 fois - Téléchargée 807 fois

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 / Exemple :


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+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ciberrique
Messages postés
591
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
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).
bubbathemaster
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4 -
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
ciberrique
Messages postés
591
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
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.
bubbathemaster
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4 -
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 !
ciberrique
Messages postés
591
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.