在pygame-Python.3中设置MIDI输出

在pygame-Python.3中设置MIDI输出,python,pygame,output,midi,macos-mojave,Python,Pygame,Output,Midi,Macos Mojave,我正在尝试使用Anaconda笔记本(MacOS Mojave)中的pygame.midi从虚拟采样器中获取声音。有时它工作得很好,有时没有明显的原因,下一次相同的脚本会给我MIDI输出错误(见下文) 有什么问题吗?谢谢大家! 我怀疑您的问题是您在pygame.midi.Output(1)中硬编码设备索引。如果设备列表发生更改,您可能正试图选择一个仅用作输入的设备。如果您使用pygame.midi.get\u default\u output\u id()来获取设备id,而不是硬编码1,该怎么办

我正在尝试使用Anaconda笔记本(MacOS Mojave)中的pygame.midi从虚拟采样器中获取声音。有时它工作得很好,有时没有明显的原因,下一次相同的脚本会给我MIDI输出错误(见下文)


有什么问题吗?谢谢大家!

我怀疑您的问题是您在
pygame.midi.Output(1)
中硬编码设备索引。如果设备列表发生更改,您可能正试图选择一个仅用作输入的设备。如果您使用
pygame.midi.get\u default\u output\u id()
来获取设备id,而不是硬编码
1
,该怎么办?谢谢@larsks!我尝试过(获取id,保存到变量,并用于输出),但仍然不起作用。那么,我不知道该建议什么;我没有可以复制这种行为的平台。如何选择MIDI设备?难道你不应该拿到名单并核对一下名字吗?谢谢@CL!我做到了,这对我澄清了一些事情
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-22-59fb23bd9d1f> in <module>
      5 note = [44, 46, 49, 51, 53, 56, 58, 61]
      6 pygame.midi.init()
----> 7 player = pygame.midi.Output(1)
      8 player.set_instrument(0)
      9 for i in range (24):

~/.local/lib/python3.7/site-packages/pygame/midi.py in __init__(self, device_id, latency, buffer_size)
    420             if output:
    421                 try:
--> 422                     self._output = _pypm.Output(device_id, latency)
    423                 except TypeError:
    424                     raise TypeError("an integer is required")

pypm.pyx in pypm.Output.__init__()

Exception: b"PortMidi: `Invalid device ID'"
import pygame.midi
import time
import random

note = [44, 46, 49, 51, 53, 56, 58, 61]

pygame.midi.init()
player = pygame.midi.Output(1)
player.set_instrument(0)

for i in range (24):
    random.shuffle(note)
    player.note_on(note[0], 127)
    time.sleep(0.5)
    player.note_off(note[0], 127)

del player
pygame.midi.quit()