使用 Liquidsoap Windows 下的多个声卡输出

Multiple sound card output under Windows with Liquidsoap

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

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

目前,我正在使用 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 来改善,但如果我可以完全跳过整个外部进程问题,那就太好了。

现在可能已经太晚了...

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

然而,一切并没有丢失,为了告诉PortAudio使用哪个input/output,你可以在运行ning 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 实例,如果这对您的应用程序有效的话。