正在循环播放音频 android studio

Looping to play audio android studio

谁能帮我重复播放音频? 一键播放音频

这是不重复播放音频的代码

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();
    }
}

输出为check The first number()不播放任何东西,而for check The second number()只播放第一个索引,即“1”。 而两个 checksNumber () 都应该依次播放三个音频。 谁能帮帮我?

您不能使用 for 循环执行此操作,因为这是同步编程,您的循环不会等待您的声音完成后再循环播放其他歌曲。

您可以解决此问题的方法之一是制作递归函数,以便您在 onCompletion 上再次调用它,只是以不同的数字开头:

旁注:请注意,我没有测试此代码,我不确定它是否有效,我只是想引导您朝着正确的方向前进。

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();
}