Play audio from assets folder

156 Views Asked by At

I have this code below which plays audio locally (raw/audio.mp3) from the raw folder and saves the seekbar progress to shared preferences. I want to change location of the audio from raw folder to assets folder without losing the functionality of saving the audio seekbar progress.

mPreferences = PreferenceManager.getDefaultSharedPreferences(this); editor = mPreferences.edit();

    int duration = mPreferences.getInt("duration", 0);
    int current = mPreferences.getInt("current", 0);
    int mediaprogress = mPreferences.getInt("mediaprogress",0);
    seekBar.setProgress(0);


    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean FromUser) {
            if (FromUser){
                seekBar.setProgress(progress);
                mediaPlayer.seekTo(progress);
                editor.putInt("mediaprogress",progress);
                editor.apply();}}

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }});


    lastbuttn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (playing){
                if (mediaPlayer == null){
                    mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.audio);
                    mediaPlayer.seekTo(mediaprogress);
                    mediaPlayer.start();
                    int progress = mPreferences.getInt("mediaprogress",0);
                    editor.putInt("mediaprogress",progress);
                    editor.apply();

                }   else if (!mediaPlayer.isPlaying()){
                    mediaPlayer.seekTo(currentposition);
                    mediaPlayer.start();}

                updateSeekBar();
                playbttn.setImageResource(R.drawable.ic_pause);
                playing = false;}

            else {
                if(mediaPlayer !=null){
                    mediaPlayer.pause();
                    currentposition = mediaPlayer.getCurrentPosition();
                    playbttn.setImageResource(R.drawable.ic_play);
                    playing = true;
                }}}

    });



    playbttn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {if (playing){if (mediaPlayer == null){
            mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.audio);
            mediaPlayer.start();
            int progress = mPreferences.getInt("mediaprogress",0);
            editor.putInt("mediaprogress",progress);
            editor.apply();}

        else if (!mediaPlayer.isPlaying()){
            mediaPlayer.seekTo(currentposition);
            mediaPlayer.start();}

            updateSeekBar();
            playbttn.setImageResource(R.drawable.ic_pause);
            playing = false;}

        else {if(mediaPlayer !=null){
            mediaPlayer.pause();
            currentposition = mediaPlayer.getCurrentPosition();
            playbttn.setImageResource(R.drawable.ic_play);
            playing = true;
        }}}});}



public void updateSeekBar(){
    int current = mediaPlayer.getCurrentPosition();
    seekBar.setProgress(current);
    int duration = mediaPlayer.getDuration();
    seekBar.setMax(duration);
    

    editor.putInt("current",current);
    editor.apply();
    editor.putInt("duration",duration);
    editor.apply();

    runnable = new Runnable() {
        @Override
        public void run() {
            updateSeekBar();
        }};
    handler.postDelayed(runnable,1000);
}

toast message for showing progress saved

@Override
protected void onStop() {
    super.onStop();
    if (mediaPlayer == null){
        Toast.makeText(getApplicationContext(), "saved progress", Toast.LENGTH_LONG).show();}

    else if(mediaPlayer.isPlaying()){
        mediaPlayer.pause();
        playbttn.setImageResource(R.drawable.ic_play);}
}
1

There are 1 best solutions below

0
Mohsen On

After you have moved your file to assets folder, Try this:

val audioUri = Uri.parse("file:///android_asset/" + "audio_file_name.mp3")
mediaPlayer.setDataSource(context, audioUri)