gpt4 book ai didi

python - PyGame 在重新连接时重新初始化 USB MIDI 设备

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:52 24 4
gpt4 key购买 nike

我正在使用 PyGame 读取 USB MIDI 设备,与使用的非常相似here ,除了我在 Raspberry Pi 上将它作为后台服务运行。

我希望能够断开并重新连接 MIDI 设备,并且仍然能够读取它。

我尝试了两种方法:

  1. 使用 pygame.midi.get_count() 和 info() 定期枚举 MIDI 设备。
  2. 使用pyudev监控USB事件,类似this例子。

(1) 的问题在于,无论设备是否仍处于连接状态,pygame.midi 似乎总是返回相同的值(get_count 和信息)。

(2) 的问题在于它永远不会调用我为事件注册的异步函数(尽管独立示例工作正常,只是将子系统更改为 usb)。我想这可能是线程的问题,所以我调用了所有的东西来注册一个专用线程的事件,然后运行 ​​glib.MainLoop.run() 空闲等待,但发现 pygame 无法读取 midi 设备如果我在运行我的 AMK 类之前启动了任何线程,即使只是一个打印了一些东西并返回的线程。 (我正在使用 glib,因为 Pi repo 中的 pyudev 版本是 0.13,但我猜更新的方法是 gobject 等价物)。

因此我求助于使用 udevd 来检测连接事件并通过/etc/udev/rules.d/触发器重新启动我的服务,它工作正常,但是很笨拙,并且在我的脚本中丢失了状态(我会喜欢保存)。

因此,在我浪费更多时间调试 (2) 之前,我希望有人能为我指明正确的方向。

最佳答案

pygame 使用 PortMidi,它最初是为 Windows MIDI API 设计的,并假定 MIDI 端口集永远不会改变。

您必须使用单独的监听进程,以便在 MIDI 端口发生变化时重新启动您的程序。

关于python - PyGame 在重新连接时重新初始化 USB MIDI 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com