4.手机播放音乐的常见问题
(1)对音乐媒体类型的支持
图 1是常见的音乐类型(wma类型)不支持的异常画面。
图 1音乐类型不支持警告
对于WTK模拟环境(笔者使用的是WTK2.5.2),似乎只支持wav、mid、au等类型的音乐媒体,当播放mp3、wma类型的音乐时就会抛出“不支持的内容类型”的异常。对于实机环境,厂商承诺支持的类型程序都可以支持。在Nokia 5310环境中,可以支持mp3、wma、mid、aac等主流音乐媒体类型以及其他Nokia自己定义的播放类型(例如nrt格式,Nokia自谱铃声)。
所谓的不支持某种类型的音乐实际上是指该环境下没有安装该类型的音乐文件的解码器(Decoder),当模拟器环境和实机环境安装的解码器不同时就会出现在模拟器环境下不支持的文件可以在实机上正常播放的情形。
(2)音乐播放器对象的创建方式
不使用输入流和音乐内容类型的方式来创建音乐播放器对象,而是通过文件的URI来自动创建。
使用文件输入流创建播放器对象存在制约。在模拟环境下调试发现,使用文件输入流创建播放的方式不适用较大的音乐文件,否则将抛出内存不足(“Out of Memory”)的异常。在手机实机环境下,往手机上安装大小超过一定限制的Jar文件时,将会得到一个“安装包过大而无法安装”的提示。该限制额度可能因各款手机的性能不同而存在一定差异,但该值明显小于一个通常mp3文件的大小(3~4兆字节)。
图 2显示了将一个文件大小约为1.2兆字节(其中包含一个音乐资源文件)的Jar文件安装到手机时遇到的错误提示。
图 2安装Jar文件的错误提示
使用输入流创建音乐播放器对象适用于文件大小较小的音乐文件,这也是J2ME教程中常用的通过Class类的getResourceAsStream的方法在资源中获取文件流来创建播放器对象的方式。
使用文件输入流来创建播放器对象存在一次性将媒体文件进行载入的动作,当媒体文件较大时,就容易出现内存无法装载文件内容,而抛出内存不足的异常。而使用URI方式来创建播放器对象并不存在一次性载入文件的动作,而是按照媒体文件的时间轴来“源源不断”地分片读取文件内容,给内存造成的压力也就小得多。