[故障及解决]SoundPool没有声音
2015-11-09 15:06
204 查看
问题描述:
使用SoundPool类进行播放声音时,在手机上没有声音。问题代码:
/** * 声音播放 */ private void playSound() { SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); soundPool.load(this, R.raw.beep, 1); // 加载资源,返回1 soundPool.play(1, 1, 1, 0, 0, 1); // 播放,返回0 }
问题原因:
SoundPool池加载声音,在调用load方法的时候,是使用其他线程来加载资源的,所以上述代码在执行play方法的时候,资源还没有加载,故没有声音。修改方法,就是中间留出足够的时间来进行加载声音文件,或追加加载完成的监听器来监听是否完成(SoundPool.OnLoadCompleteListener类的方法onLoadComplete(SoundPool soundPool, int sampleId, int status) )。
正确代码:
因为声音文件很小,所以就在onCreate方法中加载文件,后面进行播放。private SoundPool soundPool; // 声音加载池 protected void onCreate(Bundle savedInstanceState) { // 门声音预加载 soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); soundPool.load(this, R.raw.beep, 1); } /** * 声音播放 */ private void playSound() { soundPool.play(1, 1, 1, 0, 0, 1); }
知识点延伸:
常用的播放类:
android中,同创进行声音播放的有MediaPlayer和SoundPool。MediaPlayer:常用来播放长一些的音频、视频和流媒体,每次仅能播放一个,有控制播放的各种方法。
SoundPool:常用来播放短促并且实时性高的音频,每次可以多个同时播放,比方说游戏中的爆破声。
SoundPool类的播放方法(部分):
以上述代码为例,进行分析。当然都有其他的重载的方法。SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
->
public SoundPool(int maxStream, int streamType, int srcQuality)
初期化一个声音池。
maxStream:最大可放10个音频文件。
streamType:为声音的类型。如上为系统声音,其他还有音乐,铃声等等。
srcQuality:转化质量,默认为0。目前理解为,播放时的声音保真程度。一般对于短促的声音,影响不大。
soundPool.load(this, R.raw.beep, 1);
->
public int load(Context context, int resId, int priority)
通过本apk中的资源加载音频。其他加载方式还有,从Asset对象加载、从FileDescriptor对象加载、从全文件路径名加载。
context:本context。
resId:资源ID。
priority:加载优先级,一般为1。
返回值为int,表示加载的第几个文件。从1开始累加。这个返回1。
soundPool.play(1, 1, 1, 0, 0, 1);
->
public int play(int soundID, float leftVolume, float rightVolume,int priority, int loop, float rate);
播放声音文件。
soundID:表示流中第几个文件,为load方法的返回值。和load方法配合使用,见过用map进行传递数据。(实际上我感觉没必要)
leftVolume:左音量,通常为1。
rightVolume:右音量,通常为1。
priority:优先度,通常为0。
loop:是否循环。0表示不循环,1以上表示循环次数。
rate:表示播放速率。0.5-2之间。0.5表示减慢50%,2表示加速播放。
相关文章推荐
- android 蓝牙BLE多连接
- 模块化架构之tomcat的jsp加载处理
- C++调用matlab计算
- MR实现--矩阵乘法
- linux MySql问题Access denied for user 'root'@'localhost' (using password:YES)
- c# webclient下载网页
- rabbitMq入门,整合spring
- UITableView左滑出现多个按钮
- UITableView 类似通讯录的索引
- 禁止uiscrollview垂直方向滚动,只允许水平方向滚动;或只允许垂直方向滚动
- 感悟现实人生真谛
- oracle session 相关优化
- 配置微信公众号使用js-sdk
- 文本处理命令系列――uniq
- MySQL优化--1亿条数据效率COUNT(*)
- Linux下屏幕截图的命令行方法
- Android性能优化典范(B2)
- 《小亚和小信》该睡了,小勉不能偷玩手机噢…
- 编写一个写字板初步了解Winform编程(一)——Winform程序结构
- PHPExcel导出excel