2

基于我提出的这个问题:How to Record and Playing with NAudio using AsioOut

使用此代码:

[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的是 2048 毫秒。有点太高了。。

编辑 2:我尝试使用耳机,我注意到回声只是由于麦克风和扬声器之间的接近,所以虽然拥有 AEC 会很有趣,但这不是问题。

问题解决:我解决了延迟问题。这是我的 ASIO 驱动程序的问题,我卸载了 Cubase 并安装了 ASIO4ALL 驱动程序,现在它可以正常工作了。 PS:我必须在. MoveMemory我不知道为什么,但没有它你会听到一阵阵的声音。

4

1 回答 1

0

您正在使用什么缓冲区大小?请记住,如果您正在录制和播放音频,则完全不可能消除所有延迟。大多数 ASIO 驱动程序允许您达到非常低的延迟(低于 10 毫秒),但您还需要确保关闭声卡的任何直接监听功能,否则您会听到回声。

于 2014-03-31T08:23:35.370 回答