NAudio 文件转换
NAudio File Conversion
我有 相同音乐 的 Mp3 音频文件,它们以不同的采样率和位深度编码。
例如:
- 泰坦尼克号 - 96 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 96 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 128 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 128 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 192 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 192 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 224 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 224 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 320 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 320 Kbps - 48 KHz.mp3
我想使用 NAudio 将所有这些 Mp3 文件转换为 Wav 格式(PCM IEEE 浮点格式)。
在转换为Wav格式之前,我想确保所有的Mp3文件都必须转换为标准的采样率和位深度:192 Kbps, 48 KHz.
在最终将其转换为 Wav 格式之前,我是否需要将 Mp3 重新采样到所需的 Mp3 速率和位深度?还是转成Wav格式也可以?
如果您能提供示例代码,我们将不胜感激。
谢谢。
是的,在将它们转换为 .wav
格式之前,您需要将所有 .mp3
文件重新采样到所需的速率。这是因为转换方法NAudio.Wave.WaveFileWriter.CreateWaveFile(string filename, IWaveProvider sourceProvider)
没有对应rate或frequency的参数。方法签名(取自他们在 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);
}
}
我有 相同音乐 的 Mp3 音频文件,它们以不同的采样率和位深度编码。
例如:
- 泰坦尼克号 - 96 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 96 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 128 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 128 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 192 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 192 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 224 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 224 Kbps - 48 KHz.mp3
- 泰坦尼克号 - 320 Kbps - 44 KHz.mp3
- 泰坦尼克号 - 320 Kbps - 48 KHz.mp3
我想使用 NAudio 将所有这些 Mp3 文件转换为 Wav 格式(PCM IEEE 浮点格式)。
在转换为Wav格式之前,我想确保所有的Mp3文件都必须转换为标准的采样率和位深度:192 Kbps, 48 KHz.
在最终将其转换为 Wav 格式之前,我是否需要将 Mp3 重新采样到所需的 Mp3 速率和位深度?还是转成Wav格式也可以?
如果您能提供示例代码,我们将不胜感激。
谢谢。
是的,在将它们转换为 .wav
格式之前,您需要将所有 .mp3
文件重新采样到所需的速率。这是因为转换方法NAudio.Wave.WaveFileWriter.CreateWaveFile(string filename, IWaveProvider sourceProvider)
没有对应rate或frequency的参数。方法签名(取自他们在 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);
}
}