私はこれをオンラインで調査するのにかなりの時間を費やしました。しかし、Asynctask にバックグラウンドで SoundPool サウンドをロードさせることができません。54 のサウンドがあり、次のようにロードします。
int selectHello[] = new int[4];
selectHello[0] = sp.load(this, R.raw.hello1a, 1);
selectHello[1] = sp.load(this, R.raw.hello2a, 1);
selectHello[2] = sp.load(this, R.raw.hello3a, 1);
selectHello[3] = sp.load(this, R.raw.hello4a, 1);
//and so on, 10 more times with different sounds
ボタンをクリックした後、ランダマイザーを使用して4つのうち1つをランダムに選択するため、それらを配列内にロードする必要があります。私のランダマイザーは次のようになります。
private void playSound(int id) {
// TODO Auto-generated method stub
int high = playList[id].length-1;
int randomNum;
do {
randomNum = (int)(Math.random()*(high-0+1))+0;
} while (randomNum == previousNum);
previousNum = randomNum;
sp.play(playList[id][randomNum], 1, 1, 0, 0, 1);
}
int playList[][]
ロードされた配列 ( など) の配列である whichを作成して、selectHello[]
必要なサウンドをよりクリーン/簡単に見つけられるようにしました。
int playList[][];
playList = {selectHello, ...etc};
//And so on, 10 more times
このメソッドを使用すると、1 つのアイテムを返すことができるので、読み込まれた配列の配列であるdoInBackground()
a を返そうとしました。playList[][]
2 つの問題があります。まず、 を返す場合playList[][]
、メインのアクティビティを取得して配列を取得するにはどうすればよいでしょうか? を使用して UI を変更できることを調査しましたがonPostExecute()
、文字列を返すいくつかの方法 (完全には理解していません) を見てきましたが、私のarray[][]
ようなものではありません。
もう 1 つの質問は、SoundPool サウンドをロードしたら、別の SoundPool でそれらを読み取ることができるかということです。サウンドが実際にSoundPool自体にロードされているのか、play()
メソッドが呼び出されたときに読み取り可能な整数に単純に作成されているのかはわかりません. そうでない場合、コードを機能させるには、SoundPool と配列の両方を返す必要があるように思われます。誰かがこのことを説明する実際のコード例を私に与えることができれば、それは大歓迎です。
メソッド内の実際のコードは、doInBackground()
上記の 1 番目と 3 番目のブロックに示したコードと、SoundPool の作成のみで構成されています。また、私がJavaを初めて使用し、これがStackOverflowに関する最初の質問であるため、私が間違っている/ここに到達していないことが明らかな場合は申し訳ありません。この質問に適切に回答するために他に必要な情報があればお知らせください。