Directx tuto 7 : directshow, jouer des mp3/ogg

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

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.