Escuchar la radio en C# mediante Windows Media

Vamos a transformar un poco la demo del otro día para crear nuestro sintonizador de radio.

Lo primero que tenemos que hacer es almacenar de alguna manera los nombres de las emisoras y su dirección de reproducción. Para no comernos mucho la cabeza usaremos un array bidimensional:

private string[,] emisoras;

Como podéis imaginar, lo siguiente es llenar el array con los datos, podemos hacerlo creando un método que inicialice el array con el tamaño adecuado y lo rellene:

private void FijarEmisoras()
{
emisoras = new string[3, 2];

//OndaCero
emisoras[0, 0] = "OndaCero";
emisoras[0, 1] = "mms://a562.l507241195.c5072.e.lm" +
".akamaistream.net/D/562/5072/v0001/reflector:41195";

//FissFM
emisoras[1, 0] = "KissFM";
emisoras[1, 1] = "http://216.246.4.18/asxfiles-live/" +
"ny60winlive7001.asx";

//Cope
emisoras[2, 0] = "Cope";
emisoras[2, 1] = "mms://live.cope.edgestreams.net/" +
"reflector:34744";
}

Añadimos un ListBox y hacemos que use los datos de ese array, para eso en el constructor de la clase llamamos a un método “MostrarEmisoras” que será:

public void MostrarEmisoras()
{
for (int i = 0; i < emisoras.GetLength(0); i++)
listBox1.Items.Add(emisoras[i, 0]);
}

De esa forma estamos añadiendo la primera celda de cada fila del array (por decirlo de alguna forma) al ListBox, que es la que contiene el nombre de las emisoras. Ahora tenemos que hacer que cuando el usuario haga click en un elemento de la lista, se cargue en el Windows Media la dirección de la emisora, es decir, la segunda celda de esa fila. Para ello, en el evento

“SelectedIndexChanged” del ListBox pondremos:

int index = ((ListBox)sender).SelectedIndex;
if (index != -1)
windowsMedia.URL = emisoras[((ListBox)sender).SelectedIndex, 1];

El motivo de comprobar el “-1” es por si el usuario pulsa una fila del ListBox vacía.

Pues, por ahora nada más. Como siempre, encantado de recibir comentarios y sugerencias :)

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

2 comentarios

  1. Mira, esto parece facil de hacer (con la inestimable ayuda del windows media) y una buena aportación al PFC (porque no además de música no se puede transmitir radio). Veo interesante intentar automatizar la obtención de emisoras pasando esa responsabilidad a una clase factory que por ejemplo genere objetos DatosEmisora con la información de la misma (nombre y mms). Luego este objeto luego podría obtener las direcciones de una BD, un servicio Web….

  2. Si quieres hacer el tema portable y no cambiar demasiado como lo tienes hecho, también te recomiendo hacer algo parecido a una factory mezclado con un adapter, es decir, hacer un interfaz que contemple todos los servicios de los reproductores (play, stop, random, next, …) y luego hacer clases que encapsulen los reproductores disponibles en cada plataforma. Posteriormente se le podría solicitar a un factory un reproductor adecuado para la plataforma en la que estés, dejando pues a esta clase factory la responsabilidad de decidir eso y haciendo al resto del programa independiente de este tema. Incluso se podrían seleccionar distintos reproductores para una misma plataforma. Si quieres discutir del tema más en detalle vente a verme un día y lo hablamos :)

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *