我正在为我的Android应用程序使用SoundPool。我在主活动中将大约75个一到三秒钟的声音加载到池中,然后使用Sound方法从其他活动中引用它们,如下所示:
public void Sound(int s){
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
MainActivity.spool.play(s, volume, volume, 1, 0, 1f);
};
s是我在MainActivity类中定义的整数,例如:
static int sound_e;
然后像这样传入Sound方法:
Sound(sound_e);
我希望能够像这样定义一个字符串:
String letter_sound = "MainActivity.sound_" + currentLetter;
//Example value of this string would be MainActivity.sound_a
然后将该字符串作为整数传递给Sound。这是为了避免26个if语句,我为这些数字做了这样的话:
if (randomNum == 1) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_1);}
else if (randomNum == 2) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_2);}
else if (randomNum == 3) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_3);}
else if (randomNum == 4) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_4);}
else if (randomNum == 5) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_5);}
else if (randomNum == 6) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_6);}
else if (randomNum == 7) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_7);}
else if (randomNum == 8) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_8);}
else if (randomNum == 9) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_9);}
else if (randomNum == 10) {Log.v(TAG, "Sound playing for: " + randomNum); Sound(MainActivity.sound_10);}
else Log.v(TAG, "None of the ifs are true. randomNum: " + randomNum);
我没有在android文档中看到任何方式将字符串值传递给SoundPool播放,只是整数。谢谢你帮我搞清楚我错过了什么!
答案 0 :(得分:1)
我正在为我的Android应用程序使用SoundPool。我在主要活动中将大约75个一到三秒钟的声音加载到池中,然后使用Sound方法从其他活动中引用它们......
首先......不要这样做。 Android Activity
类不仅仅是一个普通的Java类,而且正确(安全)的Android编程方法是Activity
应该是自包含的。其他Activities
或应用组件无法访问public
方法或数据字段。
如果您不想提供多个应用程序组件使用的公共类,那么只需创建一个“帮助程序”POJO类。如果需要使用Context
(例如SoundPool
),您只需将Activity
上下文传递给this
方法即可。请注意保留对Activity
Context
的引用,因为它可能导致内存泄漏。
其次,要轻松回答你的问题......
load(...)
SoundPool
方法返回soundID
,这是您用来调用play(...)
方法的方法。如果您只想播放随机声音,则只需创建某种数组,然后使用随机数通过索引从数组中获取soundID
。很简单 - 只需一行代码即可访问相关的soundID
。