Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中的循环声音文件?_Android_Audio_Android Mediaplayer - Fatal编程技术网

android中的循环声音文件?

android中的循环声音文件?,android,audio,android-mediaplayer,Android,Audio,Android Mediaplayer,这段代码在初始循环中运行良好。然而,一旦我停下来,再次按下循环按钮,文件就会被弄混,并无序播放。有人知道怎么回事吗??任何帮助都将不胜感激 public class OneExp extends ActionBarActivity { private ListView lv; private ArrayAdapter<String> arrayAdapter; private MediaPlayer mp; private MediaPlayer mp2; int[] myAud

这段代码在初始循环中运行良好。然而,一旦我停下来,再次按下循环按钮,文件就会被弄混,并无序播放。有人知道怎么回事吗??任何帮助都将不胜感激

public class OneExp extends ActionBarActivity {

private ListView lv; 
private ArrayAdapter<String> arrayAdapter;
private MediaPlayer mp;
private MediaPlayer mp2;
int[] myAudio = {R.raw.e_1101, R.raw.e_1102, R.raw.e_1103, R.raw.e_1104, R.raw.e_1105,
        R.raw.e_1106, R.raw.e_1107, R.raw.e_1108, R.raw.e_1109, R.raw.e_1110, R.raw.e_1111};
int mCompleted = 0;


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

    Button btnLoop = (Button) findViewById(R.id.button1);
    Button btnStop = (Button) findViewById(R.id.button2);

    btnStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (mp2 != null) {

                if (mp2.isPlaying()) {
                    mp2.stop();

                }
                mp2.reset();
                mp2.release();
                mp2 = null;
            }
            }
    });

    btnLoop.setOnClickListener(new OnClickListener() {



        @Override
        public void onClick(View arg0) {

            mp2 = MediaPlayer.create(getBaseContext(), myAudio[0]);
            mp2.setOnCompletionListener(new OnCompletionListener() 
            {
                @Override
                public void onCompletion(MediaPlayer mp2)
                {
                    mCompleted++;
                    mp2.reset();
                    if (mCompleted < myAudio.length) 
                    {
                        try
                        {
                            AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
                            if (afd != null) 
                            {
                                mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                                afd.close();
                                mp2.prepare();
                                mp2.start();
                            }
                        }
                        catch (Exception ex) 
                        {
                           ex.printStackTrace();
                        }

                    } 
                    else if (mCompleted>=myAudio.length) 
                    {
                        mCompleted =0;
                        try
                        {
                            AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
                            if (afd != null) 
                            {
                                mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                                afd.close();
                                mp2.prepare();
                                mp2.start();
                            }
                        }
                        catch (Exception ex) 
                        {
                           ex.printStackTrace();
                        }
                    }
                    else
                    {
                        mCompleted=0;
                         mp2.release();
                         mp2 = null;
                    }

                }
            });


            mp2.start();  

        }

    });
看看

当您可以轻松地使用start、stop、pause和setLoopingtrue时,为什么要使用这么多代码

据我所知,没有必要检查音频的长度

当您调用pause和稍后的just start时,您的音频将在原来的位置继续播放


只有在完全处理完文件后,才调用release/reset

我想循环一系列文件,而不仅仅是一个。如何设置一个循环,例如一行三个文件,并重复所有三个文件,直到我按下停止键?我将创建一个正常的for循环。如果只有3个文件,那么它们将在同一时刻停止,不会出现任何明显的延迟。