今度はwavですが再びサウンド関係の質問をさせてください。
下記のように1オクターブ分の音を用意してボタンを押すと同時に鳴らして、
離すと同時に音を止めるようにプログラムしたのですが、
Bボタンを押すと3回に1回だけ周波数を変えた音がなり
2回は元の周波数の音がなります。
Bボタンをぽちぽち何回も押すと、ポー(低い音)ポーピー(高い音)ポーポーピーというふうに
繰り返します。
そんな器用なプログラムをした覚えはないのですが、
下記のプログラムにどこか問題あるでしょうか?
controllerは自作クラスです。
内部でGetJoypadInputStateを呼んでキー判定しています。
////以下コード////
CController controller;
controller.setKey();
int soundHandles[12];
soundHandles[0] = LoadSoundMem( "otoC5.wav" );
for( int i=1; i<12; i++ ) {
soundHandles[i] = DuplicateSoundMem( soundHandles[0] );
}
//1オクターブ分の音を設定する
for( int i=0; i<12; i++ ) {
SetFrequencySoundMem( (int)(44100.0*pow( pow(2.0, 1.0/12.0),i )) , soundHandles[i] ) ;
}
// ループ
while( ProcessMessage() == 0 && controller.isKeyOff( KEY_INPUT_ESCAPE ) )
{
controller.setKey();
// 画面を初期化する
ClearDrawScreen();
if( controller.isKeyDown(PAD_INPUT_A) ) {
PlaySoundMem( soundHandles[0], DX_PLAYTYPE_BACK , TRUE );
}
if( controller.isKeyUp(PAD_INPUT_A) ) {
StopSoundMem( soundHandles[0] ) ;
}
if( controller.isKeyDown(PAD_INPUT_B) ) {
PlaySoundMem( soundHandles[11], DX_PLAYTYPE_BACK , TRUE );
}
if( controller.isKeyUp(PAD_INPUT_B) ) {
StopSoundMem( soundHandles[11] ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip();
}