首页 > 代码库 > SoundPool在实际应用中可能会遇到的一些奇葩的问题

SoundPool在实际应用中可能会遇到的一些奇葩的问题

SoundPool在实际应用中可能会遇到的一些奇葩的问题:

1、AudioFlingercould not  create track, status:-12 

        SoundPool在创建的maxStream这个参数代表能够同时播放的最大音效数,这里切忌合理使用,写的太大后会报AudioFlingercould 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。

SoundPool在实际应用中可能会遇到的一些奇葩的问题