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