フォームを開いた時にwavを鳴らすには…?

解決


ブルー  2003-04-02 22:13:02  No: 3254

こんにちは。そして、早速なんですが質問です。
フォームを開いた時に音(wav)を再生したいんですが…
「sndPlaySound」を使うと音楽は再生されるんですが、
その音楽を再生している時に、例えば
「フォーム内のボタンを押した時にwavを再生したい」と思って
ボタンの処理内にsndPlaySoundを使うと、フォームを開いた時に
再生されていたwavが止まってしまいます。

…要するに、フォームを開いた時に再生するwavをBGMとして再生したいワケ
です(ボタンを押した時に再生されるwavは効果音として)。
このような場合、どうしたらいいのでしょう?
(駄文ですいません…)


ブルー  2003-04-05 22:42:36  No: 3255

ここ数日、自分なりに考えてみましたが、MediaPlayerを使用して、
自分の望んでいたようにできました!
(ただFileNameに再生したいファイルを設定して、フォームを開いた時の
処理「OnActivate」でMediaPlayer.Playとしただけ…)
今思うと、MediaPlayerの仕組みを理解してなかったので、
どうしてもsndPlaySoundにこだわってしまっていました。
しかし、ここでまた一つわからない事が出てしまいました。
sndPlaySoundでは、

sndPlaySound(PChar('ファイル名.wav'),SND_ASYNC + SND_LOOP)

で繰り返し再生ができましたが、MediaPlayerでは繰り返し再生ができないので
しょうか?私なりに調べたんですが、わからずじまいです…。


たかみちえ  URL  2003-04-06 17:30:17  No: 3256

自分でタイマーなどを使って再生終了を確かめ、
…というふうにやるのがいいです。
再生中か停止中かわかるプロパティがありますから。
  あと、MediaPlayerだったら、Notifyプロパティで、再生終了通知を出せるようになっていたはず。
(わたしはMCIをじかに使ったことしかないですから、プロパティの名前までは覚えてません)
  ループして使うことが多いのなら、継承コンポーネントを作ってしまってもいいかもしれません。
(曲の停止通知を受け取ったら、自動的に再開させるとか)

  ちょっとしたサウンド再生にはPlaySound(sndPlaySoundは下位互換性のために残されている関数、あたらしめのWindowsでは使えません)、
ある程度本格的なWAVEやMIDIなどの再生にはMCI(MediaPlayer)を使うのがいいでしょう。


ブルー  2003-04-08 10:52:05  No: 3257

こんにちは。
そして、たかみちえさんありがとうございます!
書いてありました「Notifyプロパティ」を使用して、無事繰り返し再生する事が
できました。
そして、それ以外に書いてありました事も、役立ちました。
重複しちゃいますけど、sndPlaySoundは下位互換性のために残されてる関数だっ
たんですね〜。私は書店で立ち読みしててsndPlaySoundを知ったので(使い方は
暗記しました…本が高かったので…)。

…ただ、Notifyプロパティを使用して、繰り返し再生はできたんですが、
以前書いたsndPlaySoundを使用しての繰り返しと異なり、一瞬間があります
(たぶん0.1秒位ですけど…)。

でも、自分的には満足してるので、全然問題ないです。
改めて、たかみちえさんありがとうございます!
(もしかしたらまたお世話になるかも…)


たかみちえ  URL  2003-04-08 15:59:59  No: 3258

> (たぶん0.1秒位ですけど…)。
  まあ、それはMCIでは仕方ないです。それが限界です。
わたしが"ある程度本格的な"といった理由で、
最も本格的に再生するには、デバイスをじかに操作しないといけません。

  DelphiだからDelphianWorldなどにある、コンポーネントが使えますけど…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加