将音频源(并发)动态发送到 ASIO 设备上的特定通道

Posted

技术标签:

【中文标题】将音频源(并发)动态发送到 ASIO 设备上的特定通道【英文标题】:Dynamically send n audio sources (concurrently ) to specifc channel on ASIO device 【发布时间】:2017-11-16 16:41:21 【问题描述】:

所以我在探索 NAudio 库时一直很开心。

但是,我不确定我是否缺少使用 ASIO 类的内容。基本上我的要求如下:

动态输出(单声道)源到 ASIO 设备,每个源到一个专用通道(稍后我可能会使用 64 个通道) 在会话期间随时可以将 n 个音频源“流式传输”到设备(同时多个源) 控制每个通道

所以在代码中我会有类似的东西:

...

WaveFileReader source1 = new WaveFileReader( pathToMyFile1 );
WaveFileReader source2 = new WaveFileReader( pathToMyFile2 );
WaveFileReader source3 = new WaveFileReader( pathToMyFile3 );
...

WaveFileReader sourceN = new WaveFileReader( pathToMyFileN );

AsioOut out = new AsioOut();

...

/*Now init out...*/

...

out.Play();

...

/* now react on events, possibly within a multi-threaded enviroment*/
/* and concurrently send each of these sources to a dedicated channel*/
/* as required, (as stated, possibly even many at the same time) */

...

所以我的问题基本上是:

我可以使用现有的类之一来实现这样的目标吗?还是我必须自己设计其中一个接口的实现(ISampleProvider、IWaveProvider 等,很确定它会以某种方式在抽象级别下工作)?

感谢您对此的任何意见!

【问题讨论】:

【参考方案1】:

MultiplexingWaveProvider 可以做一些接近你想要的事情。阅读它here。对于 64 通道的工作,您可能会发现您需要编写自己的微调代码,因为性能可能会成为问题。

【讨论】:

好的,感谢您的意见,我将深入研究实现。一般ASIO驱动访问打开后,写入专用的channelbuffers应该没有问题吧? 是的,如果您自己直接写入缓冲区,性能最佳

以上是关于将音频源(并发)动态发送到 ASIO 设备上的特定通道的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 ffmpeg 从 ASIO 设备捕获音频?

使用 Boost ASIO 多播到 macOS 上的特定接口

Discord 如何连接到特定进程的音频?

NAudio - ASIO 播放到设备(仅限静态)

mac应用推荐——loopback

在 NAudio 中列出 ASIO 音频输出设备