0

私は 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()

コードを再形成する他のアイデアはありません...誰かが私を助けてくれますか?

ありがとう

4

1 に答える 1