0

私は現在、プロジェクトに取り組んでいます。私の目標は、MIDI キーボードから入力を取得し、ノート イベントに反応することです。特定のノートのノートオン イベントを取得したら、長方形のキーボードを作成した Tkinter GUI でこれを視覚化したいと考えています。GUI を常に表示したいのですが、たとえば c-note を押すと、c の四角形にドットが付きます。ノートオフイベントを受信したら、ドットを削除したいです。Mac で Big-Sur 11.0.1 と Python 3.9.2 を使用しています。

問題は、TkinterGUI を表示すると同時に、Mido で midi 入力を受け取り、GUI でそれに反応するにはどうすればよいかということです。「klaviatur.py」ファイルをインポートする「keyboardInput.py」ファイルを実行すると、GUI が描画され、Midi 入力が受信されず、コードが midi 入力をリッスンしなくなります。GUI を表示し、同時に MIDI 信号を受信して​​ GUI に「ライブ」で表示するにはどうすればよいですか?

「klaviatur.py」と呼ばれる私のTkinter GUIファイルからの私のコードは次のとおりです。

from tkinter import *
root = Tk()
root.title("It's alive!")
root.geometry('1200x600+0+0')
root.configure(background = 'gray')
canvas = Canvas(root, width=width, height=height)
canvas.pack()

note_C = Note((x1, y1, x2, y2), colorWhite)
dot_C = Dot((dotx1, doty1, dotx2, doty2), colordot)
note_C.draw(canvas)

def drawDot_C():
   dot_C.draw(canvas)

ここでは、midi 入力を取得して klaviatur.py ファイルをインポートするコード ファイル "keyboardInput.py" を示します。

 import klaviatur

import pygame
import pygame.midi
import time
import mido


def makeNumberToNote(notenumber):
    if notenumber == 36:
        note = 'f'
        print('note is ' + note)
       # klaviatur.drawDot_F()
        #klaviatur.dot_F.draw(klaviatur.canvas)


inputs = mido.get_input_names() # hol dir eine Liste mit allen Midi-Geräten, die angeschlossen sind
#print(inputs)

with mido.open_input(inputs[0]) as p: # hier die [1] mit dem richtigen Gerät ersetzen
    for msg in p:
        #print(msg) # gibt alle Midi-Events aus
        if not msg.is_meta:
            print(msg.note)
            print(msg.type)
            if msg.type =='note_on':
                print("note on is the type")
                makeNumberToNote(msg.note)

ご協力ありがとうございました!

4

0 に答える 0