gpt4 book ai didi

android - SoundPool 和 MediaPlayer 循环播放的哔声在一段时间后停止

转载 作者:行者123 更新时间:2023-12-02 12:11:35 28 4
gpt4 key购买 nike

我尝试连续播放一个短的 .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
}

关于如何在循环中播放短声音的任何想法?

更新:

我在具有不同操作系统版本(Android 6、Android 9,还有模拟器)的不同设备上对其进行了测试,结果几乎相同。唯一的区别是它停止蜂鸣后的时间。

mp3 文件的大小为 5KB。

最佳答案

我不知道 kotlin,但这就是我在 Java 中使用 MediaPlayer 的方式。

MediaPlayer player=MediaPlayer.create(MainActivity.this,R.raw.beep_sound);
for(int i=0;i<45;i++){
//the for loop will make it run 45 times
player.start();
//wait for 600 milliseconds because it's 100 times a minute
Thread.sleep(600);
}
//stop for 30 seconds
Thread.sleep(30000);
//then this time play 10 times only
for(int i=0;i<10;i++){
player.start();
Thread.sleep(600);
}

关于android - SoundPool 和 MediaPlayer 循环播放的哔声在一段时间后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61305820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com