学习情境5音频与视频处理_第1页
学习情境5音频与视频处理_第2页
学习情境5音频与视频处理_第3页
学习情境5音频与视频处理_第4页
学习情境5音频与视频处理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习情境5音频与视频处理,能力目标,能熟练地运用利用管理器(Manager)打开一个音频文件;使用播放器(Player)播放一个音频文件;掌握在游戏中“开”、“关”声音的方法;掌握背景音乐之间的切换方法。学会使用播放器(Player)构造一个音量控制器(VolumeControl);能熟练地使用音量控制器(VolumeControl)控制声音的大小与设置静音;能熟练的使用管理器(Manager)、播放器(Player)打开一个视频文件;能熟练掌握运用播放器(Player)构造一个视频控制器(VideoControl);能熟练掌握使用视频控制器(VideoControl)设置视频的显示范围和显示属性;,认知目标,了解管理器(Manager)、播放器(Player)、音量控制器(VolumeControl)、视频控制器(VideoControl)等之间的结构关系;理解背景音乐和音效对于一款游戏的重要性;识记播放器(Player)的各种方法;理解背景音乐和音效数据在游戏中的加载位置;识记独占式播放和线程播放的方法和利弊;理解释放资源的重要性;识记系统能够打开的媒体类型。掌握视频播放器中的常用方法;了解移动设备可以打开的媒体类型;了解视频触发事件。,5.1学习情境描述,在玩家眼中,好的游戏总是有声有色、丰富多彩。离开了生动的音效,游戏的体验就会大打折扣。在一款游戏中,背景音乐通常随着场景的变换而变换,比如:菜单界面时会有一个起始的背景音乐,进入游戏后,又会有一个根据游戏情节设计的背景音乐。在RPG游戏中,还会随着人物所处场景的不同,设计几种不同的背景音乐。除了一直播放着的背景音乐,游戏中可能还会有碰撞、爆炸、暂停、继续、胜利、失败等系列的短音出现。在游戏过程中,还可以根据需要调节音量,或者设置静音。但是对于手机来说,存储空间是非常宝贵的,所以要谨慎使用视频。但是,随着手机存储空间的不断扩大(例如现在的存储卡已经达到32G以上空间),手机CPU速度不断提高,手机内存的不断扩容,相信手机游戏中的视频会得到相应的发展空间。本学习情境分为二个学习单元来完成。单元一,音效设计;单元二,播放视频。,5.2音效设计,从本学习单元开始,将进入一个丰富多彩的有声世界。在本学习单元中,首先,通过简单地播放一段音效,来学习播放器的使用;然后,通过对音效开和关的控制,了解控制播放器开、关的方法;第三,实现音量的调节和静音的设置;第四,实现多个背景音乐之间的切换;最后,在背景音乐的基础之上,为游戏加入各种提示短音效果。,5.2.2任务一:播放音效,知识准备:认识MediaAPI,利用MediaAPI接口,可以为游戏和其他应用程序添加声音效果。MediaAPI接口由两个包组成,分别为javax.microedition.media包javax.microedition.media.control包。MediaAPI接口体系中主要由数据源(DataSource)、管理器(Manager)、播放器(Player)和控制器(Control)四个部分构成。,其中,Manager类是MediaAPI接口体系中最重要的类,用于创建各种不同类型的Player对象。Player接口用来播放由DataSource提供的各种格式的多媒体内容。Control接口用来协助Player接口控制音调和音量,有两个子接口,分别为ToneControl接口(控制音调)和VolumeControl接口(控制音量)。,任务准备,(1)新建MIDlet工程,工程名为“Ch5_Unit1”。(2)将第4章课后实训“5.综合调试”后成果,导入工程。(3)在工程中添加一个AudioPlayer类,在该类中将实现音效播放的基本功能。(4)将相关音效资源文件拷贝到工程的res文件夹下。,小提示:各人综合调试后,类的个数或者类名,可能会有所不同。但本教材后面的任务,都基于上面这几个类进一步展开,请注意结合自己的成果来完成后面的任务。,实现过程,(1)打开AudioPlayer类,实现如下步骤:声明播放器对象自定义播放音效的方法(2)打开StartCanvas类,添加音效开启提示界面。步骤如下:声明AudioPlayer类对象声明一个音效开启提示界面的状态值,并修改界面状态变量的值为该状态值。自定义绘制音效开启提示界面的方法。在绘制屏幕的paint()方法中,添加对绘制音效开启提示界面方法的调用。在响应键盘的keyPressed()方法中,添加对音效开启提示界面“打开”按钮的响应。(3)运行测试,要点提示:获取音频文件,(2)从URL地址获取publicstaticPlayercreatePlayer(Stringlocator)参数说明:locator:URL字符串。格式为:例如:PlayeraudioPlayer=Manager.createPlayer(“,知识提炼:播放器状态及状态的转换,(1)播放器状态播放器(Player)从被创建到停止播放,整个生命周期共经历了五个状态。UNREALIZED:播放器(Player)的起始状态,此时播放器(Player)未获得任何所需资源的信息。REALIZED:已获得所需资源信息,但不一定获得硬件系统资源。PREFETCHED:获取了所有资源,为播放媒体数据做好准备。STARTED:播放器(Player)处于运行状态。CLOSED:播放器(Player)释放所占用的所有资源,不能被重新使用。,(2)播放器状态的转换Player类上定义了一组相应的方法来控制播放器在不同状态之间转换。realize():获取播放信息,但是并不获取播放资源。prefetch():获取稀有资源,比如声音设备,尽量减少播放延时。start():开始播放声音。stop():停止播放声音。deallocate方法:释放被其占用的稀有资源,比如声音设备。close()方法:关闭播放器并释放资源。,5.2.3任务二:实现音效的开关,在任务一的基础之上继续如下实现过程。(1)在AudioPlayer类中,书写代码,实现如下功能:声明音效开关变量自定义获取当前音效开关的方法自定义设置音效开关的方法自定义关闭播放器的方法(2)在StartCanvas类中,书写代码,完成如下功能:在keyPressed()方法中,修改音效提示界面的按钮响应。在菜单界面的按键处理方法中,添加对菜单项“音乐开关”的响应代码。(3)运行测试,要点提示:音效开关,在一款手机游戏中,如果存在多个需要播放的音效,最好是一个音效对应一个播放器。比如,在任务四中,将实现两段背景音乐之间的切换。当更换音效资源时,需要清理声音设备后才能加载新的音效资源。Java有垃圾自动回收机制,但不是实时回收,系统在稍有空闲的时候才实施垃圾的回收。因此如果一个播放器关闭后,立即重新启动该播放器去播放另一段音乐,就会出现两段音乐同时播放的现象。除非前一段音乐已经播放完毕。更进一步的问题是,如果在播放背景音乐的同时,又要播放爆炸、碰撞等短音效果,使用同一个播放器就很难达到理想的效果。因此,在一款手机游戏中,可以存在多个播放器,实现对不同音效的加载、播放和关闭。,对于这些播放器的开、关需要有一个统一的管理。使用一个开关变量来进行控制,是一个比较理想的解决方法。比如,在本任务中,首先,声明switchAudio变量作为播放器的开关变量,然后,自定义方法getSwitchAudio()和setSwitchAudio(),实现对switchAudio开关变量值的获取和设置。所有播放器的开、关都根据switchAudio变量的值来决定。这样在程序运行中,就不会出现刚把背景音乐关闭,却又突然响起爆炸声音的尴尬。,5.2.4任务三:控制音量、设置静音,(1)在AudioPlayer类中,书写代码,实现如下功能:声明控制音量的对象自定义调节音量、设置静音的方法(2)在StartCanvas类的keyPressed()方法中,添加对数字键4、5、6的响应代码,设置数字键4减小音量、数字键6增加音量、数字键5设置静音。(3)运行测试,小提示:关闭音效和设置静音是两个不同的概念。关闭音效的实质是关闭播放器,而静音状态下,播放器是打开的。,知识提炼,VolumeControl接口上共定义了四个用于控制播放器音量的方法。(1)设置音量大小语法格式:publicintsetLevel(intlevel)参数:level的取值范围0.100,0代表静音。(2)获取当前音量值语法格式:publicintgetLevel()说明:如果播放器处于REALIZED状态,则返回-1。(3)设置静音语法格式:publicvoidsetMute(booleanmute)参数:mute取值为true表示静音,false表示不静音。(4)检测是否静音语法格式:publicbooleanisMuted(),在任务三的基础之上,继续如下实现过程。(1)在AudioPlayer类中,书写代码,实现如下功能:添加变量声明自定义方法,通过两个播放器,分别控制两段背景音乐的加载、播放和关闭。(2)在StartCanvas类中,书写代码,完成如下功能:在keyPressed()方法中,修改音效提示界面的按钮响应。在菜单界面的按键处理方法中,修改对菜单项“音乐开关”的响应代码。,5.2.5任务四:实现菜单背景音乐和游戏背景音乐之间的切换,在绘制进度条的方法的最后,即进入游戏界面的语句后面,添加背景音乐切换的语句。(3)在GameBody类中,书写代码,完成如下功能:声明变量AudioPlayeraudioPlayer=newAudioPlayer();在keyPressed()方法中,修改对“返回”按钮的响应代码。即在返回菜单界面的语句后面,添加对背景音乐切换的代码。(4)运行测试,要点提示,如果要对菜单背景音乐和游戏背景音乐分别进行音量的控制和静音的设置,可以重载adjustVolume()方法,参考代码如下:publicstaticvoidadjustVolume(intindex,intincrement,booleanmute)audioPlayerVolumeControlindex=(VolumeControl)audioPlayerindex.getControl(VolumeControl);if(audioPlayerVolumeControlindex!=null)if(!mute)/如果没有静音audioPlayerVolumeControlindex.setLevel(audioPlayerVolumeControlindex.getLevel()+increment);/调整音量elseaudioPlayerVolumeControlindex.setMute(!audioPlayerVolumeControlindex.isMuted();/设置乒乓效果,在静音和非静音间切换,(1)在AudioPlayer类中,书写代码,完成如下功能:自定义方法audioLoad(),实现对音效资源的加载。自定义方法audioPlay(),实现对音效的播放。(2)在GameBody类中,书写代码,完成如下功能:在构造方法中调用audioLoad()方法,完成对爆炸短音资源的加载。audioPlayer.audioLoad(explosion.wav,audio/x-wav);在drawBullet()方法的碰撞检测过程中,如果发生碰撞,则调用audioPlay()方法,实现爆炸短音的播放。在keyPressed()方法的“返回”按钮相应代码中,调用audioClose()方法,关闭并回收短音播放器。(3)运行测试,5.2.6延伸任务:为游戏加入爆炸等提示短音,要点提示,在游戏中,除了一直在播放的背景音乐外,还会存在与游戏效果相对应的各种提示短音。比如,本任务中的爆炸音效,还有当出现新对象时、对象间碰撞时、胜利或失败后的各种提示音。背景音乐和提示短音的播放时间和位置是不同的。背景音乐是一开始就播放,而提示短音是在发生某种事件后才播放的。所以在添加音效时一定要注意音效播放的位置。背景音乐无限次播放,而提示短音,仅播放一次,但可能需要多次播放。如果反复多次加载短音,将严重浪费系统资源,可能会使正在运行的游戏出现短暂的停顿,也即通常所说的“卡”,这将严重影响游戏的娱乐性。因此,在本任务中,将短音音效资源的加载和播放进行了功能分离,在构造方法中,一次加载,在碰撞检测中,多次播放。,知识提炼,5.3播放视频,任务准备,(1)新建MIDlet工程,工程名为“Ch5_Unit2”。(2)将工程“Ch5_Unit1”中的类文件拷贝到该工程中。(3)在工程中添加一个继承自GameCanvas类的VideoPlayer类,在该类中将实现视频播放的基本功能。(4)将相关视频资源文件拷贝到工程的res文件夹下。,实现过程,(1)打开VideoPlayer类,实现如下步骤:声明对象在构造方法中实现视频的播放功能(2)打开PlaneMIDlet类,修改startApp()方法中的语句,使其显示VideoPlayer类。(3)运行测试,小提示:在代码书写过程中,请注意根据需要导入相关的包和类。,要点提示,视频播放其实和音效播放采用的方式相同,都是由管理器通过指定的数据源来创建播放器对象,然后,通过播放器对象获得相关的视频控制器,实现在窗体或者画布中显示视频的功能。视频控制器主要的接口是VideoControl接口。可以通过播放器对象调用getControl()方法获取与之相关的视频控制器对象。在调用start()方法开始播放视频前,首先要调用VideoControl接口上的initDisplayMode()方法指定打开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论