ANDORID soundpool 播放无声音 sample 1 not ready

这个问题是因为资源还没有加在后就播放导致

在开发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() {
@Override
public 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。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误信息表示您正在尝试使用未激活的应用程序进行Android Facebook登录。为了解决这个问题,您可以按照以下步骤操作: 1. 检查应用程序状态:确保您的应用程序已经在Facebook开发者平台上激活。您需要在开发者帐户上登录,并确保设置了正确的应用程序ID和密钥。 2. 检查应用程序权限:检查您的应用程序是否已被授予所需的权限,在Facebook开发者平台上进行设置。确保您已正确设置了登录权限,以便用户可以使用它们的Facebook凭据进行登录。 3. 检查应用程序密钥散列值:应用程序的密钥散列值是Android应用程序与Facebook应用程序之间的安全连接。确保您已正确生成和配置应用程序密钥散列值。您可以从Facebook开发者平台上的应用程序设置中获取这个值。 4. 检查应用程序包名签名:检查您的应用程序包名和签名是否与在Facebook开发者平台上注册的应用程序设置相匹配。如果它们不匹配,您将无法使用该应用程序进行登录。 5. 清除缓存和数据:如果您之前尝试过登录,但遇到问题,可以尝试清除应用程序的缓存和数据。您可以在Android设置中的应用程序管理器中找到该应用程序,并选择清除缓存和数据选项。 通过检查和调整上述步骤,您应该能够解决Android Facebook登录时出现的"app not active"错误。如果问题仍然存在,您可以尝试重新安装应用程序或联系Facebook开发者支持寻求进一步的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值