βスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。Authorになった僕ですが、PerlといえばCPANモジュールを利用するのがあたりまえ(?)ですよね。そこで自分なりに習作としてキッチンタイマーをGtk2とGtk2::GladeXMLをつかって作成しようとしたところで問題に引っかかったのでご報告したいと思います。Gladeをつかってファイルをつくってウィンドウをつくってカウントダウンをするところまでは順調でした、しかしいざBeep音をならすところになって用意したmp3ファイルを再生するためのライブラリとしてはじめに目をつけたのはAudio::Play::MPlayerでした。順調に思えたこのモジュールですが、いざ利用するとなぜかアプリケーションの終了後mplayerを利用した別threadがのこってしまっているのでした。はじめは別threadのしょりでthreadが終了しないのかと思いましたが、どうも違うのではと思いました。いう問題のときは問題の原因を把握する事が最優先です。私はAudio::Play::MPlayerで単純にファイルを再生して終了するだけのスクリプトをかいてみました。するとなんとこのスクリプトが終了しないのです。これでまずは問題がなにかしらこのライブラリに有るのだろうという事は見当がつきます。なると次は実装を確認する事です。Audio::Play::MPlayerの実行のsampleとして掲載されているのは以下のようなコードです。0;ここで注目したいのは最終行だ、untillをつかっている。あからさまにココが怪しい、終了条件を探ってみよう。Audio::Player::MPlayerの実装を確認しよう。$self-&gt;{state};}単純にstateを返却しているようだ、ではstateはどこで確認しているのかというと、なんとこのコードどこにもmplayerのステータスを確認している行が無い!!信じられないがこれが現実だ。これは再生が終了してようと終了していまいとステータスに変化はないということだ。具体的にいうとモジュール内でstopが読み出されたらstatusを停止に、などと変更しているだけで実際のmplayerのモードを確認しているコードは一つもないのだでは、自分で実装しようと思うのがプログラマ心だ。mplayerからステータスを受け取るだけなら単純だろうと思いmplayerのslaveモード(このプラグインはslaveモードを使う事でmplayerを操作しようとしている)のコマンドを確認すると......なんと、MPlayerにもステータスを確認するコマンドが無い残念ながらこのタイマーのプログラムからなんとMPlayerのソースをいじる必要までに発展したのである。いうわけで現状Audio::Play::MPlayerがまともに動作する可能性はほぼ無い。STATコマンドでステータスを確認できるmpg123プログラムをカバーしたAudio::Play::MPG123モジュールは無事動作した、よって私はAudio::Play::MPG123を代替として利用する事を進めようとおもう。PCカードを購入しました。O...»プロフィールid:Pocket7878_devプログラミング好きで、仕事の傍らで趣味で書いたもの等があればちょびちょび更新していきます。Blog|ブログを報告する。