Java GUI 添加背景音乐

互联网 2022/6/29 9:55:03

第一种方式import java.applet.AudioClip;import java.io.*;import java.applet.Applet;import java.net.URI;import java.net.URL; public class Music { public void play() { try { //音乐文件 File file_music = new File("music/background.wav");…

第一种方式
import java.applet.AudioClip;
import java.io.*;
import java.applet.Applet;
import java.net.URI;
import java.net.URL;

public class Music {
public void play() {
try {
//音乐文件
File file_music = new File("music/background.wav");
//解析文件组成部分
URI uri_music = file_music.toURI();
//解析文件地址
URL url = uri_music.toURL();
//使用音频剪辑播放,Applet:存储音频文件
AudioClip ac = Applet.newAudioClip(url);
// 循环播放
ac.loop();
//停止播放
// ac.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
}

第二种方式

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

/**
* 音乐播放器
*
* @author cn.clf.音乐
*/
public class MusicPlayer implements Runnable {
File soundFile; // 音乐文件
Thread thread;// 父线程
boolean circulate;// 是否循环播放

/**
* 构造方法,默认不循环播放
*
* @param filepath
* 音乐文件完整名称
* @throws FileNotFoundException
*/
public MusicPlayer(String filepath) throws FileNotFoundException {
this(filepath, false);
}

/**
* 构造方法
*
* @param filepath
* 音乐文件完整名称
* @param circulate
* 是否循环播放
* @throws FileNotFoundException
*/
public MusicPlayer(String filepath, boolean circulate)
throws FileNotFoundException {
this.circulate = circulate;
soundFile = new File(filepath);
if (!soundFile.exists()) {// 如果文件不存在
throw new FileNotFoundException(filepath + "未找到");
}
}

/**
* 播放
*/
public void play() {
thread = new Thread(this);// 创建线程对象
thread.start();// 开启线程
}

/**
* 停止播放
*/
public void stop() {
thread.stop();// 强制关闭线程
}

/**
* 重写线程执行方法
*/
public void run() {
byte[] auBuffer = new byte[1024 * 128];// 创建128k缓冲区
do {
AudioInputStream audioInputStream = null; // 创建音频输入流对象
SourceDataLine auline = null; // 混频器源数据行
try {
// 从音乐文件中获取音频输入流
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
AudioFormat format = audioInputStream.getFormat(); // 获取音频格式
// 按照源数据行类型和指定音频格式创建数据行对象
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
format);
// 利用音频系统类获得与指定 Line.Info 对象中的描述匹配的行,并转换为源数据行对象
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);// 按照指定格式打开源数据行
auline.start();// 源数据行开启读写活动
int byteCount = 0;// 记录音频输入流读出的字节数
while (byteCount != -1) {// 如果音频输入流中读取的字节数不为-1
// 从音频数据流中读出128K的数据
byteCount = audioInputStream.read(auBuffer, 0,
auBuffer.length);
if (byteCount >= 0) {// 如果读出有效数据
auline.write(auBuffer, 0, byteCount);// 将有效数据写入数据行中
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
} finally {
auline.drain();// 清空数据行
auline.close();// 关闭数据行
}
} while (circulate);// 根据循环标志判断是否循环播放
}
}

import java.io.FileNotFoundException;

/**
* 音效类
*
* @author cn.clf.音乐
*
*/
public class Sound {
static final String DIR = "music/";// 音乐文件夹
static final String BACKGROUD = "background.wav";// 背景音乐
static final String JUMP = "jump.wav";// 跳跃音效
static final String HIT = "hit.wav";// 撞击音效

/**
* 播放跳跃音效
*/
public void jump() {
play(DIR + JUMP, false);// 播放一次跳跃音效
}

/**
* 播放撞击音效
*/
public void hit() {
play(DIR + HIT, false);// 播放一次撞击音效
}

/**
* 播放背景音乐
*/
public void backgroud() {
play(DIR + BACKGROUD, true);// 循环播放背景音乐
}

/**
* 播放
*
* @param file
* 音乐文件完整名称
* @param circulate
* 是否循环播放
*/
public void play(String file, boolean circulate) {
try {
// 创建播放器
MusicPlayer player = new MusicPlayer(file, circulate);
player.play();// 播放器开始播放
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Java GUI 添加背景音乐]http://www.zyiz.net/tech/detail-331801.html

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>