Поэтому я нахожу лучший способ воспроизводить аудио в формате mp3 на рабочем столе с помощью Compose Multiplatform.
Входное аудио в формате mp3 будет передано в виде ByteArray. Он должен поддерживать эти функции.
- пауза и воспроизведение
- регулировка громкости во время воспроизведения
- условный аудиоцикл
Код: Выделить всё
expect class AudioManager constructor(data: ByteArray) {
var volume: Float
var loop: Boolean
fun play()
fun pause()
fun stop()
}
Код: Выделить всё
actual class AudioManager actual constructor(data: ByteArray) {
private val mediaPlayer = MediaPlayer().apply {
val mediaSource = ByteArrayMediaDataSource(data)
setDataSource(mediaSource)
prepare()
}
actual var volume: Float = 1F
set(value) {
mediaPlayer.setVolume(value, value)
field = value
}
actual var loop: Boolean = false
set(value) {
mediaPlayer.isLooping = value
field = value
}
actual fun play() {
mediaPlayer.start()
}
actual fun pause() {
mediaPlayer.pause()
}
actual fun stop() {
mediaPlayer.stop()
}
inner class ByteArrayMediaDataSource(private val data: ByteArray) : MediaDataSource() {
override fun readAt(position: Long, buffer: ByteArray, offset: Int, size: Int): Int {
System.arraycopy(data, position.toInt(), buffer, offset, size)
return size
}
override fun getSize(): Long {
return data.size.toLong()
}
override fun close() { }
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... or-desktop