C# NAudio asio 和 wasapi

Posted

技术标签:

【中文标题】C# NAudio asio 和 wasapi【英文标题】:C# NAudio asio and wasapi 【发布时间】:2017-09-24 21:44:13 【问题描述】:

我在 C# 中为我的音频编辑器项目使用 NAudio 库。我正在使用 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();

我的所有用户控件上都有这个“播放”按钮,所以我可以播放多个 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】:

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

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

【讨论】:

感谢您的回答。我将我的 wav 文件添加到 MixingSampleProvider 并像 asioOut.InitRecordAndPlayback(mix.ToWaveProvider(), 2, 44100) 这样初始化 AsioOut,但这样只有环回部分有效。如果我将 recordChannels 更改为 0,那么我只会听到 wav 文件。我想我走错了路。

以上是关于C# NAudio asio 和 wasapi的主要内容,如果未能解决你的问题,请参考以下文章

NAudio Asio 录制和播放

NAudio:使用 ASIO 录制音频并用吉他输出

NAudio Asio 同时录制和播放

NAudio Asio 和 ieeefloat 格式

ASIO 中的 NAudio 音量

如何使用 ASIO 和 Naudio 将音频捕获保存在 wav 文件中?