第十讲 播放音效及背景音乐

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1
Sequencer 播放 MIDI sequence 的硬件或软件设备就 0011 0010 1010 1101 0001 0100 1011 是所谓的 sequencer.
Sequencer 接口包括用于以下基本操作的方法:
从 MIDI 文件数据获取一个 sequence 开始和停止回放 移动到 sequence 中的任意位置 更改回放速度 将回放与内部时钟或接收到的 MIDI 消息同步 控制另一个设备的定时
Clip 0011 0010 1010 接口表示特殊种类的数据行,该数据 Clip 1101 0001 0100 1011 行的音频数据可以在回放前加载,而不是 实时流出. 音频剪辑的回放可以使用 start 和 stop 方法开始和终止.这些方法不重新设置介 质的位置;start 导致从回放最后停止的 位置继续回放.
1
涉及到的类
0011 0010 1010 1101 0001 0100 1011
Line Line接口表示单声道或多声道音频供给. DataLine 包括一些音频传输控制方法,这些方法可以 启动,停止,消耗和刷新通过数据行传入的音 频数据. DataLine.Info
1
DataLine.Info 提供音频数据行的信息.包括: 受数据行支持的音频格式 其内部缓冲区的最小和最大大小
AudioSystem 类包括许多操作 AudioInputStream 对象的方法.例如,这些方法可以:
从外部音频文件,流或 URL 获得音频输入流 从音频输入流写入外部文件 将音频输入流转换为不同的音频格式
1
0010 1010 1101 0001 0100 1011 AudioFormat 0011 AudioFormat 是在声音流中指定特定数据 安排的类.通过检查以音频格式存储的信 息,可以发现在二进制声音数据中解释位 的方式.
声音如何在计算机中表示? ——声音样本(Sampled Sound)
如何获取声音样本? ——声音采样(将模拟声音装换为数字格 式) 采样频率:每秒保存的声音样本数量
1
0011 0010 1010 1101 0001 0100 1011
振幅(amplitude)和频率(frequency) 分别代表什么?
游戏背景音乐的种类: CD ,MP3 ,MIDI 三种音乐比较:
CD音乐效果最好,占用空间最大,可以单独播 放欣赏 MP3压缩比高,空间较小,效果较好,需要专 门的JAVA插件 MIDI占用最小空间,有专门Java API播放 (javax.sound.midi ) javax.sound.midi
涉及到的类: 涉及到的类:
0011 0010 1010 1101 0001 0100 1011
AudioSystem AudioSystem 充当取样音频系统资源的 入口点. 包括许多在不同格式间转换音 频数据的方法,以及在音频文件和流之 间进行转换的方法.
1
AudioInputStream 0011 0010 1010 1101 0001 0100 1011 音频输入流,是具有指定音频格式和长度 的输入流
1
什么是MIDI
0011 0010 1010 1101 0001 0100 1011
MIDI即乐器数字接口(Musical Instrument Digital Interface) 是20 世纪80 年代初为解决电声乐器之间的通 信问题而提出的.MIDI 传输的不是声音 信号, 而是音符,控制参数等指令, 它 指示MIDI 设备要做什么,怎么做, 如演 奏哪个音符,多大音量等.它们被统一 表示成MIDI 消息(MIDI Message)
1

2. 建立音频序列
Sequencer sequencer = MidiSystem.getSequencer();
1
3.打开音频序列
sequencer.open();
涉及到的类
0011 0010 1010 1101 0001 0100 1011
Sequence Sequence 是一种数据结构,包含可由 Sequencer 对象回放的音乐信息(通常 是整首歌曲或音乐作品). 此外,Sequence 包含定时信息和一个或 多个轨道.每个 track 包含一系列的 MIDI 事件(例如音符打开,音符关闭, 程序更改和元事件).
1
步骤二:播放声音数据
0011 0010 1010 1101 0001 0100 1011
1.设置音频行信息 DataLine.Info info = new DataLine.Info(Clip.class, format); 2.建立音频行 Clip clip =(Clip)AudioSystem.getLine(info); 3.将音频数据流读入音频行 clip.open(stream); 4.播放音频行 clip.start();
1.新建一个文件对象获取wav文件数据 File file = new File("sound.wav"); 2.将wav文件转换为音频输入流
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
3.获取音频格式
1ห้องสมุดไป่ตู้
AudioFormat format = stream.getFormat();
1
实例演示(例子10.1)
0011 0010 1010 1101 0001 0100 1011
创建soundPlayer类用来读取并播放wav 音频文件 在gamePanel中创建soundPlayer对象, 并在适当的时机播放音效(玩家起跳时, 玩家与NPC相撞时)
1
10.2 播放音乐
0011 0010 1010 1101 0001 0100 1011
1
步骤二:播放MIDI
0011 0010 1010 1101 0001 0100 1011
1.读取即将播放的音频序列 sequencer.setSequence(sequence); 2.播放音频序列 sequencer.start();
1
实例演示(10.2)
0011 0010 1010 1101 0001 0100 1011
1
Java Sound API
0011 0010 1010 1101 0001 0100 1011
Java支持的声音文件格式 AIFF, AU , WAV Java中播放声音的API软件包 javax.sound.sampled
1
步骤一:从读取声音文件
0011 0010 1010 1101 0001 0100 1011
建立musicPlayer类用于播放背景音乐, 并在游戏开始时自动播放
1
循环播放背景音乐
0011 0010 1010 1101 0001 0100 1011
使用Sequencer的isRunning()方法 if (sequencer.isRunning( )==false) { loadMusic("d:/music.midi"); playMusic(); }
1
MIDI文件的内部结构
0011 0010 1010 1101 0001 0100 1011
1
步骤一:读取MIDI文件
0011 0010 1010 1101 0001 0100 1011
1.打开MIDI文件
Sequence sequence = MidiSystem.getSequence(new File(filename));
播放音效及背景音乐
0011 0010 1010 1101 0001 0100 1011
1
0011 0010 1010 1101 0001 0100 1011
为何要在游戏中添加声音? 增强交互性,用声音烘托气氛,表达情感 游戏中有哪些种类的声音? 动作音效 背景音乐
1
10.1 播放音效
0011 0010 1010 1101 0001 0100 1011
相关文档
最新文档