BeatBox项目总结——第十九章

SoundPool能加载一批声音资源到内存中,并支持同时播放多个音频文件。

创建 SoundPool

Lollipop引入了新的方式创建 SoundPool :使用 SoundPool.Builder 。不过,为了兼容API 16最低级别,只能选择使用SoundPool(int, int, int)这个老构造方法了。

  1. 第一个参数指定同时播放多少个音频。这里指定了5个。在播放5个音频时,如果尝试再播放第6个, SoundPool 会停止播放原来的音频。
  2. 第二个参数确定音频流类型。Android有很多不同的音频流,它们都有各自独立的音量控制选项。这就是调低音乐音量,闹钟音量却不受影响的原因。打开文档,查看 AudioManager 类的AUDIO_* 常量,还可以看到其他控制选项。 STREAM_MUSIC 使用的是同音乐和游戏一样的音量控制。
  3. 最后一个参数指定采样率转换品质。参考文档说这个参数不起作用,所以这里传入0值。

加载音频文件

对于 SoundPool,加载音频文件时在播放前必须预先加载音频。SoundPool加载的音频文件都有自己的Integer类型ID。所以要在Sound类中添加mSoundId实例变量,并添加相应的Getter 和 Setter 方法管理这些ID。

播放音频

调用SoundPool.play(int, float, float, int, int, float)方法播放音频。
参数依次是:音频ID、左音量、右音量、优先级(无效)、是否循环以及播放速率。我们需要最大音量和常速播放,所以传入值1.0。是否循环参数传入0值,代表不循环。如果想无限循环,可以传入-1。

你可能感兴趣的:(BeatBox项目总结——第十九章)