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

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值