2017-09-24 41 views
0

오디오 편집기 프로젝트를 위해 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 모니터링 버튼은 단순히 그들을 멈추게합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

일반적으로 ASIO를 다른 출력 드라이버와 함께 사용하는 것은 좋지 않습니다. 대신, ASIO를 사용하고 있다면 ASIO를 재생과 녹음 모두에 사용하십시오.

AsioOut의 재생 부분은 MixingSampleProvider으로 구동 될 수 있습니다.이 부분에는 재생해야 할 파일을 추가 할 수있을뿐만 아니라 루프백을 처리하는 추가 입력이 있습니다.

+0

답변 해 주셔서 감사합니다. 내 wav 파일을 'MixingSampleProvider'에 추가하고이 asioOut.InitRecordAndPlayback (mix.ToWaveProvider(), 2, 44100)과 같이 초기화 된 AsioOut을 호출합니다. 그러나 이렇게하면 루프백 부분 만 작동합니다. recordChannels을 0으로 변경하면 wav 파일 만 들립니다. 나는 잘못된 길을 가고 있다고 생각한다. – definitely10