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

📄 player.java

📁 - MP3 streaming support for Shoutcast/Icecast added. - Ogg Vorbis support added. - Playlist implem
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package javazoom.jlGui;

/*
 * Player.
 *
 *-----------------------------------------------------------------------
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *----------------------------------------------------------------------
 */

import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import javax.sound.sampled.*;
import javazoom.jlGui.skin.*;
import javazoom.jlGui.playlist.*;
import javazoom.Util.*;
/*
 * Player is the core of jlGui.<br>
 *
 * @author	E.B from JavaZOOM
 *
 * Homepage : http://www.javazoom.net
 */
public class Player extends Window implements ActionListener, BasicPlayerListener
{
	private String 		        currentFileOrURL = null;
    private String              currentSongName = null;
	private boolean		        currentIsFile;

    /*-- Window Parameters --*/
    private Image               offScreenImage;
    private Graphics            offScreenGraphics;
    private int                 WinWidth, WinHeight;
    private int                 OrigineX = 10, OrigineY = 10;
	private String		        thePath="";
	private String      		theMain="main.bmp";

	/*-- Buttons Panel members --*/
	private String		        theButtons="cbuttons.bmp";
	private Image		        imMain,imButtons;
	private activeComponent     acPrevious,acPlay,acPause,acStop,acNext,acEject;
	private Image	        	imPrevious,imPlay,imPause,imStop,imNext,imEject;
	private Image[]	        	releasedImage = {imPrevious,imPlay,imPause,imStop,imNext,imEject};
	private Image[]	        	pressedImage = {imPrevious,imPlay,imPause,imStop,imNext,imEject};
	private int[]	        	releasedPanel = {0,0,23,18, 23,0,23,18, 46,0,23,18, 69,0,23,18, 92,0,22,18, 114,0,22,16};
	private int[]	    	    pressedPanel  = {0,18,23,18, 23,18,23,18, 46,18,23,18, 69,18,23,18, 92,18,22,18, 114,16,22,16};
	private int[]               panelLocation = {16,88, 39,88, 62,88, 85,88, 108,88, 137,89};

    /*-- Title members --*/
	private boolean     		FirstDrag = true;
	private int                 XDrag = 0, YDrag = 0;
	private String		        theTitleBar="titlebar.bmp";
	private Image		        imTitleBar;
    private activeComponent     acTitleBar;
	private Image	        	imTitleB;
	private Image[]	        	releasedTitleIm = {imTitleB};
	private Image[]	        	pressedTitleIm = {imTitleB};
	private int[]	        	releasedTitlePanel = {27,0,264,14};
	private int[]	    	    pressedTitlePanel  = {27,15,264,14};
	private int[]               titleBarLocation = {0,0};

    private activeComponent     acExit;
	private int[]	        	releasedExitPanel = {18,0,9,9};
	private int[]	    	    pressedExitPanel  = {18,9,9,9};
	private Image[]	        	releasedExitIm = {null};
	private Image[]	        	pressedExitIm = {null};
	private int[]               exitLocation = {264,3};

	/*-- Text Members --*/
	private int                 fontWidth = 5;
	private int                 fontHeight = 6;
    private String              theText = "text.bmp";
	private Image               imText;
	private String              fontIndex =   "ABCDEFGHIJKLMNOPQRSTUVWXYZ\"@a  "
	                                        + "0123456789  :()-'!_+ /[]^&%.=$#"
	                                        + "   ?*";
    private Image               sampleRateImage;
    private String              sampleRateClearText = "  ";
    private Image               sampleRateClearImage;
    private int[]               sampleRateLocation = {156,43};
    private String              bitsRateClearText = "    ";
    private Image               bitsRateClearImage;
	private Image               bitsRateImage;
	private int[]               bitsRateLocation = {107,43};
	private String              TITLETEXT = "JLGUI 2.0";
	private String              titleText = TITLETEXT;
    private String              clearText = "                                     ";
    private Image               clearImage;
	private Image               titleImage;
	private int[]               titleLocation = {111,27};

