2017-09-24 6 views
0

私はオーディオエディタプロジェクト用にC#でNAudio libを使用しています。私は複数のwavファイルを同時に再生するためにwasapiを使用しています。C#NAudio asioと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を使用している場合は、再生と録音の両方に使用します。

AsioOutの再生部分は、再生する必要のあるファイルを追加したり、ループバックを処理する追加の入力を持つことができるMixingSampleProviderによって駆動されます。

+0

ありがとうございました。 wavファイルを 'MixingSampleProvider'に追加し、このasioOut.InitRecordAndPlayback(mix.ToWaveProvider()、2、44100)'のように初期化したAsioOutを追加しましたが、このようにしてループバック部分だけが動作します。 recordChannelsを0に変更すると、wavファイルのみが再生されます。私は間違った道にいると思う。 – definitely10