Vous êtes sur la page 1sur 6

Existen muchas plataformas de desarrollo que incluyen clases y mtodos capaces de manejar audio.

An cuando todo lo anterior suene lindo, desgraciadamente no implementan todas las clases o mtodos que el programador quisiera tener a su disposicin. Por ejemplo, la reproduccin de audio en C#.NET no es de lo ms simple o prctico debido a que se deben importar DLLs externas y manipularlas como si de Uranio se tratara. Afortunadamente, existen herramientas que nos facilitan la vida como programadores. En esta entrada explicar el funcionamiento de la API BASS.NET y cmo usarla para manejar audio, ej. hacer un reproductor sencillo ;-D .

Requisitos previos
Creas que iba a drtelo todo en bandeja de plata?.
Visual C# Express (lo se, existen otros IDE, incluso con un bloc de notas bastara). BASS.NET DLL de BASS Conocimientos bsicos de C#

Manos a la obra Programando en C#


.NET Framework tiene la limitacin de slo poder reproducir archivos WAV, cosa completamente lgica debido a cuestiones de licencia. Otra opcin sera usar el control de Windows Media Player pero sera hacer trampa, y como en Exolimpo.com no nos gusta ser tramposos, vamos a implementar algo nosotros con la ayuda de la API BASS.NET para poder reproducir archivos de cualquier formato.

Aqu asumo que ya tienes conocimientos bsicos de programacin en C#, que hayas descargado BASS.NET (API y la DLL) y que ya tengas instalado Visual C# Express (o al menos saberlo instalar). Primero creamos un nuevo proyecto para programar una aplicacin de Windows Forms. Puedes ponerle cualquier nombre, en mi caso lo he llamado MyPlayer. Una vez hecho esto, hay que dar click derecho en el proyecto y aadir la siguiente referencia (para esto ya debemos tener instalada la API).

Despus de esto, hay que aadir al proyecto la DLL que descargamos tambin y cambiar el valor de la propiedad de Copia en el directorio de resultados por "Copiar siempre. En seguida, aadimos cualquier archivo de audio (MP3 por ejemplo). Ahora que todo est en orden, podemos empezar a frer las tortas de las hamburguesas en el azador :-D . Hay varias cosas que se pueden hacer con la API BASS, como trabajar con sonido surround, la velocidad, la posicin, la distancia, algunos efectos doppler y muchas cosas ms. Recomiendo que se echen un clavado en la documentacin porque realmente es muy buena y descriptiva. Primero que nada, incluiremos el espacio de nombres Un4seen.Bass . Despus inicializaremos el dispositivo (de audio) con los siguientes parmetros en un constructor.

Using Un4seen.Bass; public Player() { Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero, null); }

El primer parmetro inicia el dispositivo de audio predeterminado, el segundo especifica la frecuencia de muestreo que en este caso seran 44.1 KHz que es la que comnmente tiene la mayora; los dems parmetros son muy bien explicados en la descripcin de los mismos. Ahora, para poder cargar el archivo mp3 es necesario crear un stream primero y hacerlo es sencillo.
public void LoadAudioFile(string location) { int stream = Bass.BASS_StreamCreateFile(location, 0 , 0 BASSFlag.BASS_SAMPLE_FLOAT); }

Todos los parmetros son muy bien explicados en la documentacin adems de definirse por s mismos. El primero es el lugar donde se encuentra el archivo mp3, el segundo es el punto donde empezar el stream, el tercero es la longitud del mismo (0 por default es todo) y el ltimo son las banderas (flags, en este caso, enumeraciones) de la clase BASSFlag. CUIDADO: Como aqu se trabaja con cdigo no administrado, debes estar seguro de proteger las referencias, de lo contrario, el Garbage Collector de .NET las borrar. Cmo prevenir esto?, simplemente con mover la variable entera stream fuera del mtodo LoadAudioFile es suficiente. Despus proseguimos a escribir los mtodos que reproducir, pausar y detendr el stream
public class Player { int stream //Ac se movi la variable para evitar al GB

public Player() { Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero, null); } public void LoadAudioFile(string location) { int stream = Bass.BASS_StreamCreateFile(location, 0 , 0 BASSFlag.BASS_SAMPLE_FLOAT); } //Nuevo mtodo. public void PlayAudioFile(bool loop)// { Bass.BASS_ChannelPlay(stream, false); } public void StopAudioFile() { Bass.BASS_ChannelPlay(stream, false); }

Podemos escribir un destructor ya que parte de los recursos que manejamos son externos a .NET y no los borrara el Garbage Collector. Hacer esto es una buena costumbre sea cual sea el lenguaje o plataforma en que se programe.
~Player() { Bass.BASS_Free(); }

Ahora pasemos al diseo.

Hacer la interfaz de usuario en Visual Studio (Visual C# Express, lo mismo) es un juego de nios. Arrastra los controles de la barra lateral Cuadro de herramientas- al Form y ponle nombre a cada uno. Ahora a crear algunos event-handlers a cada botn, instanciar un objeto de la clase que creamos dentro del constructor y llamar cada una de las funciones que especificamos anteriormente.
public partial class Form1: Form { Player player; public Form1() { InitializeComponent(); player = new Player(); } void LoadButton_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.Ok) { player.LoadAudioFile(openFileDialog.FileName); } } void PlayButton_Click(object sender, EventArgs e) { player.PlayAudioFile(false); //No repetimos la cancin } void StopButton_Click(object sender, EventArgs e) { player.StopAudioFile(); }

Y listo. Compila, ejecuta, abre tu rola favorita y reprodcela. Ya ests listo para realizar tu propio reproductor y reemplazar el que tengas actualmente ;-D .

Vous aimerez peut-être aussi