我一直在尝试使用soundpool在Android中创建一个简单的节拍器应用程序,但是,我注意到在较高的BPM值下,声音延迟不一致。有时两次节拍之间的滞后高于预期,有时根本没有滞后(双节拍)。
player = new SoundPool.Builder()
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build())
.setMaxStreams(1)
.build();
tick = player.load(this, R.raw.tick_6mil, 1);
player.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int i, int i1) {
setupHandler();
}
});
//Running at 360BPM (~166.67ms per beat)
public void setupHandler(){
r = new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 167);
player.play(tick, 1, 1, 10, 0, 1);
}
};
handler.postDelayed(r, 167);
}
我不知道除了具有不一致开销的soundpool播放调用之外,这里的问题是什么,这是我无法解决的问题。任何帮助/见解将不胜感激。