Android音频循环

Android音频循环,android,Android,虽然我是一名经验丰富的开发者,但我对Android还是新手,我想开发一款应用程序,在通过Android的麦克风录制的用户可定义的音频片段之间循环 我希望当循环点被点击时,延迟尽可能低(即,寻找部分的起始点并恢复播放的模拟时间) 我想要一些一般性的建议,例如: 音频文件格式 我应该考虑播放哪些课程(例如声音池、媒体播放器等) 谢谢你的建议 Dave您可以使用媒体播放器和OnCompletetionListener,如下所示: MediaPlayer mp; mp = MediaPl

虽然我是一名经验丰富的开发者,但我对Android还是新手,我想开发一款应用程序,在通过Android的麦克风录制的用户可定义的音频片段之间循环

我希望当循环点被点击时,延迟尽可能低(即,寻找部分的起始点并恢复播放的模拟时间)

我想要一些一般性的建议,例如:

音频文件格式
我应该考虑播放哪些课程(例如声音池、媒体播放器等)

谢谢你的建议


Dave

您可以使用媒体播放器和OnCompletetionListener,如下所示:

    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.create(getApplicationContext(), R.raw.nextsound);
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setLooping(true);
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
            mp.seekTo(3000); //3 seconds in
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();
至于声音文件类型,我从来没有注意到它们之间有很大的区别。我倾向于使用.mp3或.ogg,只是因为它们的文件大小往往比.wav小

编辑:啊,我明白了,如果你想反复播放整个音频文件,你只需要调用setLooping(true),如下所示:

    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.create(getApplicationContext(), R.raw.nextsound);
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setLooping(true);
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
            mp.seekTo(3000); //3 seconds in
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();
如果您试图播放完整的音频文件一次,然后反复播放其中的一小部分,您可以在completionlistener中使用.seekTo()方法,如下所示:

    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            mp.create(getApplicationContext(), R.raw.nextsound);
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setLooping(true);
    mp.prepare();
    mp.start();
    MediaPlayer mp;
    mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
    mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
            mp.seekTo(3000); //3 seconds in
            mp.prepare();
            mp.start();
        }

    });
    mp.prepare();
    mp.start();

谢谢如果我理解正确的话,这里描述的是一种情况,完成R.raw.yoursound将触发R.raw.nextsound的播放,这不是我想要的。我希望能够指示播放对象在到达某个点(循环结束)时从文件中的特定点(循环开始)恢复播放-在一个声音文件中。不过,我总有可能错过一些微妙的东西!好的,Tim,谢谢你-鉴于触发循环的是完成侦听器,这意味着终结点必须始终是文件的结尾,而不是声音文件中的任意点-我想知道audiotrack类是否更像我想要的,我可以在哪里获得PlaybackHeadPosition()在播放过程中,确定循环起点和终点,然后使用setLoopPoints()重复该部分-您使用过这个吗?你能看到这个方法有什么问题吗?我以前没用过那个类。但这对我来说似乎是个不错的方法。