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

29
Java Java 游游游游 游游游游 游游游游 游游游游 5 5 游游游游游游游 游游游游游游游 08 游游 3-2

Upload: melissa-becker

Post on 03-Jan-2016

153 views

Category:

Documents


0 download

DESCRIPTION

Java 游戏开发 学习情境 5 :音乐播放器设计. 08 游戏 3-2. 目标: 为游戏添加音效,能够用 Java 加载、播放游戏中的声音文件,并按要求控制播放。 任务: 用 Java 设计一个播放多种声音的程序。为电梯模拟游戏添加背景音乐。. 目标与任务. 教师. 学生. 提供: 声音播放案例. 模仿完成: 声音播放案例. 项目核心. 提供: 多个声音列表 播放关键代码. 协作完成: 多个声音列表 播放. 功能扩展. 提供: 电梯游戏的 声音和界面. 协作完成: 电梯游戏的 音效处理. 应用升级. 学习过程. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java 游戏开发 学习情境 5 :音乐播放器设计

JavaJava 游戏开发游戏开发学习情境学习情境 55 :音乐播放器设计:音乐播放器设计

08 游戏 3-2

Page 2: Java 游戏开发 学习情境 5 :音乐播放器设计

目标与任务 目标与任务

目标:◦为游戏添加音效,能够用 Java 加载、播放游戏中的声

音文件,并按要求控制播放。 任务:

◦用 Java 设计一个播放多种声音的程序。为电梯模拟游戏添加背景音乐。

Page 3: Java 游戏开发 学习情境 5 :音乐播放器设计

学习过程 学习过程

项目核心

功能扩展

应用升级

教师 学生

提供:声音播放案例

模仿完成:声音播放案例

提供:多个声音列表播放关键代码

协作完成:多个声音列表

播放

提供:电梯游戏的声音和界面

协作完成:电梯游戏的

音效处理

Page 4: Java 游戏开发 学习情境 5 :音乐播放器设计

JavaJava 支持的音频文件格式支持的音频文件格式

AU 文件格式WAV 文件格式AIFF 文件格式MIDI 文件格式

声音文件有很多格

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

AUAU 声音文件声音文件

这是 Java 语言最早的声音格式,扩展名为 AU 或 SND ,适用于短的声音文件。 AU 类型文件使用的三种典型音频格式为: 8 位单声道采样频率为 8KHz 的 μ-law 类型、 8 位线性类型以及 16 位线性类型。

Page 6: Java 游戏开发 学习情境 5 :音乐播放器设计

WAVWAV 声音文件声音文件

扩展名为 WAV ,由 Microsoft和 IBM 共同开发, Windows 9X系统都支持此格式。

Page 7: Java 游戏开发 学习情境 5 :音乐播放器设计

AIFFAIFF 声音文件声音文件

扩展名为 AIF 或 IEF ,是Macintosh 公司和 SGI 公司所共用的标准音频文件格式。

Page 8: Java 游戏开发 学习情境 5 :音乐播放器设计

MIDIMIDI 声音文件声音文件

扩展名为 MID ,是音乐制造业所认可的标准,主要用于控制诸如合成器和声卡之类的设备。 Java 2 平台支持三种类型的MIDI 文件公式,它们分别为 MIDI 文件类型 O 、 MIDI 文件类型 1 以及 RMF 。

Page 9: Java 游戏开发 学习情境 5 :音乐播放器设计

与声音处理有关的包和类与声音处理有关的包和类

java.applet.Applet javax.sound.midi javax.sound.midi.spi javax.sound.sampled javax.sound.sampled.spi

Page 10: Java 游戏开发 学习情境 5 :音乐播放器设计

javax.sound.midi 包,为 I/O 、序列化和 MIDI数据的合成提供接口和类。

javax.sound.midi.spi 包,为新 MIDI 设备、 MIDI 文件阅读器和编写器等的实现提供接口。javax.sound.sampled 包,为捕获、处理和播放音频数据提供接口和类。

javax.sound.sampled.spi 包,为新音频设备、声音文件阅读器和编写器或音频格式转换提供抽象类。

与声音处理有关的包和类与声音处理有关的包和类

Page 11: Java 游戏开发 学习情境 5 :音乐播放器设计

在在 AppletApplet 类播放声音类播放声音

使用 play ()方法装载与播放声音。格式如下: 1 、 void play(URL url) 2 、 void play(URL url,String name)

一旦 play ()方法装载了声音文件就立即播放。如果找不到, play ()方法不返回出错信息,反应到用户端就是听不到声音。

play ()方法只播放一遍声音文件

Page 12: Java 游戏开发 学习情境 5 :音乐播放器设计

重复播放声音重复播放声音

如果需要重复播放某个声音文件,就需要使用AudioClip 接口提供的方法。

AudioClip 接口提供播放声音片段的方法。多个 AudioClip 项可以在同一时间播放,从而产

生声音混合的效果。

Page 13: Java 游戏开发 学习情境 5 :音乐播放器设计

项目核心项目核心一个基本的使用 Applet 类提供的方法播放声

音文件的例子,运行结果如图所示:

Page 14: Java 游戏开发 学习情境 5 :音乐播放器设计

步骤一:创建一个步骤一:创建一个 AppletApplet 小程序 小程序 (1) 通过继承 Applet 类来创建一个有三个

按钮的容器 import java.applet.*; public class mAudio extends Applet{} (2) 定义成员属性 包含 3 个成员属性,分别表示播放的声音的

URL 相对地址,当前播放的音频流和声音播放状态。

Page 15: Java 游戏开发 学习情境 5 :音乐播放器设计

步骤一:创建一个步骤一:创建一个 AppletApplet 小程序 小程序 (3) 在 Applet 的子类中覆盖 Applet 类

