ページ 11

2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 16:32
by phelmi
ランダムな音を2秒ごとに鳴らすようなプログラムを作りたいのですが、2秒ごとではなく、連続で鳴るようになってしまいます。
音は、5種類あります。
問題の部分は、

コード:

int SoundNumber;
int StartTime = GetNowCount();
int playedflag = 1;

for(int j=1;j<=10;j++){
	Time = GetNowCount() - StartTime;
	if(GetNowCount() >= Time+(j*1000*2) && playedflag == j){
		SoundNumber = GetRand(4) + 1;

		switch(SoundNumber){
			case 1:
				PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );
				break;
			case 2:
				PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );
				break;
			case 3:
				PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );
				break;
			case 4:
				PlaySoundMem( Sound4 , DX_PLAYTYPE_BACK );
				break;
			case 5:
				PlaySoundMem( Sound5 , DX_PLAYTYPE_BACK );
				break;
		}

		if(j == Time+(j*1000*2)){
			j = 1;
			Time = GetNowCount() - StartTime;
		}
	}
}
いろいろと試した後なので、ソースが汚くなっていますが、よろしくお願いします。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 16:35
by みけCAT

コード:

int SoundNumber;
int StartTime = GetNowCount();
int playedflag = 1;
 
for(int j=1;j<=10;j++){
    Time = GetNowCount() - StartTime;
    if(GetNowCount() >= Time+(j*1000*2) && playedflag == j){
        SoundNumber = GetRand(4) + 1;
 
        switch(SoundNumber){
            case 1:
                PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );
                break;
            case 2:
                PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );
                break;
            case 3:
                PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );
                break;
            case 4:
                PlaySoundMem( Sound4 , DX_PLAYTYPE_BACK );
                break;
            case 5:
                PlaySoundMem( Sound5 , DX_PLAYTYPE_BACK );
                break;
        }
 
        if(j >= Time+(j*1000*2)){
            j = 1;
            Time = GetNowCount() - StartTime;
        }
    }
} 
未検証です。
時間がぴったりということはないと思います。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 16:39
by phelmi
それでもまだ解決しないのですが。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 16:57
by みけCAT

コード:

int SoundNumber;
int StartTime = GetNowCount();
int playedflag = 1;
 
for(int j=1;j<=10;){
    Time = GetNowCount() - StartTime;
    if(Time >= j*1000*2 && playedflag == j){
        SoundNumber = GetRand(4) + 1;
 
        switch(SoundNumber){
            case 1:
                PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );
                break;
            case 2:
                PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );
                break;
            case 3:
                PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );
                break;
            case 4:
                PlaySoundMem( Sound4 , DX_PLAYTYPE_BACK );
                break;
            case 5:
                PlaySoundMem( Sound5 , DX_PLAYTYPE_BACK );
                break;
        }
 
        playedflag=++j;
    }
}
これはどうですか?

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:07
by phelmi
今度は、音が2秒ごとに流れるようになりましたが、
プログラムが「応答なし」の状態になるようになってしまいました。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:11
by みけCAT

コード:

int SoundNumber;
int StartTime = GetNowCount();
int playedflag = 1;
 
for(int j=1;j<=10;){
    Time = GetNowCount() - StartTime;
    if(Time >= j*1000*2 && playedflag == j){
        SoundNumber = GetRand(4) + 1;
 
        switch(SoundNumber){
            case 1:
                PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );
                break;
            case 2:
                PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );
                break;
            case 3:
                PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );
                break;
            case 4:
                PlaySoundMem( Sound4 , DX_PLAYTYPE_BACK );
                break;
            case 5:
                PlaySoundMem( Sound5 , DX_PLAYTYPE_BACK );
                break;
        }
 
        playedflag=++j;
    }
    if(ProcessMessage()!=0)break;
}
for文を使うのをやめないと他の処理はできません。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:14
by phelmi
for文を使わないでプログラムを書けば良いのでしょうか?

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:17
by みけCAT

コード:

void PlayRandomSound(void) {
	int SoundNumber;
	static int StartTime = GetNowCount();
	static int playedflag = 1;
	int Time;
	static int j=1;
	if(j>10)return;
	 
    Time = GetNowCount() - StartTime;
    if(Time >= j*1000*2 && playedflag == j){
        SoundNumber = GetRand(4) + 1;
 
        switch(SoundNumber){
            case 1:
                PlaySoundMem( Sound1 , DX_PLAYTYPE_BACK );
                break;
            case 2:
                PlaySoundMem( Sound2 , DX_PLAYTYPE_BACK );
                break;
            case 3:
                PlaySoundMem( Sound3 , DX_PLAYTYPE_BACK );
                break;
            case 4:
                PlaySoundMem( Sound4 , DX_PLAYTYPE_BACK );
                break;
            case 5:
                PlaySoundMem( Sound5 , DX_PLAYTYPE_BACK );
                break;
        }
 
        playedflag=++j;
    }
}
関数にしてみるというのはどうでしょうか?

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:27
by phelmi
音が鳴らなくなってしまいました。

また、プログラムがわかりにくくなってしまったので、
プログラムを一度整理してからまた質問しようかなと思います。

Re: 2秒ごとにランダムな音を鳴らす

Posted: 2010年12月24日(金) 17:32
by phelmi
一応、解決としておきます。