h6ah4i / android-openslmediaplayer

Re-implementation of Android's MediaPlayer and audio effect classes based on OpenSL ES APIs.
https://openslmediaplayer.h6ah4i.com
Apache License 2.0
419 stars 97 forks source link

UnsupportedOperationException: Control lost when setting BassBoost strength #51

Open edgardavtyan opened 6 years ago

edgardavtyan commented 6 years ago

Hi, I'm trying to use your library in my project. I've successfully set up HQEqualizer, but my app crashes whenever I'm calling setStrength method on OpenSLBassBoost. When my instance of OpenSLMediaPlayer is not prepared and not playing I can call setStrength and it works just fine, but if I set player's data source, prepare and start playback, like this

player.setDataSource(trackPath);
player.prepareAsync();

@Override
public void onPrepared(IBasicMediaPlayer mp) {
    player.start();
}

and then call setStrength on OpenSLBassBoost it crashes with

java.lang.UnsupportedOperationException: Control lost
at com.h6ah4i.android.media.opensl.OpenSLMediaPlayer.parseResultAndThrowException(OpenSLMediaPlayer.java:1043)
at com.h6ah4i.android.media.opensl.OpenSLMediaPlayer.parseResultAndThrowExceptForIOExceptions(OpenSLMediaPlayer.java:1008)
at com.h6ah4i.android.media.opensl.OpenSLMediaPlayer.access$100(OpenSLMediaPlayer.java:42)
at com.h6ah4i.android.media.opensl.OpenSLMediaPlayer$Internal.parseResultAndThrowExceptForIOExceptions(OpenSLMediaPlayer.java:850)
at com.h6ah4i.android.media.opensl.audiofx.OpenSLAudioEffect.parseResultAndThrowExceptForIOExceptions(OpenSLAudioEffect.java:43)
at com.h6ah4i.android.media.opensl.audiofx.OpenSLBassBoost.setStrength(OpenSLBassBoost.java:156)
at com.edavtyan.materialplayer.components.audioeffects.models.OpenSLBassBoost.setStrength(OpenSLBassBoost.java:29)
at com.edavtyan.materialplayer.components.audioeffects.AudioEffectsPresenter.onBassBoostStrengthChanged(AudioEffectsPresenter.java:107)
at com.edavtyan.materialplayer.components.audioeffects.AudioEffectsActivity.onProgressChange(AudioEffectsActivity.java:184)
at com.edavtyan.materialplayer.components.audioeffects.views.TitledSeekbar.onProgressChanged(TitledSeekbar.java:66)
at android.widget.SeekBar.onProgressRefresh(SeekBar.java:93)
at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:1327)
at android.widget.ProgressBar.refreshProgress(ProgressBar.java:1382)
at android.widget.ProgressBar.setProgressInternal(ProgressBar.java:1447)
at android.widget.AbsSeekBar.trackTouchEvent(AbsSeekBar.java:850)
at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:778)
at android.view.View.dispatchTouchEvent(View.java:10024)

Here's the branch in my project with your library https://github.com/edgardavtyan/material-player/tree/feat-advanced-player. I've implemented `BassBoost' in this commit https://github.com/edgardavtyan/material-player/commit/9652fae04be44d448a18b4c94bff073b664a3439 so you can refer to it to see how it set up and also few commits before it

edgardavtyan commented 6 years ago

Forgot to mention, I tested it on my Lg L90 running LineageOS with Android 7.1.2 and also many different emulators ranging from API 16 to API 24, it crashes on any of those devices