У меня есть пользовательское представление (PieView
) с вращающейся анимацией. Теперь я хотел бы воспроизводить tick tick tick tick...
звук синхронно со скоростью вращения (то есть, когда скорость вращения высокая, тик должен быть быстрым, когда вращение медленным, тик должен быть медленным). Для этого сначала я создал mp3-файл с именем magicbox_tick.mp3
, который имеет только одну (1) галочку. Затем я попытался воспроизвести звук с помощью Animation.setUpdateListener()
.
Сначала я попытался воспроизвести музыку c с помощью MediaPlayer
, но через 10 или 15 тактов он остановился. Поэтому сейчас я пытаюсь SoundPool
сыграть музыку c.
Соответствующий сегмент кода выглядит следующим образом:
public PieView extends View {
// ... constructors, other methods etc
private SoundPool soundPool;
private int soundId;
void init(){ // called inside those constructors
SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
soundId = soundPool.load(getContext(), R.raw.magicbox_tick, 1);
}
public void rotateTo(){
animate()..setInterpolator(new DecelerateInterpolator())
.setDuration(mDuration)
.setListener(someListener)
.rotation(targetAngle)
.setUpdateListener(animation -> {
myPlaySound(); // <----------------------- This is the sound playing code
})
.start();
}
void myPlaySound(){
soundPool.play(soundId, 1, 1, 0, 0, 1); // this doesnot play the `tick` sound
// previously I used MediaPlayer like this:
/*
MediaPlayer mp = new MediaPlayer.create(getContext(), R.raw.magicbox_tick);
mp.play();
// these 2 line, after some 10 ticks, stopped working.
*/
}
}
Я никогда не делал ничего подобного, и я не не знаю, как это исправить. Может кто-нибудь мне помочь? Обратите внимание, что я открыт для всех ответов, пока это работает. Вам не нужно использовать SoundPool
. Итак, если вы можете заставить его работать с android MediaPlayer
, я в порядке с этим.