How to Play MP3 Files with Java
Well, it’s actually very simple, first of all you need to download libraries (mp3spi1.9.4.jar, jl1.0.jar and tritonus_share.jar) from Tritonus and from JLayer.
Here is how i code it,
package com.edw.mp3.main; import java.io.File; 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 org.apache.log4j.Logger; public class Main extends Thread { private String filename; private static Logger logger = Logger.getLogger(Main.class); public Main(String filename) { super(); this.filename = filename; } @Override public void run() { try { File file = new File(filename); AudioInputStream in = AudioSystem.getAudioInputStream(file); AudioInputStream din = null; AudioFormat baseFormat = in.getFormat(); AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false); din = AudioSystem.getAudioInputStream(decodedFormat, in); // play it... rawplay(decodedFormat, din); in.close(); } catch (Exception e) { logger.error(e.getMessage(),e); } finally{ logger.debug("finish playing "+filename); } } private synchronized void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException { byte[] data = new byte[4096]; SourceDataLine line = getLine(targetFormat); if (line != null) { // Start line.start(); int nBytesRead = 0, nBytesWritten = 0; while (nBytesRead != -1) { nBytesRead = din.read(data, 0, data.length); if (nBytesRead != -1) { nBytesWritten = line.write(data, 0, nBytesRead); } } // Stop line.drain(); line.stop(); line.close(); din.close(); } } private synchronized SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException { SourceDataLine res = null; DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat); res = (SourceDataLine) AudioSystem.getLine(info); res.open(audioFormat); return res; } public static void main(String[] args) { // my relative path file name String song = "Bondan ft. Fade2Black-Ya Sudahlah.mp3"; logger.debug("start playing "+song); Main mp3Sound = new Main(song); mp3Sound.start(); } }
And my Netbeans’ project structure
Actually i code it a long time ago, Thank God it’s still works. If you have any suggestion, feel free to comment it.
Cheers..
No Comments