我在使用 SoundPool 在Android上播放声音时出现问题,这与MediaPlayer类很有效。为什么我不能使用MediaPlayer类是因为它不支持改变声音音高或速度。
用例:声音在后台播放,并根据用户输入进行更改。
当前问题:无法正确播放声音并冻结应用程序。
问题:处理这种情况的正确方法是什么,如果背景声音在单独的线程中播放,并且应该使用处理程序和消息来完成更改音量的通信?
@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();
}
答案 0 :(得分:0)
SoundPool类实际上在幕后创建和管理它自己的线程池,用于播放它的声音。因此,您可以简化代码以删除其他线程作为潜在问题。