Как конвертировать MP3 файл в WAV с помощью NAudio в WinForms C #

Один из самых больших недостатков MP3-файлов заключается в том, что они просто не годятся для зацикливания, поскольку в начале и в конце файла всегда будет небольшой промежуток без звука. Это связано с тем, что алгоритм сжатия MP3 оставляет пустое пространство от 10 мс до 50 мс в начале и конце файла. Поэтому, если вы попытаетесь зациклить звук, вы услышите короткую паузу в точке зацикливания. Короче говоря, вы не получите бесшовной петли. Задержка вызываемого кодера, приглушенный промежуток, происходит потому, что стандарт MP3 не определяет способ записи величины задержки или заполнения для последующего удаления. Эта задержка также может варьироваться от датчика к датчику. Это затрудняет автоматическое удаление. Хуже того, даже если два трека распакованы и объединены в один трек, между ними обычно будет пропасть. Это одна из технических причин, почему кто-то хотел бы всегда генерировать файлы в формате WAV, однако существуют и другие простые причины, поскольку программы требуют только и, в частности, формат WAV вместо MP3.

Вы можете легко конвертировать файлы MP3 в формат WAV, используя широко известную библиотеку NAudio, библиотеку аудио и MIDI для .NET, выполнив любой из предложенных в этой статье вариантов. Они очень просты, и мы используем их в контексте приложения WinForms с простой формой, имеющей одну кнопку. Код, который преобразует файлы MP3 в формат WAV, выполняется, когда пользователь нажимает кнопку, прикрепленную к button1_Click событие. Все они следуют следующей логике: файл MP3 открывается с помощью Mp3FileReader и затем передается в WaveFileWriter.CreateWaveFile написать преобразованный PCM аудио для WAV файл. Обычно это 16,1-битное стерео 44,1 кГц, но используется любой формат, который излучает декодер MP3.

Требования

Вам нужно будет установить библиотеку NAudio в свой проект, используя менеджер пакетов NuGet. Откройте проект Winforms C # и откройте менеджер пакетов NuGet в обозревателе решений:

Перейдите на вкладку Обзор и найдите NAudio:

NAudio Установить пакет NuGet

Из списка выберите пакет NAudio от Mark Heath и установите его, просто нажав кнопку Install. После завершения установки вы сможете импортировать пространство имен Wave NAudio в класс, где вы хотите использовать его следующим образом:

using NAudio.Wave;

Если у вас уже установлена ​​программа NAudio, перейдите к конвертации файла MP3, используя любую из следующих опций:

Заметка

Опция, которую вам нужно использовать, полностью зависит от хост-компьютера, на котором выполняется код. Например, класс Mp3FileReader использует MP3-кодек ACM, который присутствует практически во всех потребительских версиях Windows. Тем не менее, важно отметить, что в некоторых версиях Windows Server этот кодек не установлен без установки компонента «Desktop Experience».

А. Использование класса Mp3FileReader

Самый простой способ конвертировать MP3-файл в WAV — это использовать класс Mp3FileReader, который в качестве первого аргумента ожидает путь к файлу, который вы хотите конвертировать. Это вернет экземпляр класса для чтения, требуемый важной частью для преобразования файла, WaveFileWrite класс, который предлагает статический метод, а именно CreateWaveFile где происходит волшебство преобразования. Этот метод ожидает в качестве первого аргумента путь к файлу назначения и имя файла WAV, а в качестве второго аргумента — считыватель файла MP3 (который указывает, какое содержимое следует сохранить в новом файле):

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 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)
{
// Store the path of the file that you want to convert into a wav
// as well its new path and name with extension
string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the Mp3FileReader to obtain the content of the audio and use the wavfilewriter
// to create the new file in wav format in the providen path with the content of the file
using (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath))
{
WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}
}
}
}

Б. Использование класса MediaFoundationReader

MediaFoundationReader — это гибкий класс, который позволяет читать любые форматы аудиофайлов, которые поддерживает Media Foundation. Это обычно включает MP3 в большинстве потребительских версий Windows, но также обычно поддерживает WMA, AAC, MP4 и другие. Так что, если вам не требуется поддержка Windows XP или версия Windows без каких-либо установленных Media Foundation, это отличный выбор. Логика почти такая же, как у класса Mp3Reader, создайте считыватель и предоставьте его в качестве второго аргумента CreateWaveFile метод 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)
{
// Store the path of the file that you want to convert into a wav
// as well its new path and name with extension
string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the MediaFoundationReader class to obtain the content of the audio and use the wavfilewriter
// to create the new file in wav format in the providen path with the content of the file
using (MediaFoundationReader reader = new MediaFoundationReader(InputAudioFilePath))
{
WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}
}
}
}

C. Использование класса Mp3FileReader с NLayer

Если вы хотите использовать NLayer, полностью управляемый декодер MP3 в WAV, вам также необходимо установить его с помощью диспетчера пакетов NuGet:

NLayer Mp3FileReader Установка с помощью пакета NuGet

После установки вы сможете импортировать класс NAudioSupport NLayer, который мы будем использовать в процессе конвертации. Логика следует той же логике из предыдущих примеров, однако Mp3FileReader Экземпляр класса получит в качестве второго аргумента в конструкторе лямбда-выражение с новым экземпляром 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;
// Import Wave of NAudio to use the 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)
{
// Store the path of the file that you want to convert into a wav
// as well its new path and name with extension
string InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the MediaFoundationReader class to obtain the content of the audio and use the wavfilewriter
// to create the new file in wav format in the providen path with the content of the file
using (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath, wf => new Mp3FrameDecompressor(wf)))
{
WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}
}
}
}
Ссылка на основную публикацию
Adblock
detector