java 游戏开发学习情境5音乐播放器设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Java游戏开发学习情境5:音乐播放器设计08游戏3-2目标与任务目标:◦为游戏添加音效,能够用Java加载、播放游戏中的声音文件,并按要求控制播放。任务:◦用Java设计一个播放多种声音的程序。为电梯模拟游戏添加背景音乐。学习过程项目核心功能扩展应用升级教师学生提供:声音播放案例模仿完成:声音播放案例提供:多个声音列表播放关键代码协作完成:多个声音列表播放提供:电梯游戏的声音和界面协作完成:电梯游戏的音效处理Java支持的音频文件格式AU文件格式WAV文件格式AIFF文件格式MIDI文件格式声音文件有很多格式AU声音文件这是Java语言最早的声音格式,扩展名为AU或SND,适用于短的声音文件。AU类型文件使用的三种典型音频格式为:8位单声道采样频率为8KHz的μ-law类型、8位线性类型以及16位线性类型。WAV声音文件扩展名为WAV,由Microsoft和IBM共同开发,Windows9X系统都支持此格式。AIFF声音文件扩展名为AIF或IEF,是Macintosh公司和SGI公司所共用的标准音频文件格式。MIDI声音文件扩展名为MID,是音乐制造业所认可的标准,主要用于控制诸如合成器和声卡之类的设备。Java2平台支持三种类型的MIDI文件公式,它们分别为MIDI文件类型O、MIDI文件类型1以及RMF。与声音处理有关的包和类java.applet.Appletjavax.sound.midijavax.sound.midi.spijavax.sound.sampledjavax.sound.sampled.spijavax.sound.midi包,为I/O、序列化和MIDI数据的合成提供接口和类。javax.sound.midi.spi包,为新MIDI设备、MIDI文件阅读器和编写器等的实现提供接口。javax.sound.sampled包,为捕获、处理和播放音频数据提供接口和类。javax.sound.sampled.spi包,为新音频设备、声音文件阅读器和编写器或音频格式转换提供抽象类。与声音处理有关的包和类在Applet类播放声音使用play()方法装载与播放声音。格式如下:1、voidplay(URLurl)2、voidplay(URLurl,Stringname)一旦play()方法装载了声音文件就立即播放。如果找不到,play()方法不返回出错信息,反应到用户端就是听不到声音。play()方法只播放一遍声音文件重复播放声音如果需要重复播放某个声音文件,就需要使用AudioClip接口提供的方法。AudioClip接口提供播放声音片段的方法。多个AudioClip项可以在同一时间播放,从而产生声音混合的效果。项目核心一个基本的使用Applet类提供的方法播放声音文件的例子,运行结果如图所示:步骤一:创建一个Applet小程序(1)通过继承Applet类来创建一个有三个按钮的容器importjava.applet.*;publicclassmAudioextendsApplet{}(2)定义成员属性包含3个成员属性,分别表示播放的声音的URL相对地址,当前播放的音频流和声音播放状态。步骤一:创建一个Applet小程序(3)在Applet的子类中覆盖Applet类的init()方法init()是java.applet.Applet类中的方法,当applet程序首次被打开时,会执行此方法定义的程序代码。当applet程序首次被打开时,init()将第一个被自动执行。在其中调用getAudioClip来初始化当前要播放的音频流:audio=getAudioClip(newURL(getDocumentBase(),hurl));步骤二:对Applet容器中的按钮动作进行事件处理(1)为Applet容器添加按钮动作监听器由于要对Applet容器中发生的三种按钮按下事件进行分别响应,可以直接在init()方法中对三个按钮添加语句:addActionListener(this);(2)实现ActionListener接口publicclassmAudioextendsAppletimplementsActionListener{publicvoidactionPerformed(ActionEvente){…}}步骤一:创建一个Applet小程序这里需要根据事件源即按钮的不同作出分别动作,可以通过e.getActionCommand()来判断是哪个按钮被按下。AudioClip类中的play,stop,loop方法分别对应播放、停止和循环播放功能。功能扩展在上面程序的基础上要求增加一套按钮用于播放另一个音乐,2个音乐可以同时播放,制造一种混音效果。运行情况如下:扩展步骤一:增加一套按钮定义令一组成员属性包含新的3个成员属性,分别表示播放的第二段声音的URL相对地址,当前播放的音频流和声音播放状态。改写init()方法在其中调用getAudioClip来初始化另一个要播放的音频流:Audio2=getAudioClip(newURL(getDocumentBase(),hurl2));并且添加一套新按钮,重新布局。扩展步骤二:对Applet容器中的按钮重新进行事件处理为Applet容器中的新按钮添加事件监听器由于要对Applet容器中发生的三种按钮按下事件进行分别响应,可以直接在init()方法中对三个按钮添加语句:addActionListener(this);(4)实现ActionListener接口,在actionPerformed方法中对六个事件源作出相应publicclassmAudioextendsAppletimplementsActionListener{publicvoidactionPerformed(ActionEvente){…}}完成情况评价标准完成(1)-(4),得到最终结果的正确输出,100分。完成(1)-(3),正确生成菜单,80分。完成(1)-(2),正确生成菜单,60分。功能扩展之案例二编写一个applet让用户从几个音频片段中选择来播放,程序运行画面如下:功能扩展之案例二//程序中声音的名字publicfinalString[]AUDIO={ping,pop,return,salvation,shuffle,squish};//包含上述字符串数组的下拉框privateChoicechoice;//真实的音频片段数据privateAudioClip[]clips;功能扩展之案例二//控制播放停止的按钮privateButtonplayClip;privateButtonloopClip;privateButtonstopClip;privateButtonstopAllClips;//跟踪当前哪些音频片段在播放privateboolean[]clipsPlaying;应用升级问题陈述:在电梯系统的模拟程序里,公司要求在模拟中加入声音。例如,当一个人走路时,应能听到脚步声。每当按下或者复位一个楼层按钮或者电梯按钮时,应当听到单击声。电梯到达时铃声应当响起,且在门打开时或者关上时,门应当吱吱作响。最后,当电梯在楼层间运行时,应播放“电梯音乐”。应用升级解决思路:编写类SoundEffects,将声音文件转换成java.applet.AudioClip对象关键代码try{returnApplet.newAudioClip(getClass().getResource(prefix+soundFile));}//returnnullifsoundFiledoesnotexistcatch(NullPointerExceptionnullPointerException){returnnull;}}应用升级类SoundEffects包含方法getAudioClip,该方法通过参数soundFiled调用类java.applet.Applet的static方法.newAudioClip返回一个AudioClip对象。方法setPathPrefix允许改变声音文件的目录(如果我们需要把声音分配到多个目录中,该方法很有用)。应用升级(2)编写一个类,通过播放AudioClip对象来产生声音。(学生自主完成)

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功