java如何实现播放mp3

Python023

java如何实现播放mp3,第1张

简单的实例,代码如下,纯粹JMF加载MP3并播放:

import javax.media.*

import java.io.IOException

import java.util.ArrayList

import java.util.List

public class PlayerMusic implements ControllerListener {// ControllerListener

// 控制事件

private Player player

private boolean first, loop

private String path

private List mp3List

private int mp3NO = 0

PlayerMusic(List mp3List) {

this.mp3List = mp3List

}

public void start() {

try {

player = Manager.createPlayer(new MediaLocator("file://" + mp3List.get(mp3NO)))

} catch (NoPlayerException ex) {

ex.printStackTrace()

System.out.println("不能播放文件")

return

} catch (IOException ex) {

ex.printStackTrace()

return

}

if (player == null) {

System.out.println("播放器为空")

return

}

first = false

player.addControllerListener(this)

// 提取媒体内容

player.prefetch()

}

public void controllerUpdate(ControllerEvent e) {

// 当媒体播放结束时,循环播放

if (e instanceof EndOfMediaEvent) {

mp3NO++

if(mp3NO<this.mp3List.size()){

this.start()

}

return

}

// 当预提取媒体的内容结束

if (e instanceof PrefetchCompleteEvent) {

player.start()

return

}

// 当实例化后

if (e instanceof RealizeCompleteEvent) {

// pack()//执行pack()操作

return

}

}

public static void main(String[] args) {

List mp3List = new ArrayList()

mp3List.add("d://a.mp3")

mp3List.add("d://b.mp3")

mp3List.add("d://c.mp3")

PlayerMusic pm = new PlayerMusic(mp3List)

pm.start()

}

}

作业其实还是自己写的好。要用到JMF包啊,到网上下载一个JMF包,照着说明安装上。

以下是我写的一个很简单的播放器,只能播放mp3,mpeg,mpg,wav等简单的格式。

import java.awt.*

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

import javax.media.ControllerEvent

import javax.media.ControllerListener

import javax.media.MediaLocator

import javax.media.RealizeCompleteEvent

import javax.media.bean.playerbean.MediaPlayer

import javax.swing.JPanel

import javax.swing.JFrame

import javax.swing.SwingUtilities

import javax.swing.JList

import java.awt.BorderLayout

import javax.swing.JSplitPane

import java.awt.Component

import java.util.Vector

public class JMF_T extends JFrame implements ControllerListener, ActionListener {

MediaPlayer Player

private String filename = ""

private static final long serialVersionUID = 1L

private Vector vct = new Vector()// @jve:decl-index=0:

private JPanel jContentPane = null

private JSplitPane jSplitPane = null

private JPanel playPanel = null

private JList jList = null

private JSplitPane getJSplitPane() {

if (jSplitPane == null) {

jSplitPane = new JSplitPane()

jSplitPane.setDividerSize(5)

jSplitPane.setResizeWeight(0.8)

jSplitPane.setRightComponent(getJList())

jSplitPane.setLeftComponent(getPlayPanel())

}

return jSplitPane

}

private JPanel getPlayPanel() {

if (playPanel == null) {

playPanel = new JPanel()

playPanel.setLayout(new BorderLayout())

}

return playPanel

}

private JList getJList() {

if (jList == null) {

jList = new JList()

jList.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent e) {

// TODO Auto-generated Event stub mouseClicked()

if (e.getClickCount() == 1) {

String str = (String) jList.getSelectedValue()

if (str == null) {

return

}

filename = str

System.out.println(str)

}

if (e.getClickCount() == 2) {

String str = (String) jList.getSelectedValue()

if (str == null) {

return

}

filename = str

play()

}

}

})

}

return jList

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

JMF_T thisClass = new JMF_T()

thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

thisClass.setVisible(true)

}

})

}

public JMF_T() {

initialize()

}

private void OpenFile() {

FileDialog fd = new FileDialog(this, "Choose Video", FileDialog.LOAD)

fd.setVisible(true)

filename = fd.getDirectory() + fd.getFile()

System.out.println(filename)

if (filename.equals("")) {

return

} else if (filename.equals("nullnull")) {

return

}

boolean j = false

for (int i = 0i <vct.size()i++) {

if (vct.get(i).toString().equals(filename)) {

j = true

break

}

}

if (j == false) {

vct.add(filename)

jList.setListData(vct)

}

}

