連続でWAVEをスムーズにならすには?


α  2001-05-07 01:33:49  No: 74247  IP: [192.*.*.*]

連続で同じWAVEを流したいのですが、
なるのははじめの一回だけでそこから全く流れません。
WAVEをならすには時間を結構おいた方がよいのでしょうか。

編集    削除
たかみちえ  2001-05-07 10:45:44  No: 74248  IP: [192.*.*.*]

sndplaysoundなら、ふたつ目の引数に9を入れるとループします。
けど、あとでファイルパスなしで演奏して、とめることをお忘れなく。
VBのテスト中だと、VBが終了するまでずーっとなります^^;

編集    削除
α  2001-05-09 22:45:58  No: 74249  IP: [192.*.*.*]

・・・うむむ・・・
すみません、ここのサンプルを使っており
(MIDIを再生するサンプル)それを利用しているのですが・・・
あまりこの点で理解が不十分なので
sndplaysoundというものを詳しくご教授させてください
すみません

編集    削除
PAPY  2001-05-10 00:40:55  No: 74250  IP: [192.*.*.*]

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を返します。

編集    削除
たかみちえ  2001-05-10 02:15:57  No: 74251  IP: [192.*.*.*]

あら、そんな定数があったんですね^^;
わたしは0と1と9としか覚えてません。

  ちなみに、Windows起動時の音とかは、
レジストリのHKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default以下に、
wavファイルまでのパスが入っています。
ちょっとそこからややこしいので、失敗しないように気をつけてくださいね。
(って別に失敗しても、ただのBeepがなるだけです)
それらの設定名は、
HKEY_CURRENT_USER\AppEvents\EventLabels以下にあります。

  そして、パスがつながらなかったとか、異常が起こると、Beepがなります。

  最後に、ソフトの起動のときに使うなら、その前に
Me.Show:DoEventsをすることをお忘れなく。
これ、意外と時間をかけるようです。
ちなみに、16bitAPI
でも、こっちのほうが簡単でいいですよねぇ。

編集    削除
α  2001-05-12 20:20:45  No: 74252  IP: [192.*.*.*]

いちおう、パパパパパパパパパという具合に
waveがなりました。有り難う御座いました。

編集    削除
たかみちえ  2001-05-22 01:01:14  No: 74253  IP: [192.*.*.*]

あ、ところで…。
SND_MEMORYってなんですか?
メモリ内のデータイメージって…?

編集    削除
PAPY  2001-05-22 19:26:56  No: 74254  IP: [192.*.*.*]

lpszSoundName(APIの第一引数)で指定したパラメータが、 ウェーブフォーム サウンドのメモリ内データ イメージを指すポインタであることを示す。

編集    削除
たかみちえ  2001-05-22 22:50:28  No: 74255  IP: [192.*.*.*]

うーん…
ウェーブフォーム サウンドのメモリ内データ イメージって言うのがよくわかんないんですけど…。
ウェーブフォームって、拡張子がfrmのとはちがうんですよねぇ…。
もしかして、リソースの中のとかそういうことですか?

編集    削除
PAPY  2001-05-23 02:01:31  No: 74256  IP: [192.*.*.*]

失礼しました。上記と同じ説明で答えになっていませんでした(^^;
なので、もう少し詳しく説明します。

マイクロソフトのAPI解説書から一部抜粋
-----
SND_MEMORYフラグを指定するときは、 lpszSoundNameパラメータは、 ウェーブフォーム サウンドのメモリ イメージを指すポインタでなければなりません。サウンドがリソースとして格納されている場合には、 LoadResource関数とLockResource関数を使用してリソースのロードとロックを行い、 そのポインタを取得しなければなりません。サウンドがリソースでなければ、 GMEM_MOVEABLEフラグを指定してGlobalAllocを呼び出し、 サウンド データ用のメモリを割り当てなければなりません。その後、 GlobalLockを使用して、 メモリをロックしなければなりません。
-----

それで、簡単に解釈すると、実在するファイルではなくメモリ上にあるファイルを扱うときに使用します。また、ウェーブフォームサウンドとは単にWaveフォーマット(ファイル)と考えても間違えではないと思います。また、上記に書かれている様にEXE内に取り込まれたWaveリソースを再生する場合にも用います。

編集    削除