Music Player With Desktop LRC Scolling - Java
2015-06-20 13:47
459 查看
Music Player With Desktop LRC Scolling
Main Point:Deaktop Swing
List Table And LRC Parse
Show And Playing Music
// To Get Single LRC
String sReg="(\\[\\d{2}:\\d{2}\\.\\d{2}\\])?(\\[\\d{2}:\\d{2}\\.\\d{2}\\])([^\\[\\]]+)";
// Save To Linear Linked List
public void insert(long time,String lrc){
U_Node node=new U_Node(time,lrc);
while(time<=nowNode.previous.time){
nowNode=nowNode.previous;
if(time==nowNode.time){
nowNode.lrcB=lrc;
return;
}
}
node.previous=nowNode.previous;
node.previous.next=node;
node.next=nowNode;
nowNode.previous=node;
length++;
nowNode=tail;
}
Desktop Swings:
jfParent = new JFrame(); jpMain=new JPanel(); jlLRC=new JLabel(); jlLRC.setText("If you look inside your heart"); jlLRC.setBackground(Color.black); jlLRC.setFont(new java.awt.Font("Dialog",1,36)); jlLRC.setForeground(Color.yellow); jpMain.add(jlLRC); jpMain.setBackground(Color.black); jfParent.setBackground(Color.black); jfParent.setContentPane(jpMain); jfParent.setBounds(iWidth/10*2,iHeight/10*8,iWidth/10*6,iHeight/10); jfParent.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jfParent.setUndecorated(true); //Dismiss The Border // jfParent.setAlwaysOnTop(true); jfParent.setVisible(true);
LRC Parse And Save To List Table:
if(!fLrc.exists()){ fAlert("None LRC File Found!"); return; } U_List uList=new U_List(); String sLrc=""; try{ sLrc=P_FileStream.fRead(fLrc); }catch(Exception e){ fAlert("LRC File Read Error!"); return; } String sReg="(\\[\\d{2}:\\d{2}\\.\\d{2}\\])?(\\[\\d{2}:\\d{2}\\.\\d{2}\\])([^\\[\\]]+)"; Pattern pPat=Pattern.compile("[\r\n]"); Matcher mMar=pPat.matcher(sLrc); pPat=Pattern.compile(sReg); mMar=pPat.matcher(mMar.replaceAll("")); while(mMar.find()){ try{ if(mMar.group(1)!=null) uList.insert(fGetLongTime(mMar.group(1)),mMar.group(3).trim()); if(mMar.group(2)!=null) uList.insert(fGetLongTime(mMar.group(2)),mMar.group(3).trim()); fAlert("LRC: "+mMar.group(3)+" AT: "+fGetLongTime(mMar.group(2))); }catch(Exception e){ fAlert("Error When Reg Lrc Sentence: "+e.toString()); } } fAlert("Length: "+uList.length());
Music Player And Show LRC:
try{ Runtime run=Runtime.getRuntime(); run.exec("\"C:\\Program Files\\Windows Media Player\\wmplayer.exe\""); fSleep(8*1000); run.exec("\"C:\\Program Files\\Windows Media Player\\wmplayer.exe\" E:\\Whisper_Y\\Temp\\hero.mp3"); }catch(Exception e){ fAlert("Error When Exec CMD!"); } U_Node u; long lTemp; jlLRC.setForeground(Color.green); jlLRC.setFont(new java.awt.Font("French Script MT",1,48)); while((u=uList.getAndNext())!=null){ // fChangeLRCStyle(); //More Colors Or Fonts Could Change lTemp=uList.getLongTime(); // Get Sleep Time jlLRC.setText(u.lrc); fAlert("=> Settext: "+u.lrc+" Time: "+u.time+" Sleep: "+lTemp); fSleep(lTemp); } jlLRC.setFont(new java.awt.Font("Arial",1,32)); jlLRC.setText("Thank You For Using *** LRC Player!"); fAlert("Finished!");
List Table:
public class U_List { private int length; private U_Node nowNode; private U_Node head; private U_Node tail; public U_List(){ head=new U_Node(0,"Head"); tail=new U_Node(0,"Tail"); head.next=tail; tail.previous=head; nowNode=tail; } public int length(){ return length; } public void insert(long time,String lrc){ U_Node node=new U_Node(time,lrc); while(time<=nowNode.previous.time){ nowNode=nowNode.previous; if(time==nowNode.time){ nowNode.lrcB=lrc; return; } } node.previous=nowNode.previous; node.previous.next=node; node.next=nowNode; nowNode.previous=node; length++; nowNode=tail; } public U_Node get(){ return nowNode; } public U_Node getAndNext(){ if(nowNode==tail){ nowNode=head; tail.time=tail.previous.time+100; return nowNode; } nowNode=nowNode.next; if(nowNode==tail) return null; return nowNode; } public long getLongTime(){ return nowNode.next.time-nowNode.time; } public U_Node getHead(){ return head; } }
Node Class:
public class U_Node { public long time; public U_Node next; public U_Node previous; public String lrc=""; public String lrcB=""; public U_Node(long time,String lrc){ this.time=time; this.lrc=lrc; } }
Final Views:
- - Saturday, June 20, 2015
相关文章推荐
- java中的静态变量、静态方法与静态代码块
- Java串口通信详细解释
- java产生任意范围内不重复的随机数
- Spring中的AOP简述
- Spring整合JMS(四)——事务管理
- Spring整合JMS(三)——MessageConverter介绍
- Spring整合JMS(二)——三种消息监听器
- Spring整合JMS(一)——基于ActiveMQ实现
- springmvc使用@ResponseBody返回json乱码解决方法
- 1. Java基础
- springMVC拦截器
- JAVASE学习笔记:第十二章 集合
- Java编程思想学习笔记——初始化与清理
- java的事件处理机制基础
- Java 回调
- Java基础 管道流 RandomAccessFile DataStream ByteArrayStream 字符编码
- java泛型中extends 和 super的区别
- JavaWeb系列之十三(jdbc事务与连接池)
- JavaWeb系列之十二(jdbc)
- javaWeb系列之十一(数据库)