1 / 29

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java游戏开发学习情境5:音乐播放器设计 08游戏3-2

  2. 目标: • 为游戏添加音效,能够用Java加载、播放游戏中的声音文件,并按要求控制播放。 任务: • 用Java设计一个播放多种声音的程序。为电梯模拟游戏添加背景音乐。 目标与任务

  3. 教师 学生 提供: 声音播放案例 模仿完成: 声音播放案例 项目核心 提供: 多个声音列表 播放关键代码 协作完成: 多个声音列表 播放 功能扩展 提供: 电梯游戏的 声音和界面 协作完成: 电梯游戏的 音效处理 应用升级 学习过程

  4. AU文件格式 • WAV文件格式 • AIFF文件格式 • MIDI文件格式 声音文件有很多格式 Java支持的音频文件格式

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

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

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

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

  9. java.applet.Applet • javax.sound.midi • javax.sound.midi.spi • javax.sound.sampled • javax.sound.sampled.spi 与声音处理有关的包和类

  10. javax.sound.midi包,为I/O、序列化和MIDI数据的合成提供接口和类。 • javax.sound.midi.spi 包,为新MIDI设备、MIDI文件阅读器和编写器等的实现提供接口。javax.sound.sampled 包,为捕获、处理和播放音频数据提供接口和类。 • javax.sound.sampled.spi 包,为新音频设备、声音文件阅读器和编写器或音频格式转换提供抽象类。 与声音处理有关的包和类

  11. 使用play()方法装载与播放声音。格式如下:1、void play(URL url) 2、void play(URL url,String name) • 一旦play()方法装载了声音文件就立即播放。如果找不到,play()方法不返回出错信息,反应到用户端就是听不到声音。 • play()方法只播放一遍声音文件 在Applet类播放声音

  12. 如果需要重复播放某个声音文件,就需要使用AudioClip接口提供的方法。如果需要重复播放某个声音文件,就需要使用AudioClip接口提供的方法。 • AudioClip接口提供播放声音片段的方法。 • 多个AudioClip项可以在同一时间播放,从而产生声音混合的效果。 重复播放声音

  13. 一个基本的使用Applet类提供的方法播放声音文件的例子,运行结果如图所示: 项目核心

  14. (1)通过继承Applet类来创建一个有三个按钮的容器(1)通过继承Applet类来创建一个有三个按钮的容器 • import java.applet.*; • public class mAudio extends Applet{} • (2)定义成员属性 • 包含3个成员属性,分别表示播放的声音的URL相对地址,当前播放的音频流和声音播放状态。 步骤一:创建一个Applet小程序

  15. (3)在Applet的子类中覆盖Applet类的init()方法 • init()是java.applet.Applet类中的方法,当applet程序首次被打开时,会执行此方法定义的程序代码。当applet程序首次被打开时,init()将第一个被自动执行。 • 在其中调用getAudioClip来初始化当前要播放的音频流: • audio=getAudioClip(new URL(getDocumentBase(),hurl)); 步骤一:创建一个Applet小程序

  16. (1)为Applet容器添加按钮动作监听器 • 由于要对Applet容器中发生的三种按钮按下事件进行分别响应,可以直接在 • init()方法中对三个按钮添加语句: • addActionListener(this); • (2)实现ActionListener接口 • public class mAudio extends Applet implements ActionListener{ • public void actionPerformed(ActionEvent e) { • … } • } 步骤二:对Applet容器中的按钮动作进行事件处理

  17. 这里需要根据事件源即按钮的不同作出分别动作,可以通过e.getActionCommand()来判断是哪个按钮被按下。这里需要根据事件源即按钮的不同作出分别动作,可以通过e.getActionCommand()来判断是哪个按钮被按下。 • AudioClip类中的play,stop,loop方法分别对应播放、停止和循环播放功能。 步骤一:创建一个Applet小程序

  18. 在上面程序的基础上要求增加一套按钮用于播放另一个音乐,2个音乐可以同时播放,制造一种混音效果。运行情况如下: 功能扩展

  19. 定义令一组成员属性 • 包含新的3个成员属性,分别表示播放的第二段声音的URL相对地址,当前播放的音频流和声音播放状态。改写init()方法 • 在其中调用getAudioClip来初始化另一个要播放的音频流: • Audio2=getAudioClip(new URL(getDocumentBase(),hurl2)); • 并且添加一套新按钮,重新布局。 扩展步骤一:增加一套按钮

  20. 为Applet容器中的新按钮添加事件监听器 • 由于要对Applet容器中发生的三种按钮按下事件进行分别响应,可以直接在 • init()方法中对三个按钮添加语句: • addActionListener(this); • (4)实现ActionListener接口,在actionPerformed方法中对六个事件源作出相应 • public class mAudio extends Applet implements ActionListener{ • public void actionPerformed(ActionEvent e) { • … } • } 扩展步骤二:对Applet容器中的按钮重新进行事件处理

  21. 完成(1)-(4),得到最终结果的正确输出,100分。完成(1)-(4),得到最终结果的正确输出,100分。 • 完成(1)-(3),正确生成菜单,80分。 • 完成(1)-(2),正确生成菜单,60分。 完成情况评价标准

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

  23. // 程序中声音的名字 • public final String[] AUDIO = • { "ping", "pop", "return", "salvation", "shuffle", "squish" }; • // 包含上述字符串数组的下拉框 • private Choice choice; • // 真实的音频片段数据 • private AudioClip[] clips; 功能扩展之案例二

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

  25. 问题陈述: • 在电梯系统的模拟程序里,公司要求在模拟中加入声音。例如,当一个人走路时,应能听到脚步声。每当按下或者复位一个楼层按钮或者电梯按钮时,应当听到单击声。电梯到达时铃声应当响起,且在门打开时或者关上时,门应当吱吱作响。最后,当电梯在楼层间运行时,应播放“电梯音乐”。 应用升级

  26. 解决思路: • 编写类SoundEffects,将声音文件转换成java.applet.AudioClip对象 应用升级

  27. try { return Applet.newAudioClip( getClass().getResource( prefix + soundFile ) ); } // return null if soundFile does not exist catch ( NullPointerException nullPointerException ) { return null; } } 关键代码

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

  29. (2)编写一个类,通过播放AudioClip对象来产生声音。(学生自主完成)(2)编写一个类,通过播放AudioClip对象来产生声音。(学生自主完成) 应用升级

More Related