怎么在android中利用SoundPool播放音频

  介绍

怎么在android中利用SoundPool播放音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

SoundPool (android.media。SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件系统加载。与媒体播放器相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质,音量,播放比率等参数,支持通过ID对多个音频流进行管理。

1。SoundPool最大只能申请1 m的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。

2。SoundPool提供了暂停和停止方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。

3。SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100 ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。

在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool: 1。应用程序中的声效(按键提示音,消息等)2。游戏中密集而短暂的声音(如多个飞船同时爆炸)

<强> 1。相关方法介绍:

1)构造方法:

SoundPool (int, int streamType int maxStreams srcQuality)参数依次是:

①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。

②指定声音类型,流类型可以分为STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING, STREAM_MUSIC和STREAM_ALARM四种类型。在AudioManager中定义。

③指定声音品质(采样率变换质量),一般直接设置为0。

在低版本中可以用上述构造方法,而API 21(安卓5.0)后这个构造方法就过时了!而用到一个SoundPool。建筑的东东,我们要实例化SoundPool只需调用:

SoundPool.Builder  spb =, new  SoundPool.Builder ();   spb.setMaxStreams (10);   spb.setAudioAttributes (null);,,//转换音频格式   SoundPool sp = spb.build();   //创建SoundPool对象

要使用上述代码的话,TargetSDK版本要设置大于等于21哦!而且如果minSDK版本小于21 会出现下面的提醒:

怎么在android中利用SoundPool播放音频

2)常用方法介绍:

①加载声音资源:

  1. load(Context context, int resId, int priority)

  2. load(String path, int priority)

  3. load(FileDescriptor fd, long offset, long length, int priority)

  4. load(AssetFileDescriptor afd, int priority) 上述方法都会返回一个声音的ID,后面我们可以通过这个ID来播放指定的声音

参数介绍:

  1. context:上下文

  2. resId:资源id

  3. priority:没什么用的一个参数,建议设置为1,保持和未来的兼容性

  4. path:文件路径

  5. FileDescriptor:貌似是流吧,这个我也不知道

  6. AssetFileDescriptor:从asset目录读取某个资源文件,用法:

AssetFileDescriptor descriptor = assetManager.openFd("biaobiao.mp3");

②播放控制:

play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

参数依次是:

  1. soundID:Load()返回的声音ID号

  2. leftVolume:左声道音量设置

  3. rightVolume:右声道音量设置

  4. priority:指定播放声音的优先级,数值越高,优先级越大。

  5. loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数

  6. rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。

③资源释放:

怎么在android中利用SoundPool播放音频