⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playerctrl.java

📁 mp3播放功能
💻 JAVA
字号:
package MP3;

import java.io.File;
import java.util.Map;

import javax.sound.sampled.SourceDataLine;

import javazoom.jlgui.basicplayer.BasicController;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerEvent;
import javazoom.jlgui.basicplayer.BasicPlayerException;
import javazoom.jlgui.basicplayer.BasicPlayerListener;

/**
 * This class implements interface BasicPlayerListener.The class
 * is designed to perform the most functions of the mp3 player,
 * such as open, play, pause, stop, seek, rusume,set volumn, 
 * startDSP.It is also a controller of mp3 player, it can get 
 * songs' information to perform the functions.
 *  
 * @author ChenXiaoling
 *
 */

public class PlayerCtrl implements BasicPlayerListener {
	private BasicPlayer player = new BasicPlayer();  
	private Map mp3;
	private double playedRate=0;
	private SpectrumTimeAnalyzer  playAnalyzer;

	public PlayerCtrl(){
		player.addBasicPlayerListener(this);
	}

	/**
	 * @see javazoom.jlgui.basicPlayerListener
	 */
	public void opened(Object arg0, Map arg1) {
		// TODO Auto-generated method stub
		mp3 = arg1;
	}

	/**
	 * 
	 * @see javazoom.jlgui.basicPlayerListener
	 */
	public void progress(int arg0, long arg1, byte[] arg2, Map arg3) {
		// TODO Auto-generated method stub
		playedRate = arg0 /((Integer) mp3.get("audio.length.bytes")).doubleValue();
		update();
		if(playAnalyzer != null){			
			playAnalyzer.writeDSP(arg2);
		}


	}

	/**
	 * @see javazoom.jlgui.basicPlayerListener
	 *
	 */
	protected void update(){

	}



	/**
	 * @see javazoom.jlgui.basicPlayerListener
	 *
	 */
	public void setController(BasicController arg0) {
		// TODO Auto-generated method stub

	}

	/**
	 * @see javazoom.jlgui.basicPlayerListener
	 *
	 */
	public void stateUpdated(BasicPlayerEvent arg0) {
		// TODO Auto-generated method stub

	}

    /**
     * 
     * @return  Returns a mp3 property
     */
	public Map getMp3Property(){
		return mp3;
	}
	
	/**
	 * 
	 * @return Returns total bytes of an audio
	 */
	public int getTotalBytes(){
		return ((Integer) mp3.get("audio.length.bytes")).intValue();
	}

	
	public double playedRate(){
		return  playedRate;
	}

	public long getTotalTimeSecond(){
		return (long) Math.round(getTimeLengthEstimation(mp3)/1000);//seconds
	}


	/**
	 * 
	 * Get the time length of a song.
	 * 
	 * @param properties
	 * @return Returns the duration of a song,which has been changed into milliseconds.
	 */
	private long getTimeLengthEstimation(Map properties)
	{
		long milliseconds = -1;
		int byteslength = -1;
		if (properties != null)
		{
			if (properties.containsKey("audio.length.bytes"))
			{
				byteslength = ((Integer) properties.get("audio.length.bytes")).intValue();
			}
			if (properties.containsKey("duration"))  //持续时间
			{
				milliseconds = (int) (((Long) properties.get("duration")).longValue()) / 1000;
			}
			else
			{
				// Try to compute duration
				int bitspersample = -1;
				int channels = -1;
				float samplerate = -1.0f;
				int framesize = -1;
				if (properties.containsKey("audio.samplesize.bits"))
				{
					bitspersample = ((Integer) properties.get("audio.samplesize.bits")).intValue();
				}
				if (properties.containsKey("audio.channels"))
				{
					channels = ((Integer) properties.get("audio.channels")).intValue();
				}
				if (properties.containsKey("audio.samplerate.hz"))
				{
					samplerate = ((Float) properties.get("audio.samplerate.hz")).floatValue();
				}
				if (properties.containsKey("audio.framesize.bytes"))
				{
					framesize = ((Integer) properties.get("audio.framesize.bytes")).intValue();
				}
				if (bitspersample > 0)
				{
					milliseconds = (int) (1000.0f * byteslength / (samplerate * channels * (bitspersample / 8)));
				}
				else
				{
					milliseconds = (int) (1000.0f * byteslength / (samplerate * framesize));
				}
			}
		}
		return milliseconds;
	}

	/**
	 * 
	 * @param playAnalyzer
	 */
	public void setTVShow(SpectrumTimeAnalyzer playAnalyzer) {
		this.playAnalyzer = playAnalyzer;
	}
	
	/**
	 * Open an audio file.
	 * 
	 * @param songName
	 */
	public void openSong(String songName){
		try {
			player.open(new File(songName));
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Seek the current position that a song has been displayed
	 * @param arg0
	 */
	public void seek(long arg0){
		try {
			player.seek(arg0);
			startDSP();
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void seek(double arg0){		
		int totalBytes = getTotalBytes();
		long seekByte = Math.round(totalBytes*arg0);
		seek(seekByte);
	}
	
	/**
	 * Play an audio file
	 *
	 */
	public void play(){
		try {
			player.play();
			startDSP();
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Pause playing an audio file
	 *
	 */
	public void pause(){
		try {
			player.pause();
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Stop playing an audio file
	 *
	 */
	public void stop(){
		try {
			player.stop();
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Resume playing an audio file
	 *
	 */
	public void resume(){
		try {
			player.resume();
			startDSP();
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Set the volumn of the currenr audio file which is being displayed
	 * @param value
	 */
	public void setVolumnGain(double value){
		try {
			player.setGain(value);
		} catch (BasicPlayerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Start to display Spectrum Time Analyzer
	 *
	 */
	private void startDSP(){
		if(mp3 != null){
			Object dataLine = mp3.get("basicplayer.sourcedataline");
			if(dataLine != null && playAnalyzer != null){				
				playAnalyzer.setupDSP((SourceDataLine)dataLine);
				playAnalyzer.startDSP((SourceDataLine)dataLine);
			}
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -