循环播放音频android studio

时间:2018-06-06 02:19:19

标签: java android loops audio android-studio-3.0

任何人都可以帮助我重复播放音频吗? 因此,只需点击一下即可按顺序播放音频

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

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

输出用于检查第一个数字()不播放任何内容,而对于检查第二个数字()仅播放第一个索引,即&#34; 1&#34;。 而两个checksNumber()都应该按顺序播放三个音频。 有谁可以帮助我?

1 个答案:

答案 0 :(得分:0)

你不能使用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();
}