こんにちは。そして、早速なんですが質問です。
フォームを開いた時に音(wav)を再生したいんですが…
「sndPlaySound」を使うと音楽は再生されるんですが、
その音楽を再生している時に、例えば
「フォーム内のボタンを押した時にwavを再生したい」と思って
ボタンの処理内にsndPlaySoundを使うと、フォームを開いた時に
再生されていたwavが止まってしまいます。
…要するに、フォームを開いた時に再生するwavをBGMとして再生したいワケ
です(ボタンを押した時に再生されるwavは効果音として)。
このような場合、どうしたらいいのでしょう?
(駄文ですいません…)
ここ数日、自分なりに考えてみましたが、MediaPlayerを使用して、
自分の望んでいたようにできました!
(ただFileNameに再生したいファイルを設定して、フォームを開いた時の
処理「OnActivate」でMediaPlayer.Playとしただけ…)
今思うと、MediaPlayerの仕組みを理解してなかったので、
どうしてもsndPlaySoundにこだわってしまっていました。
しかし、ここでまた一つわからない事が出てしまいました。
sndPlaySoundでは、
sndPlaySound(PChar('ファイル名.wav'),SND_ASYNC + SND_LOOP)
で繰り返し再生ができましたが、MediaPlayerでは繰り返し再生ができないので
しょうか?私なりに調べたんですが、わからずじまいです…。
自分でタイマーなどを使って再生終了を確かめ、
…というふうにやるのがいいです。
再生中か停止中かわかるプロパティがありますから。
あと、MediaPlayerだったら、Notifyプロパティで、再生終了通知を出せるようになっていたはず。
(わたしはMCIをじかに使ったことしかないですから、プロパティの名前までは覚えてません)
ループして使うことが多いのなら、継承コンポーネントを作ってしまってもいいかもしれません。
(曲の停止通知を受け取ったら、自動的に再開させるとか)
ちょっとしたサウンド再生にはPlaySound(sndPlaySoundは下位互換性のために残されている関数、あたらしめのWindowsでは使えません)、
ある程度本格的なWAVEやMIDIなどの再生にはMCI(MediaPlayer)を使うのがいいでしょう。
こんにちは。
そして、たかみちえさんありがとうございます!
書いてありました「Notifyプロパティ」を使用して、無事繰り返し再生する事が
できました。
そして、それ以外に書いてありました事も、役立ちました。
重複しちゃいますけど、sndPlaySoundは下位互換性のために残されてる関数だっ
たんですね〜。私は書店で立ち読みしててsndPlaySoundを知ったので(使い方は
暗記しました…本が高かったので…)。
…ただ、Notifyプロパティを使用して、繰り返し再生はできたんですが、
以前書いたsndPlaySoundを使用しての繰り返しと異なり、一瞬間があります
(たぶん0.1秒位ですけど…)。
でも、自分的には満足してるので、全然問題ないです。
改めて、たかみちえさんありがとうございます!
(もしかしたらまたお世話になるかも…)
> (たぶん0.1秒位ですけど…)。
まあ、それはMCIでは仕方ないです。それが限界です。
わたしが"ある程度本格的な"といった理由で、
最も本格的に再生するには、デバイスをじかに操作しないといけません。
DelphiだからDelphianWorldなどにある、コンポーネントが使えますけど…。
ツイート | ![]() |