【问题标题】:NAudio File ConversionNAudio 文件转换
【发布时间】:2015-02-22 10:28:41
【问题描述】:

我有相同音乐的 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格式的时候可以吗?

如果您可以提供示例代码,请不胜感激。

谢谢。

【问题讨论】:

    标签: c# converter naudio


    【解决方案1】:

    是的,您需要将所有.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);
        }
    }
    

    【讨论】:

    • 比特率达到 192 Kbps 的设置是什么?
    • PCM WAV 文件中的比特率是基于采样率 * 通道 * 比特深度 (48000 * 2 * 16) 或 IEEE 浮点数的两倍的直接计算。 WAV 文件的比特率比 MP3 高得多。
    • 这种重新采样如何在内存(流)中完成而不是写入文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多