Я использую SoundPool для своего приложения для Android. Я загружаю около 75 одного до трех вторых звуков в бассейн в моей основной деятельности, а затем ссылаться на них от других видов деятельности с использованием метода Sound, который выглядит следующим образом:Используйте String в SoundPool play
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_e);
Я хотел бы быть в состоянии определить строку, как это:
String letter_sound = "MainActivity.sound_" + currentLetter;
//Example value of this string would be MainActivity.sound_a
И затем передать эту строку в Звук как целое число. Это позволяет избежать 26, если заявления, которые я сделал для чисел, как это:
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);
я не видело в андроиде документации какого-либо способ передать значение строки в Soundpool игру, только целые числа. Спасибо, что помогли мне разобраться в том, что мне не хватает!
Чтобы сделать то, что вы хотите, я думаю, вам нужно отражение, но я также думаю, что есть другие способы сделать это (обычный вызов метода?). Все, что я могу сказать до сих пор, это то, что вы можете поменять местами другие: if для оператора switch-case, и нет необходимости повторять этот оператор 'Log.v' – keyser
. Else-ifs находятся в операторах switch для разных вариантов голоса. Я не был уверен в том, что вы вставляете инструкции switch. –
Вы можете просто поместить его в отдельный метод. – keyser