我尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)
我假设您正在尝试混合不同采样率的多个文件.以下是如何使用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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不会处理单声道和立体声输入文件的混合.在这种情况下,您还需要将单声道输入转换为立体声(例如使用MonoToStereoSampleProvider).
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |