Podlite 1.12: set speed and skipping silences before the audio opens; reopen on a skip toggle
ExoPlayer 2.18 sets up skipping silences when it opens the audio, so the engine now gets both settings before prepare, and turning the option on or off while an episode plays reopens it at the same spot. Tested on the Xperia J against test/mock_abs.py: 2x speed, silences skipped, the toggle mid-play, notification buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
666a7eb8cd
commit
c771aa01bd
2 files changed
+18
-2
No files matched your search
@@ -121,6 +121,7 @@ final class ExoEngine implements Engine {
|
|||||||
|
|
||||||
public void setVolume(float v) { player.setVolume(v); }
|
public void setVolume(float v) { player.setVolume(v); }
|
||||||
|
|
||||||
|
/** Before prepare for skipping silences to work: ExoPlayer 2.18 switches it on only when it sets up the audio. */
|
||||||
public void setSpeed(float speed, boolean skipSilence) {
|
public void setSpeed(float speed, boolean skipSilence) {
|
||||||
player.setPlaybackParameters(new PlaybackParameters(speed));
|
player.setPlaybackParameters(new PlaybackParameters(speed));
|
||||||
player.setSkipSilenceEnabled(skipSilence);
|
player.setSkipSilenceEnabled(skipSilence);
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public class PlayerService extends Service implements Engine.Listener, AudioMana
|
|||||||
private boolean prepared;
|
private boolean prepared;
|
||||||
private String sourceUrl; // what the engine was opened with, to reopen it in the other engine
|
private String sourceUrl; // what the engine was opened with, to reopen it in the other engine
|
||||||
private boolean fallback; // this episode didn't decode in ExoPlayer: Android's MediaPlayer
|
private boolean fallback; // this episode didn't decode in ExoPlayer: Android's MediaPlayer
|
||||||
|
private boolean engineSkip; // whether the engine was opened skipping silences
|
||||||
private String coverFor; // the notification and lock screen's cover
|
private String coverFor; // the notification and lock screen's cover
|
||||||
private Bitmap cover;
|
private Bitmap cover;
|
||||||
private Episode ep;
|
private Episode ep;
|
||||||
@@ -456,6 +457,10 @@ public class PlayerService extends Service implements Engine.Listener, AudioMana
|
|||||||
sourceUrl = url;
|
sourceUrl = url;
|
||||||
mp = Platform.newEngine(getApplicationContext(), fallback);
|
mp = Platform.newEngine(getApplicationContext(), fallback);
|
||||||
mp.setListener(this);
|
mp.setListener(this);
|
||||||
|
// before the audio is opened: ExoPlayer sets up skipping silences only then
|
||||||
|
Prefs prefs = Prefs.get(this);
|
||||||
|
engineSkip = prefs.skipSilence();
|
||||||
|
mp.setSpeed(prefs.speed(), engineSkip);
|
||||||
try {
|
try {
|
||||||
if (local) {
|
if (local) {
|
||||||
mp.setSource(new File(url), null);
|
mp.setSource(new File(url), null);
|
||||||
@@ -491,10 +496,20 @@ public class PlayerService extends Service implements Engine.Listener, AudioMana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Speed or skipping silences changed in the player screen or Settings. */
|
/** Speed or skipping silences changed in the player screen or Settings. Speed changes as it plays; skipping
|
||||||
|
* silences only takes effect when the audio is opened, so the episode is reopened here at the same spot. */
|
||||||
void applySpeed() {
|
void applySpeed() {
|
||||||
Prefs p = Prefs.get(this);
|
Prefs p = Prefs.get(this);
|
||||||
if (mp != null) mp.setSpeed(p.speed(), p.skipSilence());
|
if (mp == null) return;
|
||||||
|
if (Platform.SPEED && prepared && sourceUrl != null && p.skipSilence() != engineSkip) {
|
||||||
|
boolean wasPlaying = state == PLAYING;
|
||||||
|
resumeMs = positionMs();
|
||||||
|
lastPosMs = resumeMs;
|
||||||
|
playOnPrepared = wasPlaying;
|
||||||
|
prepare(sourceUrl, null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mp.setSpeed(p.speed(), engineSkip);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void start() {
|
private void start() {
|
||||||
|
|||||||
Reference in new issue
Block a user