GUIその2(ボタン入力)

Linuxの音楽環境のセットアップと夏風邪で前回の日記からちょい間があきました。しかし少しづつ地味に続けていきます。今日はGUIのボタンを作ってそれを1度押すと正弦波が鳴り、もう1度押すと鳴り止む、それの繰り返し。

import wx
from sndobj import *

tab = HarmTable()
osc = Oscili(tab, 440, 3000)
out = SndRTIO(1, SND_OUTPUT)
out.SetOutput(1, osc)

thread = SndThread()
thread.AddObj(osc)
thread.AddObj(out, SNDIO_OUT)

num = 0
def beep(evt):
    global num
    if ( num % 2) == 0:
        thread.ProcOn()
    else:
        thread.ProcOff()
    num += 1

app = wx.PySimpleApp(0)
frame = wx.Frame(None, -1, "SINEWAVE")
button = wx.Button(frame, -1, "Hello!")
button.Bind(wx.EVT_BUTTON, beep)
app.SetTopWindow(frame)
frame.Show(True)
frame.Fit()
app.MainLoop()

GUIのボタンを作るところはここを参考にしてください。それでは、まず関数beepで変数numが偶数のときはProcOn()で音を鳴らしています。ProcOn()を連続で呼ぶと落ちてしまいます、注意です。