Aprende a convertir un archivo de audio MP3 al formato WAV fácilmente usando la biblioteca NAudio para C# en Windows Forms.

Cómo convertir un archivo MP3 a WAV con NAudio en WinForms C#

Uno de los mayores inconvenientes de los archivos MP3 es que simplemente no son buenos para la reproducción en bucle, ya que siempre habrá un pequeño espacio silencioso al principio y al final del archivo. Esto se debe a que el algoritmo de compresión MP3 deja un espacio silencioso de 10 ms a 50 ms al principio y al final del archivo. Entonces, si intenta reproducir el audio en bucle, puede escuchar una breve pausa en el punto de bucle. En pocas palabras, no se obtiene un bucle continuo. El retardo del codificador llamado, el espacio silenciado, se produce porque el estándar MP3 no define una forma de registrar la cantidad de retardo o relleno para su eliminación posterior. Este retardo también puede variar de un codificador a otro. Esto dificulta la eliminación automática. Peor aún, incluso si se descomprimen dos pistas y se fusionan en una sola pista, normalmente quedará un espacio entre ellas. Ese'

Puede convertir fácilmente archivos MP3 a WAV utilizando la biblioteca NAudio ampliamente conocida, una biblioteca de audio y MIDI para .NET siguiendo cualquiera de las opciones ofrecidas en este artículo. Son muy sencillos y los estamos usando en el contexto de una aplicación WinForms con un formulario simple que tiene un solo botón. El código que convierte los archivos MP3 a WAV se ejecuta cuando el usuario hace clic en el botón adjunto al evento button1_Click. Todos siguen la siguiente lógica: se abre un archivo MP3 con Mp3FileReader y luego se lo pasa a WaveFileWriter.CreateWaveFile para escribir el PCM audio convertido en un archivo WAV. Por lo general, será estéreo de 44,1 kHz y 16 bits, pero utiliza cualquier formato que emita el decodificador MP3.

Requisitos

Deberá instalar la biblioteca NAudio en su proyecto utilizando el administrador de paquetes NuGet. Abra su proyecto Winforms C # y abra el administrador de paquetes NuGet en el explorador de soluciones:

Vaya a la pestaña Examinar y busque NAudio: 

NAudio Install NuGet Package

De la lista, seleccione el paquete NAudio de Mark Heath e instálelo simplemente haciendo clic en el botón Instalar. Una vez que finalice la instalación, podrá importar el espacio de nombres Wave de NAudio en la clase donde desea usarlo así:

using NAudio.Wave;

Si ya tiene NAudio instalado, proceda a convertir su archivo MP3 usando cualquiera de las siguientes opciones:

Nota

La opción que necesita utilizar depende totalmente de la computadora host que ejecuta el código. Por ejemplo, la clase Mp3FileReader usa el códec MP3 ACM que está presente en casi todas las versiones para consumidores de Windows. Sin embargo, es importante tener en cuenta que algunas versiones de Windows Server no tienen este códec instalado sin instalar el componente "Experiencia de escritorio".

A. Uso de la clase Mp3FileReader

La forma más sencilla de convertir un archivo MP3 a WAV es utilizando la clase Mp3FileReader que espera como primer argumento la ruta al archivo que desea convertir. Esto devolverá una instancia de lector de la clase, requerida por la parte importante para convertir el archivo, la clase WaveFileWrite, que ofrece un método estático, es decir, CreateWaveFiledonde ocurre la magia de conversión. Este método espera como primer argumento la ruta del archivo de destino y el nombre del archivo WAV y como segundo argumento el lector del archivo MP3 (que proporciona qué contenido debe almacenarse en el nuevo archivo):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// Importar Wave de NAudio para usar Mp3FileReader
using NAudio.Wave;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Almacene la ruta del archivo que desea convertir a wav
            // así como su nueva ruta y nombre con extensión
            string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
            string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";

            // Use Mp3FileReader para obtener el contenido del audio y use el wavfilewriter
            // para crear el nuevo archivo en formato wav en la ruta proporcionada con el contenido del archivo
            using (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath))
            {
                WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
            }
        }
    }
}

B. Usando la clase MediaFoundationReader

MediaFoundationReader es una clase flexible que le permite leer cualquier formato de archivo de audio compatible con Media Foundation. Por lo general, esto incluye MP3 en la mayoría de las versiones para consumidores de Windows, pero también suele ser compatible con WMA, AAC, MP4 y otros. Entonces, a menos que necesite ser compatible con Windows XP o esté en una versión de Windows sin ningún condensador de Media Foundation instalado, esta es una excelente opción. La lógica es casi la misma de la clase Mp3Reader, crea un lector y proporciónalo como segundo argumento del método CreateWaveFile de la clase WaveFileWriter:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// Import Wave of NAudio to use the MediaFoundationReader
using NAudio.Wave;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Almacene la ruta del archivo que desea convertir a wav
            // así como su nueva ruta y nombre con extensión
            string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
            string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";

            // Utilice la clase MediaFoundationReader para obtener el contenido del audio y utilice wavfilewriter
            // para crear el nuevo archivo en formato wav en la ruta proporcionada con el contenido del archivo
            using (MediaFoundationReader reader = new MediaFoundationReader(InputAudioFilePath))
            {
                WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
            }
        }
    }
}

C. Usando la clase Mp3FileReader con NLayer

Si desea utilizar NLayer , el decodificador MP3 a WAV totalmente administrado, también debe instalarlo mediante el administrador de paquetes NuGet:

NLayer Mp3FileReader Installing with NuGet Package

Después de la instalación, podrá importar la clase NAudioSupport de NLayer que usaremos en nuestro proceso de conversión. La lógica sigue la misma lógica de los ejemplos anteriores, sin embargo, la Mp3FileReaderinstancia de la  clase recibirá como segundo argumento en el constructor una expresión lambda con una nueva instancia de la clase Mp3FrameDecompressor:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// Importar Wave de NAudio para usar MediaFoundationReader
using NAudio.Wave;
using NLayer.NAudioSupport;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Almacene la ruta del archivo que desea convertir a wav
            // así como su nueva ruta y nombre con extensión
            string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
            string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";

            // Utilice la clase MediaFoundationReader para obtener el contenido del audio y utilice wavfilewriter
            // para crear el nuevo archivo en formato wav en la ruta proporcionada con el contenido del archivo
            using (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath, wf => new Mp3FrameDecompressor(wf)))
            {
                WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
            }
        }
    }
}

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores