Я потратил немало времени на изучение этого онлайн. Однако мне не удается заставить мою Asynctask загружать звуки SoundPool в фоновом режиме. У меня есть 54 звуков, и я загружаю их, как это:Как использовать Asynctask для загрузки звуков SoundPool?
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 (или около того) после нажатия на кнопку. Моя рандомизер выглядит следующим образом:
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[][]
, который представляет собой массив из загруженных массивов (например, selectHello[]
), чтобы сделать его чище/проще найти, какой звук мне нужно.
int playList[][];
playList = {selectHello, ...etc};
//And so on, 10 more times
Когда я использую метод doInBackground()
, это позволяет мне вернуться на 1 пункт, и поэтому я пытался вернуть playList[][]
, который является массивом загруженных массивов. У меня есть два вопроса. Во-первых, если я должен был вернуть playList[][]
, то как я могу получить свою основную активность для получения массива? Я исследовал, что вы можете изменить пользовательский интерфейс с помощью onPostExecute()
, и я видел некоторые способы (которые я не совсем понимаю) вернуть строки, но не array[][]
, как у меня.
Мой другой вопрос в том, что как только я загрузил звуки SoundPool, может ли другой SoundPool их прочитать? Я не уверен, действительно ли звуки загружаются непосредственно в SoundPool или просто создаются в целое число, которое можно прочитать при вызове метода play()
. Если нет, то, похоже, мне придется возвращать SoundPool и массив для работы моего кода. Если бы кто-то мог дать мне примеры реальных примеров, объясняющих этот материал, он был бы весьма признателен.
Что касается моего фактического кода в методе doInBackground()
, он состоит только из кода, показанного в первом и третьем блоках выше, и создания SoundPool. Кроме того, извините, если есть что-то очевидное, что я делаю неправильно/не получаю здесь, потому что я новичок в Java, и это мой первый вопрос в StackOverflow. Пожалуйста, дайте мне знать, если вам нужна другая информация, чтобы лучше ответить на этот вопрос.
try 'AsyncTask>' –