NAudio Asio录制和播放

我正在尝试编写自己的VST主机,为此我需要录制和播放Asio驱动程序的音频(在我的情况下是音频接口)。 这就是我试图使用NAudio的AsioOut的原因。

出于测试目的,我目前只是尝试记录输入,复制并将其播放到输出。

我的代码如下所示:

var asioout = new AsioOut(); BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(44100, 2)); asioout.AudioAvailable += new EventHandler(asio_DataAvailable); asioout.InitRecordAndPlayback(wavprov, 2, 25); asioout.Play(); 

 void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e) { Array.Copy(e.InputBuffers, e.OutputBuffers, e.InputBuffers.Length); e.WrittenToOutputBuffers = true; } 

这样我听不到任何输出。 我也这样试过:

 void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e) { byte[] buf = new byte[e.SamplesPerBuffer]; for (int i = 0; i < e.InputBuffers.Length; i++) { //Marshal.Copy(e.InputBuffers[i], e.OutputBuffers, 0, e.InputBuffers.Length); //also tried to upper one but this way i also couldn't hear anything Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer); Marshal.Copy(buf, 0, e.OutputBuffers[i], e.SamplesPerBuffer); } e.WrittenToOutputBuffers = true; } 

通过这种方式,我可以听到输入音量的声音,但是它非常笨拙。

我在这做错了什么?

PS:我知道如何录制和播放……存在但是我无法从这个post中得到完整的答案,只是想用Marshall.Copy来尝试….

您的第二次尝试比第一次更正确:必须单独复制每个输入缓冲区。 但是,复制方法的最后一个参数应该是字节数,而不是缓冲区中的样本数。 每个样本通常为3或4个字节,具体取决于您的ASIO位深度。