的 init() 方法 init() 是 java.applet.Applet 类中的方法,

当 applet 程序首次被打开时,会执行此方法定义的程序代码。当 applet 程序首次被打开时, init() 将第一个被自动执行。

在其中调用 getAudioClip 来初始化当前要播放的音频流:

audio=getAudioClip(new URL(getDocumentBase(),hurl));

Page 16: Java 游戏开发 学习情境 5 :音乐播放器设计

步骤二:对步骤二:对 AppletApplet 容器中的按钮容器中的按钮动作进行事件处理 动作进行事件处理

(1) 为 Applet 容器添加按钮动作监听器 由于要对 Applet 容器中发生的三种按钮按下事件进行分别响

应,可以直接在 init() 方法中对三个按钮添加语句: addActionListener(this); ( 2 )实现 ActionListener 接口 public class mAudio extends Applet implements

ActionListener{ public void actionPerformed(ActionEvent e)

{ …

} }

Page 17: Java 游戏开发 学习情境 5 :音乐播放器设计

步骤一:创建一个步骤一:创建一个 AppletApplet 小程序 小程序 这里需要根据事件源即按钮的不同作出分别动

作,可以通过 e.getActionCommand() 来判断是哪个按钮被按下。

AudioClip 类中的 play,stop,loop 方法分别对应播放、停止和循环播放功能。

Page 18: Java 游戏开发 学习情境 5 :音乐播放器设计

功能扩展 功能扩展 在上面程序的基础上要求增加一套按钮用于播

放另一个音乐, 2 个音乐可以同时播放,制造一种混音效果。运行情况如下:

Page 19: Java 游戏开发 学习情境 5 :音乐播放器设计

扩展步骤一:增加一套按钮 扩展步骤一:增加一套按钮 定义令一组成员属性包含新的 3 个成员属性,分别表示播放的第二段声音

的 URL 相对地址,当前播放的音频流和声音播放状态。

改写 init() 方法在其中调用 getAudioClip 来初始化另一个要播放的

音频流:Audio2=getAudioClip(new

URL(getDocumentBase(),hurl2));并且添加一套新按钮,重新布局。

Page 20: Java 游戏开发 学习情境 5 :音乐播放器设计

扩展步骤二:对扩展步骤二:对 AppletApplet 容器中的按容器中的按钮重新进行事件处理 钮重新进行事件处理

为 Applet 容器中的新按钮添加事件监听器 由于要对 Applet 容器中发生的三种按钮按下事件进行分别响应,可

以直接在 init() 方法中对三个按钮添加语句: addActionListener(this); ( 4 )实现 ActionListener 接口,在 actionPerformed 方法

中对六个事件源作出相应 public class mAudio extends Applet implements

ActionListener{ public void actionPerformed(ActionEvent e)

{ …

} }

Page 21: Java 游戏开发 学习情境 5 :音乐播放器设计

完成情况评价标准完成情况评价标准

完成( 1 ) - ( 4 ),得到最终结果的正确输出, 100 分。

完成( 1 ) - ( 3 ),正确生成菜单, 80分。

完成( 1 ) - ( 2 ),正确生成菜单, 60分。

Page 22: Java 游戏开发 学习情境 5 :音乐播放器设计

功能扩展之案例二 功能扩展之案例二 编写一个 applet让用户从几个音频片段中选择来播放,程序运行画面如下:

Page 23: Java 游戏开发 学习情境 5 :音乐播放器设计

功能扩展之案例二 功能扩展之案例二 // 程序中声音的名字 public final String[] AUDIO = { "ping", "pop", "return",

"salvation", "shuffle", "squish" }; // 包含上述字符串数组的下拉框 private Choice choice; // 真实的音频片段数据 private AudioClip[] clips;

Page 24: Java 游戏开发 学习情境 5 :音乐播放器设计

功能扩展之案例二 功能扩展之案例二 // 控制播放停止的按钮 private Button playClip; private Button loopClip; private Button stopClip; private Button stopAllClips; // 跟踪当前哪些音频片段在播放 private boolean[] clipsPlaying;

Page 25: Java 游戏开发 学习情境 5 :音乐播放器设计

应用升级 应用升级 问题陈述:在电梯系统的模拟程序里,公司要求在模拟中

加入声音。例如,当一个人走路时,应能听到脚步声。每当按下或者复位一个楼层按钮或者电梯按钮时,应当听到单击声。电梯到达时铃声应当响起,且在门打开时或者关上时,门应当吱吱作响。最后,当电梯在楼层间运行时,应播放“电梯音乐”。

Page 26: Java 游戏开发 学习情境 5 :音乐播放器设计

应用升级应用升级解决思路:编写类 SoundEffects ,将声音文件转换成

java.applet.AudioClip 对象

Page 27: Java 游戏开发 学习情境 5 :音乐播放器设计

关键代码关键代码 try { return

Applet.newAudioClip( getClass().getResource( prefix + soundFile ) ); } // return null if soundFile does not exist catch ( NullPointerException

nullPointerException ) { return null; } }

Page 28: Java 游戏开发 学习情境 5 :音乐播放器设计

应用升级应用升级类 SoundEffects 包含方法 getAudioClip ,该方法通过参数 soundFiled 调用类java.applet.Applet 的 static 方法 .newAudioClip 返回一个 AudioClip 对象。方法 setPathPrefix允许改变声音文件的目录(如果我们需要把声音分配到多个目录中,该方法很有用)。

Page 29: Java 游戏开发 学习情境 5 :音乐播放器设计

应用升级应用升级( 2 )编写一个类,通过播放 AudioClip 对

象来产生声音。(学生自主完成)