Skip to content

Commit

Permalink
Enable ExoPlayer feature to skip silence
Browse files Browse the repository at this point in the history
SetSpeed was change to SetPlaybackParams which contain speed and a switch to skip silence. For Players that fo not support this the call is ignored or only SetSpeed is used.

In Preferences the skip silence feature can be enabled by selecting ExoPlayer as MediaPlayer and enabling Skip Silence.

Default is OFF
  • Loading branch information
HaBaLeS committed Jan 5, 2019
1 parent 33603f8 commit 7c71fcc
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 18 deletions.
Expand Up @@ -103,7 +103,9 @@ private UserPreferences(){}

// Mediaplayer
public static final String PREF_MEDIA_PLAYER = "prefMediaPlayer";
public static final String PREF_MEDIA_PLAYER_EXOPLAYER = "exoplayer";
private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed";
public static final String PREF_PLAYBACK_SKIP_SILENCE = "prefSkipSilence";
private static final String PREF_FAST_FORWARD_SECS = "prefFastForwardSecs";
private static final String PREF_REWIND_SECS = "prefRewindSecs";
private static final String PREF_QUEUE_LOCKED = "prefQueueLocked";
Expand Down Expand Up @@ -317,6 +319,10 @@ public static String getPlaybackSpeed() {
return prefs.getString(PREF_PLAYBACK_SPEED, "1.00");
}

public static boolean isSkipSilence() {
return prefs.getBoolean(PREF_PLAYBACK_SKIP_SILENCE, false);
}

public static String[] getPlaybackSpeedArray() {
return readPlaybackSpeedArray(prefs.getString(PREF_PLAYBACK_SPEED_ARRAY, null));
}
Expand Down Expand Up @@ -647,7 +653,7 @@ public static boolean useSonic() {
}

public static boolean useExoplayer() {
return prefs.getString(PREF_MEDIA_PLAYER, "sonic").equals("exoplayer");
return prefs.getString(PREF_MEDIA_PLAYER, "sonic").equals(PREF_MEDIA_PLAYER_EXOPLAYER);
}

public static void enableSonic() {
Expand Down
Expand Up @@ -25,7 +25,6 @@
import com.google.android.exoplayer2.util.Util;

import org.antennapod.audio.MediaPlayer;

import de.danoeh.antennapod.core.util.playback.IPlayer;


Expand Down Expand Up @@ -192,9 +191,9 @@ public void setDisplay(SurfaceHolder sh) {
}

@Override
public void setPlaybackSpeed(float v) {
public void setPlaybackParams(float speed, boolean skipSilence) {
PlaybackParameters params = mExoPlayer.getPlaybackParameters();
mExoPlayer.setPlaybackParameters(new PlaybackParameters(v, params.pitch));
mExoPlayer.setPlaybackParameters(new PlaybackParameters(speed, params.pitch, skipSilence));
}

@Override
Expand Down
Expand Up @@ -236,7 +236,7 @@ private void resumeSync() {
Log.e(TAG, Log.getStackTraceString(e));
UserPreferences.setPlaybackSpeed(String.valueOf(speed));
}
setSpeed(speed);
setPlaybackParams(speed, UserPreferences.isSkipSilence());
setVolume(UserPreferences.getLeftVolume(), UserPreferences.getRightVolume());

if (playerStatus == PlayerStatus.PREPARED && media.getPosition() > 0) {
Expand Down Expand Up @@ -537,14 +537,14 @@ public boolean canSetSpeed() {
* Sets the playback speed.
* This method is executed on the caller's thread.
*/
private void setSpeedSync(float speed) {
private void setSpeedSyncAndSkipSilence(float speed, boolean skipSilence) {
playerLock.lock();
if (media != null && media.getMediaType() == MediaType.AUDIO) {
if (mediaPlayer.canSetSpeed()) {
mediaPlayer.setPlaybackSpeed(speed);
Log.d(TAG, "Playback speed was set to " + speed);
callback.playbackSpeedChanged(speed);
}
mediaPlayer.setPlaybackParams(speed, skipSilence);
}
playerLock.unlock();
}
Expand All @@ -554,8 +554,8 @@ private void setSpeedSync(float speed) {
* This method is executed on an internal executor service.
*/
@Override
public void setSpeed(final float speed) {
executor.submit(() -> setSpeedSync(speed));
public void setPlaybackParams(final float speed, final boolean skipSilence) {
executor.submit(() -> setSpeedSyncAndSkipSilence(speed, skipSilence));
}

/**
Expand Down
Expand Up @@ -1629,7 +1629,7 @@ public boolean canSetSpeed() {
}

public void setSpeed(float speed) {
mediaPlayer.setSpeed(speed);
mediaPlayer.setPlaybackParams(speed, UserPreferences.isSkipSilence());
}

public void setVolume(float leftVolume, float rightVolume) {
Expand Down
Expand Up @@ -148,10 +148,12 @@ public abstract class PlaybackServiceMediaPlayer {
public abstract boolean canSetSpeed();

/**
* Sets the playback speed.
* Sets the playback parameters.
* - Speed
* - SkipSilence (ExoPlayer only)
* This method is executed on an internal executor service.
*/
public abstract void setSpeed(float speed);
public abstract void setPlaybackParams(final float speed, final boolean skipSilence);

/**
* Returns the current playback speed. If the playback speed could not be retrieved, 1 is returned.
Expand Down
Expand Up @@ -34,6 +34,14 @@ public void setDisplay(SurfaceHolder sh) {
}
}

@Override
public void setPlaybackParams(float speed, boolean skipSilence) {
if(canSetSpeed()) {
setPlaybackSpeed(speed);
}
//Default player does not support silence skipping
}

@Override
protected boolean useSonic() {
return UserPreferences.useSonic();
Expand Down
Expand Up @@ -37,7 +37,7 @@ void setDataSource(String path) throws IllegalStateException, IOException,

void setDisplay(SurfaceHolder sh);

void setPlaybackSpeed(float f);
void setPlaybackParams(float speed, boolean skipSilence);

void setDownmix(boolean enable);

Expand Down
Expand Up @@ -22,9 +22,8 @@ public float getCurrentSpeedMultiplier() {
}

@Override
public void setPlaybackSpeed(float f) {
Log.e(TAG, "Setting playback speed unsupported in video player");
throw new UnsupportedOperationException("Setting playback speed unsupported in video player");
public void setPlaybackParams(float speed, boolean skipSilence) {
//Ignore this for non ExoPlayer implementations
}

@Override
Expand Down
1 change: 1 addition & 0 deletions core/src/main/res/values/strings.xml
Expand Up @@ -466,6 +466,7 @@
<string name="media_player_builtin">Built-in Android player</string>
<string name="media_player_sonic" translatable="false">Sonic Media Player</string>
<string name="media_player_exoplayer" translatable="false">ExoPlayer</string>
<string name="pref_skip_silence_title" >Skip Silence in Audio</string>
<string name="pref_videoBehavior_title">Upon exiting video</string>
<string name="pref_videoBehavior_sum">Behavior when leaving video playback</string>
<string name="stop_playback">Stop playback</string>
Expand Down
Expand Up @@ -515,8 +515,8 @@ public boolean canSetSpeed() {
}

@Override
public void setSpeed(float speed) {
throw new UnsupportedOperationException("Setting playback speed unsupported for Remote Playback");
public void setPlaybackParams(float speed, boolean skipSilence) {
//Can be safely ignored as neither set speed not skipSilence is supported
}

@Override
Expand Down

0 comments on commit 7c71fcc

Please sign in to comment.