为什么 pygame.midi 在 macOS 上不起作用而 pygame.mixer 可以

Why pygame.midi doesn't work on macos whereas pygame.mixer does

想用Python3x写一个软件,播放Midi音符。我在 Stack Overflow 上有这个示例代码:

import pygame.midi
import time

pygame.midi.init()
player = pygame.midi.Output(0)
player.set_instrument(0)
player.note_on(64, 127)
time.sleep(1)
player.note_off(64, 127)
del player
pygame.midi.quit()

它在 Windows 上工作得很好,但在 Mac 上就不行了,我得到这个错误:

pygame.midi.MidiException: 'Device id invalid, out of range.'

我了解到没有启用 Midi 设备。 但是当我使用混音器播放一些常规的 MIDI 文件时:

...
pygame.mixer.music.load('whatever.mid')
pygame.mixer.music.play()
...

它播放正确,这让我很困惑。其他使用 Midi 的应用程序,如 Musescore,也能完美运行。

我的问题是:

  1. 为什么混频器工作,而 pygame.midi 不工作?

  2. 如何修复才能让 pygame.midi 发出声音?

(我突然想到我可以用我的应用程序生成midi文件,然后将它放入混音器中,但它很笨拙,必须有更好的方法)

提前致谢。

编辑1: 我尝试启用 IAC 并添加总线。 当我尝试获取设备信息时:

for n in range(pygame.midi.get_count()):
    print (n,pygame.midi.get_device_info(n))

另外两个设备出现:

0 (b'CoreMIDI', b'IAC Driver IAC Bus 1', 1, 0, 0)
1 (b'CoreMIDI', b'IAC Driver IAC Bus 1', 0, 1, 0)

原始示例在第五行失败,因为 0 是输入总线。如果改成1,则无错结束,但没有声音播放(听到)。

你的问题是你没有任何 MIDI 设备。因此,首先您需要前往:MIDI audio configuration,尝试在您的 mac 或 Launchpad>Others>Midi Audio configuration 的 Spotlight 中搜索它。 到达那里后,在顶部菜单的 Window>MIDI studio 部分中,您会找到名为 IAC Driver 的内容,双击该矩形并启用显示 Connected Device 的复选框。然后单击应用,您将拥有一个虚拟 MIDI 总线。