c# - 混合两个不同比特率的wav文件

标签 c# wav naudio

我尝试使用 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);
        }

最佳答案

我假设您正在尝试混合不同采样率的多个文件。这是使用 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)。

关于c# - 混合两个不同比特率的wav文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570783/

相关文章:

c# - machine.config processModel autoConfig ="true or false"用于 .net 4.0 中的显式值

c# - 适用于 Excel 2007 和 2010 的 Excel 插件

matlab - 分析Wav文件格式

python - 如何在函数之间传递已编辑的WAV而不在两者之间保存WAV?

c# - Ubuntu Linux 上的 Monodevelop + NAudio 告诉我“表达式表示方法组所在的类型

c# - 使用 NAudio 读取 mp3 文件速度较慢

c# - 如何将使用 ROW_NUMBER() 的查询转换为 linq?

java - 在Android上混合声音文件

c# - 如何使用c#更改波形文件中的采样率

c# - 现在和过去日期时间之间的时间跨度