NAudio 记录并保存麦克风输入和扬声器输出
NAudio record and save microphone input and speaker output
我想通过 Skype 或类似应用程序录制对话(这些录音将在保存后进行处理)。我试图用 NAudio 来实现这一点。
到目前为止,我设法使用 WasapiLoopbackCapture 录制扬声器音频并将其保存为 WAV 文件,我还设法使用 WaveIn 录制和保存麦克风音频。主要问题是我不能将这 2 个文件混合成一个文件,如下所述 link: 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);
}
我在尝试创建 MixingSampleProvider 时收到此异常:System.ArgumentException:'All mixer inputs must have the same WaveFormat'。
我想知道我是否使用了正确的方式来录制这两个音频?另外,如果有一种方法可以将两个音频记录在一个文件中,那就太好了,但我不确定是否可行。
All mixer inputs must have the same WaveFormat
提示你的没有。
换行
waveSourceMic.WaveFormat = new WaveFormat(44100, 1);
到
waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;
所以,现在您将对麦克风和扬声器使用相同的格式,混音器应该没问题。
我想通过 Skype 或类似应用程序录制对话(这些录音将在保存后进行处理)。我试图用 NAudio 来实现这一点。
到目前为止,我设法使用 WasapiLoopbackCapture 录制扬声器音频并将其保存为 WAV 文件,我还设法使用 WaveIn 录制和保存麦克风音频。主要问题是我不能将这 2 个文件混合成一个文件,如下所述 link: 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);
}
我在尝试创建 MixingSampleProvider 时收到此异常:System.ArgumentException:'All mixer inputs must have the same WaveFormat'。
我想知道我是否使用了正确的方式来录制这两个音频?另外,如果有一种方法可以将两个音频记录在一个文件中,那就太好了,但我不确定是否可行。
All mixer inputs must have the same WaveFormat
提示你的没有。
换行
waveSourceMic.WaveFormat = new WaveFormat(44100, 1);
到
waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;
所以,现在您将对麦克风和扬声器使用相同的格式,混音器应该没问题。