	/*-- Numbers Members --*/
	private int                 numberWidth = 9;
	private int                 numberHeight = 13;
    private String              theNumbers = "numbers.bmp";
	private Image               imNumbers;
	private String              numberIndex = "0123456789 ";
    private Image               minuteImage;
    private Image               secondImage;
    private Image               minuteDImage;
    private Image               secondDImage;
    private Image[]             timeImage = {null,null,null,null,null,null,null,null,null,null,null};
    private int[]               minuteDLocation = {48,26};
    private int[]               minuteLocation = {60,26};
    private int[]               secondDLocation = {78,26};
    private int[]               secondLocation = {90,26};

	/*-- Mono/Stereo Members --*/
    private String              theMode = "monoster.bmp";
    private Image               imMode;
    private int[]	        	activeModePanel = {0,0,28,12, 29,0,27,12};
    private int[]	        	passiveModePanel = {0,12,28,12, 29,12,27,12};
    private Image               imSA,imMA,imSI,imMI;
    private Image[]             activeModeImage = {imSA,imMA};
    private Image[]             passiveModeImage = {imSI,imMI};
	private int[]               monoLocation = {212,40};
	private int[]               stereoLocation = {239,40};

	/*-- Volume/Balance Panel members --*/
	private boolean     		FirstVolumeDrag = true;
	private int                 XVolumeDrag = 0;
	private String		        theVolume="volume.bmp";
	private Image		        imVolume;
	private activeComponent     acVolume, acBalance;
	private Image[]	        	volumeImage = {null,null,null,null,null,null,null,
	                                           null,null,null,null,null,null,null,
	                                           null,null,null,null,null,null,null,
	                                           null,null,null,null,null,null,null};
    private String              fakeIndex = "abcdefghijklmnopqrstuvwxyz01";
	private int[]               volumeBarLocation = {107,57};
    private Image[]             releasedVolumeImage = {null};
    private Image[]	        	pressedVolumeImage = {null};
	private int[]	        	releasedVolumePanel = {15,422,14,11};
	private int[]	    	    pressedVolumePanel  = {0,422,14,11};
	private int     			minGain		= 0;
	private int			        maxGain		= 100;
    private int			        gainValue   = 80;
    private int                 deltaVolume = 50;
	private int[]               volumeLocation = {107+deltaVolume*gainValue/maxGain,58};
    private int[]               volumeBounds = {107,107+deltaVolume};

	private Image[]	        	balanceImage = {null};
	private boolean     		FirstBalanceDrag = true;
	private int                 XBalanceDrag = 0;
	private double     			minBalance	 = -1.0;
	private double		        maxBalance 	 = +1.0;
    private double		        balanceValue = 0.0;
   	private int                 deltaBalance = 24;
	private int[]               balanceLocation = {177+deltaBalance/2,58};
    private int[]               balanceBounds = {177,177+deltaBalance};
	private int[]               balanceBarLocation = {177,57};

    /*-- Play/Pause Icons --*/
	private String		        theIcons="playpaus.bmp";
	private Image		        imIcons;
	private Image[]	        	iconsImage = {null,null,null,null,null};
	private int[]	        	iconsPanel = {0,0,9,9 ,9,0,9,9, 18,0,9,9, 36,0,3,9, 27,0,2,9};
	private int[]               iconsLocation = {26,27, 24,27};


    /*-- PosBar members --*/
	private boolean     		FirstPosBarDrag = true;
	private int                 XPosBarDrag = 0;
	private String		        thePosBar="posbar.bmp";
	private Image		        imPosBar;
    private activeComponent     acPosBar;
	private Image[]	        	releasedPosIm = {null};
	private Image[]	        	pressedPosIm = {null};
	private int[]	        	releasedPosPanel = {248,0,28,10};
	private int[]	    	    pressedPosPanel  = {278,0,28,10};
	private double     			minPos = 0.0;
	private double		        maxPos = +1.0;
    private double		        posValue = 0.0;
   	private int                 deltaPosBar = 219;
	private int[]               posBarLocation = {16,72};
    private int[]               posBarBounds = {16,16+deltaPosBar};

