【问题标题】:Mixing two wav files of different bit rate混合两个不同比特率的wav文件
【发布时间】:2014-02-05 17:55:20
【问题描述】:

我尝试使用 NAudio 库混合两个 wav 文件。如果它们具有相同的比特率,我能够得到一个混合的 wav 文件。我关心的是混合不同比特率的wav文件。请建议是否可以使用 NAudio 或其他一些 API/库。

下面给出了我用于混合相同比特率的 wav 文件的代码:

  using (var reader1 = new WaveFileReader(inpFile1))
        using (var reader2 = new WaveFileReader(inpFile1))
        {
            var inputs = new List<ISampleProvider>() {
             reader1.ToSampleProvider(),
             reader2.ToSampleProvider(),
        };
            var mixer = new MixingSampleProvider(inputs);
            WaveFileWriter.CreateWaveFile16(outputFile, mixer);
        }

【问题讨论】:

    标签: c# wav naudio


    【解决方案1】:

    我假设您正在尝试混合具有不同采样率的多个文件。以下是使用 NAudio 的方法(我使用的是 MediaFoundationResampler,但还有其他重采样方式)

    var paths = new[] {
        @"input1.wav",
        @"input2.wav",
        @"input3.wav"
    };
    
    // open all the input files
    var readers = paths.Select(f => new WaveFileReader(f)).ToArray();
    
    // choose the sample rate we will mix at
    var maxSampleRate = readers.Max(r => r.WaveFormat.SampleRate);
    
    // create the mixer inputs, resampling if necessary
    var mixerInputs = readers.Select(r => r.WaveFormat.SampleRate == maxSampleRate ?
        r.ToSampleProvider() :
        new MediaFoundationResampler(r, WaveFormat.CreateIeeeFloatWaveFormat(maxSampleRate, r.WaveFormat.Channels)).ToSampleProvider());
    
    // create the mixer
    var mixer = new MixingSampleProvider(mixerInputs);
    
    // write the mixed audio to a 16 bit WAV file
    WaveFileWriter.CreateWaveFile16(@"d:\mixed.wav", mixer);
    
    // clean up the readers
    foreach(var reader in readers)
    {
        reader.Dispose();
    }
    

    请注意,这不会处理单声道和立体声输入文件的混合。在这种情况下,您还需要将单声道输入转换为立体声(例如使用MonoToStereoSampleProvider)。

    【讨论】:

    • 您可以将r.WaveFormat.Channels 替换为2 来修复立体声/单声道混音问题
    【解决方案2】:

    我建议您首先选择要保留的采样率值,然后重新采样另一个。如果采样率变化率不是整数,重采样可能会增加失真。

    要在 C# 中重新采样 wav 文件,请参阅这些帖子

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多