У меня есть пользовательский вид (PieView) с вращающейся анимацией. Теперь я хотел бы воспроизводить звук tick tick tick tick... синхронно со скоростью вращения (то есть, когда скорость вращения высокая, тик-тик должен быть быстрым, когда вращение медленно, тик-тик должен быть медленным). Для этого я сначала создал mp3-файл с именем magicbox_tick.mp3, у которого есть только ОДНА (1) галочка. Затем я попытался воспроизвести звук с помощью Animation.setUpdateListener().
Сначала я попытался воспроизвести музыку с помощью MediaPlayer, но через 10 или 15 тактов он остановился. Итак, теперь я пытаюсь SoundPool играть музыку.
Соответствующий сегмент кода выглядит следующим образом:
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, я согласен с этим.
MediaPlayer, скорее всего, перестанет работать, потому что вы каждый раз создаете новый экземплярMediaPlayerи никогда не выпускаете его: stackoverflow.com/a/35097745 а>. Пробовали ли вы использовать один единственный экземпляр, созданный в начале, и просто воспроизводить его каждый раз? - person Mike M.   schedule 06.04.2020tickзвучали не совсем правильно. Поэтому я попытался создать новый экземпляр. Но я их не выпускал. Позвольте мне попробовать выпустить MediaPlayer. - person Qazi Fahim Farhan   schedule 06.04.2020