基于我提出的这个问题: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 。我不知道为什么,但如果没有它,你会听到喷出的声音。
答案 0 :(得分:0)
您使用的缓冲区大小是多少?请记住,如果您正在录制和播放音频,则完全无法消除所有延迟。大多数ASIO驱动程序允许您进入相当低的延迟(低于10毫秒),但您还需要确保声卡的任何直接监视功能都已关闭,否则您将听到回声。