Android Play ストアに 2 つのアプリがありますが、これまで問題はありませんでした。最近、HTC one と Galaxy S4 で 1 つの機能が動作しません。Android バージョン 4.1.2 で実行されている HTC で試すことができました。問題のあるコードは次のとおりです。
public void loadsine(){
for (int j=0; j<44100; j++){
double val = Math.sin(twopi*j/44100);
AndroidAudioDevice.sigBuffer[j]= (short) (val*sinemax);
}
}
正弦波の 1 周期を計算し、値を short として配列に入れます。twopi と sinemax は以前に定義された定数であり、sigBuffer は short 44100 long の配列です。
これは、配列がゼロで埋められている HTC 1 と S4 を除いて正常に動作します。次のように、ループ内でいくつかの処理サイクルを無駄にすることで機能させることができることがわかりました。
public void loadsine(){
for (int j=0; j<44100; j++){
double val = Math.sin(twopi*j/44100); //val between -1 and +1
AndroidAudioDevice.sigBuffer[j]= (short) (val*sinemax);
for (int i=0; i<4; i++){}
}
}
役に立たないforループの代わりに、たとえばデバッグ ウィンドウに書き込むこともできます。何が起こっているのか、HTC や Samsung のオーバーレイが問題を引き起こしているのか、それとも 4.1.2 の問題なのか. ちなみに、4.1.2 エミュレーターを動作させることができません。どこにも行きません。