2014-02-05 100 views
2

我試着用NAudio庫混合兩個wav文件。如果他們具有相同的比特率,我能夠獲得混合的wav文件。我關心的是混合不同比特率的wav文件。請建議是否可以使用NAudio或其他API /庫。混合兩個不同比特率的wav文件

下面給出我的代碼混合相同比特率的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); 
     } 

回答

4

我假設你想混個不同的多個文件採樣率。這裏是你如何可以用n音訊做到這一點(我使用的是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(); 
} 

注意,這將不會處理的單聲道和立體聲輸入文件的混合物。在這種情況下,您還需要將單聲道輸入轉換爲立體聲(例如,使用​​)。

相關問題