2017-09-24 226 views
0

我在C#中使用NAudio lib作为我的音频编辑器项目。我正在使用wasapi同时播放多个wav文件。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(); 

我在所有的UserControl上都有这个“播放”按钮,所以我可以播放多个wav文件。另外还有一个按钮是使用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