C#NAudio asio和wasapi

时间:2017-09-24 21:44:14

标签: c# audio naudio asio

我在C#中使用NAudio lib作为我的音频编辑器项目。我正在使用wasapi同时播放多个wav文件。

            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监控按钮只是停止它们。我做错了什么?

1 个答案:

答案 0 :(得分:0)

一般来说,将ASIO与其他输出驱动程序混合起来并不是一个好主意。相反,如果您正在使用ASIO,请将其用于播放和录制。

AsioOut的播放部分可以由MixingSampleProvider驱动,您可以添加需要播放的文件以及处理环回的附加输入。