GUIその1(キー入力)

PySndObjそのものにはGUIを持ちえていません。そこでwxPythonを使ってパソコンキーボードのpを押せば正弦波が鳴る、sを押せば鳴り止む、最後にqを押せば終了する。以上を作ってみる。wxPythonの入門には以下のページを参考にしました。

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)
#ここまでは正弦波を鳴らす準備。
def beep(evt):
    if evt.GetKeyCode() in [ord('p'), ord('P')]:
        thread.ProcOn() #音が鳴る。
    elif evt.GetKeyCode() in [ord('s'), ord('S')]:
        thread.ProcOff() #音が鳴りやむ。
    elif evt.GetKeyCode() in [ord('q'), ord('Q')]:
        wx.Exit() #終了する

app = wx.PySimpleApp(0)
frame = wx.Frame(None, -1,  "SINEWAVE")
frame.Bind(wx.EVT_KEY_DOWN, beep)
app.SetTopWindow(frame)
frame.Show(True)
frame.Fit()
app.MainLoop()

wxPythonについては先程リンクしたページを参考にしてもらうとして、正弦波を鳴らすのは既にこの日記で取り上げましたね。注意すべきところはProcOn()で音が鳴りProcOff()で音が鳴りやむとこで、ハンドラに指定した関数beepにありますね。