wx.media.MediaCtrlの関数、イベントなど詳しくメモしておきます

2024年11月2日土曜日

Python wxPython 動画

t f B! P L

こんにちは、今回はwx.media.MediaCtrlについてどこよりも詳しくメモしたいと思います。
なぜ”メモ”なのかというと、いつもとは違いサンプルコードなどは提供せずに、公式ドキュメントをかくような感じにするからです。

一応前提として、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

一応利用可能なものをすべて表記しておくが、動作の保障しない。
  1. wx.media.MEDIABACKEND_WMP10
    恐らくWndows Media Player。これが最も安定。
  2. wx.media.MEDIABACKEND_DIRECTSHOW
    恐らくマイクロソフトのDirect Show。mp4やmovなどの再生には対応しない。
  3. wx.media.MEDIABACKEND_MCI
    恐らくWindowsにもともとあったMci。公式でもMediaPlayerの利用を推奨している。
  4. wx.media.MEDIABACKEND_QUICKTIME
    恐らく既にサービス終了しているAppleのサービス。
  5. wx.media.MEDIABACKEND_GSTREAMER
    恐らくGStreamerというサービス。よくわからない。
  6. wx.media.MEDIABACKEND_REALPLAYER
    RealPlayer!?なぜこれがあるのかわからないが、おそらくあの、RealPlayerのことだと思う。
Windowsでの動作を前提としているこの記事としてはwx.media.MEDIABACKEND_WMP10を強く推奨する。
szBackendは指定しなくても動くが、安定した動作にはBackendが必要になってくる。

便利な関数

ここから便利な関数を紹介する。
すべての関数をカバーできているわけではないので注意。
GetState()
いまのプレイーの状態を返す。
  1. wx.media.MEDIASTATE_STOPPED
    停止中
  2. wx.media.MEDIASTATE_PAUSED
    一時停止中
  3. 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()
現在の再生位置を返す。単位はミリ秒。

イベント

バインド可能なイベントはこんな感じ。
  1. wx.media.EVT_LOADED
    ロードが終わり、再生できるようになったときに呼び出される。
    こちらの環境では正常な動作を確認できなかったため、利用は推奨しない
  2. wx.media.EVT_STOP
    メディアが停止されたときに呼び出される。
    自身でスライダー等を作る場合は使うことのないイベントだ。
  3. wx.media.EVT_PLAY
    メディアが再生されたときに呼び出される。同上。
  4. wx.media.EVT_PAUSE
    メディアが一時停止されたときに呼び出される。同上。
  5. wx.media.EVT_FINISHED
    メディアの再生が終わった場合に呼び出される。
    szBackendをwx.media.MEDIABACKEND_WMP10にしたときにのみ正常な動作を確認
  6. wx.media.EVT_STATECHANGED
    メディアの状態が変わったときに呼び出される。

おわりに

wx.media.MediaCtrlはいまだに不審な点が多い。
wx.Timerが動作しない不具合が発生したり、EVT_FINISHEDが、メディアが停止されたときに呼び出されたり、EVT_LOADEDが動作しなかったりといろいろと不審だ。
そのうえで動作するプログラムを作ることは容易ではない。
しかしながら、単にアニメーションを表示させるなど、プレイヤーとしての作りをしない場合は有効である。

尚、自分としてはわりと使ったと思うから、不明な点はコメントしてもらえれば答えられると思う。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