我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。
4个回答
展开全部
放音乐的api网上查有很多,比如javax.sound.midi.*;
支持midi,mid背景音乐的播放
public class Music implements MetaEventListener, Runnable{
private Sequence sequence = null;
private Sequencer sequencer;
private boolean isPlaying = false;
private volatile Thread thread;
public Music(){
}
public Music(String midifile){
try {
loadMidi(midifile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//导入midi文件到内存中传给Sequence对象,相当与编码器
public void loadMidi(String filename) throws IOException, InvalidMidiDataException{
sequence = MidiSystem.getSequence(this.getClass().getResourceAsStream(filename));
}
//播放方法
public void play(){
if(isPlaying){
return;
}
try {
sequencer = MidiSystem.getSequencer();
sequencer.open();
//用Sequencer对象把声音文件序列解码出来播放
sequencer.setSequence(sequence);
sequencer.addMetaEventListener(this);
//设置循环次数,-1表示一直循环
sequencer.setLoopCount(-1);
sequencer.setLoopStartPoint(0);
sequencer.setLoopEndPoint(sequencer.getTickLength());
} catch (MidiUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop(){
if(isPlaying){
sequencer.stop();
isPlaying = false;
}
if(thread != null){
thread = null;
}
}
public void meta(MetaMessage meta) {
if(meta.getType() == 47){
System.out.println("Sequencer is done playing");
}
// TODO Auto-generated method stub
}
public void run() {
// TODO Auto-generated method stub
Thread current = Thread.currentThread();
while(current == thread && !isPlaying){
sequencer.start();
isPlaying = true;
try {
thread.sleep(1001);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//用起来也很方便
public static void main(String[] args){
Music music = new Music("a.mid");
music.play();
}
}
如果这样写路径类要和音频文件放在一个目录下,如果你不想这样,有两种方法,一种是修改路径字符串,另一种是把Class.getResourceAsStream方法改成new FileInputStream 这两个方法加载资源的初始路径不同,前者找class文件所在目录,后者找project目录
支持midi,mid背景音乐的播放
public class Music implements MetaEventListener, Runnable{
private Sequence sequence = null;
private Sequencer sequencer;
private boolean isPlaying = false;
private volatile Thread thread;
public Music(){
}
public Music(String midifile){
try {
loadMidi(midifile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//导入midi文件到内存中传给Sequence对象,相当与编码器
public void loadMidi(String filename) throws IOException, InvalidMidiDataException{
sequence = MidiSystem.getSequence(this.getClass().getResourceAsStream(filename));
}
//播放方法
public void play(){
if(isPlaying){
return;
}
try {
sequencer = MidiSystem.getSequencer();
sequencer.open();
//用Sequencer对象把声音文件序列解码出来播放
sequencer.setSequence(sequence);
sequencer.addMetaEventListener(this);
//设置循环次数,-1表示一直循环
sequencer.setLoopCount(-1);
sequencer.setLoopStartPoint(0);
sequencer.setLoopEndPoint(sequencer.getTickLength());
} catch (MidiUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop(){
if(isPlaying){
sequencer.stop();
isPlaying = false;
}
if(thread != null){
thread = null;
}
}
public void meta(MetaMessage meta) {
if(meta.getType() == 47){
System.out.println("Sequencer is done playing");
}
// TODO Auto-generated method stub
}
public void run() {
// TODO Auto-generated method stub
Thread current = Thread.currentThread();
while(current == thread && !isPlaying){
sequencer.start();
isPlaying = true;
try {
thread.sleep(1001);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//用起来也很方便
public static void main(String[] args){
Music music = new Music("a.mid");
music.play();
}
}
如果这样写路径类要和音频文件放在一个目录下,如果你不想这样,有两种方法,一种是修改路径字符串,另一种是把Class.getResourceAsStream方法改成new FileInputStream 这两个方法加载资源的初始路径不同,前者找class文件所在目录,后者找project目录
展开全部
希望有帮助
public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
放在main函数上边就可以了,给你修改一下算了:
package com.jpioneer.swing;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
public class StudentManager {
JFrame mainFrame; // 主框架、主窗口
public StudentManager() {
mainFrame = new JFrame("教育经历管理系统--植物人工作室出品");
// 创建菜单栏JMenuBar
JMenuBar menuBar = new JMenuBar();
// 创建菜单JMenu
JMenu menu = new JMenu("菜单选项");
// 创建菜单项目JMenuItem
JMenuItem input = new JMenuItem("录入对象信息");
input.addActionListener(new MenuHandler());
JMenuItem modify = new JMenuItem("修改对象信息");
modify.addActionListener(new MenuHandler());
JMenuItem inquest = new JMenuItem("查询对象信息");
inquest.addActionListener(new MenuHandler());
JMenuItem delete = new JMenuItem("删除对象信息");
delete.addActionListener(new MenuHandler());
// 把菜单项目JMenuItem添加到菜单JMenu当中
menu.add(input);
menu.add(modify);
menu.add(inquest);
menu.add(delete);
// 把菜单JMenu添加到菜单栏JMenuBar当中
menuBar.add(menu);
// 把菜单栏JMenuBar添加到框架上
mainFrame.setJMenuBar(menuBar);
// 创建标签
JLabel myLabel = new JLabel("教育经历管理系统");
myLabel.setForeground(Color.red);
myLabel.setSize(50, 5);
JPanel pan = new JPanel();
pan.add(myLabel);
// 把标签所在的容器设置为框架的内容面板
mainFrame.setContentPane(pan);
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
// 关闭框架的处理
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//看到这个setBack了吗?在这调用就可以了!!!!!!
this.setBack();
}
class MenuHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("录入对象信息")) {
// new Input(); // 如果是录入信息,则产生录入窗口
}
if (e.getActionCommand().equals("查询对象信息")) {
// new Inquest(); // 如果是查询信息,则产生查询窗口
}
}
}
public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background,
new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
public static void main(String args[]) {
new StudentManager();
}
}
public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
放在main函数上边就可以了,给你修改一下算了:
package com.jpioneer.swing;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
public class StudentManager {
JFrame mainFrame; // 主框架、主窗口
public StudentManager() {
mainFrame = new JFrame("教育经历管理系统--植物人工作室出品");
// 创建菜单栏JMenuBar
JMenuBar menuBar = new JMenuBar();
// 创建菜单JMenu
JMenu menu = new JMenu("菜单选项");
// 创建菜单项目JMenuItem
JMenuItem input = new JMenuItem("录入对象信息");
input.addActionListener(new MenuHandler());
JMenuItem modify = new JMenuItem("修改对象信息");
modify.addActionListener(new MenuHandler());
JMenuItem inquest = new JMenuItem("查询对象信息");
inquest.addActionListener(new MenuHandler());
JMenuItem delete = new JMenuItem("删除对象信息");
delete.addActionListener(new MenuHandler());
// 把菜单项目JMenuItem添加到菜单JMenu当中
menu.add(input);
menu.add(modify);
menu.add(inquest);
menu.add(delete);
// 把菜单JMenu添加到菜单栏JMenuBar当中
menuBar.add(menu);
// 把菜单栏JMenuBar添加到框架上
mainFrame.setJMenuBar(menuBar);
// 创建标签
JLabel myLabel = new JLabel("教育经历管理系统");
myLabel.setForeground(Color.red);
myLabel.setSize(50, 5);
JPanel pan = new JPanel();
pan.add(myLabel);
// 把标签所在的容器设置为框架的内容面板
mainFrame.setContentPane(pan);
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
// 关闭框架的处理
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//看到这个setBack了吗?在这调用就可以了!!!!!!
this.setBack();
}
class MenuHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("录入对象信息")) {
// new Input(); // 如果是录入信息,则产生录入窗口
}
if (e.getActionCommand().equals("查询对象信息")) {
// new Inquest(); // 如果是查询信息,则产生查询窗口
}
}
}
public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background,
new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
public static void main(String args[]) {
new StudentManager();
}
}
参考资料: http://www.myhql.cn
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想你只是想在自己的程序中加上点儿音乐吧,不必要那么复杂,多了你一时也看不明白,下面是加入音乐的小程序,你看明白了再改改,加在你想用的地方就好了,看不懂再问吧,调试的时候记得修改文件路径啊:
import java.io.File;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
public class Mytest {
Player player = null;
public void LoadAndPlay() {
File mufile = new File("D:\\aa\\菠萝菠萝蜜.mp3");
try {
if (player == null) {
if (mufile.exists()) {
MediaLocator locator = new MediaLocator("file:"
+ mufile.getAbsolutePath());
player = Manager.createRealizedPlayer(locator);
player.prefetch();
}
}
player.start();// 开始播放
} catch (Exception e) {
e.getStackTrace();
}
}
public static void main(String[] args){
Mytest mytest=new Mytest();
mytest.LoadAndPlay();
}
}
import java.io.File;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
public class Mytest {
Player player = null;
public void LoadAndPlay() {
File mufile = new File("D:\\aa\\菠萝菠萝蜜.mp3");
try {
if (player == null) {
if (mufile.exists()) {
MediaLocator locator = new MediaLocator("file:"
+ mufile.getAbsolutePath());
player = Manager.createRealizedPlayer(locator);
player.prefetch();
}
}
player.start();// 开始播放
} catch (Exception e) {
e.getStackTrace();
}
}
public static void main(String[] args){
Mytest mytest=new Mytest();
mytest.LoadAndPlay();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
朋友给我了一个类,大小0.6K,用类名.play(音频文件名); 就行了,我一直在用。如:
public class Test{
public static void main(String[] args){
AuPlay.play("526.wav");
}
}
音频格式是.au或.wav,类和音频文件要在同一目录下。要的话留个邮箱,我发给你。呵呵
public class Test{
public static void main(String[] args){
AuPlay.play("526.wav");
}
}
音频格式是.au或.wav,类和音频文件要在同一目录下。要的话留个邮箱,我发给你。呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询