首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# NAudio asio和wasapi

C# NAudio asio和wasapi
EN

Stack Overflow用户
提问于 2017-09-25 05:44:14
回答 1查看 1.2K关注 0票数 0

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

代码语言:javascript
复制
            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();

我所有的UserControls上都有这个“播放”按钮,这样我就可以播放多个wav文件。还有另一个使用AsioOut在扬声器上实时播放麦克风输入的按钮,换句话说,您可以立即通过扬声器听到您所说的话。

代码语言:javascript
复制
            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:

代码语言:javascript
复制
    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监控按钮只是简单地停止它们。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-27 15:26:44

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

AsioOut的回放部分可以由MixingSampleProvider驱动,您可以添加需要播放的文件,还可以有一个额外的输入来处理回送。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46395178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档