Java GUI 添加背景音乐

2022/6/29 14:24:48

本文主要是介绍Java GUI 添加背景音乐,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第一种方式
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();
}
}
}



这篇关于Java GUI 添加背景音乐的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程