Fixed Playback speed and pitch not working when CrossFade is enabled
This commit is contained in:
parent
1cfa5aaac5
commit
88669ceaef
5 changed files with 43 additions and 20 deletions
|
@ -6,10 +6,12 @@ import android.content.Intent
|
|||
import android.media.AudioAttributes
|
||||
import android.media.AudioManager
|
||||
import android.media.MediaPlayer
|
||||
import android.media.PlaybackParams
|
||||
import android.media.audiofx.AudioEffect
|
||||
import android.os.PowerManager
|
||||
import android.util.Log
|
||||
import androidx.core.net.toUri
|
||||
import code.name.monkey.appthemehelper.util.VersionUtils.hasMarshmallow
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.extensions.showToast
|
||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||
|
@ -18,6 +20,8 @@ import code.name.monkey.retromusic.service.playback.Playback
|
|||
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
|
||||
import code.name.monkey.retromusic.util.MusicUtil
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
/** @author Prathamesh M */
|
||||
|
@ -157,6 +161,7 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
|
|||
AudioAttributes.Builder().setLegacyStreamType(AudioManager.STREAM_MUSIC).build()
|
||||
)
|
||||
player.prepare()
|
||||
player.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
return false
|
||||
|
@ -341,6 +346,20 @@ class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletion
|
|||
crossFadeDuration = duration
|
||||
}
|
||||
|
||||
override fun setPlaybackSpeedPitch(speed: Float, pitch: Float) {
|
||||
getCurrentPlayer()?.setPlaybackSpeedPitch(speed, pitch)
|
||||
}
|
||||
|
||||
private fun MediaPlayer.setPlaybackSpeedPitch(speed: Float, pitch: Float) {
|
||||
if (hasMarshmallow()) {
|
||||
val wasPlaying: Boolean = isPlaying
|
||||
playbackParams = PlaybackParams().setSpeed(speed).setPitch(pitch)
|
||||
if (!wasPlaying) {
|
||||
if (isPlaying) pause()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val TAG: String = CrossFadePlayer::class.java.simpleName
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@ package code.name.monkey.retromusic.service;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.media.PlaybackParams;
|
||||
|
@ -28,12 +27,10 @@ import android.widget.Toast;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import code.name.monkey.appthemehelper.util.VersionUtils;
|
||||
import code.name.monkey.retromusic.ConstantsKt;
|
||||
import code.name.monkey.retromusic.R;
|
||||
import code.name.monkey.retromusic.service.playback.Playback;
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil;
|
||||
|
@ -42,7 +39,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil;
|
|||
* @author Andrew Neal, Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class MultiPlayer
|
||||
implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener, SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener {
|
||||
public static final String TAG = MultiPlayer.class.getSimpleName();
|
||||
|
||||
private MediaPlayer mCurrentMediaPlayer = new MediaPlayer();
|
||||
|
@ -60,7 +57,6 @@ public class MultiPlayer
|
|||
MultiPlayer(final Context context) {
|
||||
this.context = context;
|
||||
mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
|
||||
PreferenceManager.getDefaultSharedPreferences(context).registerOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -94,7 +90,7 @@ public class MultiPlayer
|
|||
} else {
|
||||
player.setDataSource(path);
|
||||
}
|
||||
setPlaybackSpeedPitch(player);
|
||||
setPlaybackSpeedPitch(PreferenceUtil.INSTANCE.getPlaybackSpeed(), PreferenceUtil.INSTANCE.getPlaybackPitch());
|
||||
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
||||
player.prepare();
|
||||
} catch (Exception e) {
|
||||
|
@ -208,7 +204,6 @@ public class MultiPlayer
|
|||
if (mNextMediaPlayer != null) {
|
||||
mNextMediaPlayer.release();
|
||||
}
|
||||
PreferenceManager.getDefaultSharedPreferences(context).unregisterOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -359,20 +354,14 @@ public class MultiPlayer
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
if (key.equals(ConstantsKt.PLAYBACK_SPEED) || key.equals(ConstantsKt.PLAYBACK_PITCH)) {
|
||||
setPlaybackSpeedPitch(mCurrentMediaPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
public void setPlaybackSpeedPitch(MediaPlayer mp) {
|
||||
public void setPlaybackSpeedPitch(float speed, float pitch) {
|
||||
if (VersionUtils.INSTANCE.hasMarshmallow()) {
|
||||
boolean wasPlaying = mp.isPlaying();
|
||||
mp.setPlaybackParams(new PlaybackParams()
|
||||
boolean wasPlaying = mCurrentMediaPlayer.isPlaying();
|
||||
mCurrentMediaPlayer.setPlaybackParams(new PlaybackParams()
|
||||
.setSpeed(PreferenceUtil.INSTANCE.getPlaybackSpeed())
|
||||
.setPitch(PreferenceUtil.INSTANCE.getPlaybackPitch()));
|
||||
if (!wasPlaying) {
|
||||
if (mp.isPlaying()) mp.pause();
|
||||
if (mCurrentMediaPlayer.isPlaying()) mCurrentMediaPlayer.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil.isClassicNotification
|
|||
import code.name.monkey.retromusic.util.PreferenceUtil.isHeadsetPlugged
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.isLockScreen
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.isPauseOnZeroVolume
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.registerOnSharedPreferenceChangedListener
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil.unregisterOnSharedPreferenceChangedListener
|
||||
|
@ -695,6 +696,9 @@ class MusicService : MediaBrowserServiceCompat(),
|
|||
sharedPreferences: SharedPreferences, key: String,
|
||||
) {
|
||||
when (key) {
|
||||
PLAYBACK_SPEED, PLAYBACK_PITCH -> {
|
||||
playback?.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
|
||||
}
|
||||
CROSS_FADE_DURATION -> {
|
||||
val progress = songProgressMillis
|
||||
val wasPlaying = isPlaying
|
||||
|
|
|
@ -49,6 +49,8 @@ interface Playback {
|
|||
|
||||
fun setCrossFadeDuration(duration: Int)
|
||||
|
||||
fun setPlaybackSpeedPitch(speed: Float, pitch: Float)
|
||||
|
||||
interface PlaybackCallbacks {
|
||||
fun onTrackWentToNext()
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package code.name.monkey.retromusic.util
|
|||
import android.content.Context
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import androidx.core.content.edit
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.content.res.use
|
||||
|
@ -340,9 +341,15 @@ object PreferenceUtil {
|
|||
"always" -> true
|
||||
"only_wifi" -> {
|
||||
val connectivityManager = context.getSystemService<ConnectivityManager>()
|
||||
if (VersionUtils.hasMarshmallow()) {
|
||||
val network = connectivityManager?.activeNetwork
|
||||
val capabilities = connectivityManager?.getNetworkCapabilities(network)
|
||||
capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|
||||
} else {
|
||||
val netInfo = connectivityManager?.activeNetworkInfo
|
||||
netInfo != null && netInfo.type == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting
|
||||
}
|
||||
}
|
||||
"never" -> false
|
||||
else -> false
|
||||
}
|
||||
|
@ -678,6 +685,8 @@ object PreferenceUtil {
|
|||
get() = sharedPreferences
|
||||
.getInt(CROSS_FADE_DURATION, 0)
|
||||
|
||||
val isCrossfadeEnabled get() = crossFadeDuration > 0
|
||||
|
||||
val materialYou
|
||||
get() = sharedPreferences.getBoolean(MATERIAL_YOU, VersionUtils.hasS())
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue