diff --git a/library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java b/library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java index f09df0584a..9b09c0988f 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/BasePlayer.java @@ -137,6 +137,11 @@ public abstract class BasePlayer implements Player { } } + @Override + public final void setPlaybackSpeed(float speed) { + setPlaybackParameters(getPlaybackParameters().withSpeed(speed)); + } + @Override public final void stop() { stop(/* reset= */ false); diff --git a/library/common/src/main/java/com/google/android/exoplayer2/Player.java b/library/common/src/main/java/com/google/android/exoplayer2/Player.java index 518b1105f7..3ab0c52274 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/Player.java @@ -1304,6 +1304,18 @@ public interface Player { */ void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters); + /** + * Changes the rate at which playback occurs. + * + *

The pitch is not changed. + * + *

This is equivalent to {@code setPlaybackParameter(getPlaybackParameter().withSpeed(speed))}. + * + * @param speed The linear factor by which playback will be sped up. Must be higher than 0. 1 is + * normal speed, 2 is twice as fast, 0.5 is half normal speed... + */ + void setPlaybackSpeed(float speed); + /** * Returns the currently active playback parameters. * diff --git a/library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java b/library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java index d5a00201ac..07388f6b5e 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/ExoPlayerTest.java @@ -8605,6 +8605,20 @@ public final class ExoPlayerTest { assertThat(liveOffsetAtEnd).isIn(Range.closed(3_900L, 4_100L)); } + @Test + public void playerIdle_withSetPlaybackSpeed_usesPlaybackParameterSpeedWithPitchUnchanged() { + ExoPlayer player = new TestExoPlayerBuilder(context).build(); + player.setPlaybackParameters(new PlaybackParameters(/* speed= */ 1, /* pitch= */ 2)); + Player.EventListener mockListener = mock(Player.EventListener.class); + player.addListener(mockListener); + player.prepare(); + + player.setPlaybackSpeed(2); + + verify(mockListener) + .onPlaybackParametersChanged(new PlaybackParameters(/* speed= */ 2, /* pitch= */ 2)); + } + @Test public void targetLiveOffsetInMedia_withSetPlaybackParameters_usesPlaybackParameterSpeed() throws Exception {