0

Windows下可以输出到多个声卡吗?

似乎 portaudio 是通过 Windows 声卡播放的唯一方法,但 portaudio 没有提供选择输出到哪个设备的机制。即使这样做了,也不清楚是否可以打开多个输出。

目前,我正在使用一个 hack 使用 VLC 输出到声卡:

output.external(
  %mp3(bitrate=320,stereo_mode="stereo"),
  '"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe" -vvv --config C:\vlc\vlcrc-remote1 -',
  remote1
)

output.external(
  %mp3(bitrate=320,stereo_mode="stereo"),
  '"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe" -vvv --config C:\vlc\vlcrc-remote2 -',
  remote2
)

默认情况下,每个 VLC 配置文件都设置了不同的声音设备。显然,这可以通过切换到 PCM 来改善,但如果我可以完全跳过整个外部进程问题,那就太好了。

4

1 回答 1

2

现在可能为时已晚...

经过一整夜(几个小时)的搜索并深入研究 PortAudio 和 Liquidsoap 的源代码,我已经确定 LS 使用 Pa_OpenDefaultStream() 仅打开一个流。无法通过 LS 的接口将 PA ID 传递给 input 或 output.portaudio。它始终默认为设备 0,即声音映射器(Windows 默认设备)。

但是,一切都没有丢失,为了告诉 PortAudio 使用哪个输入/输出,您可以在运行 LS 之前传递一个环境变量:

set PA_RECOMMENDED_OUTPUT_DEVICE=x
set PA_RECOMMENDED_INPUT_DEVICE=x

其中 x 是 PA 设备参考。要找到您的设备引用,您需要一份 pa_devs.exe 的副本(我在这里找到了一份副本http://www.w1hkj.com/alpha/temp/pa_devs.exe),它在运行时会生成 results.txt。此文件包含您需要的 ID。您还可以通过选择帮助>音频设备信息来获取带有 Audacity 的 ID。

所以理论上你可以像这样做多个输出:

setenv("PA_RECOMMENDED_OUTPUT_DEVICE","13")
streamout1 = output.portaudio()
setenv("PA_RECOMMENDED_OUTPUT_DEVICE","14")
streamout2 = output.portaudio()

我不确定这是否可行,但值得一试!如果它不起作用,您总是可以在不同的设置中运行两个 Liquidsoap 实例,前提是这适用于您的应用程序。

于 2015-08-17T02:14:21.390 回答