	//private int[]               posBarLocation = {16,72};

    /*-- JavaSound Members --*/
    private static final int    INIT = 0;
    private static final int    OPEN = 1;
    private static final int    PLAY = 2;
    private static final int    PAUSE = 3;
    private static final int    STOP = 4;
	private int                 playerState =  INIT;
	private long                secondsAmount = 0;

	private Playlist         	playlist = null;
	private BasicPlayer         theSoundPlayer = null;
	private Config				config = null;

	/**
	 * Constructor.
	 */
	public Player(String Skin, int loglevel, String logfile)
	{
		super(new Frame());
		// Log feature.
		Debug dbg = Debug.getInstance();
		if ( (logfile != null) && (!logfile.equals("")) )
		{
			dbg.init(logfile, loglevel);
		}
		else dbg.setLogLevel(loglevel);
		// Config feature.
		config = Config.getInstance();
		// Skin feature.
		if (Skin != null) thePath = Skin;
		else thePath = config.getDefaultSkin();
		SkinLoader skl = new SkinLoader(thePath);
	    try
	    {
	    	 skl.loadImages();
	    } catch (Exception e)
	  	  {
			trace(0,getClass().getName(),"Can't load skin : "+e.getMessage());
			System.exit(0);
		  }

	    imMain = skl.getImage(theMain);
		imButtons = skl.getImage(theButtons);
		imTitleBar = skl.getImage(theTitleBar);
		imText = skl.getImage(theText);
		imMode = skl.getImage(theMode);
		imNumbers = skl.getImage(theNumbers);
		imVolume = skl.getImage(theVolume);
		imIcons = skl.getImage(theIcons);
		imPosBar = skl.getImage(thePosBar);

		WinHeight = imMain.getHeight(this);
		WinWidth = imMain.getWidth(this);
		setSize(WinWidth,WinHeight);
		setLocation(OrigineX,OrigineY);
		setBackground(Color.black);
		show();

      	offScreenImage = createImage(WinWidth,WinHeight);
	    offScreenGraphics = offScreenImage.getGraphics();
	    offScreenGraphics.drawImage(imMain,0,0,this);

		// Playlist feature.
		PlaylistFactory plf = PlaylistFactory.getInstance();
		playlist = plf.getPlaylist();
		playlist.load(config.getPlaylistFilename());

        theSoundPlayer = new BasicPlayer(this);

        /*-- Buttons --*/
        readPanel(releasedImage,releasedPanel,pressedImage,pressedPanel,imButtons);
        setButtonsPanel();

        /*-- Volume/Balance --*/
        readPanel(releasedVolumeImage,releasedVolumePanel,pressedVolumeImage,pressedVolumePanel,imVolume);
        setVolumePanel();

        /*-- Title Bar --*/
        readPanel(releasedTitleIm,releasedTitlePanel,pressedTitleIm,pressedTitlePanel,imTitleBar);
        setTitleBarPanel();

        /*-- Exit --*/
        readPanel(releasedExitIm,releasedExitPanel,pressedExitIm,pressedExitPanel,imTitleBar);
        setExitPanel();


        /*-- Mode --*/
        readPanel(activeModeImage,activeModePanel,passiveModeImage,passiveModePanel,imMode);
        offScreenGraphics.drawImage(passiveModeImage[0], stereoLocation[0], stereoLocation[1], this);
        offScreenGraphics.drawImage(passiveModeImage[1], monoLocation[0], monoLocation[1], this);

        /*-- Text --*/
        sampleRateClearImage = (new taftb(fontIndex, imText, fontWidth, fontHeight, 0, sampleRateClearText)).getBanner();
        bitsRateClearImage = (new taftb(fontIndex, imText, fontWidth, fontHeight, 0, bitsRateClearText)).getBanner();
        clearImage = (new taftb(fontIndex, imText, fontWidth, fontHeight, 0, clearText)).getBanner(0,0,155,6);
        titleImage = (new taftb(fontIndex, imText, fontWidth, fontHeight, 0, titleText)).getBanner(0,0,155,6);
        offScreenGraphics.drawImage(titleImage, titleLocation[0], titleLocation[1], this);

        /*-- Numbers --*/
        for (int h=0;h<numberIndex.length();h++)
        {
            timeImage[h] = (new taftb(numberIndex, imNumbers, numberWidth, numberHeight, 0, ""+numberIndex.charAt(h))).getBanner();
        }

        /*--  Icons --*/
        readPanel(iconsImage,iconsPanel,null,null,imIcons);
        offScreenGraphics.drawImage(iconsImage[2], iconsLocation[0], iconsLocation[1], this);

        /*-- Pos Bar --*/
        readPanel(releasedPosIm,releasedPosPanel,pressedPosIm,pressedPosPanel,imPosBar);
        setPosBarPanel();

        repaint();
	}

