Как котлин сопрограмма может быть выполнена последовательно? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть класс AudioTrack, который получает поток аудиоданных в байтовой строке. Я использовал AsyncTask для этого, который работал нормально. Но когда я переехал в Котлин, я не смог заставить его работать. В AsychTask данные записываются последовательно, а воспроизведение аудио происходит плавно. Но в котлине, когда я играю аудио, он перепутан.

Я пытался использовать suspend, async, но мне не удалось.

Java -

class PlayAsynchTask : AsyncTask<Void, Void, String?>() {
    var byteString: ByteString? = null

    override fun doInBackground(vararg params: Void?): String? {
        val data = byteString?.toByteArray()
        if (audioTrack != null && data != null) {
            if (audioTrack?.state == AudioTrack.PLAYSTATE_PAUSED) {
                audioTrack?.play()
            }
            try {
                audioTrack?.write(data, 0, data.size)
            } catch (ex: Exception) {

            }
        }
        return null
    }

}

Котлин

fun wavPlay(byteString: ByteString?) {
    val wavData: ByteArray? = byteString?.toByteArray()
    aPlayJob = GlobalScope.launch {
        audioTrack?.play()
        audioTrack?.write(wavData!!, 0, wavData.size)
    }
}
...