我在原始文件夹中有大约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));
如上所述直至number100。我获取文本字段的值
我从1到100放置一个for循环。将播放什么值。
使用soundPool.play(1,....)
这没关系,没问题。
但奇怪的是,因为它正在创建100值的haspmap ..有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,....)
如果以上可能......我该怎么办?
等待您的回复! 谢谢!
答案 0 :(得分: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
}