Ahweb
Messages postés48Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention15 octobre 2007
-
1 mai 2006 à 03:39
gmni
Messages postés91Date d'inscriptionmercredi 6 novembre 2002StatutMembreDernière intervention20 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 ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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