经过很多头痛之后,我的申请(使用Naudia)几乎完成了。现在,由于我可以通过捕获缓冲区,处理并传递回输出缓冲区来实时管理所有FFT,因此仍然存在一个问题。我只能在前两个输入和输出通道上完成所有这些工作。由于我的设备具有8个I / O通道,因此我需要以某种方式访问该通道。
我不需要在这里做一些复杂的事情,例如混合,我只需要能够改变自己正在做的事情:
1-> inbuffer->操作-> outbuffer-> 1
2-> inbuffer-> manipulate-> outbuffer-> 2
到
5-> inbuffer->操作-> outbuffer-> 5
6-> inbuffer->操作-> outbuffer-> 6
无论我做什么,当我通过AsioAudioAvailableEvent捕获了asiobuffer时 只能访问通道1和2的输入和输出缓冲区。
WaveFormat waveFormat = new WaveFormat(48000, 24, chnr);
buffer = new BufferedWaveProvider(waveFormat);
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(ASIODriver_AudioAvailable);
asioOut.InitRecordAndPlayback(buffer, chnr, 48000);
,方法如下:
私有无效ASIODriver_AudioAvailable(对象发送者,AsioAudioAvailableEventArgs e) {
Marshal.Copy(e.InputBuffers[0], L_stack.buf, 0, e.SamplesPerBuffer * 4);
L_Loadoutputbuffer();
Marshal.Copy(L_stack.buf, 0, e.OutputBuffers[0], e.SamplesPerBuffer * 4);
e.WrittenToOutputBuffers = true;
}
我可以通过e.Inbutbuffers [1]和e.Outbutbuffers [1]获得的第二个通道; 就是这样。即使我在init中增加了“ chnr”,Higher也不存在。我该如何访问其他渠道? 希望有一种简单的方法,因为我的调整过滤器非常耗时并且可以实时使用
感谢弗兰克