トップページ > 過去ログ > 記事閲覧
3回に1回しか周波数を変えた音が鳴らない
名前:やまと 日時: 2010/07/12 20:37

今度は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(); }

Page: 1 |

Re: 3回に1回しか周波数を変えた音が鳴らない ( No.1 )
名前:DG 日時:2010/07/13 00:43

こちらで、やまとさんのコードをコントローラ周りだけ変えてテストしたところ 問題なく、毎回高い周波数で音が再生されました 元の周波数の方も問題なく再生出来ました 環境は WindowsXP SP3 DxLib ver 3.02e です。 やまとさんの環境はどんな感じですか? 私が以前、音声関係の問題(解決済)でこちらに質問した時も 3回に1回だけ該当の挙動をするという、似た事象があったので もし古いバージョンを使用されているのなら ライブラリを新しくすれば解決するかもしれません。
Re: 3回に1回しか周波数を変えた音が鳴らない ( No.2 )
名前:やまと 日時:2010/07/13 22:51

DGさん試していただいてありがとうございます。 DxLib ver 3.02eへ更新したところ私の環境でも毎回高い音がなるようになりました。 (ちなみに3.02→3.02eです。) 解決しました、ありがとうございます。

Page: 1 |