如何消除等待时间和从直接监测使用AsioOut(n音讯)回波(how to eliminate la

2019-10-19 16:53发布

基于这个问题我做的: 如何记录并使用AsioOut n音讯播放

有了这个代码:

[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory", SetLastError = false)]
private static unsafe extern void MoveMemory(IntPtr dest, IntPtr src, int size);

private void OnAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
     for (int i = 0; i < e.InputBuffers.Length; i++)
     {
          MoveMemory(e.OutputBuffers[i], e.InputBuffers[i], e.SamplesPerBuffer * e.InputBuffers.Length);
     }

     e.WrittenToOutputBuffers = true;
}

做这样的感觉有点延迟 ,有点回声 ,我不知道如何解决这些问题。

我在网上搜索,让我消除了回声(AEC),但没有发现任何对C#有用的库。 有谁知道怎么帮我?

编辑1:AsioOut.PlaybackLatency是2048ms。 这是一个有点太高了..

编辑2:我试着用耳机和我注意到回声仅仅是由于麦克风与扬声器之间的接近,所以它不是一个问题,但它会是有趣的,有一个AEC。

问题就解决了 :我解决了延迟问题。 这是我的ASIO驱动的问题,我卸载Cubase和我安装了ASIO4ALL驱动程序,现在它工作正常。 PS:我不得不在最后参数添加* 2 MoveMemory 。 我不知道为什么,但没有它,你听到喷的声音。

Answer 1:

什么是您使用的缓冲区大小? 记得那是完全不可能消除,如果你正在录制和播放音频所有等待时间。 大多数ASIO驱动程序允许你去非常低的延迟(分10毫秒),但你还需要确保你的声卡的任何直接监控功能是关闭的,或者你会听到回声。



文章来源: how to eliminate latency and echo from the direct-monitoring using AsioOut (NAudio)