基于我提出的这个问题: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
我不知道为什么,但没有它你会听到一阵阵的声音。