我想用Python3x编写一个软件,可以播放Midi音符。我这里有一个关于堆栈溢出的示例代码:
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上却不行,我在Mac上遇到了以下错误:
pygame.midi.MidiException: 'Device id invalid, out of range.'
我知道没有启用Midi设备。
但当我使用混音器播放一些常规midi文件时:
...
pygame.mixer.music.load('whatever.mid')
pygame.mixer.music.play()
...
它演奏正确,这让我很困惑。其他使用Midi的应用程序,如Musescore,也可以很好地工作。
我的问题是:
-
为什么混音器工作,还有pygame。midi没有?
-
我怎样才能把它修好,这样就可以玩游戏了。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,则结束时不会出错,但不会播放(听到)声音。