Add variable playback speed feature for voice messages
Add playback speed control for voice messages with support for 0.5×, 1×, 1.5×, and 2× playback speeds. The speed button is displayed above the timestamp and cycles through the available speeds when tapped.
This commit is contained in:
parent
1c26c03cde
commit
5e07691fcd
13 changed files with 203 additions and 15 deletions
|
|
@ -160,6 +160,10 @@ class DefaultMediaPlayer(
|
|||
}
|
||||
}
|
||||
|
||||
override fun setPlaybackSpeed(speed: Float) {
|
||||
player.setPlaybackSpeed(speed)
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
player.release()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ interface SimplePlayer {
|
|||
fun isPlaying(): Boolean
|
||||
fun pause()
|
||||
fun seekTo(positionMs: Long)
|
||||
fun setPlaybackSpeed(speed: Float)
|
||||
fun release()
|
||||
interface Listener {
|
||||
fun onIsPlayingChanged(isPlaying: Boolean)
|
||||
|
|
@ -87,5 +88,9 @@ class DefaultSimplePlayer(
|
|||
|
||||
override fun seekTo(positionMs: Long) = p.seekTo(positionMs)
|
||||
|
||||
override fun setPlaybackSpeed(speed: Float) {
|
||||
p.setPlaybackParameters(p.playbackParameters.withSpeed(speed))
|
||||
}
|
||||
|
||||
override fun release() = p.release()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ class FakeSimplePlayer(
|
|||
private val isPlayingLambda: () -> Boolean = { lambdaError() },
|
||||
private val pauseLambda: () -> Unit = { lambdaError() },
|
||||
private val seekToLambda: (Long) -> Unit = { lambdaError() },
|
||||
private val setPlaybackSpeedLambda: (Float) -> Unit = { lambdaError() },
|
||||
private val releaseLambda: () -> Unit = { lambdaError() },
|
||||
) : SimplePlayer {
|
||||
private val listeners = mutableListOf<SimplePlayer.Listener>()
|
||||
|
|
@ -44,6 +45,7 @@ class FakeSimplePlayer(
|
|||
override fun isPlaying() = isPlayingLambda()
|
||||
override fun pause() = pauseLambda()
|
||||
override fun seekTo(positionMs: Long) = seekToLambda(positionMs)
|
||||
override fun setPlaybackSpeed(speed: Float) = setPlaybackSpeedLambda(speed)
|
||||
override fun release() = releaseLambda()
|
||||
|
||||
fun simulateIsPlayingChanged(isPlaying: Boolean) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue