wxPython 音を鳴らしてみる

2011/01/25

wxPythonにwx.Soundクラスがあったので、音を鳴らしてみた。

メッセージを表示して音が繰り返し鳴るwindowを作ってみた。音声停止ボタンを押すと音が止まる。何か監視しておいて、異常があったときの警告画面に使える、と思う。

#!/usr/bin/env python
#coding:utf-8

import wx

class CtrlPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        self.parent = parent
        self.stopBtn = wx.Button(self, label=u"音声停止")
        self.quitBtn = wx.Button(self, label=u"閉じる")
        self.Bind(wx.EVT_BUTTON, self.OnStopBtn, self.stopBtn)
        self.Bind(wx.EVT_BUTTON, self.OnQuitBtn, self.quitBtn)
        sz = wx.BoxSizer()
        sz.Add(self.stopBtn,0)
        sz.AddStretchSpacer(1)
        sz.Add(self.quitBtn,0)
        self.SetSizer(sz)
    def OnQuitBtn(self, event):
        self.parent.Close()
    def OnStopBtn(self, event):
        self.parent.sound.Stop()

class AlertWindow(wx.Frame):
    def __init__(self, msg):
        wx.Frame.__init__(self, None, -1, u"Sound", size=(400,200))
        #for Windows XP
        #self.filename = r"C:\WINDOWS\Media\ringin"
        #for Ubuntu 10.04
        #self.filename = '/usr/share/sounds/speech-dispatcher/test.wav'
        self.filename = '/usr/share/games/pinball/tux/loop.wav'
        self.sound = wx.Sound(self.filename)
        self.sound.Play(wx.SOUND_ASYNC|wx.SOUND_LOOP)
        cp = CtrlPanel(self)
        msgText = wx.TextCtrl(self, 1, msg, style=wx.TE_MULTILINE)
        sz = wx.BoxSizer(wx.VERTICAL)
        sz.Add(cp, 0, wx.EXPAND)
        sz.Add(msgText, 1, wx.EXPAND)
        self.SetSizer(sz)
        self.Show(True)

if __name__ == '__main__':
    msg = u"wxPythonで音を鳴らします"
    app = wx.PySimpleApp()
    frame = AlertWindow(msg)
    app.MainLoop()

実行すると

参考

wxPython

Posted by skw