new: allow user to seek a position in the record
This commit is contained in:
+4
@@ -49,6 +49,10 @@ class AndroidAudioPlayer(
|
||||
?.milliseconds
|
||||
?: 0.milliseconds
|
||||
|
||||
override fun seekTo(position: Duration) {
|
||||
player.seekTo(position.inWholeMilliseconds)
|
||||
}
|
||||
|
||||
override fun load(uri: String) {
|
||||
val mediaItem = MediaItem.fromUri(uri)
|
||||
player.setMediaItem(mediaItem)
|
||||
|
||||
@@ -10,6 +10,8 @@ interface AudioPlayer {
|
||||
|
||||
val duration: Duration
|
||||
|
||||
fun seekTo(position: Duration)
|
||||
|
||||
fun play()
|
||||
|
||||
fun pause()
|
||||
|
||||
@@ -13,7 +13,9 @@ import platform.AVFoundation.duration
|
||||
import platform.AVFoundation.pause
|
||||
import platform.AVFoundation.play
|
||||
import platform.AVFoundation.replaceCurrentItemWithPlayerItem
|
||||
import platform.AVFoundation.seekToTime
|
||||
import platform.CoreMedia.CMTimeGetSeconds
|
||||
import platform.CoreMedia.CMTimeMakeWithSeconds
|
||||
import platform.Foundation.NSNotificationCenter
|
||||
import platform.Foundation.NSOperationQueue
|
||||
import platform.Foundation.NSURL
|
||||
@@ -45,6 +47,12 @@ class IosAudioPlayer : AudioPlayer {
|
||||
return seconds?.seconds ?: 0.milliseconds
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalForeignApi::class)
|
||||
override fun seekTo(position: Duration) {
|
||||
val seconds = position.inWholeSeconds
|
||||
player?.seekToTime(CMTimeMakeWithSeconds(seconds.toDouble(), preferredTimescale = 1000))
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalForeignApi::class)
|
||||
override fun load(uri: String) {
|
||||
release()
|
||||
|
||||
@@ -33,6 +33,10 @@ class JvmAudioPlayer : AudioPlayer {
|
||||
override val duration: Duration
|
||||
get() = (clip?.microsecondLength ?: 0L).microseconds
|
||||
|
||||
override fun seekTo(position: Duration) {
|
||||
clip?.microsecondPosition = position.inWholeMicroseconds
|
||||
}
|
||||
|
||||
override fun load(uri: String) {
|
||||
release()
|
||||
|
||||
|
||||
@@ -20,6 +20,10 @@ class WebAudioPlayer : AudioPlayer {
|
||||
override val duration: Duration
|
||||
get() = (audio?.duration?.takeIf { it.isFinite() } ?: 0.0).seconds
|
||||
|
||||
override fun seekTo(position: Duration) {
|
||||
audio?.currentTime = position.inWholeMicroseconds.toDouble()
|
||||
}
|
||||
|
||||
override fun load(uri: String) {
|
||||
release()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user