2015-02-21 4 views
0

У меня есть аудиофайлы Mp3 с той же музыкой, которые кодируются с различной частотой дискретизации и глубиной бит.Конвертация файлов NAudio

Например:

  • Титаник - 96 Кбит - 44 KHz.mp3
  • Титаник - 96 Кбит - 48 KHz.mp3
  • Титаник - 128 Кбит - 44 KHz.mp3
  • титановые - 128 Кбит - 48 KHz.mp3
  • Титаник - 192 Кбит - 44 KHz.mp3
  • Титаник - 192 Кбит - 48 KHz.mp3
  • Титаник - 224 Кбит - 44 KHz.mp3
  • Титаник - 224 Кбит - 48 KHz.mp3
  • Титаник - 320 Кбит - 44 KHz.mp3
  • Титаник - 320 Кбит - 48 KHz.mp3

Я хочу преобразовать все эти Mp3-файлы в формат Wav (формат ввода-вывода PCM IEEE), используя NAudio.

Перед преобразованием в формат Wav я хочу, чтобы все файлы Mp3 были преобразованы в стандартную частоту дискретизации и глубину бита: 192 Кбит/с, 48 кГц.

Нужно ли делать повторную выборку Mp3 до требуемой скорости Mp3 и глубины бит, прежде чем, наконец, преобразовать ее в формат Wav? Или это можно сделать при преобразовании в формат Wav?

Оцените, можете ли вы предоставить пример кода.

Спасибо.

ответ

2

Да, необходимо преобразовать все ваши файлы .mp3 в требуемый курс, прежде чем преобразовывать их в формат .wav. Это связано с тем, что метод преобразования NAudio.Wave.WaveFileWriter.CreateWaveFile(string filename, IWaveProvider sourceProvider) не имеет параметров, соответствующих скорости или частоте. Метод подпись (взято из их коды в GitHub) выглядит следующим образом:

/// <summary> 
    /// Creates a Wave file by reading all the data from a WaveProvider 
    /// BEWARE: the WaveProvider MUST return 0 from its Read method when it is finished, 
    /// or the Wave File will grow indefinitely. 
    /// </summary> 
    /// <param name="filename">The filename to use</param> 
    /// <param name="sourceProvider">The source WaveProvider</param> 
    public static void CreateWaveFile(string filename, IWaveProvider sourceProvider) 
    { 

Так как вы можете видеть, вы не можете передать скорость или частоту во время преобразования в .wav. Вы можете сделать это следующим образом:

int outRate = 48000; 
var inFile = @"test.mp3"; 
var outFile = @"test resampled MF.wav"; 
using (var reader = new Mp3FileReader(inFile)) 
{ 
    var outFormat = new WaveFormat(outRate, reader.WaveFormat.Channels); 
    using (var resampler = new MediaFoundationResampler(reader, outFormat)) 
    { 
     // resampler.ResamplerQuality = 48; 
     WaveFileWriter.CreateWaveFile(outFile, resampler); 
    } 
} 
+0

Какова настройка для достижения скорости передачи 192 кбит/с? – user3261909

+0

Битрейт в PCM WAV-файлах - это прямой расчет на основе частот * каналов * бит глубины (48000 * 2 * 16) или вдвое больше, чем для IEEE-float. Файлы WAV имеют гораздо более высокие битрейты, чем MP3. –

+0

Как можно выполнить повторную выборку в памяти (поток) вместо записи в файл? – user3261909

Смежные вопросы