我花了很多时间在网上研究这个。但是,我无法让我的 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 个(左右)中的一个。我的随机发生器看起来像这样:
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
当我使用该doInBackground()
方法时,它允许我返回 1 个项目,因此我尝试返回一个playList[][]
已加载数组的数组。我有两个问题。首先,如果我要 return playList[][]
,那么我怎样才能让我的主要 Activity 来获取数组?我研究发现您可以使用 更改 UI onPostExecute()
,并且我已经看到了一些返回字符串的方法(我不完全理解),但不是array[][]
像我的那样。
我的另一个问题是,一旦我加载了 SoundPool 声音,那么另一个 SoundPool 可以读取它们吗?我不确定声音是否实际加载到 SoundPool 本身中,或者只是创建为在play()
调用该方法时可读的整数。如果不是,那么我似乎必须返回一个 SoundPool 和一个数组才能使我的代码工作。如果有人能给我一些解释这些东西的真实代码示例,将不胜感激。
至于我在doInBackground()
方法中的实际代码,它只包括上面第一块和第三块所示的代码,以及一个 SoundPool 的创建。另外,很抱歉,如果有任何明显的错误/没有到达这里,因为我是 Java 新手,这是我在 StackOverflow 上的第一个问题。如果您需要任何其他信息来更好地回答这个问题,请告诉我。