standaloneplayer.java

来自「java平台的图形音乐播放器」· Java 代码 · 共 501 行 · 第 1/2 页

JAVA
501
字号
/*
 * StandalonePlayer.
 *
 * JavaZOOM : jlgui@javazoom.net
 *            http://www.javazoom.net
 * 
 *-----------------------------------------------------------------------
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Library 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 Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *----------------------------------------------------------------------
 */
package javazoom.jlgui.player.amp;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JWindow;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.player.amp.skin.DragAdapter;
import javazoom.jlgui.player.amp.skin.Skin;
import javazoom.jlgui.player.amp.util.Config;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class StandalonePlayer extends JFrame implements Loader
{
    private static Log log = LogFactory.getLog(StandalonePlayer.class);
    /*-- Run parameters --*/
    private String initConfig = "jlgui.ini";
    private String initSong = null;
    private String showPlaylist = null;
    private String showEqualizer = null;
    private String showDsp = null;
    private String skinPath = null;
    private String skinVersion = "1"; // 1, 2, for different Volume.bmp
    private boolean autoRun = false;
    /*-- Front-end --*/
    private PlayerUI mp = null;
    private JWindow eqWin = null;
    private JWindow plWin = null;
    private int eqFactor = 2;
    private Config config = null;
    private boolean playlistfound = false;

    public StandalonePlayer()
    {
        super();
    }

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        final StandalonePlayer player = new StandalonePlayer();
        player.parseParameters(args);
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                player.loadUI();
                player.loadJS();
                player.loadPlaylist();
                player.boot();
            }
        });
    }

    /**
     * Initialize the player front-end.
     * @param args
     */
    private void parseParameters(String[] args)
    {
        String currentArg = null;
        String currentValue = null;
        for (int i = 0; i < args.length; i++)
        {
            currentArg = args[i];
            if (currentArg.startsWith("-"))
            {
                if (currentArg.toLowerCase().equals("-init"))
                {
                    i++;
                    if (i >= args.length) usage("init value missing");
                    currentValue = args[i];
                    if (Config.startWithProtocol(currentValue)) initConfig = currentValue;
                    else initConfig = currentValue.replace('\\', '/').replace('/', java.io.File.separatorChar);
                }
                else if (currentArg.toLowerCase().equals("-song"))
                {
                    i++;
                    if (i >= args.length) usage("song value missing");
                    currentValue = args[i];
                    if (Config.startWithProtocol(currentValue)) initSong = currentValue;
                    else initSong = currentValue.replace('\\', '/').replace('/', java.io.File.separatorChar);
                }
                else if (currentArg.toLowerCase().equals("-start"))
                {
                    autoRun = true;
                }
                else if (currentArg.toLowerCase().equals("-showplaylist"))
                {
                    showPlaylist = "true";
                }
                else if (currentArg.toLowerCase().equals("-showequalizer"))
                {
                    showEqualizer = "true";
                }
                else if (currentArg.toLowerCase().equals("-disabledsp"))
                {
                    showDsp = "false";
                }
                else if (currentArg.toLowerCase().equals("-skin"))
                {
                    i++;
                    if (i >= args.length) usage("skin value missing");
                    currentValue = args[i];
                    if (Config.startWithProtocol(currentValue)) skinPath = currentValue;
                    else skinPath = currentValue.replace('\\', '/').replace('/', java.io.File.separatorChar);
                }
                else if (currentArg.toLowerCase().equals("-v"))
                {
                    i++;
                    if (i >= args.length) usage("skin version value missing");
                    skinVersion = args[i];
                }
                else usage("Unknown parameter : " + currentArg);
            }
            else
            {
                usage("Invalid parameter :" + currentArg);
            }
        }
    }

    private void boot()
    {
        // Go to playlist begining if needed.
        /*if ((playlist != null) && (playlistfound == true))
         {
         if (playlist.getPlaylistSize() > 0) mp.pressNext();
         } */
        // Start playing if needed.
        if (autoRun == true)
        {
            mp.pressStart();
        }
    }

    /**
     * Instantiate low-level player.
     */
    public void loadJS()
    {
        BasicPlayer bplayer = new BasicPlayer();
        List mixers = bplayer.getMixers();
        if (mixers != null)
        {
            Iterator it = mixers.iterator();
            String mixer = config.getAudioDevice();
            boolean mixerFound = false;
            if ((mixer != null) && (mixer.length() > 0))
            {
                // Check if mixer is valid. 
                while (it.hasNext())
                {
                    if (((String) it.next()).equals(mixer))
                    {
                        bplayer.setMixerName(mixer);
                        mixerFound = true;
                        break;
                    }
                }
            }
            if (mixerFound == false)
            {
                // Use first mixer available.
                it = mixers.iterator();
                if (it.hasNext())
                {
                    mixer = (String) it.next();
                    bplayer.setMixerName(mixer);
                }
            }
        }
        // Register the front-end to low-level player events.
        bplayer.addBasicPlayerListener(mp);
        // Adds controls for front-end to low-level player.
        mp.setController(bplayer);
    }

    /**
     * Load playlist.
     */
    public void loadPlaylist()
    {
        if ((initSong != null) && (!initSong.equals(""))) playlistfound = mp.loadPlaylist(initSong);
        else playlistfound = mp.loadPlaylist(config.getPlaylistFilename());
    }

    /**
     * Load player front-end.
     */
    public void loadUI()
    {
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch (Exception ex)
        {
            log.debug(ex);
        }
        config = Config.getInstance();
        config.load(initConfig);
        config.setTopParent(this);
        if (showPlaylist != null)
        {
            if (showPlaylist.equalsIgnoreCase("true"))
            {
                config.setPlaylistEnabled(true);
            }
            else
            {

⌨️ 快捷键说明

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