Windows下使用Liquidsoap输出多个声卡

时间:2015-01-21 02:05:27

标签: internet-radio 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来改进,但如果我可以简单地完全跳过整个外部过程问题,那就太棒了。

1 个答案:

答案 0 :(得分: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实例。