我想通过Skype或类似应用程序记录对话(这些记录将在保存后进行处理)。我试图用NAudio做到这一点。
到目前为止,我设法使用WasapiLoopbackCapture录制扬声器音频并将其保存到WAV文件,并且我设法使用WaveIn录制并保存麦克风音频。主要问题是我无法将这2个文件混合为一个文件,如以下链接所述:https://github.com/naudio/NAudio/blob/master/Docs/MixTwoAudioFilesToWav.md
我开始录制的功能如下:
waveSourceSpeakers = new WasapiLoopbackCapture();
string outputFilePath = @"xxxx\xxx\xxx";
waveFileSpeakers = new WaveFileWriter(outputFilePath, waveSourceSpeakers.WaveFormat);
waveSourceSpeakers.DataAvailable += (s, a) =>
{
waveFileSpeakers.Write(a.Buffer, 0, a.BytesRecorded);
};
waveSourceSpeakers.RecordingStopped += (s, a) =>
{
waveFileSpeakers.Dispose();
waveFileSpeakers = null;
waveSourceSpeakers.Dispose();
};
waveSourceSpeakers.StartRecording();
waveSourceMic = new WaveIn();
waveSourceMic.WaveFormat = new WaveFormat(44100, 1);
waveSourceMic.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
waveSourceMic.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
waveFileMic = new WaveFileWriter(@"xxxx\xxx\xxx", waveSourceMic.WaveFormat);
waveSourceMic.StartRecording();
我尝试混合2个wav文件的函数如下所示:
using (var reader1 = new AudioFileReader(@"xxx\xxx\file1.wav"))
using (var reader2 = new AudioFileReader(@"xxx\xxx\file2.wav"))
{
var mixer = new MixingSampleProvider(new[] { reader1, reader2 });
WaveFileWriter.CreateWaveFile16(@"xxxx\xxx\mixed.wav", mixer);
}
我得到一个异常:System.ArgumentException:尝试创建MixingSampleProvider时,“所有混合器输入必须具有相同的WaveFormat”。
我想知道我是否使用正确的方式录制两种音频?另外,如果有一种方法可以将两个音频都记录在一个文件中,那将是很好的,但是我不确定是否可以。
答案 0 :(得分:0)
所有混频器输入必须具有相同的WaveFormat
提示您没有。
更改行
waveSourceMic.WaveFormat = new WaveFormat(44100, 1);
到
waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;
因此,现在您将对麦克风和扬声器使用相同的格式,并且调音台应该没问题。