File tree Expand file tree Collapse file tree
audioplayers_android/android/src/main/kotlin/xyz/luan/audioplayers/player
audioplayers_darwin/darwin/Classes
audioplayers/example/integration_test Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -181,6 +181,18 @@ void main() async {
181181 }
182182 }
183183
184+ testWidgets ('Avoid resume on setting playbackRate (#468)' , (tester) async {
185+ await tester.prepareSource (
186+ playerId: playerId,
187+ platform: platform,
188+ testData: mp3Url1TestData,
189+ );
190+ await platform.setPlaybackRate (playerId, 2.0 );
191+ await tester.pumpAndSettle (const Duration (seconds: 2 ));
192+ expect (await platform.getCurrentPosition (playerId), 0 );
193+ await tester.pumpLinux ();
194+ });
195+
184196 for (final td in audioTestDataList) {
185197 if (features.hasSeek && ! td.isLiveStream) {
186198 testWidgets ('#seek with millisecond precision ${td .source }' ,
Original file line number Diff line number Diff line change @@ -43,7 +43,9 @@ class MediaPlayerPlayer(
4343 override fun setRate (rate : Float ) {
4444 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
4545 mediaPlayer.playbackParams = mediaPlayer.playbackParams.setSpeed(rate)
46- } else if (rate != 1.0f ) {
46+ } else if (rate == 1.0f ) {
47+ mediaPlayer.start()
48+ } else {
4749 error(" Changing the playback rate is only available for Android M/23+ or using LOW_LATENCY mode." )
4850 }
4951 }
@@ -58,7 +60,8 @@ class MediaPlayerPlayer(
5860 }
5961
6062 override fun start () {
61- mediaPlayer.start()
63+ // Setting playback rate instead of mediaPlayer.start().
64+ setRate(wrappedPlayer.rate)
6265 }
6366
6467 override fun pause () {
Original file line number Diff line number Diff line change @@ -67,7 +67,9 @@ class WrappedPlayer internal constructor(
6767 set(value) {
6868 if (field != value) {
6969 field = value
70- player?.setRate(value)
70+ if (playing) {
71+ player?.setRate(value)
72+ }
7173 }
7274 }
7375
@@ -364,7 +366,6 @@ class WrappedPlayer internal constructor(
364366 }
365367
366368 private fun Player.configAndPrepare () {
367- setRate(rate)
368369 setVolumeAndBalance(volume, balance)
369370 setLooping(isLooping)
370371 prepare()
Original file line number Diff line number Diff line change @@ -114,7 +114,10 @@ class WrappedMediaPlayer {
114114
115115 func setPlaybackRate( playbackRate: Double ) {
116116 self . playbackRate = playbackRate
117- player. rate = Float ( playbackRate)
117+ if isPlaying {
118+ // Setting the rate causes the player to resume playing. So setting it only, when already playing.
119+ player. rate = Float ( playbackRate)
120+ }
118121 }
119122
120123 func seek( time: CMTime , completer: Completer ? = nil ) {
You can’t perform that action at this time.
0 commit comments