我正在使用Python和Pygame一起使用pyPortMidi作为midi模块,我现在通过Midi Yoke向Ableton live发送NoteOn和NoteOff消息,效果很好。但我似乎无法弄清楚我是如何发送CC消息的。
任何?
(工作)类基本上就是这样。
class MidiIO:
def __init__(self, device_id = None, inst=0):
pygame.midi.init()
pygame.fastevent.init()
if device_id is None:
self.output_id = pygame.midi.get_default_output_id()
else:
self.output_id = device_id
self._print_device_info()
port = self.output_id
print ("using output_id :%s:" % port)
self.midi_out = pygame.midi.Output(port, 0)
self.midi_out.set_instrument(inst)
self.pressed = False
def midiOut(self, btns, note=60, vel=100):
if btns == 1:
if not self.pressed:
self.midi_out.note_on(note, vel)
self.pressed = 1
elif btns == 0:
self.midi_out.note_off(note)
self.pressed = 0
答案 0 :(得分:3)
看起来你会使用write_short
方法来编写原始MIDI数据包,或者write
方法,如果你想一次发送几个。因此,例如,如果要在控制器17上发送值123,则如下所示:
self.midi_out.write_short(0xb0, 17, 123)
你可能在文档中没有注意到这一点的原因是“状态”这个术语经常在MIDI协议中用来指代消息类型(即注释,音符关闭,控制变化等)
答案 1 :(得分:0)
如果你还需要一种方法来发送NRPN,除了CC之外,给我发一条消息,我会发给你我的代码,因为我正在制作一个带有pygame的midi应用程序,它与MIDI CC和NRPN进行通信。
顺便注意那些注释和注释消息。一些合成器/ midi控制器发送相同的状态消息以关闭音符和音符关闭,而其他合成器/ midi控制器发送不同的音符关闭并记录状态消息。您必须保护您的应用不会被状态消息混淆。您还必须检查状态消息,以确保它是消息而不是CC消息,反之亦然,否则您可能会触发注释而不是发送CC消息。
我做的是制作一个简单的MIDI接收pygame应用程序,帮助我研究midi消息包含的内容以及它们在我的Alesis Andromeda A6合成器上触发音符和旋转旋钮时的形成,使用简单的打印语句。
顺便说一下你在制作什么类型的应用程序?我很感兴趣。
祝你好运!!!