java中打开音乐播放器的方式是使用audioclip类来播放音乐,实例如下:
import java.applet.*import java.awt.*
import java.awt.event.*
import java.net.*
import javax.swing.*
import java.io.File
class AudioPlayDemo extends JFrame implements ActionListener {
boolean looping = false
File file1 = new File("music\\明天会更好.wav")
AudioClip sound1
AudioClip chosenClip
JButton playButton = new JButton("播放")
JButton loopButton = new JButton("循环播放")
JButton stopButton = new JButton("停止")
JLabel status = new JLabel("选择播放文件")
JPanel controlPanel = new JPanel()
Container container = getContentPane()
public AudioPlayDemo() {
try {
sound1 = Applet.newAudioClip(file1.toURL())
chosenClip = sound1
} catch(OutOfMemoryError e){
System.out.println("内存溢出")
e.printStackTrace()
} catch(Exception e){
e.printStackTrace()
}
playButton.addActionListener(this)
loopButton.addActionListener(this)
stopButton.addActionListener(this)
stopButton.setEnabled(false)
controlPanel.add(playButton)
controlPanel.add(loopButton)
controlPanel.add(stopButton)
container.add(controlPanel, BorderLayout.CENTER)
container.add(status, BorderLayout.SOUTH)
setSize(300, 130)
setVisible(true)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) //关闭窗口时退出程序
}
public void actionPerformed(ActionEvent event) {
if (chosenClip == null) {
status.setText("声音未载入")
return
}
Object source = event.getSource() //获取用户洗涤激活的按钮
if (source == playButton) {
stopButton.setEnabled(true)
loopButton.setEnabled(true)
chosenClip.play()
status.setText("正在播放")
}
if (source == loopButton) {
looping = true
chosenClip.loop()
loopButton.setEnabled(false)
stopButton.setEnabled(true)
status.setText("正在循环播放")
}
if (source == stopButton) {
if (looping) {
looping = false
chosenClip.stop()
loopButton.setEnabled(true)
} else {
chosenClip.stop()
}
stopButton.setEnabled(false)
status.setText("停止播放")
}
}
public static void main(String s[]) {
new AudioPlayDemo()
}
}
只能播放wav格式的歌曲
首先下载播放mp3的包,比如mp3spi1.9.4.jar。在工程中添加这个包。
播放器演示代码如下
package com.test.audioimport java.io.File
import java.awt.BorderLayout
import java.awt.FileDialog
import java.awt.Frame
import java.awt.GridLayout
import java.awt.Label
import java.awt.List
import java.awt.Menu
import java.awt.MenuBar
import java.awt.MenuItem
import java.awt.MenuShortcut
import java.awt.Panel
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.KeyEvent
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import javax.sound.sampled.AudioFormat
import javax.sound.sampled.AudioInputStream
import javax.sound.sampled.AudioSystem
import javax.sound.sampled.DataLine
import javax.sound.sampled.SourceDataLine
public class MusicPlayer extends Frame {
/**
*
*/
private static final long serialVersionUID = -2605658046194599045L
boolean isStop = true// 控制播放线程
boolean hasStop = true// 播放线程状态
String filepath// 播放文件目录
String filename// 播放文件名称
AudioInputStream audioInputStream// 文件流
AudioFormat audioFormat// 文件格式
SourceDataLine sourceDataLine// 输出设备
List list// 文件列表
Label labelfilepath//播放目录显示标签
Label labelfilename//播放文件显示标签
public MusicPlayer() {
// 设置窗体属性
setLayout(new BorderLayout())
setTitle("MP3 Music Player")
setSize(350, 370)
// 建立菜单栏
MenuBar menubar = new MenuBar()
Menu menufile = new Menu("File")
MenuItem menuopen = new MenuItem("Open", new MenuShortcut(KeyEvent.VK_O))
menufile.add(menuopen)
menufile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open()
}
})
menubar.add(menufile)
setMenuBar(menubar)
// 文件列表
list = new List(10)
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 双击时处理
if (e.getClickCount() == 2) {
// 播放选中的文件
filename = list.getSelectedItem()
play()
}
}
})
add(list, "Center")
// 信息显示
Panel panel = new Panel(new GridLayout(2, 1))
labelfilepath = new Label("Dir:")
labelfilename = new Label("File:")
panel.add(labelfilepath)
panel.add(labelfilename)
add(panel, "North")
// 注册窗体关闭事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0)
}
})
setVisible(true)
}
// 打开
private void open() {
FileDialog dialog = new FileDialog(this, "Open", 0)
dialog.setVisible(true)
filepath = dialog.getDirectory()
if (filepath != null) {
labelfilepath.setText("Dir:" + filepath)
// 显示文件列表
list.removeAll()
File filedir = new File(filepath)
File[] filelist = filedir.listFiles()
for (File file : filelist) {
String filename = file.getName().toLowerCase()
if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {
list.add(filename)
}
}
}
}
// 播放
private void play() {
try {
isStop = true// 停止播放线程
// 等待播放线程停止
System.out.print("Start:" + filename)
while (!hasStop) {
System.out.print(".")
try {
Thread.sleep(10)
} catch (Exception e) {
}
}
System.out.println("")
File file = new File(filepath + filename)
labelfilename.setText("Playing:" + filename)
// 取得文件输入流
audioInputStream = AudioSystem.getAudioInputStream(file)
audioFormat = audioInputStream.getFormat()
// 转换mp3文件编码
if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
audioFormat.getSampleRate(), 16, audioFormat
.getChannels(), audioFormat.getChannels() * 2,
audioFormat.getSampleRate(), false)
audioInputStream = AudioSystem.getAudioInputStream(audioFormat,
audioInputStream)
}
// 打开输出设备
DataLine.Info dataLineInfo = new DataLine.Info(
SourceDataLine.class, audioFormat,
AudioSystem.NOT_SPECIFIED)
sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo)
sourceDataLine.open(audioFormat)
sourceDataLine.start()
// 创建独立线程进行播放
isStop = false
Thread playThread = new Thread(new PlayThread())
playThread.start()
} catch (Exception e) {
e.printStackTrace()
}
}
class PlayThread extends Thread {
byte tempBuffer[] = new byte[320]
public void run() {
try {
int cnt
hasStop = false
// 读取数据到缓存数据
while ((cnt = audioInputStream.read(tempBuffer, 0,
tempBuffer.length)) != -1) {
if (isStop)
break
if (cnt > 0) {
// 写入缓存数据
sourceDataLine.write(tempBuffer, 0, cnt)
}
}
// Block等待临时数据被输出为空
sourceDataLine.drain()
sourceDataLine.close()
hasStop = true
} catch (Exception e) {
e.printStackTrace()
System.exit(0)
}
}
}
public static void main(String args[]) {
new MusicPlayer()
}
}