在android中使用媒体播放器时,如何避免音频片段重复之前的延迟



我希望我的程序在没有任何启动延迟的情况下连续播放特定的音频片段,因为我已经创建了一个程序,但它不能按我的尺寸工作,所以请有人帮助我解决这个

代码

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
    LocalService mService;
    boolean mBound = false;
    Button btn1;
    Button btn2;
    MediaPlayer yourStereo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         btn1=(Button)findViewById(R.id.a_button);
         btn2=(Button)findViewById(R.id.b_button);

        btn1.setOnClickListener(this);

    }
    @Override
    public void onClick(View arg0) {
            // play music here
            btn1.setVisibility(Button.GONE);
            btn2.setVisibility(Button.VISIBLE);
            // TODO Auto-generated method stub
            yourStereo = MediaPlayer.create(this, R.raw.pl);
                    yourStereo.start();
                    yourStereo.setOnCompletionListener(new OnCompletionListener() {
                        @Override
                        public void onCompletion(MediaPlayer mp) {
                            // TODO Auto-generated method stub
                            yourStereo.start();
                        }
                    });
            // pause music here
            btn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    yourStereo.stop();
                    btn2.setVisibility(Button.GONE);
                    btn1.setVisibility(Button.VISIBLE);
                }
            });
    }
}

在MediaPlayer上只播放setLooping(true),而不是再次播放onCompletion

http://developer.android.com/reference/android/media/MediaPlayer.html#setLooping(布尔值)

将播放器设置为循环播放或非循环播放。

有了循环,它会无限期地重复,不会中断,你不必担心自己处理它。

yourStereo = MediaPlayer.create(this, R.raw.pl);
yourStereo.setLooping(true);
yourStereo.start();

使用SoundPool进行低延迟媒体播放,而不是使用MediaPlayer。

我找到了其他解决方案:

afd = assetManager.openFd(nameSound);
player.setDataSource(afd.getFileDescriptor(),
                     afd.getStartOffset(), afd.getLength() - 1000);
afd.close();
player.prepare();
player.setLooping(true);
player.start();

您只需要定义比总持续时间少1000(0.1ms)的持续时间。

最新更新