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

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

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

#1

投稿記事 by phelmi » 9年前

ランダムな音を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;
		}
	}
}
いろいろと試した後なので、ソースが汚くなっていますが、よろしくお願いします。

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

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

#2

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

コード:

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;
        }
    }
} 
未検証です。
時間がぴったりということはないと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

phelmi
記事: 18
登録日時: 9年前

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

#3

投稿記事 by phelmi » 9年前

それでもまだ解決しないのですが。

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

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

#4

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

コード:

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;
    }
}
これはどうですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

phelmi
記事: 18
登録日時: 9年前

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

#5

投稿記事 by phelmi » 9年前

今度は、音が2秒ごとに流れるようになりましたが、
プログラムが「応答なし」の状態になるようになってしまいました。

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

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

#6

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

コード:

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文を使うのをやめないと他の処理はできません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

phelmi
記事: 18
登録日時: 9年前

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

#7

投稿記事 by phelmi » 9年前

for文を使わないでプログラムを書けば良いのでしょうか?

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

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

#8

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

コード:

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;
    }
}
関数にしてみるというのはどうでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

phelmi
記事: 18
登録日時: 9年前

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

#9

投稿記事 by phelmi » 9年前

音が鳴らなくなってしまいました。

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

phelmi
記事: 18
登録日時: 9年前

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

#10

投稿記事 by phelmi » 9年前

一応、解決としておきます。

閉鎖

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