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にありますね。