Music Player With Desktop LRC Scolling - Java

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值