安卓使用SoundPool音频池预加载音频,实现多音频,小音频的快速多音轨播放

来源:互联网 发布:福建预算软件 编辑:程序博客网 时间:2024/04/29 17:13

全栈工程师开发手册 (作者:栾鹏)

安卓教程全解

安卓使用SoundPool音频池预加载音频,实现多音频,小音频的快速多音轨播放。

你可以把SoundPool理解成一个多音频的音频播放器,可以分别控制每个音轨上的音频同时播放。

主要可以对音轨进行如下操作。

play(track3, 1, 1, 0, 2, 1);   //参数:音轨,左声道音量(倍数),右声道音量(倍数),优先级,次数(-1表示无数次),速率(倍速)setLoop(track1, 2);   //设置循环播放次数setRate(track2, 1);  //设置播放速率setVolume(track1, 1, 1);  //设置音量stop(track1);  //停止pause(track2);  //暂停resume(track2); //恢复

在activity的窗口恢复事件中加开始预加载音频,在暂停事件中视频这些音频,避免内存占用。

 SoundPool sp;  @Override  protected void onResume() {    super.onResume();    //创建一个Sound Pool    int maxStreams = 10;    sp = new SoundPool(maxStreams, AudioManager.STREAM_MUSIC, 0);    //load方法可以从asset中,包资源中,文件路径,file descriptor中加载音频    final int track1 = sp.load(this, R.raw.music1, 0);   //返回每个音频流的id    final int track2 = sp.load(this, R.raw.music2, 0);    final int track3 = sp.load(this, R.raw.music3, 0);    Button track1Button = (Button)findViewById(R.id.soundpool_buttonTrack1);    Button track2Button = (Button)findViewById(R.id.soundpool_buttonTrack2);    Button track3Button = (Button)findViewById(R.id.soundpool_buttonTrack3);    Button stopButton = (Button)findViewById(R.id.soundpool_buttonStop);    Button chipmunkButton = (Button)findViewById(R.id.soundpool_buttonChipmunk);     //播放第一个音轨的音频    track1Button.setOnClickListener(new OnClickListener() {      public void onClick(View v) {        sp.play(track1, 1, 1, 0, -1, 1);      }    });    //播放第二个音轨的音频    track2Button.setOnClickListener(new OnClickListener() {      public void onClick(View v) {        sp.play(track2, 1, 1, 0, 0, 1);         }    });    //播放第三个音轨的音频    track3Button.setOnClickListener(new OnClickListener() {      public void onClick(View v) {        sp.play(track3, 1, 1, 0, 0, 0.5f);      }    });    //停止所有音轨的音频播放    stopButton.setOnClickListener(new OnClickListener() {      public void onClick(View v) {        sp.stop(track1);        sp.stop(track2);        sp.stop(track3);      }    });    //音频加速    chipmunkButton.setOnClickListener(new OnClickListener() {      public void onClick(View v) {        sp.setRate(track1, 2f);      }    });  }  @Override  protected void onPause() {    super.onPause();     sp.release();   //不再需要时,释放音频资源,释放后必须重新load  }