오디오 편집기 프로젝트를 위해 C#에서 NAudio lib를 사용하고 있습니다. 나는 여러 개의 wav 파일을 동시에 재생하기 위해 wasapi를 사용하고 있습니다.C# NAudio asio and wasapi
bool useEventSync = false;
AudioClientShareMode share = AudioClientShareMode.Shared;
wasapiOut = new WasapiOut(share, useEventSync, 50);
wasapiOut.Volume = 1.0f;
reader = new AudioFileReader(filename);
wasapiOut.Init(reader);
wasapiOut.Play();
나는 여러 개의 wav 파일을 재생할 수 있도록 모든 UserControls에서이 "재생"버튼을 가지고 있습니다. AsioOut을 사용하여 실시간으로 스피커에서 마이크 입력을 재생하는 또 다른 버튼이 있습니다. 즉, 말하는 사람이 말하는 것을 즉시들을 수 있습니다.
bufferke = new BufferedWaveProvider(new WaveFormat(44100,16,2));
string[]driverek=AsioOut.GetDriverNames();
asioOut = new AsioOut(driverek[0]);
asioOut.InputChannelOffset = 0;
asioOut.InitRecordAndPlayback(bufferke, 2, 44100);
asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs>(asioout_AudioAvailable);
asioOut.Play();
그리고 asioout_AudioAvailable
:private void asioout_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
byte[] OutputBuffer = new byte[e.SamplesPerBuffer * 4];
for (int i = 0; i < e.InputBuffers.Length; i++)
{
Marshal.Copy(e.InputBuffers[i], OutputBuffer, 0, e.SamplesPerBuffer * 4);
Marshal.Copy(OutputBuffer, 0, e.OutputBuffers[i], e.SamplesPerBuffer * 4);
}
e.WrittenToOutputBuffers = true;
}
문제는 내가 wav 파일을 재생하고 동시에 내 ASIO 모니터링 버튼을 사용할 수없는 생각이다. 기본적으로 내가 wav 파일을 재생할 때 asio 모니터링 버튼은 단순히 그들을 멈추게합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
답변 해 주셔서 감사합니다. 내 wav 파일을 'MixingSampleProvider'에 추가하고이 asioOut.InitRecordAndPlayback (mix.ToWaveProvider(), 2, 44100)과 같이 초기화 된 AsioOut을 호출합니다. 그러나 이렇게하면 루프백 부분 만 작동합니다. recordChannels을 0으로 변경하면 wav 파일 만 들립니다. 나는 잘못된 길을 가고 있다고 생각한다. – definitely10