【发布时间】:2014-05-09 21:32:20
【问题描述】:
基于我提出的这个问题:How to record and playback 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 的最后一个参数中添加一个*2。我不知道为什么,但是没有它,你会听到一阵阵的声音。
【问题讨论】:
标签: c# echo naudio latency aec