在pygame-Python.3中设置MIDI输出
我正在尝试使用Anaconda笔记本(MacOS Mojave)中的pygame.midi从虚拟采样器中获取声音。有时它工作得很好,有时没有明显的原因,下一次相同的脚本会给我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,该怎么办
有什么问题吗?谢谢大家! 我怀疑您的问题是您在
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()