Répéter avec directshow

Ahweb Messages postés 48 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 15 octobre 2007 - 1 mai 2006 à 03:39
gmni Messages postés 91 Date d'inscription mercredi 6 novembre 2002 Statut Membre Dernière intervention 20 mars 2009 - 24 janv. 2007 à 03:13
Salut !

J'utilise un module DirectShow pour lire des MP3, midids et WAV.
Voici son code :
======================================
'==========================================
'
'       NAME: modDirectShow.bas
'       DESC: MP3 playing module for background music.
'
'       AUTHOR: Jack Hoxley
'       DATE: 29th July 2001
'
'       REQUIRES: Microsoft DirectX 8.0 Runtime libraries
'
'==========================================

Option Explicit

'//DirectShow Objects
    Private DSAudio  As IBasicAudio         'Basic Audio Objectt
    Private DSEvent As IMediaEvent        'MediaEvent Object
    Private DSControl As IMediaControl    'MediaControl Object
    Private DSPosition As IMediaPosition 'MediaPosition Object

Public Function TerminateEngine() As Boolean
On Error GoTo BailOut:

    If ObjPtr(DSControl) > 0 Then
        DSControl.Stop
    End If
               
    If ObjPtr(DSAudio) Then Set DSAudio = Nothing
    If ObjPtr(DSEvent) Then Set DSEvent = Nothing
    If ObjPtr(DSControl) Then Set DSControl = Nothing
    If ObjPtr(DSPosition) Then Set DSPosition = Nothing
               
    TerminateEngine = True
    Exit Function
BailOut:
    TerminateEngine = False
    Debug.Print "ERROR: modDirectShow.TerminateEngine()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function LoadMP3(FileName As String) As Boolean
On Error GoTo BailOut:

    '//0. Any variables
   
    '//1. Destroy existing instances
        If Not (TerminateEngine() = True) Then GoTo BailOut:
       
    '//2. Setup a filter graph for the file
        Set DSControl = New FilgraphManager
        Call DSControl.RenderFile(FileName)
   
    '//3. Setup the basic audio object
        Set DSAudio = DSControl
        DSAudio.Volume = 0
        DSAudio.Balance = 0
   
    '//4. Setup the media event and position objects
        Set DSEvent = DSControl
        Set DSPosition = DSControl
        If ObjPtr(DSPosition) Then DSPosition.Rate = 1#
        DSPosition.CurrentPosition = 0
       
   
    '//5. Done!

    LoadMP3 = True
    Exit Function
BailOut:
    LoadMP3 = False
    Debug.Print "ERROR: modDirectShow.LoadMP3()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function SetPlayBackSpeed(Speed As Single) As Boolean
On Error GoTo BailOut:

    If ObjPtr(DSPosition) > 0 Then
        DSPosition.Rate = Speed
    End If

    SetPlayBackSpeed = True
    Exit Function
BailOut:
    SetPlayBackSpeed = False
    Debug.Print "ERROR: modDirectShow.SetPlayBackSpeed()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function SetPlayBackVolume(Volume As Long) As Boolean
On Error GoTo BailOut:
   
    '//Set the new volume
    If ObjPtr(DSControl) > 0 Then
        DSAudio.Volume = Volume * 40 ' makes it in the 0 to -4000 range (-4000 is almost silent)
    End If

    SetPlayBackVolume = True
    Exit Function
BailOut:
    SetPlayBackVolume = False
    Debug.Print "ERROR: modDirectShow.SetPlayBackVolume()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function SetPlayBackBalance(Balance As Long) As Boolean
On Error GoTo BailOut:

    If ObjPtr(DSControl) > 0 Then
        DSAudio.Balance = Balance
    End If

    SetPlayBackBalance = True
    Exit Function
BailOut:
    SetPlayBackBalance = False
    Debug.Print "ERROR: modDirectShow.SetPlayBackBalance()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function PlayMP3() As Boolean
On Error GoTo BailOut:

    DSControl.Run

    PlayMP3 = True
    Exit Function
BailOut:
    PlayMP3 = False
    Debug.Print "ERROR: modDirectShow.PlayMP3()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function StopMP3() As Boolean
On Error GoTo BailOut:
   
    DSControl.Stop
    DSPosition.CurrentPosition = 0 'set it back to the beginning

    StopMP3 = True
    Exit Function
BailOut:
    StopMP3 = False
    Debug.Print "ERROR: modDirectShow.StopMP3()"
    Debug.Print "     ", Err.Number, Err.Description
End Function

Public Function PauseMP3() As Boolean
On Error GoTo BailOut:
   
    DSControl.Stop

    PauseMP3 = True
    Exit Function
BailOut:
    PauseMP3 = False
    Debug.Print "ERROR: modDirectShow.PauseMP3()"
    Debug.Print "     ", Err.Number, Err.Description
End Function
======================================

J'aimerais maintenant que à la fin du morceau, il se répète automatiquement.
Avez-vous une idée de comment mettre en oeuvre ceci ?

Merci,
Aweb

5 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 mai 2006 à 05:17
salut,
avec ce module tel quel, tu ne peux pas.
il te manque la fonction d'avancement (%) de la piste.
sinon avec, beh juste un timer qui reload arrivé à 100

++
0
Ahweb Messages postés 48 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 15 octobre 2007
1 mai 2006 à 10:35
C'est ce que j'ai fait mais n'y a t-il pas un autre moyen directement intégrable au module ?

Merci,
Aweb
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 mai 2006 à 13:56
pas à ma connaissance : pas d'évènement.
0
Ahweb Messages postés 48 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 15 octobre 2007
1 mai 2006 à 14:41
Voilà j'ai simplement utilisé le module de timer (utilisant settimer etc..) pour gérer tout ça sans form secondaire.
0

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

Posez votre question
gmni Messages postés 91 Date d'inscription mercredi 6 novembre 2002 Statut Membre Dernière intervention 20 mars 2009
24 janv. 2007 à 03:13
Exacte avec un timer qui peut appeler cette situation dans le module :

If DSPosition.CurrentPosition = DSPosition.Duration Then   
StopMP3
PlayMP3
End If

-----------------
0
Rejoignez-nous