如何使用pygame.midi发送“延音踏板” MIDI信号?

时间:2018-06-27 23:43:49

标签: python pygame midi

可以通过note_on()note_off()方法调用简单的midi信号,但是我找不到使用pygame.midi发送“延音踏板” midi信号的方法。有什么常规方法可以做到吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,pygame.midi(或大多数其他常用的Python-MIDI库)中没有延音踏板的实现,因此从Pygame模块本地进行是不可能的。

但是,您可以通过稍微重构代码来解决此问题。如果您可以使用特定的键(或事件)代替我认为是物理的延音踏板(毕竟,大多数MIDI延音踏板为simple switches),则可以进行类似于延音的操作。例如:

import pygame
from pygame.locals import *

# Midi init and setup, other code, etc...
# device_input = pygame.midi.Input(device_id)

sustain = False

# We will use the spacebar in place of a pedal in this case.

while 1:
    for event in pygame.event.get():
        # You can also use other events in place of KEYDOWN/KEYUP events.
        if event.type == KEYDOWN and event.key == K_SPACE:
            sustain = True
        elif event.type == KEYUP and event.key == K_SPACE:
            sustain = False
    # ...
    for i in device_input:
        if sustain:
            # Remove all MIDI key-up events here

    # Then play sounds or process midi input accordingly afterwards

答案 1 :(得分:1)

规范defines the sustain pedal as controller 64,因此您必须发送控件更改消息。

pygame.midi并没有特殊功能,因此您必须发送原始字节:

write_short(0xb0 + channel, 64, 127 if pressed else 0);