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
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: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
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
creano il controllo del file e con renderFile lo carica.codice:Set DSControl = New FilgraphManager 'crea il controllo Call DSControl.RenderFile(Filename) 'carica il file
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).codice:Set DSAudio = DSControl DSAudio.Volume = 0 'regola il volume come normale DSAudio.Balance = 0 'centra l'audio
Creiamo poi la zona di visualizzazione e la impostiamo
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.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
Creiamo infine il controllo della posizione
Rate indica la velocità di riproduzione (modificabile in corsa). Ricordate 1 = velocita normale , 2= x2 , 0.5 = 1/2codice:Set DSPos = DSControl 'crea il controllo della posizione DSPos.Rate = 1
Ora non ci resta che eseguire il play.
CurrentPosition è la posizione da cui partire (0 è l'inizio). Run fa partire il filmato.codice:DSPos.CurrentPosition = 0 Call DSControl.Run
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

Rispondi quotando