У меня есть класс 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)
}
}