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;
}
// 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