Android音效SoundPool问题:soundpool 1 not retry


今天开发中要用到SoundPool,遇到soundpool 1 not retry无法播放声音,MediaPlay可以


后来经过一番研究,发现:

出现soundpool 1 not retry问题的代码,无法播放声音

mgr = (AudioManager) MainActivity.this.getSystemService(Context.AUDIO_SERVICE);
//初始化soundPool 对象,第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(1, soundPool.load(MainActivity.this, R.raw.or, 1));
soundPoolMap.put(2, soundPool.load(MainActivity.this, R.raw.sd, 1));
volume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);

//loop:循环中的循环模式(0 =没有循环,-1 =无限循环)
soundPool.play(soundPoolMap.get(1), volume, volume, 1, 0, 1f);

问题解决:这里的问题是soundPool.load(MainActivity.this, R.raw.or, 1),即load()声音文件后,立马play()播放,系统还没有准备好声音文件,所以才出了问题

这里需要你:先在其他地方load()好了,比如在构造函数里先load()好了,在需要播放的地方再调用play(),也就是要过一段时间再调用play()

这样写就没问题

mgr = (AudioManager) MainActivity.this.getSystemService(Context.AUDIO_SERVICE);
//初始化soundPool 对象,第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(1, soundPool.load(MainActivity.this, R.raw.or, 1));
soundPoolMap.put(2, soundPool.load(MainActivity.this, R.raw.sd, 1));
volume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

soundPool.play(soundPoolMap.get(1), volume, volume, 1, 0, 1f);

更多相关文章

  1. android 自定义组合控件并实现点击事件
  2. 让Android程序自动打开软键盘
  3. Android之ViewPager+Fragment实现页面点击切换和手势滑动
  4. Dalvik虚拟机启动全程解析
  5. Android中利用HttpURLConnection发送Post请求并添加参数的写法
  6. Android(安卓)Kotlin入门-属性和字段
  7. Android(安卓)代码中动态为RadioGroup添加RadioButton
  8. android浏览器研究-APP层UI布局
  9. android与C# WebService基于ksoap通信(Android篇)

随机推荐

  1. android消息机制
  2. Android客户端与Tomcat服务器通信实现登
  3. 【Android】Webview与JavaScript交互介绍
  4. android之字体阴影效果
  5. [直播技术实践]较为完整的开源直播框架[
  6. Android ***测试学习手册(二)准备实验环境
  7. 关于 Android 程序员最近的状况
  8. Android Linux 内核介绍
  9. Android Market新增运营商结算方式
  10. 解析Failure [INSTALL_FAILED_CONFLICTIN