2007年05月03日

Perl小技メモ3

以前のPerl小技メモ1, 2に続いて、調べたことの備忘録。

WindowsのActiveperlで、WAVやMP3のファイルを再生する方法
Beep音を鳴らす方法については、Perl小技メモ1の記事で紹介したが、自分が使っているアプリケーションでアラームを鳴らすのにBeep音ばかりだとちょっと疲れてくるし、連続で鳴ったときなどはPCが壊れたかた勘違いしてくる。そこで、WAVやMP3のファイルを再生する方法を調べた。以前の記事では試してなかったWin32::MediaPlayerを使った。

インストールは、Win32-DDEと同様に、こちらのサイトを利用する。Win32::APIも必要となる。
使い方は
use Win32::MediaPlayer;

my $winmm = new Win32::MediaPlayer;
$winmm->load('d:/10.mp3');
$winmm->play;

[音楽が鳴っている間に非同期でコマンド実行可能]
$winmm->close;
のような感じ。
注意点としては、ファイルを指定するときにファイル名やパスを間違えたとしてもエラーとはならないので、ファイル名の指定は慎重にしなければならないということがある。また、$winmm->playコマンド実行後は非同期で音楽が鳴るため、そのままプログラムが終了してしまうと、音が途中で止まってしまうということがある。

実は、このモジュールでは、ドキュメントにもあるようにMCI(Multimedia Control Interfaceというものを使っており、winmm.dllを呼び出すという動作をしている。MCI自体の理解にはこちらのサイトが役に立った。このモジュールではmciSendString関数を使っており、このモジュールのコマンドとmciSendString関数のコマンドの対応は、このモジュールのソースを見れば分かる。このモジュールではplayコマンドにはwaitオプションがついていないため、音楽が鳴っている間に別の処理を実行可能となっている。テストプログラムを動かしていたときはこれに気づかず、音楽の再生がすぐにぶち切れて終了してしまうので嵌まってしまった。

ところで、このモジュールに関する情報はWeb上であまり見つからなかったんだけど、需要はないのかな… もっと簡単に実現できる方法があったりとか。
posted by mako at 00:37| 東京 ☀| Comment(1) | TrackBack(0) | メモ(PC・インターネット関連) | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
質問です。
貴サイトのブログを参考に私も試しました。
コマンドラインからは実行されるのですが、これを以下のように
<!--#exec cgi= "../cgi-bin/test2.pl" -->
してSSIで実行できないのでしょうか?
できるものであれば、御教授願えれば幸いです、
ちなみに私の環境は、windows+apacheの自宅サーバーです。よろしくお願いします。
Posted by 杉原利幸 at 2012年05月05日 17:35
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/40636414
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。