我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。相关的知识,希望对你有一定的参考价值。

在java小程序中添加背景音乐代码,要求写的详细一点代码,和注释,好的话会加分

放音乐的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目录
参考技术A 希望有帮助

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

参考技术B 我想你只是想在自己的程序中加上点儿音乐吧,不必要那么复杂,多了你一时也看不明白,下面是加入音乐的小程序,你看明白了再改改,加在你想用的地方就好了,看不懂再问吧,调试的时候记得修改文件路径啊:
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();


参考技术C 朋友给我了一个类,大小0.6K,用类名.play(音频文件名); 就行了,我一直在用。如:
public class Test
public static void main(String[] args)
AuPlay.play("526.wav");


音频格式是.au或.wav,类和音频文件要在同一目录下。要的话留个邮箱,我发给你。呵呵

以上是关于我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上合并音频文件

想把我唱给你听 |UML音乐梦工厂

计算机专科生,毕业3年从小厂到阿里P6,想把我的进阶方法教给你

更改 YouTube 视频嵌入的背景颜色

小白初学Java的一点点收获

在winfrom中,我有一个dataGridView,第一列就是checkbox,我怎么判断我是不是选中,我想把我选中的行的第二