Android音频播放讲解

最近项目中有用到音频播放,故将音频播放相关做一个汇总。

准备

在汇总之前,先做一个了解。音频播放的方式有哪几种?
1. MediaPlayer类
2. SoundPool类

两种方式的应用场景?
1. MediaPlayer类
适用于播放较长的音频文件,只能播放单一的文件,不支持多个文件同时播放。由于文件较大,所以资源占用率较高,延迟时间较长。
2. SoundPool类
适用于播放较短的音频文件,并且文件的大小限制在1M左右,可支持多个文件同时播放。SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。调用pause并不会立即停止,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。 所以该APi比较适用于比较多尔密集的音效,比如游戏等,或者很短的音频。

开始

MediaPlayer
使用如下

public class MediaActivity extends Activity implements View.OnClickListener {
    private MediaPlayer player;
    private SoundPool soundPool;
    private Timer mTimer = new Timer(true);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //目前是加载本地的mp3文件,支持网络地址
        player = MediaPlayer.create(getApplicationContext(), R.raw.a);

        // 存储在SD卡或其他文件路径下的媒体文件
        // mp.setDataSource("/sdcard/test.mp3");
        // 网络上的媒体文件
        // 例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");


    }

    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Log.i("MediaActivity","当前播放进度"+player.getCurrentPosition());
            Log.i("MediaActivity","总体播放进度"+player.getDuration());
            Log.i("MediaActivity","播放进度"+(int)((player.getCurrentPosition()*1.0f)/(player.getDuration()*1.0f)*100));

        }
    };

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_start://播放
                player.start();
                mTimer.schedule(timerTask, 0, 10);
                break;
            case R.id.btn_finsh://暂停
                player.pause();
                mTimer.cancel();
                break;
            case R.id.btn_drag://拖动到一半
                if(null!=player){
                    player.seekTo(player.getDuration()/2);
                }
                break;
            case R.id.btn_reset://重复
                if(null!=player){
                    player.seekTo(0);
                }
                break;
        }


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != player) {
            mTimer.cancel();
            player.release();//释放资源
        }
    }
}

SoundPool
使用如下

public class MainActivity extends Activity implements View.OnClickListener {
    private  SoundPool soundPool;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         soundPool = new SoundPool(12, 0,5);
        AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_start:
                soundPool.play(soundPool.load(this, R.raw.a, 1), 1,1, 0, 0, 1);
                 //参数:1、播放来源 2、当前音量 3、最大音量 4、优先级 5、重播次数 6、播放速度
                break;
        }
    }
}

总结

以上就是Android音频播放的两种方式,可根据总结项目的要求进行挑选。
Android音频播放讲解_第1张图片

你可能感兴趣的:(android,SoundPool,音频播放,MediaPlear)