2016-12-21 9 views
0

Я использую кнопки в матрице сканирования для вывода MIDI-заметок в MIDI-USB конвертер, подключенный к MIDI-OX.MIDI Out on Raspberry Pi с использованием Python

Для этого я использую Python для определения, когда нажата или отпущена кнопка, и какая кнопка была. Эта часть кода работает нормально.

Однако, я получаю много несогласованности с командами, полученными MIDI-OX. Для связи у меня есть вывод UART0_TXD Pi, подключенный непосредственно к контакту 2 5-контактного DIN-разъема, используемого для MIDI и PySerial, отправляющих данные. Насколько я могу судить, мой код должен генерировать правильные команды и отправлять их по последовательному порядку, поэтому я не уверен, куда обратиться за устранением неполадок.

Код отправки команды выглядит следующим образом:

message=chr(0x90) + chr(0x3D) + chr(0x40) 
port.write(message) 

Это приводит к следующему выходу в MIDI-OX:

TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT  
007B971E 1 --  90 68 27 1 G# 8 Note On  
007B971E 1 --  FF -- -- -- --- System Reset 

можно видеть выше, что MIDI-OX является ПОЛУЧАТЬ 68 для данных 2 и выводит правильное примечание (G #) для этого числа. Однако, если изменить код следующим образом:

message=chr(0x90) + chr(0x3C) + chr(0x40) 
port.write(message) 

выход MIDI-ОХ:

TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT    
007FAC19 1 --  81 00 42 2 C 0 Note Off    
007FAC3A 1 --  FF -- -- -- --- System Reset   

Показано, что она получает совершенно разные данные.

Любые идеи о том, куда идти отсюда, будут очень признательны.

+0

Итак, вы отправляете 1 вещь и "G sharp?" включается, вы отправляете еще одну вещь, и неправильная нота «C» отключается, кажется хорошим началом, почему бы не просто перебрать хотя бы один из шестнадцатеричных 'chr' и отобразить заметки, они могут быть не в шестнадцатеричной последовательности? Попробуйте: chr (x90) + chr (0x3D) + chr (0x41) '... половина битвы просто в основном следит за изменением одной вещи, затем видит результаты, меняет другую вещь и видит результаты ... просто это снова и снова, пока вы не сможете понять, почему он не делает то, что вы ожидали раньше. – jmunsch

+0

Спасибо за предложение. К сожалению, все данные, полученные MIDI-OX, были неправильными, и я не вижу шаблон. Я подозреваю, что я делаю что-то неправильно с PySerial, но я не знаю, что. Либо это, либо мой интерфейс USB-MIDI неисправен, но у меня нет MIDI-инструмента для проверки. –

+0

Итак, если вы отправляете одно и то же снова и снова, оно меняется? Может быть, какое-то ослабленное напряжение или провода? – jmunsch

ответ

0

Только начиная от аналогичного проекта, я имею в виду ваш комментарий:

К сожалению, все MIDI-OX данных полученное для ошиблась, и я не могу видеть картину. Я подозреваю, что я делаю что-то неправильно с PySerial, но я не знаю, что.

Насколько я понял, настройка скорости передачи MIDI не так просто для Raspi см https://zuzebox.wordpress.com/2014/06/26/raspberry-pi-minipiio-midi-board/

Может быть, ваша установка немного от синхронизации, поэтому производит только «почти» правильный, но несколько неустойчивый MIDI данных и нуждается в настройке baud, чтобы все было правильно.