私は python2-7 を使用しています。fluidsynth で作成されたノートの読み取りを停止するボタンを tkinter に取得したいと考えています。
一般的な解決策は、次のように time.after を使用することであることがわかりました: How do you create a Tkinter GUI stop button to break an infinite loop?
しかし、私の場合は、ノートの長さを指定するために noteeon と noteoff の間に時間が必要なため、使用できません。さらに、開始をクリックした場合にのみノートを再生したいです(リンクのソリューションのように最初はいいえ)。
このコードを作成しましたが、var_start は常に int として初期化されるため、機能しません。
from tkinter import*
import fluidsynth
import time
fs=fluidsynth.Synth()
fs.start(driver='alsa', midi_driver='alsa_seq')
org_charge = fs.sfload("organ.sf2")
fs.program_select(0,org_charge, 0, 0)
time.sleep(1)
var_start=int
def start():
global var_start
var_start=1
def stop():
global var_start
var_start=0
root=Tk()
if var_start==1:
fs.noteon(0,67,127)
time.sleep(1)
fs.noteoff(0,67)
fs.noteon(0,71,127)
time.sleep(1)
fs.noteoff(0,71)
fs.noteon(0,74,127)
time.sleep(1)
fs.noteoff(0,74)
Button(root, text='start', command= start).pack(padx=10, pady=10)
Button(root, text='stop', command= stop).pack(padx=10, pady=10)
root.mainloop()
コードを再形成する他のアイデアはありません...誰かが私を助けてくれますか?
ありがとう