按顺序播放声音文件



我试图建立一个Android应用程序(在Kotlin编码),其中播放随机声音文件,完成后,播放另一个随机文件等。在当前版本的代码中,似乎同时播放多个文件,而不是等待前一个文件完成。

在我的代码的注释行,我试图实现一个倒计时计时器的音乐文件的每次播放。它导致以下情况:当我启动应用程序时,只播放一个文件,然后它停止(可能崩溃)

class MainActivity : AppCompatActivity() {

fun playSound(running:Int) {
var completition=1
while (running==1 && completition==1) {
completition=0
var rnds = Random.nextInt(0..1)
if (rnds==1 ) {
val mMediaPlayer = MediaPlayer.create(this, R.raw.right)
mMediaPlayer!!.isLooping = false
mMediaPlayer!!.start()
mMediaPlayer!!.setOnCompletionListener { completition=1 }

}
if (rnds==0 ) {val mMediaPlayer = MediaPlayer.create(this, R.raw.left)
mMediaPlayer!!.isLooping = false
mMediaPlayer!!.start()
mMediaPlayer!!.setOnCompletionListener { completition=1 }
}

}
}
fun music(){
var i=1
while(i==1) {
i=0
val random=(0..1).random()
if (random==1){
val refMediaPlayer=MediaPlayer.create(this,R.raw.right)
refMediaPlayer!!.isLooping = false
refMediaPlayer!!.start()
//object :CountDownTimer(1000,100) {
//override fun onTick(p0: Long) {
// TODO("Not yet implemented")
// }
//override fun onFinish() {
//i=1
//}
// }.start();
}
if (random==0){
val refMediaPlayer=MediaPlayer.create(this,R.raw.left)
refMediaPlayer!!.isLooping = false
refMediaPlayer!!.start()
// object :CountDownTimer(1000,100) {
//override fun onTick(p0: Long) {
//  TODO("Not yet implemented")
// }
// override fun onFinish() {
// i=1
// }
//}.start();
}

}
}

// 4. Destroys the MediaPlayer instance when the app is closed
// override fun onStop() {
//     super.onStop()
//    if (mMediaPlayer != null) {
//        mMediaPlayer!!.release()
//      mMediaPlayer = null
// }
//}
override fun onCreate(savedInstanceState: Bundle?) {
val running=1
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
music()
}

}

我在构建的一个应用程序中遇到了类似的问题。我最终将所有声音内容放在一个单独的线程中,并在每个音频文件的持续时间内暂停线程。比如:

// off the main thread
val refMediaPlayer=MediaPlayer.create(this,R.raw.right)
refMediaPlayer!!.isLooping = false
refMediaPlayer!!.start()
// put the exact length of your sound file here in milliseconds
// 5000 = 5 seconds
Thread.sleep(5000L)

声音将继续播放,但代码的执行将在您指定的时间内暂停。

我不确定Kotlin的确切语法,因为我使用Java。

最新更新