この人頭いいなと思ったエピソード

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";の音声データを上書きしているのであろうと思うんですが、いまひとつ理解できません。これも合わせてお教え願えれば幸いです。 よろしくお願いします。

A 回答 (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で確認。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/07 11:53

> 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なので、サービスタスクでも呼び出せたのではないかと思われます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/07 12:06

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



それとも、Webサーバで音を鳴らしてWebブラウザ(Webクライアント)側で聞くことを意図していますか?

この回答への補足

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

補足日時:2012/05/06 20:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報