Quise colocar este post en faq's del foro, pero primero prefiero que lo revisen si vale la pena. Al grano... En mi búsqueda de reproducir sonido sin la necesidad de Windows Media player u otro ocx, me encontre con DirectShow, pero hay muy pocos ejemplos en español. También he visto que no es demasiado recomendable, pero para alguién que quiera reproducir algo sin mucho esfuerzo, es muy bueno. En está página encontre el código de donde base mi ejemplo:
DirectShow. El ejemplo de la página está en Visual Basic 6. Es importante mencionar que la funcionalidad se encuentra desde directX8 en adelante.
Ejemplo Direct Show, Visual Basic .Net 2005:
Lo primero es hacer referencia al proyecto a "QUARTZ.DLL", puedes buscarlo y traspasarlo a tu carpeta de proyecto si deseas.
Elementos del formulario:
1.- Un Opendialog=>opd
2.- Tres Button's=>abrir, play, stop
3.- Un Textbox,Nombre del Archivo abierto=>text1
Código PHP:
Imports QuartzTypeLib
Public Class MyForm
Private auba As IBasicAudio //Audio Básico
Private vidba As IBasicVideo //Video Básico, no ocupado
Private evmu As IMediaEvent //Evento multimedia, este aún no le he probado como funciona.
Private winvi As IVideoWindow //Video de windows, no lo ocupare en el ejemplo
Private mulco As IMediaControl //Control multimedia, este es el importante
Private posmu As IMediaPosition //Posición multimedia
Private InPlay as Boolean = False//Controlamos si está en reproducción actualmente.
//Ocupamos esta función para cargar nuestro archivo a los elementos
//Es importante siempre colocar todo en Try para evitar caidas en la carga
Protected Sub Load_File(FileName as string)
Try
mulco = New FilgraphManager//Inicializa el elemento
mulco.RenderFile(FileName)//Cargar Archivo
auba = mulco
auba.balance=0//Corresponde al valor medio. Valor Máximo 10.000, valor mínimo -10.000
auba.Volume=0//Valor máximo del volumen, el valor mínimo es -10.000
evmu = mulco
posmu = mulco
posmu.Rate = 1//Reproducción hacia adelante en forma normal, no he visto otros valores
posmu.CurrentPosition=0//Posición en que se encuantra la reproducción
Catch ex As Exception
Colocar cualquier sentencia que controle el error.
End Try
End Sub
Private Sub Clear_Object()
Try
//En caso de que este en ejecución este Control
If Not mulco Is Nothing Then
mulco.Stop()
End If
//Dejo esta sentencia para que no se olviden de cerrarlo cuando van a querer cargar un video
If Not winvi Is Nothing Then
winvi.Owner = 0
End Id
auba = Nothing
vidba = Nothing
evmu = Nothing
winvi = Nothing
mulco = Nothing
posmu = Nothing
InPlay = False
Catch ex As Exeception
//Sentencia de Error
End Try
End Sub
Private Sub abrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles abrir.Click
If opd.ShowDialog = Windows.Forms.DialogResult.OK Then
Clear_Object()//Limpiamos
text1.Text = opd.FileName//Guardamos el Nombre
Load_File(text1.Text)//Cargamos información
End If
End Sub
//Ponemos en marcha la reproducción
Private Sub play_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles play.Click
If text1.text = "" or mc Is Nothing Then//Control para que no tengamos error al no tener archivo cargado
MsgBox ("No hay archivo Cargado")
End If
If InPlay Then
posmu.CurrentPosition = 0
End If
mulco.Run()
InPlay = True
End Sub
//Detenemos la Reproducción
Private Sub stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stop.Click
mulco.Stop()
posmu.CurrentPosition=0
InPlay = False
End Sub
End Class
Puede que el ejemplo de errores, pero son minimos.
Esperando que a alguien le sea de utilidad muchas gracias.