利用soundPool播放简短的音效是非常有用的,优点是它比mediaPlayer占用资源少,还可以同时播放多个音效等但是缺点就是对于音效的大小和持续时间等都有比较高的要求,据传音效的大小不能超过1M,持续时间不超过5秒才能播放,但经过实际测试,其实超过1M也没什么,但是不能超太多,超太多的话,播放会有问题,一般表现为没有声音,或者有时有声音有时没有,音效持续时间也可以超过5秒,测试时发现持续时间在10秒左右都能进行播放,但是持续时间很长的话,就会发生和上面类似的问题,所以还是要保证音效尽量小,持续时间尽量短为好.
以上是播放音效没声音的一种可能情况,其实音效没声音还有很多情况,
1,不支持的音效格式(官方建议音效的格式为ogg格式,其他格式比如MP3格式,wav格式等一样可以支持,其他格式暂不清楚)
2,文件放错位置,音效文件一般都放在asset目录下或者raw目录下,随代码一起打包成apk文件,下面会有代码示例,演示如何播放这两个文件夹里的音效
3,没有实现onLoadComplete()监听,(这种情况是非常常见的),如果想要什么时候用到音效什么时候加载音效的话,一般情况下是不会播放出音效的,因为soundPool的load()方法加载音效也是需要时间的,如果没有实现onLoadComplete()监听,而直接进行播放,那么音效还没加载完,就已经执行了播放方法,这样肯定没有声音,如果打印出soundPool.play()的返回值,那么返回值肯定是0,表示播放失败,如果播放成功,则返回对应的音效id
4,还有一种情况就是你的手机或者模拟器把音量关了,所以听不到声音,这种情况只要把声音调大就行了.
下面是演示从raw目录和asset目录获取音效的实例代码;
package com.rqq.soundpooldemo;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
impo