Зацикливание для воспроизведения аудио андроид студии - PullRequest
0 голосов
/ 06 июня 2018

Может кто-нибудь помочь мне воспроизвести аудио с повторением?так что звук будет воспроизводиться последовательно в один клик

это код для воспроизведения звука без повторов

private void panggilAntrian(){
    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.nomor);
    panggil.start();
    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            cekNomor("158");
        }
    });
    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.silahkan);
            panggil.start();
            panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.loket);
                    panggil.start();
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            cekNomor("158");
                        }
                    });
                }
            });
        }
    });
}

в коде есть функция для воспроизведения звука с повторениемкаждая цифра номер.функция для повторного воспроизведения звука на основе номера цифры:

private void cekNomor(String kata){
    final String[] noPanggil = kata.split("(?<=\\G.{1})");
    for(i=0; i<noPanggil.length; i++){
        switch (noPanggil[i]){
            case "0":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.nol);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.nol);
                        }
                    });
                }
                break;
            case "1":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.satu);
                    Log.e("SUARA", noPanggil[i]);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.satu);
                        }
                    });
                }
                break;
            case "2":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.dua);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.dua);
                        }
                    });
                }
                break;
            case "3":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tiga);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tiga);
                        }
                    });
                }
                break;
            case "4":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.empat);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.empat);
                        }
                    });
                }
                break;
            case "5":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.lima);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.lima);
                            Log.e("SUARA", noPanggil[i]);
                        }
                    });
                }
                break;
            case "6":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.enam);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.enam);
                        }
                    });
                }
                break;
            case "7":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tujuh);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tujuh);
                        }
                    });
                }
                break;
            case "8":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.delapan);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.delapan);
                            Log.e("SUARA", noPanggil[i]);
                        }
                    });
                }
                break;
            case "9":
                if(i==0){
                    panggil = MediaPlayer.create(AntrianLoket.this, R.raw.sembilan);
                }else{
                    panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mediaPlayer) {
                            panggil = MediaPlayer.create(AntrianLoket.this, R.raw.sembilan);
                        }
                    });
                }
                break;
        }
        panggil.start();
    }
}

выход для проверки Первый номер () ничего не воспроизводит, тогда как для проверки Второй номер () воспроизводит только первый индекс, т.е."1".в то время как оба checkNumber () должны воспроизводить три аудио последовательно.кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 06 июня 2018

Вы не можете сделать это, используя цикл for, потому что это синхронное программирование, и ваш цикл не будет ждать завершения звука для повторного цикла для другой песни.

Один из способов решить эту проблему -сделать рекурсивную функцию, чтобы вы вызывали ее снова на onCompletion, просто с другого номера, чтобы начать с:

Sidenote: знайте, что я не тестировал этот код, и я не уверен, что он будет работать, я простохотел направить вас в правильном направлении.

private void cekNomor(String kata, i){
    final String[] noPanggil = kata.split("(?<=\\G.{1})");
    switch (noPanggil[i]){
        case "0":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.nol);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "1":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.satu);
                Log.e("SUARA", noPanggil[i]);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "2":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.dua);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "3":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tiga);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "4":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.empat);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "5":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.lima);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "6":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.enam);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);;
                    }
                });
            }
            break;
        case "7":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.tujuh);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "8":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.delapan);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
        case "9":
            if(i==0){
                panggil = MediaPlayer.create(AntrianLoket.this, R.raw.sembilan);
            }else{
                panggil.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        cekNomor(String kata, ++i);
                    }
                });
            }
            break;
    }
    panggil.start();
}
...