private void stop() {

if (Player != null) {

Player.stop()

Player.deallocate()

}

}

private void play() {

try {

if (filename.equals("")) {

return

}

if (Player == null) {

Player = new MediaPlayer()

} else {

closePreviosPlayer()

}

Player.setMediaLocator(new MediaLocator("file:///" + filename))

Player.addControllerListener(this)

Player.realize()

Player.start()

} catch (Exception e) {

}

}

public void actionPerformed(ActionEvent e) {

String action = e.getActionCommand().toString()

if (action.equals("Open")) {

OpenFile()

}

if (action.equals("Play")) {

play()

}

if (action.equals("Stop")) {

stop()

}

if (action.equals("Exit")) {

dispose()

System.exit(0)

}

}

private void initialize() {

this.setSize(500, 350)

setLocation(300, 100)

this.setContentPane(getJContentPane())

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

dispose()

System.exit(0)

}

})

MenuBar mb = new MenuBar()

setMenuBar(mb)

Menu fileMenu = new Menu("File")

Menu actMenu = new Menu("Action")

mb.add(fileMenu)

mb.add(actMenu)

MenuItem itemOpen = new MenuItem("Open")

itemOpen.addActionListener(this)

fileMenu.add(itemOpen)

fileMenu.addSeparator()

MenuItem itemPlay = new MenuItem("Play")

itemPlay.addActionListener(this)

actMenu.add(itemPlay)

actMenu.addSeparator()

MenuItem itemStop = new MenuItem("Stop")

itemStop.addActionListener(this)

actMenu.add(itemStop)

MenuItem itemExit = new MenuItem("Exit")

itemExit.addActionListener(this)

fileMenu.add(itemExit)

this.validate()

this.setVisible(true)

}

private JPanel getJContentPane() {

if (jContentPane == null) {

jContentPane = new JPanel()

jContentPane.setLayout(new BorderLayout())

jContentPane.add(getJSplitPane(), BorderLayout.CENTER)

}

return jContentPane

}

private void closePreviosPlayer() {

if (Player == null)

return

Player.stop()

Player.deallocate()// 停止播放并且重新装载DateSource

Component visual = Player.getVisualComponent()

Component control = Player.getControlPanelComponent()

if (visual != null) {

playPanel.remove(visual)

}

if (control != null) {

playPanel.remove(control)

}

}

public synchronized void controllerUpdate(ControllerEvent event) {

if (event instanceof RealizeCompleteEvent) {

Component comp

if ((comp = Player.getControlPanelComponent()) != null) {

playPanel.add("South", comp)

} else {

closePreviosPlayer()

}

if ((comp = Player.getVisualComponent()) != null) {

playPanel.add("Center", comp)

}

validate()

}

}

}

--------------不支持MP3---------------------

public AudioClip loadSound(String filename) { // 返回一个AudioClip对象

URL url = null // 因为newAudioClip()的参数为URL型

try {

url = new URL("file:" + filename) // 指定文件,“file:"不能少

} catch (MalformedURLException e) {

}

return JApplet.newAudioClip(url) // 通过newAudioClip(

// )方法装载声音,此方法为JDK后添加的方法,太老的JDK里可能没有

}

AudioClip s1 = loadSound("声音//TableStopGetPrice.wav")

s1.play()

------------------支持mp3--------------------------

见附件

import java.io.File

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.InputStream

import javazoom.jl.decoder.Bitstream

import javazoom.jl.decoder.BitstreamException

import javazoom.jl.decoder.Decoder

import javazoom.jl.decoder.Header

import javazoom.jl.decoder.JavaLayerException

import javazoom.jl.decoder.SampleBuffer

import javazoom.jl.player.AudioDevice

import javazoom.jl.player.FactoryRegistry

/**

 * The <code>Player</code> class implements a simple player for playback of an

 * MPEG audio stream.

 * 

 * @author Mat McGowan

 * @since 0.0.8

 */

