Existe un problema a la hora de reproducir archivos de sonido cuando se usa .NET sobre Windows 7(64 bits). No sé si es un problema mío o es un problema real de Windows 7 (64 Bits)
Hasta ahora, trabajando con Visual Estudio y con Windows 7(32 bits), no había tenido ningún problema para reproducir archivos de sonido usando la instrucción
My.Computer.Audio.Play( _
rutaAudio, _
Microsoft.VisualBasic.AudioPlayMode.WaitToComplete)
Pero con Windows 7 (64 bits), aparece un error que dice:
Entonces he intentado usar el código siguiente:
Dim player As New Media.SoundPlayer(rutaAlarma) ' Cargar el fichero de sonido player.SoundLocation = rutaAlarma player.Load() ' tocarlo player.Play()
Y he obtenido el mismo error
Después de mucho mirar y de consultar y de leer, he llegado a la conclusión que hay que utilizar las viejas técnicas por lo que he escrito una clase que envuelve el control OCR Media Player para usar el objeto Windows media player
El problema es que para usarla, además de incluir la clase en el proyecto, hay que importar el control { Windows media player} al proyecto. Por lo demás su uso es trasparente
'------------------------------------- ' Ejemplo del uso de esta clase '------------------------------------- '-------------------------------------------- ' Tocar un Sonido Modelo UNO '------------------------------------------- ' el mensaje de error que existe Dim outputMensajeError As String = String.Empty ' el sonido suena toma valor true ' el sonido no suena ' Toma valor false Dim haTocadoElSonido As Boolean = True haTocadoElSonido = Util.Multimedia.OcrMediaPlayer.Play("c:/NombreficheroSonodo.mp3", 1, outputMensajeError) If haTocadoElSonido = False Then ' Ha ahbido algun problema y no suena ' Opciones posibles ' Lanzar un mensaje de error advirtiendolo Windows.Forms.MessageBox.Show(outputMensajeError, "PROBLEMAS EN LA REPRODUCCION DE SONIDO") ' escibir el problema en el log My.Application.Log.WriteEntry(outputMensajeError, Diagnostics.TraceEventType.Information) End If
'-------------------------------------------- ' Tocar un Sonido Modelo DOS '------------------------------------------- ' el objeto que contendrá el resultado de la operacion Play Dim objResultadoPlay As Util.Multimedia.OcrMediaPlayerResultadoPlay = Nothing objResultadoPlay = Util.Multimedia.OcrMediaPlayer.Play("c:/NombreficheroSonodo.mp3", 1) If objResultadoPlay.HaTocadoElSonido = False Then ' Ha ahbido algun problema y no suena ' Opciones posibles ' Lanzar un mensaje de error advirtiendolo Windows.Forms.MessageBox.Show(objResultadoPlay.MensajeDeError, "PROBLEMAS EN LA REPRODUCCION DE SONIDO") ' escibir el problema en el log My.Application.Log.WriteEntry(objResultadoPlay.MensajeDeError, Diagnostics.TraceEventType.Information) End If
'-------------------------------------------- ' Tocar un Sonido Modelo TRES '------------------------------------------- Private ObjMediaPlayer As New Util.Multimedia.OcrMediaPlayer("c:/NombreficheroSonodo.mp3", 1) Public Sub Tocar() ObjMediaPlayer.Play() End Sub Public Sub Parar() ObjMediaPlayer.Stop() End Sub
En el fichero adjunto encontraras una clase, perfectamente documentada,
Código MD5 para los paranoicos