ANDORID soundpool 播放无声音 sample 1 not ready
来源:互联网 发布:c 高性能编程 编辑:程序博客网 时间:2024/05/16 00:40
这个问题是因为资源还没有加在后就播放导致
在开发android软件中,经常需要播放多媒体音频文件,通常会采用MediaPlayer类来执行此类操作。但MediaPlayer类占用的资源比较多,对于游戏等应用而言,会带来性能上的降低。在Android中,专门提供了SoundPool类来执行此类音频播放,SoundPool类占用的CPU资源较少、反应较快。
解决方法一:
handler延迟加载
public static void startCameraKacha(Context c) {final SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);AudioManager mgr = (AudioManager) c.getSystemService(Context.AUDIO_SERVICE);float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);final float volume = streamVolumeCurrent / streamVolumeMax;final int id = soundPool.load(c, R.raw.kacha, 1);new Handler().postDelayed(new Runnable() {@Overridepublic void run() {soundPool.play(id, volume, volume, 1, 0, 1f);}}, 20);}
解决方法二:
加载完成回调
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { soundPool.play(sampleId, volume, volume, 1, 0, 1f); } });
SoundPool常见的一些问题:
SoundPool的用法就不再提了,网上资料多,就说说在实际应用中可能会遇到的一些奇葩的问题,这些问题应该是和底层实现上有关系。1、AudioFlinger could not create track, status: -12 SoundPool即音效池,在创建的时候 maxStream这个参数代表能够同时播放的最大音效数,这里切忌合理使用,写的太大后会报AudioFlinger could not create track, status: -12 。。。。一旦报了这个错,你就听不到声音了,呵呵。 2、256个音效 当调用load方法的时候实际就是把音效加载到了 SoundPool中,此时返回的streamId其实就是该音效在SoundPool中的Id,这个ID从0还是1来着(有点记不清了) 递增,不过要注意的是,不要超过 256 这个临界点。也就是说第257个声音加载进去后,调用play方法其实是播不出来的,说不定还会挤掉一些前面加载好的声音。这个256的限制通过查看SDK源码基本就能了解清楚,它底层就那么实现的,用一个类似堆栈来存。 3、unload方法和release方法 如果你音效多,也不要指望unload方法来清除掉一些音效后再load新的进去,虽然unload后音效卸载了,但是前面分给它在SoundPool里面的Id可没有释放掉,也就是说这个时候你load新的进去只会在后面继续累加,然后累加多了就超过256了,然后就就听不到声音,然后就没有然后了。要想彻底清掉前面的音效请使用release方法,它会连内存中占用的资源一起释放掉。 其他还有点什么呢,load需要一点点时间,load后不要马上unload,load ---play--unload的做法并不可取,不要load太大的音效,它只会申请1M的内存空间。SoundPool出错后通常会看到retuen的值是0。
0 0
- ANDORID soundpool 播放无声音 sample 1 not ready
- soundpool 播放无声音 sample 1 not ready
- soundpool 播放无声音: sample 1 not ready
- Android SoundPool 播放声音提示:sample 1 not ready错误的解决方法
- android播放声音时出现"sample 1 not READY"
- Android SoundPool sample 1 not ready错误解决方法
- Android里加载音频soundpool出现错误:Sample 1 not Ready解决方法
- SoundPool播放声音
- soundpool无法播放声音
- Android声音播放之SoundPool
- android 的soundpool播放声音
- android----使用SoundPool播放声音
- MediaPlayer与SoundPool播放声音
- Android播放声音SoundPool、MediaPlayer、AudioTrack
- Android soundPool 不能播放声音问题
- Android播放声音SoundPool、MediaPlayer、AudioTrack
- Android播放声音SoundPool、MediaPlayer、AudioTrack
- Ringtone,SoundPool,MediaPlayer之声音播放- Android
- linux虚拟内存和物理内存的理解
- 第11章CSS盒模型
- 反转二叉树----java实现
- Android应用如何做到多尺寸,多语言适配,为什么尺寸对了,表现却不对
- ANDORID soundpool 播放无声音 sample 1 not ready
- Android动态加载基础 ClassLoader工作机制
- 第12章 css布局模型
- 10 个你需要了解的 Linux 网络和监控命令:
- 例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。给定两个序列A和B,称序列Z是A和B的公共子序列,是指Z同是A和B的子序列。编写算法求一直两序列A和B的最长公共子序列。
- yum 下载 源码
- 大数乘法 - 大数作为字符串的C语言操作
- DIV+CSS+JS实现的可以随意拖动的网页布局
- Android开发值利用Intent进行put传值,setclass启动activity,并用get进行取值