public class Player

{

/**

 * The current frame number.

 */

private int frame = 0

/**

 * The MPEG audio bitstream.

 */

// javac blank final bug.

/* final */private Bitstream bitstream

/**

 * The MPEG audio decoder.

 */

/* final */private Decoder decoder

/**

 * The AudioDevice the audio samples are written to.

 */

private AudioDevice audio

/**

 * Has the player been closed?

 */

private boolean closed = false

/**

 * Has the player played back all frames from the stream?

 */

private boolean complete = false

private int lastPosition = 0

/**

 * Creates a new <code>Player</code> instance.

 */

public Player ( InputStream stream ) throws JavaLayerException

{

this (stream, null)

}

public Player ( InputStream stream, AudioDevice device ) throws JavaLayerException

{

bitstream = new Bitstream (stream)

decoder = new Decoder ()

if (device != null)

{

audio = device

}

else

{

FactoryRegistry r = FactoryRegistry.systemRegistry ()

audio = r.createAudioDevice ()

}

audio.open (decoder)

}

public void play () throws JavaLayerException

{

play (Integer.MAX_VALUE)

}

/**

 * Plays a number of MPEG audio frames.

 * 

 * @param frames

 *            The number of frames to play.

 * @return true if the last frame was played, or false if there are more

 *         frames.

 */

public boolean play ( int frames ) throws JavaLayerException

{

boolean ret = true

while (frames-- > 0 && ret)

{

ret = decodeFrame ()

}

if (!ret)

{

// last frame, ensure all data flushed to the audio device.

AudioDevice out = audio

if (out != null)

{

out.flush ()

synchronized (this)

{

complete = ( !closed )

close ()

}

}

}

return ret

}

/**

 * Cloases this player. Any audio currently playing is stopped immediately.

 */

public synchronized void close ()

{

AudioDevice out = audio

if (out != null)

{

closed = true

audio = null

// this may fail, so ensure object state is set up before

// calling this method.

out.close ()

lastPosition = out.getPosition ()

try

{

bitstream.close ()

}

catch (BitstreamException ex)

{}

}

}

/**

 * Returns the completed status of this player.

 * 

 * @return true if all available MPEG audio frames have been decoded, or

 *         false otherwise.

 */

public synchronized boolean isComplete ()

{

return complete

}

/**

 * Retrieves the position in milliseconds of the current audio sample being

 * played. This method delegates to the <code>

 * AudioDevice</code> that is used by this player to sound the decoded audio

 * samples.

 */

public int getPosition ()

{

int position = lastPosition

AudioDevice out = audio

if (out != null)

{

position = out.getPosition ()

}

return position

}

/**

 * Decodes a single frame.

 * 

 * @return true if there are no more frames to decode, false otherwise.

 */

protected boolean decodeFrame () throws JavaLayerException

{

try

{

AudioDevice out = audio

if (out == null)

return false

Header h = bitstream.readFrame ()

if (h == null)

return false

// sample buffer set when decoder constructed

SampleBuffer output = (SampleBuffer) decoder.decodeFrame (h, bitstream)

synchronized (this)

{

out = audio

if (out != null)

{

out.write (output.getBuffer (), 0, output.getBufferLength ())

}

}

bitstream.closeFrame ()

}

catch (RuntimeException ex)

{

throw new JavaLayerException ("Exception decoding audio frame", ex)

}

/*

 * catch (IOException ex) {

 * System.out.println("exception decoding audio frame: "+ex) return

 * false } catch (BitstreamException bitex) {

 * System.out.println("exception decoding audio frame: "+bitex) return

 * false } catch (DecoderException decex) {

 * System.out.println("exception decoding audio frame: "+decex) return

 * false }

 */

return true

}

public static void main ( String[] args )

{

try

{

Player player = new Player (new FileInputStream (new File ("D:\\Youdagames\\JLayer1.0.1\\abc.mp3")))

player.play ()

}

catch (FileNotFoundException e)

{

e.printStackTrace ()

}

catch (JavaLayerException e)

{

e.printStackTrace ()

}

}

}