Search code examples
androidarraysaudiomedia-player

how to play song in raw folder continously, and no looping


im newbie here, can you help me?? i want to play all song in my raw folder sequentially, after all song finished playing i want no looping.

i have tried this code but it keeps looping after allsong playing {

int [] sound;
int soundke = 0;
MediaPlayer mediaPlayer;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_kubus);

    sound = new int[] {R.raw.swoosh2, R.raw.swoosh1, R.raw.swoosh2};

    mediaPlayer = MediaPlayer.create(kubus.this, sound[0]);

    mediaPlayer.start();

    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            play();

        }
    });

}

private void play () {
    soundke = (soundke + 1) % 3;
    AssetFileDescriptor afd = this.getResources().openRawResourceFd(sound[soundke]);

    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
        mediaPlayer.prepare();
        mediaPlayer.start();
        afd.close();
    } catch (IOException e) {

    }
}

it still keeps looping after all song playing. i want not looping after all song playing, thanks for your helping


Solution

  •   int [] sound;
        int soundke = 0;
        MediaPlayer mediaPlayer;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_kubus);
    
            sound = new int[] {R.raw.swoosh2, R.raw.swoosh1, R.raw.swoosh2};
    
            mediaPlayer = MediaPlayer.create(kubus.this, sound[0]);
            mediaPlayer.setLooping(false);
            mediaPlayer.start();
    
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    if(soundke < sound.length-1){
                       play(++soundke);
                    }else{
                        soundke=0; 
                        mediaPlayer.stop();    
    }
                }
            });
    
        }
    
        private void play (int track) {
            //soundke = (soundke + 1) % 3;
            AssetFileDescriptor afd = this.getResources().openRawResourceFd(sound[track]);
    
            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
                mediaPlayer.setLooping(false);
                mediaPlayer.prepare();
                mediaPlayer.start();
                afd.close();
            } catch (IOException e) {
    
            }
        }