itadd midi_handler code - dmt - source code for the kunsthal art installation Err parazyd.org 70 hgit clone git://parazyd.org/dmt.git URL:git://parazyd.org/dmt.git parazyd.org 70 1Log /git/dmt/log.gph parazyd.org 70 1Files /git/dmt/files.gph parazyd.org 70 1Refs /git/dmt/refs.gph parazyd.org 70 1README /git/dmt/file/README.md.gph parazyd.org 70 1LICENSE /git/dmt/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 5364b2be9ce87fb5314c263998868b3663d6b466 /git/dmt/commit/5364b2be9ce87fb5314c263998868b3663d6b466.gph parazyd.org 70 1parent 848e7e15d53d5f30af32d6b8e7ab2714b391457f /git/dmt/commit/848e7e15d53d5f30af32d6b8e7ab2714b391457f.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Wed, 29 Nov 2017 10:53:02 +0100 Err parazyd.org 70 i Err parazyd.org 70 iadd midi_handler code Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i A midi-handler/config.py | 14 ++++++++++++++ Err parazyd.org 70 i A midi-handler/midi_handler.py | 74 +++++++++++++++++++++++++++++++ Err parazyd.org 70 i Err parazyd.org 70 i2 files changed, 88 insertions(+), 0 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/midi-handler/config.py b/midi-handler/config.py /git/dmt/file/midi-handler/config.py.gph parazyd.org 70 it@@ -0,0 +1,14 @@ Err parazyd.org 70 i+# See LICENSE file for copyright and license details. Err parazyd.org 70 i+""" Err parazyd.org 70 i+MIDI handler configuration Err parazyd.org 70 i+""" Err parazyd.org 70 i+ Err parazyd.org 70 i+# The device we want to use for MIDI. Found using: mido.get_input_names() Err parazyd.org 70 i+#device_name = 'USB MS1x1 MIDI Interface:USB MS1x1 MIDI Interface MIDI 1 24:0' Err parazyd.org 70 i+ Err parazyd.org 70 i+# Uncomment this for hardcode Err parazyd.org 70 i+#device_name = 'USB MS1x1 MIDI Interface:USB MS1x1 MIDI Interface MIDI 1 20:0' Err parazyd.org 70 i+ Err parazyd.org 70 i+# Comment this out if you hardcode Err parazyd.org 70 i+import mido Err parazyd.org 70 i+device_name = mido.get_input_names()[1] Err parazyd.org 70 1diff --git a/midi-handler/midi_handler.py b/midi-handler/midi_handler.py /git/dmt/file/midi-handler/midi_handler.py.gph parazyd.org 70 it@@ -0,0 +1,74 @@ Err parazyd.org 70 i+#!/usr/bin/env python3 Err parazyd.org 70 i+# See LICENSE file for copyright and license details. Err parazyd.org 70 i+""" Err parazyd.org 70 i+MIDI listener daemon for the Caller Station Err parazyd.org 70 i+""" Err parazyd.org 70 i+ Err parazyd.org 70 i+from subprocess import Popen Err parazyd.org 70 i+import mido Err parazyd.org 70 i+ Err parazyd.org 70 i+from config import (device_name) Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+def make_call(): Err parazyd.org 70 i+ # DISPLAY=:0 xdotool key 1 2 3 Return Err parazyd.org 70 i+ print('Popping the mechanical turk') Err parazyd.org 70 i+ Popen(['xdotool', 'key', '1', '2', '3', 'Return'], Err parazyd.org 70 i+ env={'DISPLAY': ':0'}) Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+def cancel_call(): Err parazyd.org 70 i+ print('Popping the mechanical turk') Err parazyd.org 70 i+ Popen(['xdotool', 'key', 'Escape'], Err parazyd.org 70 i+ env={'DISPLAY': ':0'}) Err parazyd.org 70 i+ Err parazyd.org 70 i+def main(): Err parazyd.org 70 i+ print('Opening the MIDI input listener') Err parazyd.org 70 i+ midi_in = mido.open_input(device_name) Err parazyd.org 70 i+ for msg in midi_in: Err parazyd.org 70 i+ print('Got MIDI message!') Err parazyd.org 70 i+ #print('Type:', msg.type) Err parazyd.org 70 i+ #print('Time:', msg.time) Err parazyd.org 70 i+ #print('Velocity:', msg.velocity) Err parazyd.org 70 i+ #print('Note:', msg.note) Err parazyd.org 70 i+ #print('Channel:', msg.channel) Err parazyd.org 70 i+ #print('Bytes:', msg.bytes()) Err parazyd.org 70 i+ #print('Bin:', msg.bin()) Err parazyd.org 70 i+ #print('Hex:', msg.hex()) Err parazyd.org 70 i+ print('Dict:', msg.dict()) Err parazyd.org 70 i+ midi_dict = msg.dict() Err parazyd.org 70 i+ Err parazyd.org 70 i+ # a control change Err parazyd.org 70 i+ #mtype = midi_dict.get('type') Err parazyd.org 70 i+ #mtime = midi_dict.get('time') Err parazyd.org 70 i+ #mctl = midi_dict.get('control') Err parazyd.org 70 i+ #mval = midi_dict.get('value') Err parazyd.org 70 i+ #mchan = midi_dict.get('channel') Err parazyd.org 70 i+ Err parazyd.org 70 i+ # a note_on Err parazyd.org 70 i+ mtype = midi_dict.get('type') Err parazyd.org 70 i+ mtime = midi_dict.get('time') Err parazyd.org 70 i+ mnote = midi_dict.get('note') Err parazyd.org 70 i+ mvelo = midi_dict.get('velocity') Err parazyd.org 70 i+ mchan = midi_dict.get('channel') Err parazyd.org 70 i+ Err parazyd.org 70 i+ if mtype == 'note_on' and mtime == 0 and mnote == 60 \ Err parazyd.org 70 i+ and mchan == 0: Err parazyd.org 70 i+ make_call() Err parazyd.org 70 i+ print('Got MIDI 60. Making call.') Err parazyd.org 70 i+ elif mtype == 'note_on' and mtime == 0 and mnote == 63 \ Err parazyd.org 70 i+ and mchan == 0: Err parazyd.org 70 i+ cancel_call() Err parazyd.org 70 i+ print('Got MIDI 63. Cancelling call.') Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+ print('---') Err parazyd.org 70 i+ Err parazyd.org 70 i+ # Try this out too: Err parazyd.org 70 i+ #while True: Err parazyd.org 70 i+ # for msg in midi_in.iter_pending(): Err parazyd.org 70 i+ # print(msg) Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+if __name__ == '__main__': Err parazyd.org 70 i+ main() Err parazyd.org 70 .