aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github/daneren2005/dsub/service
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2016-04-23 14:46:56 -0700
committerScott Jackson <daneren2005@gmail.com>2016-04-23 14:46:56 -0700
commitf03fe63ecd8603575b5e0ab8f9f8b6f6b3821f5b (patch)
tree438810772fbc0364e3709ae1dfc5c12a9f2d0bb8 /app/src/main/java/github/daneren2005/dsub/service
parentb531ec43824232005743c4a0e4da4d8a29cd669e (diff)
downloaddsub-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.java32
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) {