为什么pygame.midi不适用于macos而pygame.mixer不适用

时间:2018-03-28 20:12:26

标签: python python-3.x macos pygame midi

我想在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产生声音?

  3. (我发现我可以使用我的应用程序生成midi文件,然后将其放入调音台,但它很笨拙,必须有更好的方法)

    提前谢谢。

    EDIT1: 我试图启用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,则结束时没有错误,但没有播放(听到)声音。

1 个答案:

答案 0 :(得分:0)

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