微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

同时向多个audio设备输出声音

好的,第一个问题。 我正试图编写一个虚拟的音板,一次输出到多个设备。 我更喜欢OpenAL,但是如果我必须切换到MS库(我最初在Windows 7上编写这个),我会的。

无论如何,这个想法是,你有一堆声音文件加载和准备播放。 你在Skype上,有人失败了,所以你点击价格是正确的失败小调播放button。 你和你的朋友同时听到了这个声音,并且对此有一个很好的嘲笑。

我已经把OAL带到了可以在认设备上播放的地步,而在这一点上select一个设备似乎相当微不足道。 然而,据我所知,每个OAL设备需要其上下文是最新的,以便缓冲区正确填充/传播。 这意味着,在一个标准的程序中,声音将在一个设备上播放,然后设备将被切换,并且缓冲的声音将在第二个设备上播放。

这是可能的,所有的au@R_404_6230@库? 线程是否会被卷入,并且这些会是安全的?

获取互斥量,偏好升级过程

Windows中的进程间同步障碍

编写一个服务来保持两个文件夹同步?

在控制台应用程序中处理WinAPI中的窗口closures事件最简单的方法是什么?

什么构成asynchronous安全

然后,接下来的问题是,为了与最终用户设置无缝集成,它需要能够输出认录音设备,或者拦截录音设备,将其与声音混合并输出作为另一个回放设备。 这两种情况之一是可能的,如果两者都是可行的,哪一个更可行? 我认为最好是能够输出到录音设备本身,因为程序不必为了让麦克风继续工作而不需要运行。

优雅的文件阅读而不locking

C ++ 11:如何实现快速,轻量和公平的同步资源访问

MysqL数据库挂起由于磁盘日记?

在Kylix等待

.NET:发送文本消息到同一个应用程序的所有实例并读取它

如果我理解得好,主要有两个问题。

是否可以同时在两个或更多音频输出设备上播放声音,以及如何实现此目的?

是否有可能通过音频输入(录音)设备循环播放数据,以便在相应的监视器上播放,例如通过Skype的音频流发送给您的合作伙伴。

回答1:这是绝对可行的,系统的所有独立音频输出可以同时播放声音。 例如,一些专业音频接口(用于音乐制作)具有8,16,64个独立输出,其全部可以同时播放声音。 这意味着每个输出设备都维护自己独立使用的缓冲区(除了最终共享内存上的并发数据以提供缓冲区外)。

怎么样?

大多数音频框架/系统提供的功能来获得“设备句柄”,这将需要你传递一个回调缓冲区的样本(例如Open AL)。 这将被框架/系统(最终是音频设备驱动程序)独立和异步地调用。 由于这一切都异步工作,你不一定需要在这里的多线程。 所有你需要做的原则是维护两个(或更多)音频输出设备句柄,每个都有一个单独的缓冲区消耗回调,为两个(或更多)单独的设备提供。

注意您也可以在一台设备上播放多个声音。 大多数设备/系统允许这种“资源共享”。 实际上,这是声卡实际制作的目的之一。 将各种程序产生的所有声音混合在一起(从而消除来自cpu的沉重负担)。 当您使用一个(物理)设备播放多个声音时,其概念与多个设备相同。 对于每一个声音,你会得到一个逻辑设备句柄 只有那些句柄指的是一个物理设备的几个“通道”。

你应该使用什么?

打开AL似乎有点像使用重型炮兵这个简单的任务,我会说(因为你不想要那么多的可移植性,可能不打算实现自己的编解码器和效果;))

我建议你在这里使用Qt。 它是高度便携的(Win / Mac / Linux),它有一个非常方便的类,将为你做的工作: http : //qt-project.org/doc/qt-5.0/qtmultimedia/qau@R_404[email protected]

检查文档中的示例,查看如何播放WAV文件,以及几行代码。 要同时播放多个WAV文件,只需打开几个QAu@R_404_6230@Output(基本上将示例中的代码放在一个函数中,然后按照需要随时调用)。 请注意,您必须关闭/停止QAu@R_404_6230@Output才能停止播放声音。

回答2:你想做什么就叫做回送。 只有非常有限数量的声卡即音频设备提供了所谓的回送输入设备,其允许例如记录当前由声卡的主输出组合输出内容。 但是,即使提供这种设备,也不允许您将任何东西回送到麦克风输入设备。 麦克风输入设备仅从麦克风D / A转换器获取数据。 这在H / W很深,你不能在你的水平混合任何东西。

这就是说,要让Skype以标准设置发送你的声音给你的对话伙伴,将会非常困难(恕我直言,实际上是不可能的)。 唯一我能想到的就是拥有一个具有环回功能的音频设备(或者只是简单地将物理电缆连接线连接到任何录音线路的可能的监听线路上),然后Skype设置为使用这个环回设备作为输入。 然而,Skype不会从你的麦克风拿起,因此,你不会谈话;)

注意:在这里说“同时”播放时,我们正在讨论实时感知(在10-20ms范围内)同步两个声音的播放。 我们没有考虑采样级别上的实际同步以及在将声音发送到具有两个独立(自由运行)时钟的两个物理设备上时发生的相关时钟抖动和相移问题。 因此,当应用要求在独立设备上产生相位信号时,需要时钟恢复机制,这可能由驱动器或OS提供。

注意:虚拟音频设备软件(如Virtual Au@R_404_6230@ Cable)将提供虚拟设备来实现Windows中的环回功能。 在UX环境下,Jack Au@R_404_6230@等框架可能会达到同样的效果

在两个设备上同时输出音频非常简单:

对于Realtek设备,您可以使用音频混音器的“技巧”(但这会给您一个延迟/回声)。

对于其他一切(没有回声),你可以使用Voicemeeter(这是完全免费的)。

我已经在这个视频中解释了两个解决方案: https : //youtu.be/lpvae_2WOSQ

最好的祝福

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