MIDIフットスイッチの状態取得
前回からの続きです
MIDIフットスイッチが踏まれたら"footsw on!"と表示するプログラムです。
スタンダードMIDIファイルの最初のイベントは頭から38Byte目に書かれるので、1秒毎にインターフェースの状態を書き出して、38Byte目にプログラムチェンジ(c0)が書かれたかどうかを判定しています。
一応期待通りに動くのですが、
- 都度ファイルに書き出してそれを再度読み込んで内容を確認しているブサイクさと
- スイッチを踏むタイミングによっては取りこぼしがある
ので、正直実用化には厳しいかと、、、
arecordmidi を使う方法以外に何かいいアイデアがないか考えてみます。。。
#!/usr/bin/python3
# coding:utf-8
import subprocess
import binascii
from subprocess import Popen
from time import sleep
while True:
cmd = "arecordmidi -p UM-1G testr.mid"
proc = Popen(cmd.split())
print("process id = %s" % proc.pid)
print(proc)
sleep(0.5)
proc.terminate()
sleep(0.5)
smf_file = open("testr.mid","rb")
smf_file_data = smf_file.read()
smf_file.seek(38)
data1 = smf_file.read(1)
data2 = smf_file.read(1)
smf_file.close
data_all_hex = binascii.hexlify(smf_file_data)
data1_hex = binascii.hexlify(data1)
data2_hex = binascii.hexlify(data2)
print(data_all_hex)
print(data1_hex)
print(data2_hex)
if data1_hex == "c0":
print("footsw on!")
break