ページ 1 / 1
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
一応、解決としておきます。