/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.hadeslee.yoyoplayer.player.ui;
import com.hadeslee.yoyoplayer.equalizer.EqualizerUI;
import com.hadeslee.yoyoplayer.playlist.PlayListUI;
import com.hadeslee.yoyoplayer.lyric.Lyric;
import com.hadeslee.yoyoplayer.lyric.LyricUI;
import com.hadeslee.yoyoplayer.player.BasicController;
import com.hadeslee.yoyoplayer.player.BasicPlayerEvent;
import com.hadeslee.yoyoplayer.player.BasicPlayerException;
import com.hadeslee.yoyoplayer.player.BasicPlayerListener;
import com.hadeslee.yoyoplayer.util.AudioChart;
import com.hadeslee.yoyoplayer.util.Config;
import com.hadeslee.yoyoplayer.util.Loader;
import com.hadeslee.yoyoplayer.playlist.PlayList;
import com.hadeslee.yoyoplayer.playlist.PlayListItem;
import com.hadeslee.yoyoplayer.setting.AudioChartPanel;
import com.hadeslee.yoyoplayer.setting.OptionDialog;
import com.hadeslee.yoyoplayer.tag.SongInfoDialog;
import com.hadeslee.yoyoplayer.util.FileNameFilter;
import com.hadeslee.yoyoplayer.util.Playerable;
import com.hadeslee.yoyoplayer.util.SongInfo;
import com.hadeslee.yoyoplayer.util.Util;
import com.hadeslee.yoyoplayer.util.YOYOSlider;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.File;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.SourceDataLine;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
*
* @author hadeslee
*/
public class PlayerUI extends JPanel implements Playerable, ActionListener, ChangeListener, BasicPlayerListener {
private static final long serialVersionUID = 20071214L;
//表示播放器的各种状态
public static final int INIT = 0;
public static final int OPEN = 1;
public static final int PLAY = 2;
public static final int PAUSE = 3;
public static final int STOP = 4;
private static Logger log = Logger.getLogger(PlayerUI.class.getName());
private JButton pre, next, play, stop;//四个播放相关按钮
private JButton close, min;//右上角的三个图标
private JLabel about;//关于信息的一个标签,添加了鼠标事件
private JLabel state, channel;//表示标题和信息的一个标签
protected JToggleButton pl, lrc, eq, speaker;//三个状态按钮,和一个音量按钮
private YOYOSlider pos, pan, volume;//三个进度条
private AudioChart audioChart;//示波器
private Lyric lyric;//一个歌词对象
private BasicController player;//基本的播放器对象
private Map audioInfo;//里面存的是所有有关的音频信息
private int playerState;//播放器的当前状态
private Config config;//一个配置对象
private long lastScrollTime;//上一次的滚动歌曲信息的时候
private boolean posValueJump;//表示现在位置条是否在拖动中
private PlayListItem currentItem;//当前正在播放的列表项
private long secondsAmount;//总共用去的秒数
private Loader loader;//一个负责总装载的接口,一般由主窗口实现
private PlayList playlist;//一个播放列表的实现,
private String currentSongName;//当前正在播放的歌曲的名字
private String currentFileOrURL;//当前正在放的歌曲的文件名或者URL路径
private boolean currentIsFile;//当前正在播放的是否是文件,因为可能是网络上的URL
private String titleText;//标题应该显示的内容
private PlayListUI playlistUI;//摠放列表的UI的引用
private EqualizerUI equalizerUI;//调音器的UI引用
private LyricUI lyricUI;//歌词显示面板UI的引用
private SongInfo songInfo;//当前正在播放的歌曲的一些信息,用于滚动显示在时间下面
private boolean posDragging;//指示当前的进度条是否在拖动中
private double posValue;//指示当前的进度条所在的位置的比例
private TimePanel timePanel;//显时间的面板
private SongInfoPanel infoPanel;//显示歌曲信息的面板
private Image[] playImgs, pauseImgs;//用于显示播放和暂停的图标数组
private String currentState;//当前的状态,比如正在播放,停止,暂停
private boolean isSeeked;//是否已经seek了
private double lastRate;//最后的比率
private final Object lock = new Object();
private volatile boolean scrollTitle;//是否滚动标题栏
private String title = Config.NAME;
private Thread thread;//显示任务栏的标题滚动线程
private long seekedTime;//拖过的时间
// private //一个监听鼠标滚轮滚动的监听器,用于调节音量
public PlayerUI() {
super(null);
setPreferredSize(new Dimension(285, 155));
}
/**
* 得到媒体当前的时间,以毫秒为单位
* @return 时间
*/
public long getTime() {
if (player == null) {
return -1;
} else {
return player.getMicrosecondPosition() / 1000+seekedTime;
}
}
void setLastRate(double rate) {
this.lastRate = rate;
}
public void setPlayList(PlayList playlist) {
this.playlist = playlist;
}
public AudioChart getAudioChart() {
return audioChart;
}
public boolean loadPlaylist() {
boolean loaded = false;
String lastPlay = config.getCurrentFileOrUrl();
log.log(Level.INFO, "lastPlay=" + lastPlay);
if (lastPlay != null) {
for (PlayListItem item : playlist.getAllItems()) {
if (item.getLocation().equals(lastPlay)) {
log.log(Level.INFO, "找到了最后要播的匹配!!");
this.setCurrentSong(item);
break;
}
}
}
return loaded;
}
public void processJumpToFile(int modifiers) {
throw new UnsupportedOperationException("Not yet implemented");
}
public void processPreferences(int modifiers) {
throw new UnsupportedOperationException("Not yet implemented");
}
public void pressStart() {
play.doClick();
}
public void pressEq() {
eq.doClick();
}
public void pressLrc() {
lrc.doClick();
}
public void pressPl() {
pl.doClick();
}
/**
* 给此面板本身以及所有的子组件都添加上这个
* 监听器
*/
private void addMouseVolumeListener() {
MouseVolumeListener mv = new MouseVolumeListener();
this.addMouseWheelListener(mv);
int count = this.getComponentCount();
for (int i = 0; i < count; i++) {
this.getComponent(i).addMouseWheelListener(mv);
}
}
private void initUI() {
//初始化按钮
eq = Util.createJToggleButton("player/eq", config.isShowEq() ? Config.EQ_OFF : Config.EQ_ON, this, config.isShowEq());
pl = Util.createJToggleButton("player/pl", config.isShowP
没有合适的资源?快使用搜索试试~ 我知道了~
java开源的mp3源代码
共455个文件
java:348个
png:86个
form:11个
4星 · 超过85%的资源 需积分: 9 150 下载量 120 浏览量
2008-05-14
11:02:07
上传
评论 1
收藏 1.08MB ZIP 举报
温馨提示
从最初的写第一个简单的Netbeans音乐插件,到现在的YOYOPlayer,中间经历了一些时间.感谢我的女朋友对我的帮助,所以此播放器取名为 YOYOPlayer,因为YOYO是她的名字,这个播放器的所有界面的图片也都是她做的.她刚刚学会PS,所以界面方面可能还不太完美,但至少也是一个尝试了,欢迎大家试用,并提出宝贵意见.<br> YOYOPlayer的主要用处还是在linux下的使用,虽然我大部份时间是在windows下面编写的,因为WINDOWS下的音乐播放软件已经很完美了,只不过用JAVA写的比较少而已,并且这个版本是完全的JAVA的版本,只要电脑装了JAVA就可以跑了,不需要再另外下载JMF的框架了,因为没有用到JMF里面的东西.在LINUX下面播放器好像都不太好用,特别是播放音乐的,要么就会出现乱码的问题,要么就会没有歌词同步的功能,而 YOYOPlayer经过我在ubuntu7.10下面的初步测试,并没有发现乱码问题,因为我默认是使用GBK的编码读取标签的,而LINUX默认的编码是UTF-8.<br> 使用提示:<br> 电脑上需装了JAVA运行环境,JRE,因为我是在JDK6.0下面编码的,并且用到了JDK6.0的新特性,所以要求运行环境也是JRE6.0.
资源推荐
资源详情
资源评论
收起资源包目录
java开源的mp3源代码 (455个子文件)
Thumbs.db 58KB
Thumbs.db 56KB
Thumbs.db 32KB
Thumbs.db 25KB
Thumbs.db 10KB
Thumbs.db 4KB
LyricSettingPanel.form 32KB
PlayListPanel.form 23KB
SongInfoDialog.form 22KB
AudioChartPanel.form 21KB
SettingPanel.form 18KB
SearchLyricPanel.form 17KB
WebConnectPanel.form 13KB
AboutPanel.form 12KB
WebSearchDialog.form 11KB
PlayPanel.form 9KB
ListBar.form 4KB
PlayerUI.java 71KB
AbstractID3v2Tag.java 63KB
PlayListUI.java 59KB
Util.java 56KB
Config.java 50KB
ID3v24Tag.java 38KB
ID3v24Frame.java 37KB
BasicPlayer.java 34KB
Lyric.java 33KB
OggVorbisTagWriter.java 33KB
LyricSettingPanel.java 31KB
ID3v23Tag.java 30KB
TagOptionSingleton.java 29KB
SongInfoDialog.java 28KB
ID3v23Frame.java 28KB
MP3File.java 27KB
MPEGFrameHeader.java 26KB
ID3v1Tag.java 25KB
MP3AudioHeader.java 24KB
ID3v22Tag.java 24KB
PlayListPanel.java 23KB
ID3v23Frames.java 23KB
ID3v24Frames.java 23KB
AudioChartPanel.java 22KB
Languages.java 22KB
Main.java 21KB
AudioChart.java 20KB
AbstractTag.java 20KB
ID3v22Frames.java 20KB
ID3v11Tag.java 19KB
OggVorbisTagReader.java 19KB
FlacTag.java 18KB
SettingPanel.java 18KB
WebSearchDialog.java 18KB
SearchLyricPanel.java 18KB
MultiImageBorder.java 17KB
ID3v22Frame.java 17KB
APEv2Tag.java 16KB
AbstractID3v2Frame.java 16KB
ID3Frames.java 16KB
LyricPanel.java 16KB
MpegInfo.java 15KB
BasicPlayList.java 15KB
PlayListItem.java 15KB
ID3Tags.java 14KB
Lyrics3v2.java 14KB
VorbisCommentTag.java 13KB
PlayListBorder.java 12KB
WebConnectPanel.java 12KB
AbstractDataType.java 12KB
EqualizerUI.java 12KB
AudioFileWriter.java 12KB
FlacTagWriter.java 12KB
MetadataBlockDataPicture.java 11KB
OggPageHeader.java 11KB
FrameBodyTDRC.java 10KB
APEInfo.java 10KB
AbstractTagFrameBody.java 10KB
AudioFileIO.java 10KB
FieldFrameBodyLYR.java 10KB
Tag.java 10KB
FrameBodyAPIC.java 10KB
FrameBodySYLT.java 10KB
OggVorbisInfo.java 9KB
FrameBodyCOMR.java 9KB
GenericTag.java 9KB
GenericAudioHeader.java 9KB
ListBar.java 9KB
TagInfoFactory.java 9KB
PlayPanel.java 9KB
Lyrics3v2Field.java 9KB
NumberHashMap.java 9KB
AboutPanel.java 8KB
TextEncodedStringNullTerminated.java 8KB
Lyrics3v1.java 8KB
Utils.java 8KB
FontChooser.java 8KB
XingFrame.java 8KB
VorbisCommentTagField.java 8KB
StringFixedLength.java 8KB
FieldFrameBodyIMG.java 8KB
GenreTypes.java 8KB
FrameBodyUSLT.java 8KB
共 455 条
- 1
- 2
- 3
- 4
- 5
资源评论
- 洪七公2011-11-03嗯,貌似是Linux下用的,是一个比较完整的小工程~
ayonggu114
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功