時間がないので一言。

アバター
axis
記事: 10
登録日時: 10年前
住所: 山梨
連絡を取る:

時間がないので一言。

投稿記事 by axis » 10年前

dxライブラリのStopSoundMem()って、PlaySoundMem()を呼んだのと同じスコープでないと止まらないっぽい?
はい、以上です(´・ω・`)ショボーン

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前

Re: 時間がないので一言。

投稿記事 by Dixq (管理人) » 10年前

DXライブラリは基本ピュアCスタイルで、グローバル変数ライクなので、どこで使っても有効ですよ。

アバター
みけCAT
記事: 6734
登録日時: 14年前

RE: 時間がないので一言。

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

axisさんのいう「スコープ」の定義がわかりませんが、
直感的に考えて、(自分が思っている)スコープは関係ないと思いますし、
今回のテストでは再生と停止を別ファイルの別関数で行っても、きちんと動作しました。
とりあえず、DXライブラリを最新にしてみてはいかがですか?

main.cpp

CODE:

#include 

void saisei(int a,int b);
void teisi(int a,int b);

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) {
	if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return -1;
	SetDrawScreen(DX_SCREEN_BACK);

	int s=LoadSoundMem("test.ogg");
	int s1=s & 0x55555555;
	int s2=s & 0xAAAAAAAA;

	bool sFlag=false;
	bool pFlag=false;
	char Key[256];
	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {

		if(Key[KEY_INPUT_S]) {
			if(!sFlag)saisei(s1, s2);
			sFlag=true;
		} else sFlag=false;
		if(Key[KEY_INPUT_P]) {
			if(!pFlag)teisi(s2, s1);
			pFlag=true;
		} else pFlag=false;

		DrawString(10, 10, "Sで再生", GetColor(255, 255, 255));
		DrawString(10, 50, "Pで停止", GetColor(255, 255, 255));

		ScreenFlip();
	}

	DxLib_End();
	return 0;
}
saisei.cpp

CODE:

#include 

void saisei(int a,int b) {
	PlaySoundMem(a | b, DX_PLAYTYPE_LOOP, FALSE);
}
teisi.cpp

CODE:

#include 

void teisi(int a, int b) {
	StopSoundMem(a | b);
}
環境
Windows Vista Home Premium SP2 32ビット
Intel(R) Core(TM)2Duo T8100 @2.10GHz 2.10GHz
RAM 4.00GB
Dev-C++ 5.7.1
GCC (MinGW) 4.8.1
DXライブラリ Ver3.13b
添付ファイル

[拡張子 zip は無効化されているため、表示できません]


アバター
axis
記事: 10
登録日時: 10年前
住所: 山梨
連絡を取る:

Re: 時間がないので一言。

投稿記事 by axis » 10年前

なるほど・・・
機能をオフにしてサイズをけずって居るバージョン
の影響かもしれないですね