Reproducir Sonido in VB.NET

New product

Como reproducir varios sonidos al mismo tiempo en VB.NET sin utilizar bibliotecas externas. Puro NET Framework.

Play Sound in VB.NET con WinForms

Muchas veces queremos reproducir sonidos para nuestra aplicación multimedia realizada en VB.NET. El NET, trae nativamente para sus dos sistemas de ventanas dos motores de audio que nos permiten hacer este trabajo sin usar referencias externas.

Para programas desarrollados en Windows Forms o WinForms, tenemos la clase SoundPlayer.

Para los programas desarrollados en WPF, tenemos la clase MediaPlayer.

Para la primera (Sound Player), clase nos permite reproducir sonidos guardados en archivos y en stream de datos. Algo que es muy interesante si queremos cargar sonidos en un buffer de memoria. El punto desfavorable es que no permite la reproducción simultanea de sonidos, es decir, no hace el mezclado de sonidos. Es decir que, si tenemos una voz narrando algo y queremos reproducir algún sonido de pulsación de botón, no se escuchará este último.

La segunda (MediaPlayer), clase nos permite reproducir sonidos guardados en archivos de recursos del programa WPF. No es posible cargarlos desde un stream de datos el cual es su punto desfavorable, no es compatible con WinForm. El punto favorable es que MediaPlayer nos permite la mezcla de sonidos y entonces podemos reproducir varios sonidos al mismo tiempo y todos se escucharán.

Teniendo en cuenta esto, es posible usar el MediaPlayer de WPF en el proyecto WinForms, pero sin utilizar el problemático sistema de hospedaje.

¿Cómo reproducir múltiples sonidos en VB.NET con WinForms?

Publicidad.

Para reproducir varios sonidos al mismo tiempo en VB.NET:

1 – Creamos una biblioteca de enlace dinámico e importamos las referencias de los ensamblados: WindowsBase, System.Core

2 – Importamos los ensamblados: System.Windows.Media a una clase para el control del audio.

3 – Crear una clase que tenga la siguiente estructura:

Código:

'''
''' Controla la pieza de sonido que entra al buffer de dispositivo.
'''

'''
Public Class PiezaSnd

Private WithEvents mp As MediaPlayer
Private RecursoSnd As String
Private
_Reproduciendo As Boolean
Private
_Pausa As Boolean

Public Sub New
(ByVal NombreSnd As String)
mp =
New MediaPlayer
RecursoSnd = NombreSnd
_Reproduciendo =
False
_Pausa = False
End Sub

Public ReadOnly Property
Reproduciendo As Boolean
Get
Return
_Reproduciendo
End Get
End Property

Public Sub
Open()
Dim Path As String
Path = Directory.GetCurrentDirectory() & "sonidos" & RecursoSnd

mp.Open(
New Uri(Path))
_Reproduciendo =
False
_Pausa = False
End Sub

Public Sub
Pause()
mp.Pause()
_Reproduciendo =
False
_Pausa = True
End Sub

Public Sub
Play()
If Not _Pausa Then Open()
mp.Play()
_Reproduciendo =
True
_Pausa = False

End Sub

Public Sub
[Stop]()
mp.Stop()
_Reproduciendo =
False
_Pausa = False

End Sub

Public Sub
Close()
mp.Stop()
mp.Close()
_Reproduciendo =
False
_Pausa = False
End Sub

Private Sub
mp_Changed(sender As Object, e As EventArgs) Handles mp.Changed
_Pausa =
False
End Sub

Private Sub
mp_MediaEnded(sender As Object, e As EventArgs) Handles mp.MediaEnded
_Reproduciendo =
False
End Sub

Private Sub
mp_MediaFailed(sender As Object, e As ExceptionEventArgs) Handles mp.MediaFailed
_Pausa =
False
End Sub

Private Sub
mp_MediaOpened(sender As Object, e As EventArgs) Handles mp.MediaOpened
_Pausa =
False
End Sub
End Class

4 - Compilar la biblioteca y enlazarla al proyecto WinForms. Y listo.

Publicidad.

Consideraciones al usar el MediaPlayer de WPF

Asegurarse de abrir siempre el recurso de audio antes de ejecutarlo, por lo general al pasar a estado de Play a Stop el WPF descarga el buffer de datos para ahorrar memoria. Entonces el sonido no se reproducirá en la siguiente orden de Play.

Tenga en cuenta que cada sonido cargado consume muchísima memoria, piense en crear una biblioteca de sonidos, para que los mismos se carguen solo en la cantidad necesaria. No cargue sonidos por objetos.

Es todo por los momentos, asi que Play Sound en VB.NET usando WPF es muy simple y muy poderoso.

Escrito por:
Elimar G.
EliPrograma
21/03/2018
Calificación 
22/03/2019

Excelente

Gran post

    Calificación 
    21/03/2019

    buen aporte

    Muy buena tu idea del mezclador de sonidos.

      ¡Escriba su propia reseña!

      Escriba una reseña

      Reproducir Sonido in VB.NET

      Reproducir Sonido in VB.NET

      Como reproducir varios sonidos al mismo tiempo en VB.NET sin utilizar bibliotecas externas. Puro NET Framework.

      Haz una pregunta

      No se requiere registro

      Si luego de leer nuestro articulo aun tiene dudas, puede hacer su pregunta utilizando el siguiente formulario.

      (Opcional)
      *(Requerido para ser notificado cuando la respuesta este disponible)

      Si el enlace de descarga redirige a otro producto que no es el descrito en el artículo o está roto, reportarlo usando nuestro

       FORMULARIO DE REPORTE

      Cargando...