なぜ”メモ”なのかというと、いつもとは違いサンプルコードなどは提供せずに、公式ドキュメントをかくような感じにするからです。
一応前提として、Windowsでの動作ということと、wx.mediaのimportが必須となります。
import wx.media
生成
wx.media.MediaCtrl(parent, id=-1, filename="", pos=DefaultPosition, size=DefaultSize, style=0, szBackend="", validator=DefaultValidator, name="mediaCtrl")・parent - 親要素を指定。
・id - イベントに使用するためのidを指定。
・filename - 開くファイルを指定。個人的には空白にして後からLoad()関数を利用して読み込むのがおすすめ。
・pos - 位置を指定。
・size - サイズを指定。
・style - スタイルを指定。
・szBackend - バックエンドにするツールを指定。
その他省略
szBackend
一応利用可能なものをすべて表記しておくが、動作の保障しない。- wx.media.MEDIABACKEND_WMP10
恐らくWndows Media Player。これが最も安定。 - wx.media.MEDIABACKEND_DIRECTSHOW
恐らくマイクロソフトのDirect Show。mp4やmovなどの再生には対応しない。 - wx.media.MEDIABACKEND_MCI
恐らくWindowsにもともとあったMci。公式でもMediaPlayerの利用を推奨している。 - wx.media.MEDIABACKEND_QUICKTIME
恐らく既にサービス終了しているAppleのサービス。 - wx.media.MEDIABACKEND_GSTREAMER
恐らくGStreamerというサービス。よくわからない。 - wx.media.MEDIABACKEND_REALPLAYER
RealPlayer!?なぜこれがあるのかわからないが、おそらくあの、RealPlayerのことだと思う。
szBackendは指定しなくても動くが、安定した動作にはBackendが必要になってくる。
便利な関数
ここから便利な関数を紹介する。すべての関数をカバーできているわけではないので注意。
GetState()いまのプレイーの状態を返す。
- wx.media.MEDIASTATE_STOPPED
停止中 - wx.media.MEDIASTATE_PAUSED
一時停止中 - MEDIASTATE_PLAYING
再生中
GetVolume()音量を返す。型はdoubleで、0.0~1.0の値を返す。
Length()長さを返す。単位はミリ秒。
Load(filename)メディアファイルを読み込む。
Pause()再生中のメディアを一時停止する。
Play()読み込んだメディアを再生する/再開する
Seek(where)再生する位置を変える。ミリ秒。
SetVolume(volume)音量を指定する。型はdoubleで、0.0~1.0の値を指定する。
bool値を返す。Trueが帰った場合は成功。
ShowPlayerControls()プレイヤーのコントロールを表示させる。szBackendをwx.media.MEDIABACKEND_WMP10にしてるときの動作
これひとつで完結できてしまうほどの高機能である。
Stop()再生中のメディアを停止する。Pause()と違いSeekが0になる。
Tell()現在の再生位置を返す。単位はミリ秒。
イベント
バインド可能なイベントはこんな感じ。- wx.media.EVT_LOADED
ロードが終わり、再生できるようになったときに呼び出される。
こちらの環境では正常な動作を確認できなかったため、利用は推奨しない - wx.media.EVT_STOP
メディアが停止されたときに呼び出される。
自身でスライダー等を作る場合は使うことのないイベントだ。 - wx.media.EVT_PLAY
メディアが再生されたときに呼び出される。同上。 - wx.media.EVT_PAUSE
メディアが一時停止されたときに呼び出される。同上。 - wx.media.EVT_FINISHED
メディアの再生が終わった場合に呼び出される。
szBackendをwx.media.MEDIABACKEND_WMP10にしたときにのみ正常な動作を確認 - wx.media.EVT_STATECHANGED
メディアの状態が変わったときに呼び出される。
おわりに
wx.media.MediaCtrlはいまだに不審な点が多い。wx.Timerが動作しない不具合が発生したり、EVT_FINISHEDが、メディアが停止されたときに呼び出されたり、EVT_LOADEDが動作しなかったりといろいろと不審だ。
そのうえで動作するプログラムを作ることは容易ではない。
しかしながら、単にアニメーションを表示させるなど、プレイヤーとしての作りをしない場合は有効である。
尚、自分としてはわりと使ったと思うから、不明な点はコメントしてもらえれば答えられると思う。
0 件のコメント:
コメントを投稿