連続で同じWAVEを流したいのですが、
なるのははじめの一回だけでそこから全く流れません。
WAVEをならすには時間を結構おいた方がよいのでしょうか。
sndplaysoundなら、ふたつ目の引数に9を入れるとループします。
けど、あとでファイルパスなしで演奏して、とめることをお忘れなく。
VBのテスト中だと、VBが終了するまでずーっとなります^^;
・・・うむむ・・・
すみません、ここのサンプルを使っており
(MIDIを再生するサンプル)それを利用しているのですが・・・
あまりこの点で理解が不十分なので
sndplaysoundというものを詳しくご教授させてください
すみません
sndPlaySound ()API
lpszSoundName; /* 再生するサウンド名 */
fuOptions; /* 定数(SND_xxx参照) */
SND_SYNC 同期的にサウンドを再生します。 サウンド再生が終了するまで制御を返しません。
SND_ASYNC 非同期的にサウンドを再生します。 サウンド再生の開始直後に制御を返します。
SND_NODEFAULT サウンドが見つからないとき、 関数はデフォルトのサウンドを再生せずに制御を返します。
SND_MEMORY lpszSoundNameで指定したパラメータが、 ウェーブのメモリ内データイメージを指すポインタである
SND_LOOP lpszSoundNameパラメータをNULLに設定してsndPlaySoundを再び呼び出すまでサウンドを繰り返し再生します。
サウンドを繰り返すには、 SND_ASYNCフラグも指定しなければなりません。
SND_NOSTOP サウンドが現在再生中ならば、 関数は要求されたサウンドを再生せずに、 すぐにFALSEを返します。
あら、そんな定数があったんですね^^;
わたしは0と1と9としか覚えてません。
ちなみに、Windows起動時の音とかは、
レジストリのHKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default以下に、
wavファイルまでのパスが入っています。
ちょっとそこからややこしいので、失敗しないように気をつけてくださいね。
(って別に失敗しても、ただのBeepがなるだけです)
それらの設定名は、
HKEY_CURRENT_USER\AppEvents\EventLabels以下にあります。
そして、パスがつながらなかったとか、異常が起こると、Beepがなります。
最後に、ソフトの起動のときに使うなら、その前に
Me.Show:DoEventsをすることをお忘れなく。
これ、意外と時間をかけるようです。
ちなみに、16bitAPI
でも、こっちのほうが簡単でいいですよねぇ。
いちおう、パパパパパパパパパという具合に
waveがなりました。有り難う御座いました。
あ、ところで…。
SND_MEMORYってなんですか?
メモリ内のデータイメージって…?
lpszSoundName(APIの第一引数)で指定したパラメータが、 ウェーブフォーム サウンドのメモリ内データ イメージを指すポインタであることを示す。
うーん…
ウェーブフォーム サウンドのメモリ内データ イメージって言うのがよくわかんないんですけど…。
ウェーブフォームって、拡張子がfrmのとはちがうんですよねぇ…。
もしかして、リソースの中のとかそういうことですか?
失礼しました。上記と同じ説明で答えになっていませんでした(^^;
なので、もう少し詳しく説明します。
マイクロソフトのAPI解説書から一部抜粋
-----
SND_MEMORYフラグを指定するときは、 lpszSoundNameパラメータは、 ウェーブフォーム サウンドのメモリ イメージを指すポインタでなければなりません。サウンドがリソースとして格納されている場合には、 LoadResource関数とLockResource関数を使用してリソースのロードとロックを行い、 そのポインタを取得しなければなりません。サウンドがリソースでなければ、 GMEM_MOVEABLEフラグを指定してGlobalAllocを呼び出し、 サウンド データ用のメモリを割り当てなければなりません。その後、 GlobalLockを使用して、 メモリをロックしなければなりません。
-----
それで、簡単に解釈すると、実在するファイルではなくメモリ上にあるファイルを扱うときに使用します。また、ウェーブフォームサウンドとは単にWaveフォーマット(ファイル)と考えても間違えではないと思います。また、上記に書かれている様にEXE内に取り込まれたWaveリソースを再生する場合にも用います。
ツイート | ![]() |