代码之家  ›  专栏  ›  技术社区  ›  Matyáš Krupička

为什么是pygame。midi在macos上不起作用,而在pygame上不起作用。混合器有

  •  1
  • Matyáš Krupička  · 技术社区  · 6 年前

    我想用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,也可以很好地工作。

    我的问题是:

    1. 为什么混音器工作,还有pygame。midi没有?

    2. 我怎样才能把它修好,这样就可以玩游戏了。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,则结束时不会出错,但不会播放(听到)声音。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jacobo    6 年前

    您的问题是没有任何MIDI设备。因此,首先您需要转到: MIDI audio configuration ,尝试在mac上的聚光灯下搜索,或在 Launchpad>Others>Midi Audio configuration 。 一旦你到了那里,在最顶尖的男人 Window>MIDI studio 你会发现一个叫做 IAC Driver ,双击该矩形并启用以下复选框 Connected Device 。然后单击apply,您将拥有一个虚拟MIDI总线。