MediaPlayer与SoundPooly优劣分析:
加载长音乐文件生成数据ID,可能会出现错误,错误原因可能是:利用SoundPool播放音乐文件,首先都会对需要播放的音乐文件通过load()函数进行加载,并且生成对应的音乐数据ID;其生成的数据ID(int值)就是整个音乐文件的所有数据,而假设某个长音乐文件长度有42秒,其中的音乐流数据文件也就远远超过了int 的最大值,所以当程序加载此音乐文件生成对应的数据ID时,会报超过最大值的异常。虽然出现这种异常,但还不会导致整个程序崩溃,只是当再播放长的音乐文件时,会发现播放的时间很短,明显感觉到像被剪切了一样。这也证实了SoundPool只能存放1M大小的音乐数据。
- 使用MediaPlayer的优缺点:
1):缺点:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。使用MediaPlayer进行播放音乐时,尤其是在快速连续播放音乐(比如连续猛点按钮)时,会非常明显的出现1~3秒左右的延迟,可以使用MediaPlayer.seekTo()这个方法来解决。
2):优点:支持很大的音乐文件播放,而且不会同SoundPool一样需要加载准备一段时间,MediaPlayer能及时播放音乐。 - 使用SoundPool的优缺点:
1):缺点:最大只能申请1M的内存空间,意味着用户只能使用一些很短的声音片段,而不能用它来播放歌曲或游戏背景音乐。(建议用来播放游戏音效)。SoundPool提供了pause和stop方法,但建议最好不要轻易使用这些方法,因为使用它们可能会导致程序莫名其妙的终止。使用SoundPool时音频格式建议使用OGG格式。如果使用WAV格式的音频文件,在播放的情况下有时可能会出现异常关闭的情况。在使用SoundPool播放音乐文件的时候,如果在构造中就调用函数进行播放音乐,其效果则是没有声音!不是因为函数没有执行,而是SoundPool需要加载准备时间。如果这个准备时间也很短,就不会影响使用,只是程序一运行播放刚开始会没有声音而已。
2):优点:支持多个音乐文件同时播放。在Android游戏开发中,游戏背景音乐使用MediaPlayer肯定比使用SoundPool要合适,而游戏音效的播放采用SoundPool则更好,毕竟游戏中肯定会出现多个音效同时进行播放的情况。