    /**
     * Crop Panel Features from image file.
     */
    private void readPanel(Image[] releasedImage, int[] releasedPanel,
                           Image[] pressedImage,  int[] pressedPanel, Image imPanel)
    {
       int xul,yul,xld,yld;
       int j = 0;
       if (releasedImage != null)
       {
           for (int i = 0; i<releasedImage.length; i++)
           {
                releasedImage[i] = createImage(releasedPanel[j+2],releasedPanel[j+3]);
                xul = releasedPanel[j];
                yul = releasedPanel[j+1];
                xld = releasedPanel[j] + releasedPanel[j+2];
                yld = releasedPanel[j+1] + releasedPanel[j+3];
		        (releasedImage[i].getGraphics()).drawImage(imPanel,0,0,releasedPanel[j+2],releasedPanel[j+3],
		                                                   xul,yul,xld,yld,null);
                j = j + 4;
	      }
       }
       j = 0;

       if (pressedImage != null)
       {
            for (int i = 0; i<pressedImage.length; i++)
            {
                pressedImage[i] = createImage(pressedPanel[j+2],pressedPanel[j+3]);
                xul = pressedPanel[j];
                yul = pressedPanel[j+1];
                xld = pressedPanel[j] + pressedPanel[j+2];
                yld = pressedPanel[j+1] + pressedPanel[j+3];
		        (pressedImage[i].getGraphics()).drawImage(imPanel,0,0,pressedPanel[j+2],pressedPanel[j+3],
		                                                   xul,yul,xld,yld,null);
                j = j + 4;
	        }
	   }
    }

    /**
     * Instantiate Buttons Panel with activeComponent.
     * Add them to window and ActionListener.
     */
    private void setButtonsPanel()
    {
        int l = 0;
        setLayout(null);
        acPrevious = new activeComponent(releasedImage[0],pressedImage[0],AWTEvent.MOUSE_EVENT_MASK);
        acPrevious.setLocation(panelLocation[l++],panelLocation[l++]);
        add(acPrevious);
        acPrevious.setActionCommand("Previous");
        acPrevious.addActionListener(this);

        acPlay =  new activeComponent(releasedImage[1],pressedImage[1],AWTEvent.MOUSE_EVENT_MASK);
        acPlay.setLocation(panelLocation[l++],panelLocation[l++]);
        add(acPlay);
        acPlay.setActionCommand("Play");
        acPlay.addActionListener(this);

        acPause =  new activeComponent(releasedImage[2],pressedImage[2],AWTEvent.MOUSE_EVENT_MASK);
        acPause.setLocation(panelLocation[l++],panelLocation[l++]);

⌨️ 快捷键说明

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