diff options
author | Scott Jackson <daneren2005@gmail.com> | 2016-04-23 14:46:56 -0700 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2016-04-23 14:46:56 -0700 |
commit | f03fe63ecd8603575b5e0ab8f9f8b6f6b3821f5b (patch) | |
tree | 438810772fbc0364e3709ae1dfc5c12a9f2d0bb8 /app/src/main/java/github/daneren2005/dsub/service | |
parent | b531ec43824232005743c4a0e4da4d8a29cd669e (diff) | |
download | dsub-f03fe63ecd8603575b5e0ab8f9f8b6f6b3821f5b.tar.gz dsub-f03fe63ecd8603575b5e0ab8f9f8b6f6b3821f5b.tar.bz2 dsub-f03fe63ecd8603575b5e0ab8f9f8b6f6b3821f5b.zip |
#170 Add Variable Playback Speed
Diffstat (limited to 'app/src/main/java/github/daneren2005/dsub/service')
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/service/DownloadService.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java index 01007b68..988dea5f 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java @@ -76,6 +76,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.media.AudioManager; import android.media.MediaPlayer; +import android.media.PlaybackParams; import android.media.audiofx.AudioEffect; import android.net.wifi.WifiManager; import android.os.Build; @@ -161,6 +162,7 @@ public class DownloadService extends Service { private int cachedPosition = 0; private boolean downloadOngoing = false; private float volume = 1.0f; + private long delayUpdateProgress = 1000L; private AudioEffectsController effectsController; private RemoteControlState remoteState = LOCAL; @@ -1503,7 +1505,7 @@ public class DownloadService extends Service { while(isRunning) { try { onSongProgress(); - Thread.sleep(1000L); + Thread.sleep(delayUpdateProgress); } catch(Exception e) { isRunning = false; @@ -1545,7 +1547,7 @@ public class DownloadService extends Service { } } onSongProgress(cachedPosition < 2000 ? true: false); - Thread.sleep(1000L); + Thread.sleep(delayUpdateProgress); } catch(Exception e) { Log.w(TAG, "Crashed getting current position", e); @@ -1877,6 +1879,7 @@ public class DownloadService extends Service { cachedPosition = position; applyReplayGain(mediaPlayer, downloadFile); + applyPlaybackParams(mediaPlayer); if (start || autoPlayStart) { mediaPlayer.start(); @@ -1947,6 +1950,7 @@ public class DownloadService extends Service { } applyReplayGain(nextMediaPlayer, downloadFile); + applyPlaybackParams(nextMediaPlayer); } catch (Exception x) { handleErrorNext(x); } @@ -2600,6 +2604,30 @@ public class DownloadService extends Service { } } + public void setPlaybackSpeed(float playbackSpeed) { + Util.getPreferences(this).edit().putFloat(Constants.PREFERENCES_KEY_PLAYBACK_SPEED, playbackSpeed).commit(); + applyPlaybackParams(mediaPlayer); + if(nextMediaPlayer != null && nextPlayerState == PREPARED) { + applyPlaybackParams(nextMediaPlayer); + } + + delayUpdateProgress = Math.round(1000L / playbackSpeed); + } + public float getPlaybackSpeed() { + return Util.getPreferences(this).getFloat(Constants.PREFERENCES_KEY_PLAYBACK_SPEED, 1.0f); + } + private synchronized void applyPlaybackParams(MediaPlayer mediaPlayer) { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + float playbackSpeed = getPlaybackSpeed(); + + if(playbackSpeed != 1.0f || mediaPlayer.getPlaybackParams() != null) { + PlaybackParams playbackParams = new PlaybackParams(); + playbackParams.setSpeed(playbackSpeed); + mediaPlayer.setPlaybackParams(playbackParams); + } + } + } + public void toggleStarred() { final DownloadFile currentPlaying = this.currentPlaying; if(currentPlaying == null) { |