SoundPool一般用来 播放密集,急促而又短暂的音效
构造方式
// 普通构造方式(已过时)
SoundPool(int maxStreams, int streamType, int srcQuality) 参数依次是:
参数一:指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。
参数二:指定声音类型,流类型可以分为STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING,STREAM_MUSIC 和 STREAM_ALARM四种类型。在AudioManager中定义。
参数三:指定声音品质(采样率变换质量),一般直接设置为0!
// API 21(Android 5.0)构造方式
SoundPool.Builder spb = new SoundPool.Builder();
spb.setMaxStreams(10);
spb.setAudioAttributes(null); //转换音频格式
SoundPool sp = spb.build(); //创建SoundPool对象
加载声音方法
// 上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音。一般有多个声音可以用HashMap等集合存放。
load(Context context, int resId, int priority)
load(String path, int priority)
load(FileDescriptor fd, long offset, long length, int priority)
// AssetFileDescriptor .AssetFileDescriptor (), AssetFileDescriptor .getStartOffset(), afd.getLength(),其实就是方法三
load(AssetFileDescriptor afd, int priority)
context:上下文
resId:资源id
priority:没什么用的一个参数,建议设置为1,保持和未来的兼容性
path:文件路径
FileDescriptor:貌似是流吧,这个我也不知道
AssetFileDescriptor:从asset目录读取某个资源文件,用法: AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");
播放控制
play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
soundID:Load()返回的声音ID号
leftVolume:左声道音量设置
rightVolume:右声道音量设置
priority:指定播放声音的优先级,数值越高,优先级越大。
loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数
rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。
释放资源
可以调用release()方法释放所有SoundPool对象占据的内存和资源,当然也可以根据声音 ID来释放!
网友评论