Как отправить миди-сигнал «Sustain Pedal» с помощью pygame.midi? - PullRequest
0 голосов
/ 28 июня 2018

Простые миди-сигналы можно вызывать методами note_on() или note_off(), но я не смог найти способ отправить миди-сигнал сустейна с использованием pygame.midi. Есть ли обычный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Спецификация определяет педаль сустейна как контроллер 64 , поэтому вам необходимо отправить сообщение об изменении управления.

pygame.midi не имеет специальной функции для этого, поэтому вы должны отправить необработанные байты:

write_short(0xb0 + channel, 64, 127 if pressed else 0);
0 голосов
/ 28 июня 2018

К сожалению, в pygame.midi (или в большинстве других широко используемых библиотек Python-MIDI) не реализована педаль сустейна, поэтому вопрос о ее использовании непосредственно из модуля Pygame исключен.

Однако вы можете обойти это, немного реструктурировав код. Если вы можете использовать определенную клавишу (или событие) вместо физической педали сустейна (в конце концов, большинство MIDI-педалей сустейна простые переключатели ), вы можете выполнить что-то похожее на сустейн. Например:

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
...