Reproductor de mp3
Creaci�n de una clase para la reproducci�n de archivos mp3.
29 de Junio de 2003 (08/Jul/2003)
Autor: Gonzalo Antonio sosa M. y [email protected]
Uso de Nuestra Clase.
Sin m�s pre�mbulo, nos ponemos a programar nuestra aplicaci�n.
Importamos el espacios de nombres necesarios:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO;Agregamos algunas declaraciones de variables.
// Creamos el objeto dela clase reproductor. private Reproductor Sonido = new Reproductor(); // Una colecci�n para agrupar los elementos listados. private Hashtable hashMusica = new Hashtable(); // Bandera para informar sobre el arrastre del indicador de progreso. private bool trackBarClick = false;La codificaci�n del cuerpo de la clase se ha definido como sigue:
private void Form1_Load(object sender, System.EventArgs e) { // Inicializamos el panel de mensajes. stMensajes.Panels[0].Text = "Listo"; // Asiganamos un manejador para el evento Mensajes del Reproductor. Sonido.ReproductorEstado += new Reproductor.ReproductorMessage( this.MensajesDelReproductor); // Establecemos la propiedad que permite seleccionar varios elementos // en el cuadro de dialogo abrir. Of.Multiselect = true;//Verificamos el n�mero de dispositivos de salida existentes int numDevs = Sonido.DispositivosDeSonido(); if (numDevs == 0) MessageBox.Show("No se han encontrado dispositivos de salida de audio \n presentes en el sistema", "Dispositivos no encontrados", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }/// <summary> /// M�todo que gestiona los mensajes emitidos por la clase Reproductor. /// </summary> /// <param name="Msg">Cadena de mensajes.</param> private void MensajesDelReproductor(string Msg) { // S� el mensaje es diferente de Ok, if (Msg != "Ok") { // se muestra en el panel de mensajes. stMensajes.Panels[0].Text = Msg; // y detenemos el reloj. timer1.Stop(); timer1.Enabled = false; } } private void button1_Click(object sender, System.EventArgs e) { // Iniciamos la Reproducci�n IniciarReproduccion(); } private void Form1_DragOver(object sender, System.Windows.Forms.DragEventArgs e) { // Nos aseguramos que estamos arrastrando archivos, no texto u otra cosa if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) // permitimos la operaci�n. e.Effect = DragDropEffects.Copy; } private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { // obtenemos la lista de los archivos arrastrados. string[] archivos = (string[])(e.Data.GetData(DataFormats.FileDrop)); // por cada archivo en la lista, for (int i = 0; i < archivos.Length; i++) { // si la extensi�n del archivo es la correcta if (Path.GetExtension(archivos[i]) == ".mp3") // agrega a la lista de reproducci�n. AgregarArchivos(Sonido.NombreLargo(archivos[i])); } } private void linkLabel2_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) { // Si hay elementos en la lista de reproducci�n if (listBox1.Items.Count > 0) { // se eliminan de la lista, y de la colecci�n. listBox1.Items.Clear(); hashMusica.Clear(); } } private void button4_Click(object sender, System.EventArgs e) { // Cerramos la aplicaci�n. Close(); } private void button2_Click(object sender, System.EventArgs e) { if (button2.Text == "&Pausar") { // se env�a la operaci�n de pausar, Sonido.Pausar(); // cambiamos el texto del bot�n button2.Text = "&Continuar"; // detenemos el reloj. timer1.Stop(); } else // s� el archivo se encontraba pausado, { // continuamos con la reproducci�n Sonido.Continuar(); // cambiamos el texto del bot�n. button2.Text = "&Pausar"; // iniciamos el reloj. timer1.Start(); } } private void button3_Click(object sender, System.EventArgs e) { // Detenemos la reproducci�n. DetenerReproduccion(); } private void timer1_Tick(object sender, System.EventArgs e) { // Cada tick de nuestro reloj de control, nos permitir� // actualizar el panel de tiempos, con el total de tiempo y // tiempo transcurrido y el progreso stTiempos.Panels[0].Text = "Tiempo Total: " + Sonido.Tama�o(); stTiempos.Panels[1].Text = "Tiempo Tracurrido: " + Sonido.Posicion(); stMensajes.Panels[0].Text ="Estado del Reproductor:"+ Sonido.Estado(); if (!trackBarClick) trackBar1.Value = (int) Sonido.CalcularPosicion(); // s� la reproducci�n se ha detenido, if (Sonido.EstadoDetenido()) { // Cerramos el archivo y los recursos utilizados DetenerReproduccion(); // Si a�n hay elementos que recorrer en la lista // y la opci�n de avance autom�tica este habilitada if((listBox1.SelectedIndex < listBox1.Items.Count-1)&& checkBox1.Checked) { // avanzamos en una posici�n el elemento actualmente seleccionado listBox1.SelectedIndex = listBox1.SelectedIndex + 1; // e iniciamos nuevamente la reproducci�n. IniciarReproduccion(); } } } private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) { // Establecemos el filtro para el tipo de archivos que deseamos Of.Filter = "Archivos de mp3 (*.mp3) | *.mp3"; if (Of.ShowDialog() == DialogResult.OK) { // agregamos los elementos a la lista de reproducci�n. string[] archivos = Of.FileNames; for (int i = 0; i < archivos.Length; i++) AgregarArchivos(archivos[i]); } } private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // Verificamos que el reproductor no se encuetre activo, // pausado o el archivo abierto. if (Sonido.EstadoReproduciendo() || Sonido.EstadoPausado() || Sonido.EstadoAbierto()) // de ser as�, detenemos la reproducci�n y cerramos el archivo. Sonido.Cerrar(); } /// <summary> /// Agrega nombre de archivos sin extensi�n a la lista de reproducci�n y /// nombres de archivos largos a la colecci�n de m�sica. /// </summary> /// <param name="NombreArchivoLargo">Nombre de archivo completo.</param> private void AgregarArchivos(string NombreArchivoLargo) { // Obtenemos el nombre de archivo, eliminando la ruta y la extensi�n. string nombreArchivo = Path.GetFileNameWithoutExtension(NombreArchivoLargo); // agregamos la ruta completa a la lista de reproducci�n, if (!hashMusica.ContainsKey(nombreArchivo)) { hashMusica.Add(nombreArchivo, NombreArchivoLargo); // agregamos solo el nombre del archivo a la lista. listBox1.Items.Add(nombreArchivo); } } /// <summary> /// Devuelve la ruta completa a partir del nombre de archivo obtenido /// de la lista de reproducci�n. /// </summary> /// <param name="ArchivoBuscado">Nombre de archivo seleccionado.</param> /// <returns>Cadena con la informaci�n completa del archivo.</returns> private string ObtenerNombreLargo(string ArchivoBuscado) { // Recorremos cada elemento de la colecci�n de m�sica, foreach (DictionaryEntry entry in hashMusica) { // Si encontramos el elemento deseado, if (entry.Key.ToString() == ArchivoBuscado) // devolvemos la informaci�n sobre �l. return entry.Value.ToString(); } // de no ser as�, devolvemos una cadena vac�a. return ""; } private void listBox1_DoubleClick(object sender, System.EventArgs e) { // Iniciamos la reproducci�n IniciarReproduccion(); } private void IniciarReproduccion() { // S� hay un elemento seleccionado en la lista if (listBox1.SelectedIndex > -1) { // Si hay alg�n otro archivo escuch�ndose, se detiene. if (Sonido.EstadoReproduciendo()) DetenerReproduccion(); // Asignamos el nombre del archivo a la propiedad correspondiente, Sonido.NombreDeArchivo = ObtenerNombreLargo( listBox1.SelectedItem.ToString()); // Iniciamos la reproducci�n, Sonido.Reproducir(); // establecemos los valores para la barra de progreso. trackBar1.Minimum = 0; trackBar1.Maximum = (int) Sonido.CalcularTama�o(); // Iniciamos el reloj de control. timer1.Enabled = true; timer1.Start(); } } private void trackBar1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { // si se ha hecho click en la barra de progreso, // habilitamos el avance manual. trackBarClick = true; } private void trackBar1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { // Deshabilitamos el avance manual trackBarClick = false; // detenemos la reproducci�n actual Sonido.Detener(); // Avanzamos el apuntador de archivo a la posici�n deseada, Sonido.Reposicionar(trackBar1.Value); // reinciamos la reproducci�n desde ese punto Sonido.ReproducirDesde(trackBar1.Value); // iniciamos el reloj nuevamente. timer1.Start(); } /// <summary> /// Detiene la reproducci�n actual y libera los recursos utilizados. /// </summary> private void DetenerReproduccion() { // Cerramos el archivo actual en reproducci�n,detenemos el reloj de control // e reiniciamos los recursos utilizados. Sonido.Cerrar(); timer1.Enabled = false; timer1.Stop(); trackBar1.Value = 0; stTiempos.Panels[0].Text = "Tiempo Total:"; stTiempos.Panels[1].Text = "Tiempo Transcurrido:"; stMensajes.Panels[0].Text = "Listo"; } private void linkLabel3_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e) { // Si hay alg�n elemento seleccionado if (listBox1.SelectedIndex > -1) // lo eliminamos. listBox1.Items.RemoveAt(listBox1.SelectedIndex); }
Anterior | Men� | Siguiente |