Articolo trovato su un sito web...
DirectShow è un componente perfetto per il multimediale essendo in grado di leggere AVI, Mpeg, mp3, mov e ogni file supportato dal computer. DirectShow è inoltre in grado di comprimere i filmati, convertire wav in Mp3 e addirittura effettuare cattura video. Sapendolo fare. E' infatti molto difficile trovare materiale sull'argomento che peraltro è abbastanza complesso ma che dà grandi soddisfazioni in caso di successo.
Le variabili da inserire nel modulo sono le seguenti
codice:
Global DSAudio As IBasicAudio
Global DSVideo As IBasicVideo
Global DSWindow As IVideoWindow
Global DSControl As IMediaControl
Global DSPos As IMediaPosition
Global Const WS_VISIBLE = &H10000000
DSAudio e DSVideo sono le due variabili che controllano l'audio e il video; DSWindow contiene le proprietà di visualizzazione del filmato (dimensione o pieno schermo). DSControl serve per controllare il filmato e DSPos la posizione. Infine la costante serve a specificare che il filmato deve essere visibile. Ora il codice per l'inizializzazione da eseguire prima del play (la struttura è sempre la stessa di DirectX : Inizializzazione >> Esecuzione >> Chiusura.
codice:
Sub DS_OpenFile(Filename As String, _
rectTop As Integer, _
rectLeft As Integer, _
rectWidth As Integer, _
rectHeight As Integer, _
FhWnd As Long, Optional fullScreen As Boolean = False)
On Error Resume Next
'Puliamo prima di caricare un nuovo file
Call DS_termina
Set DSControl = New FilgraphManager 'crea il controllo
Call DSControl.RenderFile(Filename) 'carica il file
'crea il controllo del volume
Set DSAudio = DSControl
DSAudio.Volume = 0 'regola il volume come normale
DSAudio.Balance = 0 'centra l'audio
Set DSWindow = DSControl 'crea l'oggetto che contiene il video(se presente
DSWindow.WindowStyle = &H10000000 'finestra visibile
DSWindow.Top = rectTop 'dimensioni del controllo
DSWindow.Left = rectLeft
DSWindow.Width = rectWidth
DSWindow.Height = rectHeight
DSWindow.Owner = FhWnd
DSWindow.FullScreenMode = fullScreen
Set DSPos = DSControl 'crea il controllo della posizione
DSPos.Rate = 1
End Sub
Public Sub DS_termina()
On Error Resume Next
'fermiamo il file se sta già in esecuzione
DSControl.Stop
DSWindow.Owner = 0
'distruggi tutto
Set DSAudio = Nothing
Set DSVideo = Nothing
Set DSControl = Nothing
Set DSWindow = Nothing
Set DSPos = Nothing
End Sub
Spieghiamo il codice. La funzione termina è la prima che deve essere eseguita in quanto pulisce il sistema da eventuali file multimediali già in esecuizioni (ovviamente si tratta del caso in cui state caricando un secondo filmato). La funzione termina esegue lo stop del filmato (DSControl.Stop) e imposta a 0 il bersaglio. Tutte le variabili vengono impostate su nothing.
La funzione openFile richiede la posizione del filmato (o brano audio), la dimensione della finestra o del controllo, la proprietà hwnd del form o del controllo (bersaglio del rendering) e un valore booleano per specificare se il filmato deve essere a fullscreeen. Dato che esistono moltissimi casi di filmati che possono generare errori ma continuare a funzionare (filmati senza audio o addirittura filmati senza video! oh fatto la prova) è meglio usare ON ERROR RESUME NEXT. Le istruzioni
codice:
Set DSControl = New FilgraphManager 'crea il controllo
Call DSControl.RenderFile(Filename) 'carica il file
creano il controllo del file e con renderFile lo carica.
codice:
Set DSAudio = DSControl
DSAudio.Volume = 0 'regola il volume come normale
DSAudio.Balance = 0 'centra l'audio
Con queste istruzioni creiamo il controllo audio e settiamo l'audio e il balance (nota l'audio va da 0 a -10000, il balance da +10000 a -10000).
Creiamo poi la zona di visualizzazione e la impostiamo
codice:
Set DSWindow = DSControl 'crea l'oggetto che contiene il video(se presente
DSWindow.WindowStyle = &H10000000 'finestra visibile
DSWindow.Top = rectTop 'dimensioni del controllo
DSWindow.Left = rectLeft
DSWindow.Width = rectWidth
DSWindow.Height = rectHeight
DSWindow.Owner = FhWnd
DSWindow.FullScreenMode = fullScreen
Left, top, width e height sono le dimensioni dello schermo ottenibili da form e componenti (occhio sono in pixel). Owner deve contenere il bersaglio (proprietà hWnd). Se si imposta fullScreen a true il filmato sarà a pieno schermo (anche durante la riproduzione), altrimento con false sarà nel controllo.
Creiamo infine il controllo della posizione
codice:
Set DSPos = DSControl 'crea il controllo della posizione
DSPos.Rate = 1
Rate indica la velocità di riproduzione (modificabile in corsa). Ricordate 1 = velocita normale , 2= x2 , 0.5 = 1/2
Ora non ci resta che eseguire il play.
codice:
DSPos.CurrentPosition = 0
Call DSControl.Run
CurrentPosition è la posizione da cui partire (0 è l'inizio). Run fa partire il filmato.
Ora se il filmato è valido comparirà nel controllo o sarà visualizzato a pieno schermo (se la proprietà fullscreen è True). Nel caso si tratti di audio ovviamente si sentirà solo l'audio.
Per fermare il brano dovete eseguire l'istruzione
Call DSControl.Stop
Ricordate di eseguire termina alla chiusura del programma.
-------------
Spero ti sia di aiuto