实现原理

我用接口java.applet.AudioClip实现音乐播放,那么我们需要了解这个接口的情况。

我们主要使用其中的三个方法:

(1)void loop(); //循环播放
(2)void play(); //开始播放(单次)
(3)void stop(); //停止播放

虽然AudioClip 是一个接口,不能直接创建实例,但是java.applet.Applet 对象提供了一个静态的方法newAudioClip(),因此可以直接利用如下的语句,得到一个AudioClip 的实例引用:

AudioClip auu= java.applet.Applet.newAudioClip(new java.net.URL(this.jTextField1.getText()));

newAudioClip()方法的参数是声音文件的URL,具体如下:
static void newAudioClip(URL url);

那么现在我们需要了解URL是什么东西,URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它(来自百度百科)。

目前的情况我们只需要知道URL可以保留音乐文件,那么我们用File保存音乐文件的内容,通过 FIle ---> URI ----> URL得到音乐文件URL,随后作为AudioClip的参数加入就可以了。

最后对于音乐的播放等等,我们就可以使用上面的三种方法实现音乐播放和关闭。

代码区(和游戏内部有一定区别,但效果一致)

package component;

import java.applet.AudioClip;
import java.io.*;
import java.applet.Applet;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL; public class Music extends Thread {
private File file;
private URI uri;
private URL url;
private AudioClip aau; //由于游戏内部需要多种音乐,故根据参数的不同,方法不同的音乐
Music(int mode) {
if (mode == 1) {
file = new File("img/fire.wav");
} else if (mode == 2) {
file = new File("img/head.wav");
} else if (mode == 3) {
file = new File("img/mid.wav");
} else if (mode == 4) {
file = new File("img/first.wav");
} else if (mode == 5) {
file = new File("img/second.wav");
} else if (mode == 6) {
file = new File("img/fifth.wav");
} else if (mode == 7) {
file = new File("img/lost.wav");
} else if (mode == 8) {
file = new File("img/win.wav");
} else if (mode == 9) {
file = new File("img/end.wav");
} else if (mode == 10) {
file = new File("img/ranking.wav");
} else if (mode == 11) {
file = new File("img/set.wav");
}
uri = file.toURI();//转化为URI
try {
url = uri.toURL();//转化为URL
aau = Applet.newAudioClip(url);
} catch (MalformedURLException e) {
e.printStackTrace();
} // 解析地址 } public void run() {
try {
aau.loop(); // 循环播放
} catch (Exception e) {
e.printStackTrace();
} } //外部控制音乐关闭
public void close() {
aau.stop();
} //外部控制音乐开启
public void open() {
aau.loop();
} public static void main(String[] args) {
new Music(11).start();//由于使用多线程进行播放,所以需要先开启音乐播放线程
//由于对音乐的开关的控制在游戏的其他地方,所以这个地方如果不手动结束程序,音乐不会停止
}
}

最新文章

  1. 如何在Oracle中复制表结构和表数据
  2. JavaScript滚动条插件源码
  3. 纸上谈兵:图(graph)
  4. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式
  5. [转载]VFS—Kernel Space & User Space
  6. C# and JSON
  7. java数组使用技巧
  8. 模拟Vue之数据驱动2
  9. Windows 怎么知道我已连线到网际网络? 原来当中大有文章!
  10. hdu 2795 段树--点更新
  11. TensorFlow Object Detection API(Windows下训练)
  12. C#学习笔记随笔(1)----C#中static关键字的作用
  13. TCP连接建立系列 — 连接请求块
  14. 嵌入Python | 调用Python模块中有参数的函数
  15. iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方
  16. 第二章 函数编程&常用标准库
  17. Linux Rsyslog日志集中管理
  18. logging模块、sys模块、shelve模块
  19. tensorflow-softmax
  20. c语言双向循环链表

热门文章

  1. git上传项目已经删除文件,但是Jenkins中没有删除
  2. TCP 之 FIN_WAIT_2状态处理流程
  3. ZT:我们身边大多数的事都是暂时性的
  4. k8s部署01-----what is k8s?
  5. 卸载阿里云盾(安骑士)监控&屏蔽云盾IP
  6. 手机APP缓存的获取和清理功能的实现
  7. [log4j]log4j简单配置
  8. pyqt5的QListWidget中设置右键菜单
  9. openstack部署keystone
  10. 配置文件c3p0-config.xml