30 septiembre 2011

Sonidos y Visual Basic

20091123-musicaAlgo que es indispensable para muchos programas (especialmente si estamos programando un videojuego) es el sonido.  Imagínate estar jugando Lego Star Wars sin el sonido de la respiración de Darth Vader, el sonido de los light sabers, el ruidito que hace R2D2 o la música de la marcha imperial.  Hay miles de estudios que muestran que el sonido afecta nuestra percepción, estado de ánimo, etc. y es muy aprovechado por el cine, TV, etc. para transmitir drama, suspenso, etc.  En conclusión: habrán momentos en que necesitamos que nuestros programas incluyan audio.  Pero, ¿cómo le hago?  Eso precisamente es de lo que voy a hablar en este post.

Para cosas sencillas Visual Basic .NET cuenta con la clase System.Media.SoundPlayer.  Es limitado y no tiene muchas funciones, pero para efectos de tocar un WAV, basta y sobra.  Tal vez pienses que con la popularidad que tiene el formato MP3 estos archivos ya no se usan, pero generalmente todos los efectos especiales que puedes descargar en línea están en este formato.  Así que es una clase muy útil.

Lo primero que se tiene que hacer es declarar un objeto:

Dim sonidito As System.Media.SoundPlayer

Si al principio del código agregamos System.Media (con la instrucción Imports), podemos escribir simplemente SoundPlayer.  Tiene dos constructores: con uno podemos cargar el archivo WAV directamente:

sonidito=New SoundPlayer(“sonido.wav”)

O bien, puedo usar el constructor default (sin parámetros) y usar las propiedades SoundLocation para definir el archivo y Load para cargarlo a la memoria:

sonidito=New SoundPlayer()
sonidito.SoundLocation(“sonido.wav”)
sonidito.Load()

NOTA: si de plano el archivo WAV es demasiado grande y dura unos segundo en cargar, puedes usar la función SoundPlayer.LoadAsync para cargar el sonido y SoundPlayer.IsLoadComplete para saber si ya terminó de cargar a la memoria.  Esto es útil porque si tu programa tarda unos segundos en cargar el sonido, es probable que el usuario piense que el programa dejó de responder y lo cierre.

Para que comiencen a sonar las bocinas con tu WAV, solo basta usar la función Play()para que se escuche:

sonidito.Play()

¿Qué sucedería si alguien elimina el archivo WAV de la carpeta donde lo necesitas?  Como te imaginarás, deja de funcionar.  Una forma de evitar esto es incluir el archivo WAV como parte del proyecto, es decir, que sea un recurso del programa.  Antes que nada, hay que incluir un archivo de recurso al proyecto.  En el proyecto, elige del menú Project la opción Add new item.  Aparece la siguiente ventana:

00-VentanaAddNew

En esta ventana, selecciona la opción Resources File (está en esta ventana o en el grupo General [los grupos están de lado izquierdo]).  Después de esto, se agrega un archivo llamado Resources1.resx al proyecto (a menos que le hayas cambiado el nombre).  Debería abrirse en automático.  Si no , haz doble clic sobre el archivo en la ventana de la solución.  Haz clic sobre el tipo de recurso (ahorita dice Strings) y selecciona Audio.  Después haz clic en Add Resource, Add Existing File y selecciona el archivo WAV que quieres incluir.  Aquí se ven las opciones:

01-AgregarRecursoAudio
02-AgregarRecursoAudio
     

Nota: para ahorrarte esto, podrías simplemente arrastrar un archivo WAV desde Windows hasta esta ventana.

Una vez agregado el recurso, es hora de echarlo a andar.  Tomando en cuenta que mi recurso (otro archivo WAV) se llama Sonidito2 y que al principio importé Microsoft.VisualBasic para no escribir tanto, el código quedaría así:

Dim sonidito2 As Devices.Audio
sonidito2 = New Devices.Audio
sonidito2.Play(My.Resources.Resource1.Sonidito2,AudioPlayMode.Background)

Aunque estos dos objetos nos dejan escuchar sonido, son medios limitados.  En un futuro post trataré del uso de Windows Media Player en Visual Basic .net (particularmente en la versión 2010).  ¡Hasta la próxima!

P.D. Imagen de la música con ecuaciones tomada del blog de The All-Knowing 4.  Las demás imágenes las hice yo.  Parte del material aquí expuesto viene del libro Visual Basic Game Programming for Teens.

Publicar un comentario
Related Posts Plugin for WordPress, Blogger...