问题描述
我目前正在做一个项目。我的目标是从我的 MIDI 键盘获取输入并对音符事件做出反应。 当我收到特定笔记的笔记事件时,我想在我的 Tkinter GUI 上将其可视化,我在其上创建了一个带有矩形的键盘。 我希望 GUI 在我按下时一直显示,例如任何 c-note,我希望 c 矩形用一个点标记。当我收到 note-off 事件时,我想删除点。 我在 Mac 和 Python 3.9.2 上使用 Big-Sur 11.0.1。
问题是:如何在显示 TkinterGUI 的同时使用 Mido 接收 MIDI 输入并在 GUI 中对其做出反应。当我运行导入“klaviatur.py”文件的“keyboardInput.py”文件时,绘制了GUI并且未收到Midi-Inputs,代码不再侦听任何midi输入。 如何在显示 GUI 的同时接收 MIDI 信号以在我的 GUI 上“实时”显示它们?
这是我的 Tkinter GUI 文件中的代码,名为“klaviatur.py”:
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)
这里是代码文件“keyboardInput.py”,它获取MIDI输入并导入klaviatur.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)
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)