ページ 1 / 1
効果音が鳴らない...
Posted: 2009年11月20日(金) 11:28
by フランドールの義兄
上記のとおりです。
僕のつくっているSTGは裏曲モードがあって、裏曲のモードにしていると、裏の効果音が使われる設定のために効果音を鳴らすPlaySoundFile関数ををswitch文で覆っていますが、一切効果音が鳴りません。どうすればいいんでしょうか。教えてください。
Re:効果音が鳴らない...
Posted: 2009年11月20日(金) 15:23
by 御津凪
・そのファイルがちゃんとした場所にない(あるいは無い)
・switch 文が正しくない(プログラムが正しく通っていない)
が、考えられますが、
コードが一切提示されていないので明確な原因も対処の仕方も分かりません。
Re:効果音が鳴らない...
Posted: 2009年11月20日(金) 18:18
by フランドールの義兄
コードを添付します。
Re:効果音が鳴らない...
Posted: 2009年11月20日(金) 21:08
by 御津凪
遅くなりましたが返信を。
第一に音がならないのは、mode 値を設定する条件がおかしいところになります。
if(Key[KEY_INPUT_F1] == 0 && Key[KEY_INPUT_F2] == 0 && Key[KEY_INPUT_F3] == 0 && mode == 0){
mode = 0; // 起動直後から何も押していない状態の時。 F1, F2, F3 のいずれかが押されたら以降 mode が 0 になるまでここには来ない。
}
else if(Key[KEY_INPUT_F1] == 1 || Key[KEY_INPUT_F1] == 1 && Key[KEY_INPUT_F2] == 1 && Key[KEY_INPUT_F3] == 1){
mode = 1; // F1 を[color=Yellow">押している間[/color]か、 F1, F2, F3 全てを押している間、ここに来る。
}
else if(Key[KEY_INPUT_F2] == 1){
mode = 2; // 上記条件以外で、 F2 を押している間、ここに来る。
}
else{
mode = 3; // 上記条件以外でここに来る。つまり F1, F2, F3 の何れかを押した後、<u>何も押さなかったら</u>ここに来る。
}
つまり、 mode 値が F1, F2 のいずれかが押しっぱなしでないと、 3 の状態になる条件になっているので、サウンドを再生しようにも mode が 3 のサウンドが無いので再生されないということになります。
(F1, F2 のいずれかを押したままで操作すれば鳴ると思います)
あと、それとは別に自作関数を使って見やすくしておいた方が楽ですよ。
Re:効果音が鳴らない...
Posted: 2009年11月21日(土) 18:23
by フランドールの義兄
返信、ありがとうございました。一応試してみましたが、逆にキー操作が効かなくなり、BGMも再生されなくなってしまいましたので、そこについてはどうしようもありません。
でも、僕が聞きたいのは「BGMが鳴らない」ではなく、「効果音(SE)が鳴らない」方です。PlayMusic(Waveサウンド非対応)関数は働くのですが、PlaySoundFile(Waveサウンド対応)関数が働かない方です。
それから自作関数の件ですが、隔離する場合、どこに隔離すればいいのか分からなくて、今のところ座礁に乗り上げています。
Re:効果音が鳴らない...
Posted: 2009年11月21日(土) 20:33
by 御津凪
適当に自作関数に纏めてみたものを添付しておきますね。
こんな感じで纏めておけば、見やすくなりますし、変更するときも楽になります。
効果音(SE)が鳴らないのはきちんとした場所にファイルが無いからだと思っていますが、
実行中、 VC++ の出力ウインドウを確認していますか?
メニューにある「デバッグ」から「ウインドウ」、「出力」で表示できます。
ファイルを読み込めなかった場合、その旨のメッセージが表示されますので。
Re:効果音が鳴らない...
Posted: 2009年11月24日(火) 14:38
by フランドールの義兄
添付されていたコード、拝見しました。 確かにわかりやすいですね。ところでSEがならない件でファイルがアドレスで示したフォルダに入っているか確かめたところ、ちゃんとフォルダに入っていました("../"などを使わない絶対参照でもだめ)。ところで、VC++で一度デバッグをかけると生成される「Debug」フォルダ内にあるLog.txtの左端にかかれている数字が何を示しているのかわからないんです。VSをHDに入れようとしたあまりに、VSからのデバッグが出来ないもので・・・。よければLog.txtの左端の数字が何を示しているのかを教えていただけませんか?
Re:効果音が鳴らない...
Posted: 2009年11月24日(火) 15:45
by 御津凪
Log.txt の左端に書かれている数字は、プログラムが始まってからその行が出力された時点でのタイムスタンプです。
(ms 単位です)
このログに出力される情報と、上記に書いた VC++ でデバッグするときに出力ウインドウに表示される情報はほぼ同じなので、
ログファイルでも読み込みエラーなどがあれば随時記録されます。
ログファイルを最初から目で追って、ファイルの読み込みエラーなど怪しいところがないかチェックしてみてください。
Re:効果音が鳴らない...
Posted: 2009年11月26日(木) 15:07
by フランドールの義兄
添付されていた自作関数を含めたコードにある程度ファイルを追加して起動してみたところ、
SEは低確率でしか鳴らず、方向・決定キー操作も低確率でしか効かず、さらにBGMはウィンドウをつかんでいる(カーソルでドラッグしてウィンドウを移動している)ときにしか鳴りませんでした・・・。(ESCキーは普通)
Re:効果音が鳴らない...
Posted: 2009年11月26日(木) 16:01
by 御津凪
>SEは低確率でしか鳴らず、方向・決定キー操作も低確率でしか効かず、さらにBGMはウィンドウをつかんでいる(カーソルでドラッグしてウィンドウを移動している)ときにしか鳴りませんでした・・・。(ESCキーは普通)
これは、毎フレーム(きちんと条件を入れている部分を除く)全ての処理が行われているのが原因です。
これまで書いていませんでしたが、音楽を再生する処理(PlayMusic 関数)も毎フレーム実行され、
その度に再生しなおされているため、正しく再生されません。
何らかのタイミングで一回だけ実行するように変更する必要があります。
また、 LoadGraphScreen 関数は毎フレーム実行する場所では普通使用しません。
毎回ファイルからデータを読み取って処理するため、非常に非効率です。
そして、 PlaySoundFile("", DX_PLAYTYPE_NORMAL); や、 LoadGraphScreen(0, 0, "",TRUE); という、
意味不明な処理が入っています。
実行時に不要な処理が入っているとバグの元になります。
一度全体を見直し、きちんとしたデバッグを行う(ブレイクポイントを使うなどする)ようにしてください。
それと、フランドールの義兄さんはC言語の技術をどれほど持っているのでしょうか?
支援したい気持ちもあるのですが、今のままだとコード的に完成は難しいような気がします。
Re:効果音が鳴らない...
Posted: 2009年12月03日(木) 14:40
by フランドールの義兄
返信がしばらくぶりになってしまいました。すみません。C言語暦約1年です。
ところで、効果音がならない件ですが、新たにeeflgという整数型変数を設け、自作関数から「モード選択」を抜いた代わりに、それをIf文(eeflg制御)で囲ってやると、解決しました。
御津凪さん、この問題を最後までアドバイスしていただき、ありがとうございました。