声音池和哈希地图

时间:2012-06-07 19:59:30

标签: android soundpool

我在原始文件夹中有大约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,....)

如果以上可能......我该怎么办?

等待您的回复! 谢谢!

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
}