【发布时间】:2013-12-13 08:06:31
【问题描述】:
我在使用 SoundPool 在 android 上播放声音时遇到问题,这与 MediaPlayer 类配合得很好。为什么我不能使用 MediaPlayer 类是因为它不支持音高或速度的变化。
用例:声音在后台播放,它会根据用户输入而改变。
当前问题:无法正确播放声音并冻结应用程序。
问题:处理这种情况的正确方法是什么,是否应该在单独的线程中播放背景声音和改变音量的通信应该使用 Handler 和消息来完成?
@Override
public void surfaceCreated(SurfaceHolder holder) {
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
RAIN_SOUND_ID = soundPool.load(getContext(), R.raw.rain, 1);
new Thread(new Runnable() {
@Override
public void run() {
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
if (sampleId == RAIN_SOUND_ID) {
soundPool.play(RAIN_SOUND_ID, 1f, 1f, 10, -1, 1);
}
}
});
}
}).start();
}
【问题讨论】: