Fixed playback speed and pitch issues

This commit is contained in:
Prathamesh More 2022-06-21 14:05:14 +05:30
parent e8f931f213
commit 111546bc4c
5 changed files with 21 additions and 30 deletions

View file

@ -31,7 +31,7 @@ import java.lang.ref.WeakReference
* Created by Beesham Sarendranauth (Beesham) * Created by Beesham Sarendranauth (Beesham)
*/ */
class AutoMusicProvider( class AutoMusicProvider(
val mContext: Context, private val mContext: Context,
private val songsRepository: SongRepository, private val songsRepository: SongRepository,
private val albumsRepository: AlbumRepository, private val albumsRepository: AlbumRepository,
private val artistsRepository: ArtistRepository, private val artistsRepository: ArtistRepository,
@ -138,7 +138,7 @@ class AutoMusicProvider(
topPlayedRepository.notRecentlyPlayedTracks().take(8) topPlayedRepository.notRecentlyPlayedTracks().take(8)
} }
else -> { else -> {
emptyList() emptyList()
} }
} }
songs.forEach { song -> songs.forEach { song ->

View file

@ -7,6 +7,7 @@ import android.content.IntentFilter
import android.media.AudioAttributes import android.media.AudioAttributes
import android.media.AudioManager import android.media.AudioManager
import android.media.MediaPlayer import android.media.MediaPlayer
import android.media.PlaybackParams
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.core.net.toUri import androidx.core.net.toUri
@ -17,6 +18,8 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.service.playback.Playback import code.name.monkey.retromusic.service.playback.Playback
import code.name.monkey.retromusic.util.PreferenceUtil.isAudioFocusEnabled import code.name.monkey.retromusic.util.PreferenceUtil.isAudioFocusEnabled
import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
abstract class LocalPlayback(val context: Context) : Playback, MediaPlayer.OnErrorListener, abstract class LocalPlayback(val context: Context) : Playback, MediaPlayer.OnErrorListener,
MediaPlayer.OnCompletionListener { MediaPlayer.OnCompletionListener {
@ -121,11 +124,14 @@ abstract class LocalPlayback(val context: Context) : Playback, MediaPlayer.OnErr
} else { } else {
player.setDataSource(path) player.setDataSource(path)
} }
player.setAudioAttributes(AudioAttributes.Builder() player.setAudioAttributes(
.setUsage(AudioAttributes.USAGE_MEDIA) AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .setUsage(AudioAttributes.USAGE_MEDIA)
.build() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
) )
player.playbackParams = PlaybackParams().setSpeed(playbackSpeed).setPitch(playbackPitch)
player.setOnPreparedListener { player.setOnPreparedListener {
player.setOnPreparedListener(null) player.setOnPreparedListener(null)
completion(true) completion(true)

View file

@ -23,6 +23,7 @@ import code.name.monkey.retromusic.extensions.uri
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks
import code.name.monkey.retromusic.util.PreferenceUtil.isGapLessPlayback import code.name.monkey.retromusic.util.PreferenceUtil.isGapLessPlayback
import code.name.monkey.retromusic.util.logE
/** /**
* @author Andrew Neal, Karim Abou Zeid (kabouzeid) * @author Andrew Neal, Karim Abou Zeid (kabouzeid)
@ -141,9 +142,7 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
override fun release() { override fun release() {
stop() stop()
mCurrentMediaPlayer.release() mCurrentMediaPlayer.release()
if (mNextMediaPlayer != null) { mNextMediaPlayer?.release()
mNextMediaPlayer?.release()
}
} }
/** /**
@ -249,7 +248,7 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
mCurrentMediaPlayer = MediaPlayer() mCurrentMediaPlayer = MediaPlayer()
mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
context.showToast(R.string.unplayable_file) context.showToast(R.string.unplayable_file)
Log.e(TAG, what.toString() + extra) logE(what.toString() + extra)
return false return false
} }
@ -260,9 +259,9 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
mCurrentMediaPlayer = mNextMediaPlayer!! mCurrentMediaPlayer = mNextMediaPlayer!!
isInitialized = true isInitialized = true
mNextMediaPlayer = null mNextMediaPlayer = null
if (callbacks != null) callbacks?.onTrackWentToNext() callbacks?.onTrackWentToNext()
} else { } else {
if (callbacks != null) callbacks?.onTrackEnded() callbacks?.onTrackEnded()
} }
} }
@ -270,6 +269,7 @@ class MultiPlayer(context: Context) : LocalPlayback(context) {
override fun setPlaybackSpeedPitch(speed: Float, pitch: Float) { override fun setPlaybackSpeedPitch(speed: Float, pitch: Float) {
mCurrentMediaPlayer.setPlaybackSpeedPitch(speed, pitch) mCurrentMediaPlayer.setPlaybackSpeedPitch(speed, pitch)
mNextMediaPlayer?.setPlaybackSpeedPitch(speed, pitch)
} }
companion object { companion object {

View file

@ -591,16 +591,9 @@ class MusicService : MediaBrowserServiceCompat(),
* By default return the browsable root. Treat the EXTRA_RECENT flag as a special case * By default return the browsable root. Treat the EXTRA_RECENT flag as a special case
* and return the recent root instead. * and return the recent root instead.
*/ */
var isRecentRequest = false val isRecentRequest = rootHints?.getBoolean(BrowserRoot.EXTRA_RECENT) ?: false
if (rootHints != null) { val browserRootPath =
isRecentRequest = if (isRecentRequest) AutoMediaIDHelper.RECENT_ROOT else AutoMediaIDHelper.MEDIA_ID_ROOT
rootHints.getBoolean(BrowserRoot.EXTRA_RECENT)
}
val browserRootPath = if (isRecentRequest) {
AutoMediaIDHelper.RECENT_ROOT
} else {
AutoMediaIDHelper.MEDIA_ID_ROOT
}
BrowserRoot(browserRootPath, null) BrowserRoot(browserRootPath, null)
} }
} }

View file

@ -6,8 +6,6 @@ import android.media.audiofx.AudioEffect
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.service.playback.Playback import code.name.monkey.retromusic.service.playback.Playback
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.PreferenceUtil.playbackPitch
import code.name.monkey.retromusic.util.PreferenceUtil.playbackSpeed
class PlaybackManager(val context: Context) { class PlaybackManager(val context: Context) {
@ -35,9 +33,6 @@ class PlaybackManager(val context: Context) {
val isPlaying: Boolean val isPlaying: Boolean
get() = playback != null && playback!!.isPlaying get() = playback != null && playback!!.isPlaying
private val shouldSetSpeed: Boolean
get() = !(playbackSpeed == 1f && playbackPitch == 1f)
init { init {
playback = createLocalPlayback() playback = createLocalPlayback()
} }
@ -61,9 +56,6 @@ class PlaybackManager(val context: Context) {
AudioFader.startFadeAnimator(playback!!, true) AudioFader.startFadeAnimator(playback!!, true)
} }
} }
if (shouldSetSpeed) {
playback?.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
}
playback?.start() playback?.start()
} }
} }