PlaySoundMemでBGMが輪唱されてしまう

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
LEMO
記事: 23
登録日時: 9年前
住所: 関東地方ですね

PlaySoundMemでBGMが輪唱されてしまう

#1

投稿記事 by LEMO » 8年前

また質問ごめんなさい
タイトル画面にBGMをつけようと
LoadSoundMemでロードしてPlaySoundMemで流しています

コード:

void Title() {
	int GH[10];
	int MainSound;
	GH[0] = LoadGraph("image/title.jpg");
	MainSound = LoadSoundMem("Sound/TS/title.ogg");

	DrawString(0, 0, "メニュー画面です。", GetColor(255, 255, 255));
	DrawGraph(0, 0, GH[0], TRUE);
	PlaySoundMem(MainSound, DX_PLAYTYPE_LOOP);

}
全体の一部です↑
ですが、これで流すと輪唱みたいになってしまいます
一回だけ流す、そしてそれが終わったらまた流す
というのはできませんか?


追記
if(!CheckSoundMem(MainSound)) PlaySoundMem(MainSound);
という文を入れてみてもだめでした....
やりたかったことは、音楽が流れているかチェックして、流れてなかったら実行、です

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: PlaySoundMemでBGMが輪唱されてしまう

#2

投稿記事 by みけCAT » 8年前

LEMO さんが書きました:一回だけ流す、そしてそれが終わったらまた流す
というのはできませんか?
DX_PLAYTYPE_LOOPを使えばやってくれるはずです。
宣言 int PlaySoundFile( char *FileName , int PlayType ) ;

(中略)

DX_PLAYTYPE_LOOP  : ループ再生

(中略)

ループ再生はバックグラウンド再生+ループ再生で、音楽の再生が 終るとすぐ最初から再生が始まります。
(http://dxlib.o.oo7.jp/function/dxfunc_sound.html#R8N1)
LEMO さんが書きました:追記
if(!CheckSoundMem(MainSound)) PlaySoundMem(MainSound);
という文を入れてみてもだめでした....
やりたかったことは、音楽が流れているかチェックして、流れてなかったら実行、です
Title関数をどのように呼び出しているかがわかりませんが、
毎フレーム音楽をロードして新しい音楽を再生している、ということでしょうか

[hr]
「タイトル」の関数1個しか作らないのではなく、以下のような関数を作って適切なタイミングで呼び出すといいと思います。

●「タイトルの初期化」関数
ゲーム開始(最初の画面に遷移する)前に1度だけ呼び出す。
画像や音声のロードを行う。

●「タイトル突入」関数
タイトル画面に遷移する直前または遷移した直後に1度呼び出す。
状態(実装するなら、選択されている選択肢のIDなど)の初期化や、BGMの再生開始を行う。

●「タイトル処理」関数
タイトル画面にいる間毎フレーム呼び出す。
描画や操作などの処理を行う。
さらに「状態の更新」と「描画」に分けると、さらにいいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

LEMO
記事: 23
登録日時: 9年前
住所: 関東地方ですね

Re: PlaySoundMemでBGMが輪唱されてしまう

#3

投稿記事 by LEMO » 8年前

ありがとうございます
挑戦してみます!

閉鎖

“C言語何でも質問掲示板” へ戻る