Как отправить миди-сообщения Control Change (CC) с помощью pyPortMidi или pygame? - PullRequest
2 голосов
/ 25 октября 2010

Я использую Python вместе с Pygame, который использует pyPortMidi для своего midi-модуля, и в настоящее время я отправляю сообщения NoteOn и NoteOff через Midi Yoke в Ableton live, что прекрасно работает. Но я не могу понять, как я отправляю сообщения 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

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Похоже, вы использовали бы метод write_short для записи необработанных MIDI-пакетов или метод write, если вы хотите отправить несколько из них одновременно.Так, например, если вы хотите отправить значение 123 на контроллер 17, это будет выглядеть так:

self.midi_out.write_short(0xb0, 17, 123)

Причина, по которой вы, вероятно, не заметили это в документации, заключается в том, что термин "статус""часто используется в протоколе MIDI для обозначения типа сообщения (т. е. примечание включено, примечание выключено, изменение управления и т. д.).

0 голосов
/ 11 ноября 2010

, если вам также нужен способ отправки NRPN, в дополнение к CC, напишите мне сообщение, и я отправлю вам свой код, поскольку я делаю миди-приложение с pygame, которое взаимодействует как с MIDI CC, так и с NRPN.

Кстати, будьте осторожны с этими сообщениями. Некоторые контроллеры синтезатора / миди отправляют одно и то же сообщение о состоянии для выключения и выключения заметки, в то время как другие отправляют разные сообщения и отмечают сообщения о состоянии. Вам нужно будет убедиться, что ваше приложение не перепутано с сообщениями о состоянии. Вам также нужно будет проверить сообщения о состоянии, чтобы убедиться, что это сообщение, а не сообщение CC, или наоборот, иначе вы можете вызывать заметки вместо отправки сообщений CC.

Что я сделал, так это сделал простое приложение Pygame для приема MIDI-файлов, которое помогло мне изучить, что содержится в миди-сообщениях и как они формируются при запуске нот и вращающих ручек на моем синтезаторе Alesis Andromeda A6, используя простые операторы печати. ​​

Кстати, какое приложение вы делаете? Я очень заинтересован.

Удачи !!!

...