Недопустимые данные MIDI-сообщения, когда я пытаюсь отправить сообщения об изменении управления

Я использую библиотеку pygame.midi для отправки MIDI-сообщений (сообщения Control Change, а не заметки). Идея состоит в том, чтобы отправить с выхода (из этой программы на Python) на вход другой программы.

>>> import time
>>> import pygame.midi as midi
>>> midiout = midi.Output(3)
>>> midi.init()
>>> midiout = midi.Output(3)
>>> midiout.write_short(0x74,124,0)
PortMidi call failed...
  PortMidi: `Invalid MIDI message Data'
type ENTER...

Как видите, я отправляю 0x74,124,0. Я беру эти цифры из диаграммы реализации rakarrack (приложения, которое я хочу контролировать): http://rakarrack.sourceforge.net/midiic.html

Что я делаю неправильно?

1 ответ

Решение

В байтах состояния MIDI (первый байт сообщения) должен быть установлен старший бит (0x80). связанная диаграмма немного сбивает с толку, но я предполагаю, что 0x74 - это байт данных, и перед ним должен стоять соответствующий байт состояния.

>>> import pygame.midi as midi
>>> midi.init()
>>> midiout = midi.Output(0)
>>> midiout.write_short(0xb0, 0x74, 124)

немного базовой документации по MIDI: http://www.midi.org/techspecs/midimessages.php

изменение управления равно 0xbn, где n - номер канала, поэтому 0xb0 - сообщение об изменении управления для канала 0.

Другие вопросы по тегам