libVLC 的 Python 绑定(bind) - 无法更改音频输出设备

标签 python audio vlc libvlc

VLC 2.2.3,python-vlc 1.1.2。

我有一个虚拟音频输出,并试图让 libVLC 在其上输出。到目前为止,我可以看到出现在 libVLC 中的虚拟输出,但选择它会使音频在默认输出(即扬声器)上播放。

这是我所拥有的相关部分:

self.Instance = vlc.Instance()
self.player = self.Instance.media_player_new()

devices = []
mods = self.player.audio_output_device_enum()

if mods:
    mod = mods
    while mod:
        mod = mod.contents
        devices.append(mod.device)
        mod = mod.next

vlc.libvlc_audio_output_device_list_release(mods)

# this is the part I change on each run of the code.
self.player.audio_output_device_set(None, devices[0]) 

我已经多次运行代码,根据代码注释更改设备 ID。但是,输出设备实际上并没有改变。这是一个令人头疼的问题,原因有二:

1) audio_output_device_set() 不返回任何内容。当我运行这个函数时,我不知道我是否真的完成了任何事情。
2) 我什至无法运行 audio_output_device_get() 来检查 set 函数是否正在执行任何操作,因为这仅适用于 libvlc 3。我希望我的程序与 2.2.3 一起使用。

所以,我接下来要做的是安装 VLC 3.0 并用它运行上面的代码。现在,audio_output_device_get() 起作用了,我可以看到 set 函数实际上是将输出设备更改为虚拟输出。但声音仍然在扬声器上播放。

这是怎么回事?我该如何解决?

我在 VLC 论坛上询问并得到一个非常无益的回复,告诉我“检查日志和文档”。就是这样。为了做到这一点,我一直非常依赖相当缺乏的文档。即使我怀疑它是否有帮助,我还是决定尝试记录。我认为这就像调用 libvlc_log_set_file 一样简单但它需要一个 libVLC 文件指针,而且我不知道如何像在 Python 中那样创建一个具有名称和模式的文件指针。

tl;博士:

1) 如何成功更改音频输出设备?
2)如何设置最大详细日志记录?

最佳答案

1) 出于某种原因,我不得不在 VLC 注册我的更改之前暂停和取消暂停。

这段代码修复了一些事情:

[... rest of GUI class ...]
self.p.play()
self.root.after(350, self.DeviceSet)

def DeviceSet(self):
    self.p.audio_output_device_set(None, self.audiodevice)
    self.p.pause()
    self.root.after(10)
    self.p.pause()

2)初始化VLC如下:
self.instance = vlc.Instance('--verbose 9')

关于libVLC 的 Python 绑定(bind) - 无法更改音频输出设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37422914/

相关文章:

python - Openpyxl 100% 读取为 'int'

flash - 寻找有关在iPad上播放Flash声音的帮助

audio - 如何将音频录制到 WAV 文件?

c# 如何从 nvlc 捕获音频并引发 Accord.Audio.NewFrameEventArgs

visual-studio-2010 - 在 windows Visual Studio 上编译 VLC 源代码

python - 共享Y轴标签

python - 对数据对象的依赖注入(inject)

python - Pandas - 按行交错/压缩两个数据帧

ios - 如何在 iOS 上获取音量级别和音量更改通知?

stream - 树莓派 : cvlc "Floating point exception"