Звуковая карта и хэш-карта

1

У меня есть примерно 100 аудиофайлов в исходной папке, в этом 100 файлах только цифры от 1 до 100.

После того, как я нажму кнопку. Я хочу, чтобы он воспроизводил номер в соответствии с текстом, введенным в текстовое поле.

Поэтому я использую для этого звуковой пул и хеш-карту. Это работает отлично, без каких-либо проблем

soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundsMap = new HashMap<Integer, Integer>();
soundsMap.put(1, soundPool.load(this, R.raw.number1, 1));
soundsMap.put(2, soundPool.load(this, R.raw.number2, 1)); 

подобный выше до номер100. Я получаю значение текстового поля

Я поставил цикл for от 1 до 100. Какую ценность будет играть.

используя soundPool.play(1,....)

Это работает отлично, без каких-либо проблем.

Но странная вещь в том, что, поскольку он создает haspmap 100 значений.. есть 5 секунд задержки и с пустым экраном, и я ничего не могу сделать с процессом продолжается.

Есть ли способ просто создать hashmap в соответствии со значением и воспроизводит звук.

Например, скажем, например,

Если текстовое поле имеет значение 20

in the for loop: i=1 to 100..
it should get the value 20:
string a = "R.raw.number"+i
SoundsMap.put(1, soundPool.load(this, a, 1));
soundPool.play(1,....)

если это возможно... Как мне это сделать?

Ожидание вашего ответа! Благодарю!

  • 1
    Я не уверен, почему вы думаете, что это странно. Вы загружаете 100 аудио файлов. Это требует времени. Вы можете сделать это в фоновом потоке (возможно, используя AsyncTask ) и отображать индикатор выполнения во время загрузки. Я не понимаю, для чего вы используете цикл for.
  • 0
    О, боже, вы 100 раз тестируете if(editText.getText().equals(String.valueOf(i))) ? Nonononno. Разобрать ввод в число и идти оттуда. Проверьте мой пример ниже.
Теги:
soundpool

1 ответ

1
Лучший ответ

Зачем инициализировать все в начале? Что делать, если пользователь никогда не нажимает больше нескольких кнопок? Я бы посоветовал загружать на ваш кнопочный щелчок, что-то вроде этого:

//in onCreate()

final EditText editText = (EditText)findViewById(R.id.my_input_field);
int[] sounds = { R.raw.number1, R.raw.number2,
                 R.raw.number3, /*etc.*/ };

//in your onClick()

try {
    Double value = Double.parseDouble(editText.getText());
    int soundId = soundPool.load(MyActivity.this, sounds[value - 1], 1);
    soundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
} catch (NumberFormatException e) {
    //Alert the user that an invalid number was entered
}
  • 1
    Спасибо ... Этот код работал, за исключением того, что мне пришлось поставить onLoadListener с условием if. Спасибо за вашу помощь! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню