pygameを利用したMIDIフットスイッチの情報送信

前回からの続き
受信したMIDIのプログラムチェンジを判定して、MIDI音源(ポケット・ミク)やマルチフットエフェクター(GP-10)にMIDI信号を送信してみました

pygame.midiの受信ができれば送信も同じ文法で記述できるので、書き方自体はそんなに難しくないです
受信したスタンダードMIDIファイルが3次元のリストになっているので、そこの扱いさえ注意すれば
プログラムは以下の通り


#!/usr/bin/python3
# coding:utf-8

import time
import pygame
import pygame.midi
import re

pygame.init()
pygame.midi.init()

GP10_OUT = 0
NSX39_OUT = 0
FC50_IN = 0
FC50_OUT = 0

FC50_name = 'UM-1G'
GP10_name = 'GP-10 MIDI 1'
NSX39_name ='NSX-39 MIDI 1'

for i in range(pygame.midi.get_count()):
print (i,end=' ')
midi_info = (pygame.midi.get_device_info(i))
if_name = str(midi_info[1])
print (midi_info)

if midi_info[2] == 1:
if FC50_name in if_name:
FC50_IN = i
if midi_info[2] == 0:
if FC50_name in if_name:
FC50_OUT = i
if GP10_name in if_name:
GP10_OUT = i
if NSX39_name in if_name:
NSX39_OUT = i


print ("FC-50 IN ID = ",FC50_IN)
print ("FC-50 OUT ID = ",FC50_OUT)
print ("GP-10_OUT ID = ",GP10_OUT)
print ("NSX-39_OUT ID = ",NSX39_OUT)


while True:

in_put = pygame.midi.Input(FC50_IN)
midi_in = in_put.read(1)

time.sleep(0.1)
in_put.close()

if midi_in:
print ("FC-50 IN = ",midi_in)
in_prog_no = (midi_in[0][0][1])
out_prog_no_GP10 = in_prog_no + 10
out_prog_no_NSX39 = in_prog_no + 70

midi_out_GP10 = [[[192, 0, 0, 0], 1]]
midi_out_NSX39 = [[[193, 0, 0, 0], 1]]
midi_out_GP10[0][0][1] = out_prog_no_GP10
midi_out_NSX39[0][0][1] = out_prog_no_NSX39

print ("IN-FC50 ",in_prog_no )
print ("OUT-GP10 ",out_prog_no_GP10)
print ("OUT-NSX39 ",out_prog_no_NSX39)

print ("FC-50 IN = ",midi_in )
print ("GP-10_OUT = ",midi_out_GP10)
print ("NSX-39_OUT = ",midi_out_NSX39)

out_put_GP10 = pygame.midi.Output(GP10_OUT)
out_put_GP10.write(midi_out_GP10)

time.sleep(0.1)

out_put_NSX39 = pygame.midi.Output(NSX39_OUT)
out_put_NSX39.write(midi_out_NSX39)

out_put_GP10.close()
out_put_NSX39.close()
実行結果はこちら

0 (b'ALSA', b'Midi Through Port-0', 0, 1, 0)
1 (b'ALSA', b'Midi Through Port-0', 1, 0, 0)
2 (b'ALSA', b'GP-10 MIDI 1', 0, 1, 0)
3 (b'ALSA', b'GP-10 MIDI 1', 1, 0, 0)
4 (b'ALSA', b'GP-10 MIDI 2', 0, 1, 0)
5 (b'ALSA', b'GP-10 MIDI 2', 1, 0, 0)
6 (b'ALSA', b'UM-1G MIDI 1', 0, 1, 0)
7 (b'ALSA', b'UM-1G MIDI 1', 1, 0, 0)
8 (b'ALSA', b'NSX-39 MIDI 1', 0, 1, 0)
9 (b'ALSA', b'NSX-39 MIDI 1', 1, 0, 0)
10 (b'ALSA', b'microKEY-25 MIDI 1', 0, 1, 0)
11 (b'ALSA', b'microKEY-25 MIDI 1', 1, 0, 0)
FC-50 IN ID = 7
FC-50 OUT ID = 6
GP-10_OUT ID = 2
NSX-39_OUT ID = 8
FC-50 IN = [[[192, 9, 0, 0], 2592]]
IN-FC50 9
OUT-GP10 19
OUT-NSX39 79
FC-50 IN = [[[192, 9, 0, 0], 2592]]
GP-10_OUT = [[[192, 19, 0, 0], 1]]
NSX-39_OUT = [[[193, 79, 0, 0], 1]]
FC-50 IN = [[[192, 8, 0, 0], 4392]]
IN-FC50 8
OUT-GP10 18
OUT-NSX39 78
FC-50 IN = [[[192, 8, 0, 0], 4392]]
GP-10_OUT = [[[192, 18, 0, 0], 1]]
NSX-39_OUT = [[[193, 78, 0, 0], 1]]

次はフォットスイッチの番号に合わせてエフェクターMIDI音源の組み合わせテーブルを作成します
完成まで後ちょっと