📄 config.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.hadeslee.yoyoplayer.util;import com.hadeslee.yoyoplayer.lyric.*;import com.hadeslee.yoyoplayer.player.ui.PlayerUI;import com.hadeslee.yoyoplayer.playlist.PlayList;import com.hadeslee.yoyoplayer.setting.OptionDialog;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Font;import java.awt.Point;import java.awt.Rectangle;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Locale;import java.util.Map;import java.util.ResourceBundle;import java.util.Set;import java.util.Vector;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.ImageIcon;import javax.swing.JDialog;import javax.swing.JFrame;/** * 一个保存所有可配的信息的类,把所有可 * 保存的信息放到一个对象里面,这样便于 * 保存和读取 * @author hadeslee */public class Config implements Serializable { private static final long serialVersionUID = 20071127L; private static final Logger log = Logger.getLogger(Config.class.getName()); public int voteOpenCount,voteOneHourCount; /*******************************************************************/ /*************常量定义区*********************************************/ /*******************************************************************/ public static final String NAME = "YOYOPlayer"; public static final String EXTS = "snd,aifc,aif,wav,au,mp1,mp2,mp3,ogg,spx,flac,ape,mac"; public static final File HOME = new File(System.getProperty("user.home") + File.separator + ".YOYOPlayer"); public static final int POSBARMAX = 1000;//位置滚动条最大的数 public static final int VOLUMEMAX = 100;//音量最大 public static final int BALANCEMAX = 5;//左右平衡最大的值 /*********************ActionCommand定义区**************************/ public static final String PLAY = "play"; public static final String PAUSE = "pause"; public static final String STOP = "stop"; public static final String PREVIOUS = "previous"; public static final String NEXT = "next"; public static final String CLOSE = "close"; public static final String MINIMIZE = "minimize"; public static final String SETTING = "setting"; public static final String EQ_ON = "eq_on"; public static final String EQ_OFF = "eq_off"; public static final String LRC_ON = "lrc_on"; public static final String LRC_OFF = "lrc_off"; public static final String VOL_ON = "vol_on"; public static final String VOL_OFF = "vol_off"; public static final String PL_ON = "pl_on"; public static final String PL_OFF = "pl_off"; public static final String ABOUT = "about"; public static final String EQ_ENABLE = "eq_enable"; public static final String EQ_DISABLE = "eq_disable"; public static final String EQ_AUTO_ENABLE = "eq_auto_enable"; public static final String EQ_AUTO_DISABLE = "eq_auto_disable"; public static final String EQ_PRESET = "eq_preset"; /*******************检查更新策略常量定义区************************/ public static final String CHECK_DAY = "check.day";//每天检查 public static final String CHECK_WEEK = "check.week";//每周检查 public static final String CHECK_MONTH = "check.month";//每月检查 public static final String CHECK_NONE = "check.none";//不检查 /*******************读取文件标签策略常量定义区********************/ public static final String READ_WHEN_ADD = "read.when.add";//当添加时读取标签 public static final String READ_WHEN_DISPLAY = "read.when.display";//当显示时读取标签 public static final String READ_WHEN_PLAY = "read.when.play";//当播放时读取标签 /*******************歌词对齐常量定义区***************************/ public static final int LYRIC_LEFT_ALIGN = 1;//歌词左对齐 public static final int LYRIC_RIGHT_ALIGN = 2;//歌词右对齐 public static final int LYRIC_CENTER_ALIGN = 3;//歌词中间对齐 /*******************可视化区示波的消逝速度常量定义区**************/ public static final int DISAPPEAR_QUICK = 1;//消逝的速度快 public static final int DISAPPEAR_NORMAL = 2;//消逝的速度普通 public static final int DISAPPEAR_SLOW = 3;//消逝的速度慢 /*******************普通常量定义区*******************************/ public static final int REPEAT_ONE = 100;//单曲重复 public static final int REPEAT_ALL = 101;//整体重复 public static final String TITLETEXT = "YOYOPlayer"; public static final String[] protocols = {"http:", "file:", "ftp:", "https:", "ftps:", "jar:"}; public static final int ORDER_PLAY = 1;//表示顺序播放 public static final int RANDOM_PLAY = 0;//表示随机播放// public static final String TAGINFO_POLICY_FILE = "file";// public static final String TAGINFO_POLICY_ALL = "all"; public static final int APEv2_ID3v2_ID3v1 = 1;//读取的顺序,有四种组合 public static final int ID3v2_APEv2_ID3v1 = 2; public static final int ID3v1_APEv2_ID3v2 = 3; public static final int ID3v1_ID3v2_APEv2 = 4; public static final int WRITEMODE_ID3v1 = 1;//写入的顺序,有六种组合,用位来组合 public static final int WRITEMODE_ID3v2 = 2; public static final int WRITEMODE_APEv2 = 4; public static final String LRC_WINDOW = "lrcWindow"; public static final String PL_WINDOW = "plWindow"; public static final String EQ_WINDOW = "eqWindow"; public static final String MAIN_WINDOW = "mainWindow"; public static final String UNKNOWN_WINDOW = "unknown"; public static final int SNAP = 15;//吸附的象素 public static final int MOVE = 1; public static final int LEFT = 2; public static final int RIGHT = 3; public static final int TOP = 4; public static final int BOTTOM = 5; public static final int LEFT_TOP = 6; public static final int LEFT_BOTTOM = 7; public static final int RIGHT_TOP = 8; public static final int RIGHT_BOTTOM = 9; public static final int SHOWTIME_POSITIVE = 1;//以正数显示 public static final int SHOWTIME_NEGATIVE = -1;//以负数显示. /*******************************************************************/ /*************普通变量定义区*****************************************/ /*******************************************************************/ private static ResourceBundle rb = ResourceBundle.getBundle("com/hadeslee/yoyoplayer/util/UIInfo"); private boolean showLrc = true;//是否显示歌词秀窗口 private boolean showPlayList = true;//是否显示播放列表 private boolean showEq = true;//是否显示调音台 private boolean repeatEnabled = true;//是否允许重复,允许了以后,有两种模式,1,单曲重复,2,全部重复 private boolean equalizerOn = true;//表示调音器是否生效.面板显不显示和这个没关系 private boolean equalizerAuto;//表示调音器是否自动设置 private boolean shadow = false;//是否要窗口渐入渐出 private boolean isSnapEqWindow = true, isSnapLrcWindow = true, isSnapPlWindow = true;//是否吸纳住了三个窗口 private boolean isLinux;//是否是LINUX,它很多东西不支持 private boolean useProxy;//是否使用代理服务器搜索歌词 private boolean mute;//是否静音 private String audioDevice;//混音器设备的名字 private String playListFileName;//播放列表的文件名,放在程序同目录下 private String currentFileOrUrl;//最后也就是当前正在播放的文件或者URL private String lastDir;//最后所使用的目录// private String tagInfoPolicy = TAGINFO_POLICY_ALL;//标签的读取策略,是只读文件还是都读。 private String encoding = "GBK";//读取和写入标签的编码 private String proxyHost, proxyPort;//代理服务器的主机和端口号 private String proxyUserName, proxyPwd;//代理服务器的用户名和密码 private String currentPlayListName;//当前选中的播放列表的名字,下次打开也选中它 private int repeatStrategy = REPEAT_ALL;//重复策略 private int gainValue = VOLUMEMAX;//表示音量的大小保存量 private int panValue = 0;//表示声道的保存量 private int playStrategy = ORDER_PLAY;//表示播放策略,是顺序还是随机 private int xLocation = 300, yLocation = 100;//主窗口在屏幕上面的XY座标 private int bufferSize = 8;//缓冲大小 private int readTagOrder = APEv2_ID3v2_ID3v1;//读取标签的顺序,默认是ape,v2,v1 private int writeTagMode = WRITEMODE_ID3v1;//默认是使用ID3v1来写入 private int showTimeStyle = SHOWTIME_POSITIVE;//显示时间的方式 private int[] lastEqualizer;//最后调音器的配置,以便下次导入 private Point eqLocation, lrcLocation, plLocation;//三个窗口的位置 private Point disLrc, disEq, disPl;//三个面板和主面板的距离// private File lyricDir = new File(System.getProperty("user.home"));//歌词的搜索目录,并不是写入的目录,写入还是固定在user.home里面 private Dimension lrcSize, plSize;//歌词秀和播放列表的大小 private Vector<PlayList> playlists;//所有的播放列表 private Map<String, Set<String>> componentMap;//一个窗口关系的变量 private Date lastCheckUpdate=new Date();//最后一次检查更新的时候 /*******************************************************************/ /*****************不参与序列化的变量声明区****************************/ /*****************这些变量在使用前必须检查是否为空********************/ /*****************或者在初始化程序的时候,必须赋值给它*****************/ /*******************************************************************/ private transient JFrame topParent;//顶级窗口类是谁 private transient JDialog lrcWindow;//歌词电灯显示窗口 private transient JDialog plWindow;//播放列表的窗口 private transient JDialog eqWindow;//均衡器的窗口 private transient List mixers;//里面存的是所有的混音器,不用序列化 private transient OptionDialog optionDialog;//选项对话框 private transient PlayerUI player;//一个不序列化的播放器对象 /*******************************************************************/ /*****************常规设置要用到的变量********************************/ /*******************************************************************/ private boolean startAutoMinimize;//是否自动在启动的时候最小化 private boolean showTrayIcon = true;//是否显示系统栏图标 private boolean showPlayTip;//是否显示播放提示,在屏幕的右下角 private boolean showTitleInTaskBar = true;//是否在任务栏显示正在播放的歌曲 private transient boolean autoShutDown;//是否自动关机,不参与序列化 private transient Date shutDownTime;//自动关机的时间,不参与序列化 private String checkUpdateStrategy = CHECK_WEEK;//检查更新频率的策略 private boolean autoCloseDialogWhenSave;//在点击保存设置的时候,是否自动关闭对话框 private boolean miniHide;//最小化的时候是否隐藏主界面 /*******************************************************************/ /******************歌词搜索面板要用到的变量***************************/ /*******************************************************************/ private Vector<File> searchLyricDirs = new Vector<File>();//搜索歌词的目录 private boolean autoSearchLyricOnline = true;//播放音频文件时自动在线搜索歌词 private boolean searchWhenInfoFull;//是否当信息完整时才搜索 private boolean selectBestLyric = true;//自动选择最佳歌词 private boolean autoRelatingWithMediaFile = true;//下载后自动和歌曲文件相关联 private boolean autoOverWriteExistFile;//自动覆盖已存在的歌词文件 private boolean saveTheSameNameAsMediaFile;//保存与音频文件相同文件名的歌词 private File saveLyricDir = new File(HOME, "Lyrics");//保存歌词文件的目录 /*******************************************************************/ /******************播放设置面板要用到的变量***************************/ /*******************************************************************/ private boolean autoPlayWhenStart;//是否在程序启动的时候自动播放 private boolean maintainLastPlay;//是否继续最后一次的播放进度 private double lastRate;//最后一次的播放进度 private int sequencePlayInterval;//连续播放的时间间隔(单位:秒) private boolean stopWhenError;//当出现错误的时候,是否停止播放 /*******************************************************************/ /******************播放列表设置面板要用到的变量***********************/ /*******************************************************************/ private boolean canDnD = true;//能否拖放 private boolean disableDelete;//是否禁用文件删除功能 private boolean savePlayListByAbsolutePath = true;//保存歌曲列表的时候,是否使用绝对路径名 private boolean ignoreBadFile;//加载列表的时候,是否忽略错误的文件 private boolean showTooltipOnPlayList = true;//在播放列表上面是否显示歌曲的提示信息 private String readTagInfoStrategy = READ_WHEN_DISPLAY;//读取文件标签的策略,默认是显示的时候读取标签 private Color playlistTitleColor = new Color(0, 128, 255);//标题的颜色 private Color playlistHiLightColor = new Color(0, 244, 245);//高亮的颜色 private Color playlistIndexColor = new Color(0, 128, 0);//序号的颜色 private Color playlistLengthColor = new Color(192, 128, 32);//长度的颜色 private Color playlistSelectedColor = Color.WHITE;//选中的颜色 private Color playlistSelectedBG = new Color(46, 96, 184); private Color playlistBackground1 = new Color(32, 32, 32);//背景1的颜色 private Color playlistBackground2 = new Color(0, 0, 0);//背景2的颜色 private Font playlistFont = new Font("Dialog", Font.PLAIN, 12);//播放列表的字体 /*******************************************************************/ /******************歌词秀设置面板要用到的变量*************************/ /*******************************************************************/ private int lpState = LyricPanel.V;//表示歌词显示面板的状态,是横向还是纵向 private int lyricAlignMode = LYRIC_CENTER_ALIGN;//歌词对齐模式,是左对齐还是右对齐,还是中间对齐 private int H_SPACE = 10;//表示左右两句之间的距离 private int V_SPACE = 0;//表示上下两句之间的距离 private boolean lyricShadow = true;//是否歌词淡入淡出 private boolean karaoke = true;//是否卡拉OK的方式来显示歌词 private boolean transparency;//是否背景颜色透明 private boolean showLrcBorder = true;//在透明的时候是否显示歌词秀的边框,只有在透明的时候有效,不透明就不理会了 private Color lyricHilight = new Color(0, 244, 245);//歌词高亮颜色 private Color lyricForeground = new Color(100, 100, 100);//歌词前景颜色 private Color lyricBackground = new Color(6, 6, 6);//歌词背景颜色 private Font lyricFont = new Font("Dialog", Font.PLAIN, 14); private boolean autoLoadLyric = true;//播放时是否自动加载歌词 private boolean cutBlankChars;//是否截掉空白字符 private boolean hideWhenNoLyric;//是否在没有歌词的时候自动隐藏 private boolean lyricTopShow;//是否歌词最前端显示 private boolean autoResize = true;//表示是否根据歌词自适歌词秀的宽度 private boolean onlyResizeWhenVerticalMode = true;//仅在垂直模式下能自动调整宽度 private boolean mouseDragToSeekEnabled = true;//是否起用鼠标拖动歌词定位歌曲 private boolean antiAliasing;//是否抗据齿显示字体 private boolean mouseScrollAjustTime = true;//是否可以用鼠标滚动来调整歌词的整体时间 private int refreshInterval = 80;//表示线程休息的时间间隔(单位:毫秒) /*******************************************************************/ /******************可视化效果设置面板要用到的变量*********************/ /*******************************************************************/ private int audioChartDisplayMode = AudioChart.DISPLAY_MODE_SPECTRUM_ANALYSER;//显示模式,或者是否显示 private int audioChartfps = 25;//视觉效果的FPS private Color audioChartTopColor = Color.RED;//上部分的颜色 private Color audioChartCenterColor = Color.YELLOW;//中间部分的颜色 private Color audioChartbottomColor = new Color(0, 255, 255);//下面部份的颜色 private Color audioChartPeakColor = Color.WHITE;//顶端的小小的颜色 private Color audioChartlineColor = new Color(0, 255, 255);//波形的时候,线条的颜色 private int audioChartDisappearSpeed = DISAPPEAR_NORMAL;//消逝的速度 private int audioChartBarCount = 20;//条柱个数 private static Config config = new Config();//自己的一个单例的对象 static { load(); } public boolean isMiniHide() { return miniHide; } public void setMiniHide(boolean miniHide) { this.miniHide = miniHide; } public Date getLastCheckUpdate() { return lastCheckUpdate; } public void setLastCheckUpdate(Date lastCheckUpdate) { this.lastCheckUpdate = lastCheckUpdate; } public boolean isAutoCloseDialogWhenSave() { return autoCloseDialogWhenSave; } public void setAutoCloseDialogWhenSave(boolean autoCloseDialogWhenSave) { this.autoCloseDialogWhenSave = autoCloseDialogWhenSave; } public int getPanValue() { return panValue; } public void setPanValue(int panValue) { this.panValue = panValue; } public int getAudioChartBarCount() { return audioChartBarCount; } public void setAudioChartBarCount(int audioChartBarCount) { this.audioChartBarCount = audioChartBarCount; } public synchronized OptionDialog getOptionDialog() { if (optionDialog == null) { optionDialog = new OptionDialog(config.getTopParent(), true); optionDialog.setTitle(Config.getResource("Config.settingOption")); optionDialog.setLocationRelativeTo(null); } return optionDialog; } public PlayerUI getPlayer() { return player; } public void setPlayer(PlayerUI player) { this.player = player; } public Color getPlaylistSelectedBG() { return playlistSelectedBG; } public void setPlaylistSelectedBG(Color playlistSelectedBG) { this.playlistSelectedBG = playlistSelectedBG; } public Color getAudioChartCenterColor() { return audioChartCenterColor; } public void setAudioChartCenterColor(Color audioChartCenterColor) { this.audioChartCenterColor = audioChartCenterColor; } public int getAudioChartDisappearSpeed() { return audioChartDisappearSpeed; } public void setAudioChartDisappearSpeed(int audioChartDisappearSpeed) { this.audioChartDisappearSpeed = audioChartDisappearSpeed; } public Color getAudioChartTopColor() { return audioChartTopColor; } public void setAudioChartTopColor(Color audioChartTopColor) { this.audioChartTopColor = audioChartTopColor; } public Color getAudioChartbottomColor() { return audioChartbottomColor; } public void setAudioChartbottomColor(Color audioChartbottomColor) { this.audioChartbottomColor = audioChartbottomColor; } public Color getAudioChartPeakColor() { return audioChartPeakColor; } public void setAudioChartPeakColor(Color audioChartcolor) { this.audioChartPeakColor = audioChartcolor; } public Color getAudioChartlineColor() { return audioChartlineColor; } public void setAudioChartlineColor(Color audioChartlineColor) { this.audioChartlineColor = audioChartlineColor; } public boolean isAutoLoadLyric() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -