私が作成したこの質問に基づいて: AsioOut を使用して NAudio で録音および再生する方法
このコードで:
[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 ) を除去できる Web 上のライブラリを検索しましたが、C# に役立つものは見つかりませんでした。誰かが私を助ける方法を知っていますか?
編集 1 : 私AsioOut.PlaybackLatency
は 2048ms です。ちょっと高すぎます..
EDIT 2 : ヘッドフォンで試してみたところ、エコーはマイクとスピーカーの間の近接によるものであることに気付きました。AEC があれば興味深いですが、問題ではありません。
問題解決:レイテンシーの問題を解決しました。これは ASIO ドライバーの問題でした。Cubase をアンインストールし、ASIO4ALL ドライバーをインストールしたところ、正常に動作するようになりました。
PS :の最後のパラメーターに*2を追加する必要がありましたMoveMemory
。理由はわかりませんが、これがないと音が飛び散ります。