将 MIDI 事件转换为 pygame 事件

Posted

技术标签:

【中文标题】将 MIDI 事件转换为 pygame 事件【英文标题】:Converting MIDI events to pygame events 【发布时间】:2017-08-09 00:24:46 【问题描述】:

我正在尝试从我的 MIDI 设备(键盘)获取输入以用于 pygame 代码。看起来pygame.midi.midis2events() 会很完美,但他们没有告诉你midis 是什么意思,这是函数的必要参数。

pygame.midi.midis2events() 将 midi 事件转换为 pygame 事件

midis2events(midis, device_id) -> [Event, ...]

我的问题是midis 是什么意思?我在网上找不到任何指定的地方。

【问题讨论】:

midis 必须是从输入缓冲区读取时获得的 midi 事件(通过在 pygame.midi.Input 对象上使用 read() 方法) 好的。我也无法弄清楚如何使用 read() 因为他们没有指定 num_events 的含义。他们是否在某个地方指定了所有这些内容,因为该网页上的信息似乎不完整。 pygame.org/docs/ref/midi.html#pygame.midi.get_count虽然我不知道自己在做什么,但也许不是。 【参考方案1】:

midisread() 返回的 MIDI 事件列表。

一个example使用如下:

while not quit:

    # Blit the picture ...
    ...

    # Check for keypresses

    for event in pygame.event.get():
        ...

    for event in midis2events.midis2events(midi_in.read(40), midi_in_id):
        if event.command == midis2events.NOTE_ON:
            play_note(Note().from_int(event.data1))
        ...

    # Update the screen

    pygame.display.update()

【讨论】:

'.read()' 函数的 'midi_in' 是什么?设备 ID 不起作用。我也收到“read()”函数的这个错误。类型错误:read() 缺少 1 个必需的位置参数:'num_events' 我链接到了示例程序。 哦!谢谢,我完全错过了。

以上是关于将 MIDI 事件转换为 pygame 事件的主要内容,如果未能解决你的问题,请参考以下文章

从 PortMIDI 发送虚拟 MIDI 事件

pygame 事件

Android上的Midi事件路由

如何合并轨道中的所有 Midi 事件?

python用fluidsynth合成midi

VST 主机 - MIDI 到波形转换 (C#)