📄 playerctrl.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 + -