После множества головных болей я почти закончил свое приложение (используя Naudia). Теперь, так как я мог управлять всеми БПФ в режиме реального времени, перехватывая буфер, манипулируя и возвращаясь к выходным буферам, осталась одна проблема. Я могу делать все это только на первых двух входных и выходных каналах. Поскольку мое устройство имеет 8 каналов ввода / вывода, мне как-то нужен доступ к этим каналам.
Мне не нужно делать что-то сложное, например, микширование, мне просто нужно иметь возможность изменить то, что я делаю:
1-> inbuffer-> manipulate-> outbuffer-> 1
2-> inbuffer-> manipulate-> outbuffer-> 2
например.
5-> inbuffer-> manipulate-> outbuffer-> 5
6-> inbuffer-> manipulate-> outbuffer-> 6
что бы я ни делал, когда я ловлю asiobuffer с помощью AsioAudioAvailableEvent
может получить доступ только к входным и выходным каналам 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);
и метод выглядит так:
private void 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];
но это так. Более высокие значения не существуют, даже когда я увеличиваю "chnr" в init. Как я могу получить доступ к этим другим каналам?
Надеюсь, что есть простой способ, так как мой фильтр манипуляции довольно много времени, и я использую в режиме реального времени
Спасибо, Фрэнк