可以通过note_on()
或note_off()
方法调用简单的midi信号,但是我找不到使用pygame.midi
发送“延音踏板” midi信号的方法。有什么常规方法可以做到吗?
答案 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);