Я пытаюсь воспроизводить короткий .mp3 звук (звуковой сигнал) непрерывно, 100 раз в минуту. Он воспроизводится примерно 30-45 раз правильно (больше на новых устройствах), затем останавливается на некоторое время (~ 30 секунд), а затем воспроизводится снова (только ~ 10 раз).
Я пробовал оба SoundPool
(playBeepSound1
) и MediaPlayer
(playBeepSound2
), поэтому, возможно, я неправильно использую Handler
.
private val delay: Float = 60.0F / 100.0F * 1000.0F // 100 times per minute
private var handler: Handler? = null
private var soundPool: SoundPool? = null
private var mediaPlayer: MediaPlayer? = null
override fun onResume() {
super.onResume()
startBeeping()
}
private fun startBeeping() {
handler = Handler()
handler?.postDelayed(object : Runnable {
override fun run() {
handler?.postDelayed(this, delay.toLong())
playBeepSound1() // SoundPool
// playBeepSound2() // MediaPlayer
}
}, delay.toLong())
}
private fun playBeepSound1() {
val attributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
soundPool = SoundPool.Builder()
.setAudioAttributes(attributes)
.build()
soundPool?.setOnLoadCompleteListener { soundPool, soundId, _ ->
soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1.0f);
}
soundPool?.load(baseContext, R.raw.beep_sound, 1)
}
private fun playBeepSound2() {
mediaPlayer = MediaPlayer.create(this, R.raw.beep_sound)
mediaPlayer?.start()
}
override fun onPause() {
super.onPause()
stopBeeping()
}
private fun stopBeeping() {
handler?.removeCallbacks(this)
handler = null
soundPool?.release()
soundPool = null
mediaPlayer?.release()
mediaPlayer = null
}
Любые идеи о том, как можно воспроизвести короткий звук в al oop?
Обновление:
Я тестировал его на разных устройствах с разными версиями ОС (Android 6, Android 9, тоже эмуляторы) и результат практически одинаковый. Единственная разница - это время, после которого он перестает издавать звуковые сигналы.
Файл mp3 имеет размер 5 КБ.