AsioOut (NAudio)를 사용하여이 코드를 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
은 2048ms입니다. 나는 헤드폰 시도하고 내가 에코 만 인해 마이크와 스피커 사이의 근접에 있음을 발견, 그래서 재미있을 것이지만 문제가되지 않습니다 : 그것은
편집 2 .. 조금 너무 높은입니다 AEC가있다.
문제가 해결되었습니다 : 지연 문제를 해결했습니다. 그것은 내 ASIO 드라이버의 문제, 나는 Cubase를 제거하고 ASIO4ALL 드라이버를 설치하고 지금은 잘 작동합니다. PS : MoveMemory
의 마지막 매개 변수에 * 2을 추가해야했습니다. 왜 그런지는 모르겠지만 소리가 들리지 않으면 소리가 나옵니다.
"버퍼 크기"는 'BufferedWaveProvider.BufferLength'를 의미합니까? 대답이 '예'이면 내 버퍼 크기 : 882000 – Shafa95
아니요, ASIO 버퍼 크기를 의미하지 않습니다. 사운드 카드의 ASIO 제어판에 표시되어야합니다 –
확인 _input_ 및 _ 출력 버퍼의 크기는 ** 2048 **이며 _Sync 참조는 _ 입력 _으로 설정됩니다. _audio buffer_의 크기가 정의되어 있지 않고 표준입니다 : 10ms .. 이 값을 변경하려고 시도했는데 대기 시간이 약간 짧았습니다. 지연 시간이 짧았습니다 ASIO (<10ms). 응용 프로그램에서는 처리 할 수 없지만 ASIO 드라이버에서만 처리 할 수 있습니다. 그러나 어쩌면 나는 이해하지 못했다. – Shafa95