《手机音效开发》PPT课件.ppt

上传人:牧羊曲112 文档编号:5513955 上传时间:2023-07-15 格式:PPT 页数:29 大小:213.99KB
返回 下载 相关 举报
《手机音效开发》PPT课件.ppt_第1页
第1页 / 共29页
《手机音效开发》PPT课件.ppt_第2页
第2页 / 共29页
《手机音效开发》PPT课件.ppt_第3页
第3页 / 共29页
《手机音效开发》PPT课件.ppt_第4页
第4页 / 共29页
《手机音效开发》PPT课件.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《《手机音效开发》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《手机音效开发》PPT课件.ppt(29页珍藏版)》请在三一办公上搜索。

1、J2ME编程入门之手机音效开发,现在能播放音乐的手机已经是很常见的了,同时手机游戏也需要声音来增加动感效果,所以手机音效也成为了开发热点。J2ME针对多种媒体格式,提供了一套播放接口,那就是:MMAPI(Mobile Media API)。,1 MMAPI体系结构 现在多媒体的格式很多,要顺利地播放这些不同格式的音乐,一种比较好的方式就是把这些不同格式的数据都转换为统一的格式,然后统一使用一个播放器接口类来播放。,在MMAPI中,首先从数据源(如一个文件、一个捕获装置或一个流式服务)上读取媒体数据内容后,然后传输给专门的处理程序进行处理。,处理过程主要是由DataSource类和Player类

2、完成。DataSource类的作用就是读取和转换多媒体数据,Player类的作用就是播放这类数据。,然后提供一系列的播放、暂停、停止等播放器相关功能,DataSource类和Player类的工作过程如图所示。,数据流图,2 Player接口 要使用MMAPI进行音效开发,首先需要导入相关的开发包,例如:import javax.microedition.media.*,使用Player接口来播放音频的步骤,1、通过Manager.createPlayer()方法创 建一个播放器2、调用prefetch()方法开始获取音频并 减少滞后3、调用start()方法开始回放4、如果需要的话,调用sto

3、p()方法停 止回放5、调用close()方法关闭播放器,1UNREALIZED 状态 2REALIZED状态 3PREFETCHED状态 4STARTED状态 5CLOSED状态,播放器的五种状态,状态之间的转换,1、播放器开始处于UNREALIZED状态;2、当播放器具备了开始获取媒体资源所需的 一切的时候,播放器进入REALIZED状态;3、当获取到媒体资源并准备回放的时候,播 放器进入了PREFETCHED状态;4、当回放开始的时候,播放器进入了STARTED 状态;,状态之间的转换,5、当回放结束的时候,播放器返回到 PREFETCHED状态;6、当播放器关闭的时候,播放器进入CLO

4、SED 状态。,状态转换图,player接口中的一些重要方法,realize()实现没有获取媒体资源的播放器(通常不需要显式调用);prefetch()获取媒体资源以便减小回放滞后(调用它来首次初始化播放器);getState()获取播放器状态;setLoopCount()设置播放声音的循环次数(必须在调用start()之前调用);start()开始播放声音;,stop()停止播放声音;getDuration()获取声音持续时间(单位:毫秒);getMediaTime()获取当前的媒体时间(单位:毫秒);setMediaTime()设置当前的媒体时间(单位:毫秒);close()关闭播放器。,

5、3 在手机游戏中播放声波声音,在手机中播放声波声音并不难,你只需要知道声音来自于哪里即可。更具体地说,声波文件是存储在一个MIDlet的JAR文件中,还是通过网络可以访问到。显然,通过MIDlet的JAR文件来访问一个声波文件要高效很多,因此,这也是大多数手机游戏所采用的方式。,从一个JAR文件播放声波,要通过一个MIDlet的JAR文件访问声波声音,你必须先确保在构建这个MIdlet的时候声波文件添加到了JAR文件中。只要你把声波文件放置到主MIDlet目录下的res文件夹中,当你在kToolbar开发工具中编译MIDlet的时候,声波文件就会自动地包含到JAR文件中。之后简单的几行代码就可

6、以播放这个声音了。,示例,try Player gamePlayer;InputStream is=getClass().getResourceAsStream(game.wav);/创建一个基于声波文件的输入流,作为创建播放器的基础 gamePlayer=Manager.createPlayer(is,audio/X-wav);gamePlayer.prefetch();gamePlayer.start();catch(IOException ioe)catch(MediaException e),当声波文件的名字被传递给getResourceAsStream()方法的时候,这个方法在get

7、Class()方法所访问的对象的运行时调用。尽管获得输入流需要一点技巧,但是当你得到以后,你只需要把它和声波声音的MIME类型一起传递给Manager.createPlayer()方法就可以了。,为了确保声音已经准备好以最小的滞后播放,我们需要调用prefetch()方法。最后,调用start()方法来开始播放声波声音。由于这些方法中都可能抛出异常,所有的这些调用都要包含在异常处理子句中。当需要重复播放声音时,可以选择多次调用start()方法。可是,当一个声音仍在播放的时候调用start()方法并不能重新开始播放声音。,要重新开始播放声音,必须调用setMediaTime()方法并把0传递给

8、该方法,这表示你希望把媒体时间设置到声音的开始处:gamePlayer.setMediaTime(0);,对于声音的媒体时间,你可以使用getDuration()和getMediaTime()方法来确定声音已经播放了多少。这两个方法都会以毫秒为单位返回一个时间量:getDuration()方法告诉你一个声音的总的持续时间,而getMediaTime()方法则告诉你声音已经播放了多少。,在前面的方法中,还有一个setLoopCount()方法,这是用来设置音乐循环次数的方法,也是一个很重要的方法。缺省情况下,循环计数是1,也就是音乐只播放一次。在很多情况下,我们希望游戏的音乐能够无限循环,这时候

9、对于这个方法的调用就很关键了。实现方法是:gamePlayer.setLoopCount(-1);/传递-1这个值就能使音乐无限循环下去。要注意,这个方法必须在start()方法调用前调用!,之后,调用close()方法就能关闭播放器。这就是成功地播放存储在一个JAR文件中的声波声音所需要的所有工作。这也是大多数手机游戏推荐的方法,因为这样声音可以相当快速地载入而没有滞后。,播放来自一个URL的声波,在一些情况下,你可能需要通过一个网络连接来播放声波声音。例如,也许你的游戏要播放动态生成的声音,而这些声音必须通过一个网络服务器获得。这时,播放器需要从一个URL中获得声波。,示例,try Pla

10、yer gamePlayer;gamePlayer=Manager.createPlayer(http:/ser/game.wav);gamePlayer.prefetch();gamePlayer.start();catch(IOException ioe)catch(MediaException e),很明显,这段代码要更为简单,因为不需要为声波文件创建一个输入流。但是,使用这种方法载入声音可能会有明显地滞后。当然,这一切取决于声波文件的大小以及网络连接的速度。,当然,手机所支持的音频不只声波一种,比如还有MIDI、MP3音乐等,我们在播放这些声音时,只需将Manager.createPlayer(is,audio/*);中的*部分进行替换即可。例如:midiMIDI音乐 mpegMP3音频,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号