• 締切済み

win32::mediaplayerについて

Perlモジュールwin32::mediaplayerを使って以下のスクリプトを作成しました。 (使用環境 Apache HTTP Server 2.2(win32), Perl : ActivePerl-5.14.2.-MSWin32-x86) use Win32; use Win32::MediaPlayer;  $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; これで、コマンドラインからは実行できるのですが、これを以下のように     <!--#exec cgi= "../cgi-bin/****.pl" -->     SSIで実行できないのでしょうか? 試行錯誤の末、 モジュール Audio::Beep,と Win32::MediaPlayer,の組み合わせで以下のようにしたら <!--#exec cgi= "../cgi-bin/****.pl" --> で実行できました。  use Win32::API; use Win32; use Audio::Beep; use Win32::MediaPlayer; $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; $beeper = Audio::Beep->new(player => 'Audio::Beep::Win32::API'); # $music = "g' f bes' c8 f d4 c8 f d4 bes c g f2"; $music = "g' f f f";   $beeper->play( $music ) 思うに$winmm->load('****.wav');で指定したwavファイルが $music = "g' f f f";の音声データを上書きしているのであろうと思うんですが、いまひとつ理解できません。これも合わせてお教え願えれば幸いです。 よろしくお願いします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

use Win32::Sound; print "Content-Type: text/plain\n\n"; require Win32::Detached; $fname = 'C:/WINNT/Media/ding.wav'; die unless -e $fname; Win32::Sound::Play( $fname ); Win32::Sound::Stop(); 上記スクリプトだと、音が鳴ったり。 Windows 2000, IIS 5.0, ActivePerl 5.14.2で確認。

hicolsugi
質問者

お礼

osamuy さん 有難う御座います。 Win32::Detachedについてはよく理解していないのですが、試してみました。 コマンドラインからはOKでしたが、SSIではやはりうまく行きませんでした。_--_1l1_1_さんが言われるように、当方のWEBサーバーをもう一度確認してみます。

回答No.2

> Webサーバ側に「だけ」音をだしたいのですが、クライアント側にも出せるるのでしょうか? Webクライアント側で出すには、javascriptでdocument.all.music.srcとかを使って出します。 質問者さんのコードですが、 $winmm = new Win32::MediaPlayer; $winmm->load('****.wav'); $winmm->play; と $beeper = Audio::Beep->new(player => 'Audio::Beep::Win32::API'); $music = "g' f f f";   $beeper->play( $music ) は別ものです。別ものという意味は、2つのコードはお互いに影響を与えていません。したがって、音声データを上書きもしていないです。 Windowsのオーディオ関係は詳しくないですが、Win32::MediaPlayerは高レベルのAPI、Audio::Beep::Win32::APIは低レベルのAPIを使っているのではないかと思われます。 Apacheがユーザタスクではなく、サービスで動いているなら、Win32::MediaPlayerで使っている高レベルのAPIを呼べないんではないかと思われます。したがって、Apacheに適切な権限を与えるか(??)、Apacheをログインしたユーザがコマンドプロンプトなどから実行すれば(??)音が鳴るかもしれません。(よくわからず) たぶん、Beepが鳴ったのは低レベルのAPIなので、サービスタスクでも呼び出せたのではないかと思われます。

hicolsugi
質問者

お礼

_--_1l1_1_さん 有難う御座います。 確かにおっしゃるように、Apacheはサービスで動いています。Apacheの設定等もう一度確認し再度挑戦してみます。高レベルのAPI、低レベルのAPIというのにもついて、よく勉強してみます。

回答No.1

Webブラウザでアクセスしたとき、Webサーバ側に「だけ」音を鳴らそうとしていますか?つまり、Webブラウザには聞こえなくてよいか、という意味です。 それとも、Webサーバで音を鳴らしてWebブラウザ(Webクライアント)側で聞くことを意図していますか?

hicolsugi
質問者

補足

Webサーバ側に「だけ」音をだしたいのですが、クライアント側にも出せるるのでしょうか?

関連するQ&A