En mis dos anteriores post comentaba la manera de reproducri archivos de sonido del sistema con .NET, tanto en la versión 1.x como en la 2.0. En el último un visitante preguntaba cómo podemos reproducir MP3 desde .NET.

La solución más sencilla es la de toda la vida: recurrir a la API de MCI para hacerlo.

MCI es el acrónimo de Media Control Interface. se trata de una API basada en comandos de texto que permite controlar los diferentes dispositivos multimedia de reproducción y grabación que hay en el sistema. Gracias a MCI podemos reproducir vídeo, audio, CDs, MIDI, etc.. . así como grabar desde micrófonos, cámaras y demás, todo ello de forma estándar e independiente del dispositivo real que haya detrás.

La única función importante de MCI que nos interesa para nuestro ejemplo de reproducción de MP3 es 'mciSendString'. Ésta permite enviar comandos MCI para abrir dispositivos y operar con ellos.

Para reproducir un archivo MP3 (o realmente cualquier otro) sólo necesitamos conocer dos comandos de MCI: open y play. El primero sirve abrir un dispositivo lógico de reproducción indicando ´cuál es y de qué manera lo queremos usar. El segundo simplemente hace que éste reproduzca el archivo multimedia seleccionado.

En el caso de MP3 el tipo de dispositivo es mpegvideo, por lo que el comando a enviar es:

open "ruta a mi archivo multimedia" type mpegvideo alias miMP3

Lo que vaa continuación de la palabra 'alias' es un nombre únuco que damos al recurso multimedia desde nuestra aplicación. De este modo podemos controlar y reproducir varios archivos a la vez.

Con esta teoría ya podemos pasar a la práctica y reproducir MP3 fácilmente desde una aplicación Windows de ejemplo. Abre un nuevo proyecto de Windows Forms (mi código va en C# pero es directo traducirlo a VB). En el formulario que aparece agregue el siguiente using en la parte superior:

using System.Runtime.InteropServices;

Esto nos permite definir la función de la API que necesitamos que es la siguiente y deberá añadir dentro del código del formulario:

[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);

Sólo vamos a usar en este ejemplo el primer parámetro que es el comando que queremos enviar a MCI. Los otros parámetros se usarían para obtener valores (por ejemplo el volumen o la posición actuales), pero no los usaremos aquí (queda como "deberes" para el lector ;-)).

Define a continuación el siguiente método en tu formulario:

public void PlayMP3(string rutaArchivo)
{
  //Abrir el dispositivo MCI
  string comandoMCI = string.Format("open \"{0}\" type mpegvideo alias miMP3", rutaArchivo);
  mciSendString(comandoMCI, null, 0, IntPtr.Zero);
  //Reproducir el archivo abierto
  comandoMCI = "play miMP3";
  mciSendString(comandoMCI, null, 0, IntPtr.Zero);
}

Como vemos es muy fácil. El método toma como parámetro la ruta completa al archivo que queremos reproducir y se lanzan dos comandos MCI. El primero de ellos abre el archivo para su reproducción. El segundo lo reproduce. para reproducir cualquier MP3 sólo hay que escribir algo como:

PlayMP3(@"E:\Black Eyed Peas - Pump It.mp3");

¡Ya está! Muy fácil ¿verdad?

En este enlace tienes una lista con todos los comandos MCI existentes. Investígala más por tu cuenta para hacer muchas más cosas y crear un reproductor completo de audio y vídeo.

También es posible reproducir archivos multimedia usando DirectX. Si estás interesado he estado googleando un poco y, aquí y aquí, tienes un par de buenos ejemplos de como hacerlo con C#.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA