1

我需要捕获多个线路输入的音频。据我了解,它应该使用 WaveMixerStream32 类来完成,但无法弄清楚如何将多个 WaveIn 初始化为 WaveStream 以将它们传递给 WaveMixerStream 的 AddInputStream 方法。我可以用代码录制单行的音频:

waveIn = new NAudio.Wave.WaveIn();
waveIn.WaveFormat = new NAudio.Wave.WaveFormat(44100, 1);
waveIn.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(audioDataAvailable);
waveWriter = new NAudio.Wave.WaveFileWriter(wavFileName, waveIn.WaveFormat);
waveIn.StartRecording();
4

1 回答 1

2

如果可能,最简单的方法是将它们全部单独捕获到文件中,然后再混合。

如果您必须即时混音,请为每个 WaveIn 创建一个 BufferedWaveProvider,并在样本可用时编写它们。然后可以将这些 BufferedWaveProviders 全部添加到 MixingSampleProvider 中(假设它们都是相同的通道数和采样率)。棘手的一点是决定何时从 MixingSampleProvider 中读取数据。理想情况下,您希望 WaveIn 的每个实例都在其 BufferedWaveProvider 中存放一个充满音频的缓冲区,然后通过混音器提取该数量的音频。只要所有 BufferedWaveProviders 中都有一定数量的数据,您就可以有一个计时器来计时并拉动 MixingSampleProvider。

于 2013-10-30T10:06:55.250 回答