Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ===========================================================================================================
- Lyriks 1.3 (build 20101103.2140) - a WSH lyrics module by Br3tt
- - This WSH script get lyrics from TAG first then from local file in Music folder then in foobar2000\lyrics\ and finally it displays them (scrolling+sync)
- - It handles TXT and LRC format (sync handled), but not the LRC Enhanced format (translated to simple LRC format)
- - exotics timestamps are now handled (like [9:99], [99:99.999], [9:99.999], [99:99:999] ...)
- - filenames supported are : <%artist%> -<%title%>.lrc (or .txt) AND <%artist%> - <%title%>.lrc (or .txt)
- - Comments, Blank lines (no timestamp) and Info lines (ar:, ti, ...) are ignored.
- - Manual Scrolling possible with the mousewheel (double click on the panel to re-center on the active line)
- - Requirements :
- 1) foobar2000
- 2) WSH Panel Mod component
- 3) this script!
- 4) Optional: a lyrics grabber (i.e: Lyric Show Panel by hidding the panel, foo_lyricsDB, ...)
- - Some settings are available by using the panel Properties (right click on WSH panel -> Properties)
- - This script don't make any changes to your files and write nothing on your system, except the creation of the folder foobar2000/lyrics if not found
- ===========================================================================================================
- */
- // ================================================/ Properties
- var FONT_SIZE = window.GetProperty("Font size", 12);
- var LINE_HEIGHT = window.GetProperty("Line height", 24);
- var TEXT_SHADOW = window.GetProperty("Text shadow", true);
- var TEXT_GLOW = window.GetProperty("Glow enabled", true);
- var TXT_GLOW_COLOUR = window.GetProperty("Text glow colour", "RGBA(040, 040, 040, 255);");
- var BG_FOCUS_COLOUR = window.GetProperty("Active line background colour", "RGBA(235, 245, 255, 075);");
- var TXT_NORMAL_COLOUR = window.GetProperty("Text normal colour", "RGBA(210, 210, 210, 255);");
- var TXT_FOCUS_COLOUR = window.GetProperty("Text highlite colour", "RGBA(255, 255, 255, 255);");
- var BG_DRAW = window.GetProperty("Background enabled", false);
- var BG_DEFAULT_COLOUR = window.GetProperty("Background colour", "RGBA(000, 000, 000, 170);");
- var DITHER = window.GetProperty("Top & Botom shadow", true);
- var H_PADDING = window.GetProperty("Horizontal padding", 20);
- var TXT_ALIGN = window.GetProperty("Text alignment (left/center/right)", "center");
- var DEBUG = false;
- var DEFAULT_OFFSET = 29;
- // ================================================/ Constants
- var SCROLL_STEP = 1; // do not modify this value
- var PLAYTIMER_VALUE = 10; // do not modify this value
- // Text formatting function
- // {{
- function StringFormat() {
- var h_align = 0, v_align = 0, trimming = 0, flags = 0;
- switch (arguments.length)
- {
- // fall-thru
- case 4:
- flags = arguments[3];
- case 3:
- trimming = arguments[2];
- case 2:
- v_align = arguments[1];
- case 1:
- h_align = arguments[0];
- break;
- default:
- return 0;
- }
- return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
- }
- StringAlignment = {
- Near: 0,
- Centre: 1,
- Far: 2
- };
- var lt_stringformat = StringFormat(StringAlignment.Near, StringAlignment.Near);
- var ct_stringformat = StringFormat(StringAlignment.Centre, StringAlignment.Near);
- var rt_stringformat = StringFormat(StringAlignment.Far, StringAlignment.Near);
- var lc_stringformat = StringFormat(StringAlignment.Near, StringAlignment.Centre);
- var cc_stringformat = StringFormat(StringAlignment.Centre, StringAlignment.Centre);
- var rc_stringformat = StringFormat(StringAlignment.Far, StringAlignment.Centre);
- var lb_stringformat = StringFormat(StringAlignment.Near, StringAlignment.Far);
- var cb_stringformat = StringFormat(StringAlignment.Centre, StringAlignment.Far);
- var rb_stringformat = StringFormat(StringAlignment.Far, StringAlignment.Far);
- // }}
- // Use with GdiDrawText()
- // {{
- var DT_LEFT = 0x00000000;
- var DT_RIGHT = 0x00000002;
- var DT_TOP = 0x00000000;
- var DT_CENTER = 0x00000001;
- var DT_VCENTER = 0x00000004;
- var DT_WORDBREAK = 0x00000010;
- var DT_CALCRECT = 0x00000400;
- var DT_NOPREFIX = 0x00000800;
- var DT_END_ELLIPSIS = 0x00008000;
- // }}
- //{{
- // IO Mode
- var ForReading = 1;
- var ForWriting = 2;
- var ForAppending = 8;
- //}}
- //{{
- // Paths
- var lyrics_dir1 = fb.Titleformat("$replace($replace(%path%,%filename_ext%,),\,\\)");
- var lyrics_dir2 = fb.FoobarPath + "lyrics\\";
- //}}
- //{{
- // new objects
- sentence = function () {
- this.timer = 0;
- this.text = "";
- this.total_lines = 0;
- this.ante_lines = 0;
- }
- //}}
- function RGBA(r, g, b, a) {
- return ((a << 24) | (r << 16) | (g << 8) | (b));
- }
- // ================================================/ TF
- var len = fb.Titleformat("%length%");
- var elap = fb.TitleFormat("%playback_time%");
- var remain = fb.TitleFormat("%playback_time_remaining%");
- var len_seconds = fb.Titleformat("%length_seconds%");
- var elap_seconds = fb.TitleFormat("%playback_time_seconds%");
- var remain_seconds = fb.Titleformat("%playback_time_remaining_seconds%");
- var artist = fb.Titleformat("$replace(%artist%,'/','_')");
- var title = fb.Titleformat("%title%");
- var lyrics = fb.TitleFormat("[$if2(%LYRICS%,$if2(%LYRIC%,$if2(%UNSYNCED LYRICS%,%UNSYNCED LYRIC%)))]");
- // ================================================/ Globals
- var g_font = gdi.Font("segoe ui", FONT_SIZE, 1);
- var g_playtimer;
- var g_timer_abs;
- var g_metadb;
- var ww = 0, wh = 0;
- var g_fso = new ActiveXObject("Scripting.FileSystemObject");
- var g_file = null;
- var g_tab = Array();
- var g_scroll=0;
- var g_lyrics_path;
- var g_lyrics_filename;
- var g_lyrics_status;
- var focus=0;
- var focus_next=0;
- var g_bg_colour;
- var g_ovbg_highlightcolour;
- var g_txt_normalcolour;
- var g_txt_highlightcolour;
- var g_txt_shadowcolour;
- var g_txt_glowcolour;
- var g_dither_shadowcolour;
- var centiemes = 0;
- var g_is_scrolling = false;
- var g_multi_balise = false;
- var g_balise_total;
- var g_balise_char_offset = 10;
- var g_tab_length;
- var g_txt_align;
- var midpoint;
- var pos;
- // START
- function on_size() {
- var k;
- ww = window.Width;
- wh = window.Height;
- g_metadb = fb.IsPlaying ? fb.GetNowPlaying() : false;
- midpoint = wh / 2 - LINE_HEIGHT / 2;
- // colour definitions
- g_bg_colour = eval(BG_DEFAULT_COLOUR);
- g_ovbg_highlightcolour = eval(BG_FOCUS_COLOUR);
- g_txt_normalcolour = eval(TXT_NORMAL_COLOUR);
- g_txt_highlightcolour = eval(TXT_FOCUS_COLOUR);
- g_txt_shadowcolour = RGBA(000, 000, 000, 240);
- g_txt_glowcolour = eval(TXT_GLOW_COLOUR);
- g_dither_shadowcolour = RGBA(000, 000, 000, 200);
- g_playtimer && window.KillTimer(g_playtimer);
- if(fb.IsPlaying||fb.IsPaused) {
- g_scroll=0;
- g_is_scrolling = false;
- get_lyrics();
- change_focus();
- k = g_tab[focus].ante_lines * LINE_HEIGHT;
- if(g_lyrics_status>0) {
- pos = midpoint - k;
- g_playtimer = window.CreateTimerInterval(PLAYTIMER_VALUE);
- g_timer_abs = 4;
- } else {
- delta = (g_tab[g_tab.length-1].ante_lines + g_tab[g_tab.length-1].total_lines);
- pos = Math.round((wh / 2) - (delta * LINE_HEIGHT / 2));
- }
- }
- }
- function on_paint(gr) {
- BG_DRAW && gr.FillSolidRect(0, 0, ww, wh, g_bg_colour);
- if(fb.IsPlaying||fb.IsPaused) {
- show_lyrics(gr, g_tab, pos);
- DEBUG && gr.GdiDrawText(g_lyrics_status.toString(), g_font, g_normalcolour, 5, 5, ww, LINE_HEIGHT, DT_TOP | DT_LEFT | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX);
- }
- DITHER && gr.FillGradRect(-20, 0, ww+40, 9, 90, g_dither_shadowcolour, RGBA(0,0,0,0));
- DITHER && gr.FillGradRect(-20, wh-8, ww+40, 8, 270, g_dither_shadowcolour, RGBA(0,0,0,0));
- }
- function on_mouse_lbtn_dblclk(x, y, mask) {
- on_size();
- }
- function on_mouse_leave() {
- window.Repaint();
- }
- function on_playback_time(time) {
- // at each new seconde, centiemes is reset to 0 (Increment on timer every 100ms)
- centiemes = 0;
- if(g_lyrics_status==0) {
- if(elap_seconds.Eval()==3) {
- on_size();
- }
- window.Repaint();
- }
- }
- function on_playback_new_track(info) {
- g_metadb = fb.IsPlaying ? fb.GetNowPlaying() : false;
- g_playtimer && window.KillTimer(g_playtimer);
- pos=0;
- g_scroll = 0;
- g_is_scrolling = false;
- get_lyrics();
- change_focus();
- if(g_lyrics_status>0) {
- g_playtimer = window.CreateTimerInterval(PLAYTIMER_VALUE);
- g_timer_abs = 4;
- }
- }
- function on_playback_seek(time) {
- var k;
- if(g_lyrics_status>0) {
- on_size();
- }
- }
- function on_playback_stop(reason) {
- g_metadb = fb.IsPlaying ? fb.GetNowPlaying() : false;
- g_playtimer && window.KillTimer(g_playtimer);
- if(reason==0) {
- // Stop
- window.Repaint();
- }
- }
- function on_mouse_wheel(delta) {
- if(g_lyrics_status>0) {
- if(delta>0) {
- pos = (pos>=midpoint)?pos:pos + LINE_HEIGHT;
- } else {
- pos = (pos<=(wh/2 - g_tab_length*LINE_HEIGHT))?pos:pos - LINE_HEIGHT;
- }
- window.Repaint();
- }
- }
- function on_timer(id) {
- var t1 = elap_seconds.Eval() * 100 + centiemes;
- var t2 = len_seconds.Eval() * 100;
- var p1, p2, p3;
- if(t1>t2-100) {
- g_playtimer && window.KillTimer(g_playtimer);
- }
- if(g_playtimer) {
- if(g_playtimer.ID == id) {
- if(!g_is_scrolling && t1>=g_tab[focus_next].timer) {
- //if(t1>=g_tab[focus_next].timer) {
- p1 = g_tab[focus].ante_lines*LINE_HEIGHT;
- p2 = g_tab[focus_next].ante_lines*LINE_HEIGHT;
- //p3 = (g_tab[focus_next].total_lines-1)*LINE_HEIGHT;
- g_scroll = (p2 - p1);
- change_focus();
- g_is_scrolling = true;
- }
- g_timer_abs--;
- if (g_scroll>0) {
- pos -= g_scroll<SCROLL_STEP?g_scroll:SCROLL_STEP;
- g_scroll -= g_scroll<SCROLL_STEP?g_scroll:SCROLL_STEP;
- if(g_timer_abs<=1) {
- g_timer_abs = 4;
- window.Repaint();
- }
- } else {
- g_timer_abs = 4;
- g_is_scrolling = false;
- }
- centiemes = (centiemes>98)?0:(centiemes+1);
- }
- }
- }
- function show_lyrics(gr, tab, posy) {
- var i, k, text_colour;
- gr.SetTextRenderingHint(5);
- switch(TXT_ALIGN.toUpperCase()) {
- case "LEFT":
- g_txt_align = lc_stringformat;
- break;
- case "CENTER":
- g_txt_align = cc_stringformat;
- break;
- case "RIGHT":
- g_txt_align = rc_stringformat;
- break;
- default:
- g_txt_align = cc_stringformat;
- }
- for(i=0;i<tab.length;i++) {
- if(Math.round(posy)>=(LINE_HEIGHT*-4) && Math.round(posy)<wh) {
- if(i==focus && g_lyrics_status==1) {
- text_colour = g_txt_highlightcolour;
- } else {
- if(g_lyrics_status==0) {
- text_colour = g_txt_highlightcolour;
- } else {
- text_colour = g_txt_normalcolour;
- }
- }
- if(g_lyrics_status>0) {
- if(i==focus && tab[i].text.length>1 && g_lyrics_status==1) {
- gr.FillGradRect(0, Math.floor(posy), ww, (tab[i].total_lines*LINE_HEIGHT), 90, g_ovbg_highlightcolour, RGBA(0,0,0,0), 0.5);
- }
- }
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING-1, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING+1, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING, Math.floor(posy)-1-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_GLOW && gr.DrawString(tab[i].text, g_font, g_txt_glowcolour, H_PADDING, Math.floor(posy)-1+1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- TEXT_SHADOW && gr.DrawString(tab[i].text, g_font, g_txt_shadowcolour, H_PADDING+1, Math.floor(posy)-1+2, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- gr.DrawString(tab[i].text, g_font, text_colour, H_PADDING, Math.floor(posy)-1, ww-H_PADDING*2, (tab[i].total_lines*LINE_HEIGHT), g_txt_align);
- }
- posy = Math.floor(posy+LINE_HEIGHT+((tab[i].total_lines-1)*LINE_HEIGHT));
- }
- }
- function grab_timer(t_tab) {
- var tminutes, tsecondes, tcentiemes;
- var i, k, f_sentence, b, c, delta, repeat_text;
- var tab = Array();
- for(i=0;i<t_tab.length;i++) {
- if(g_lyrics_status==1) {
- // -----------
- // sync lyrics
- // -----------
- if(IsTimestamped(t_tab[i])) {
- b = 0;
- while(t_tab[i].substring(b*10, b*10+1)=="[") {
- b++;
- }
- c = b;
- repeat_text = remove_enhanced_balises(t_tab[i].substring(c*10, t_tab[i].length));
- if(repeat_text.length==0) repeat_text = repeat_text + " ";
- for(b=0;b<c;b++) {
- f_sentence = new sentence;
- tminutes = t_tab[i].substring(1+(b*10), 3+(b*10));
- tsecondes = t_tab[i].substring(4+(b*10), 6+(b*10));
- tcentiemes = t_tab[i].substring(7+(b*10), 9+(b*10));
- f_sentence.timer = Math.round(tminutes)*60*100 + Math.round(tsecondes)*100 + Math.round(tcentiemes) - DEFAULT_OFFSET;
- if(f_sentence.timer<0) f_sentence.timer=0;
- f_sentence.text = repeat_text;
- tab.push(f_sentence);
- }
- }
- } else {
- // -------------
- // unsync lyrics
- // -------------
- if(IsTimestamped(t_tab[i])) {
- // if sync line in unsync lyrics, i remove timestamps in this line
- b = 0;
- while(IsTimestamped(t_tab[i].substring(b*10, b*10+10))) {
- b++;
- }
- t_tab[i] = t_tab[i].substring(b*10, t_tab[i].length);
- }
- f_sentence = new sentence;
- f_sentence.timer = 0;
- f_sentence.text = t_tab[i];
- tab.push(f_sentence);
- }
- }
- if(tab.length==0) {
- g_lyrics_status = 0;
- tab = load_track_info();
- delta = (tab[tab.length-1].ante_lines + tab[tab.length-1].total_lines);
- pos = (wh / 2) - (delta * LINE_HEIGHT / 2);
- } else {
- f_sentence = new sentence;
- f_sentence.timer = 9999999;
- f_sentence.text = "---";
- tab.push(f_sentence);
- }
- CollectGarbage();
- return calc_lines(sort_tab(tab));
- }
- function load_file(filePath, fileName) {
- var i;
- var t_tab = Array();
- var str;
- g_file = open_file(filePath, fileName, ForReading);
- while(!g_file.AtEndOfStream) {
- str = g_file.ReadLine();
- // blank lines are ignored
- if(str.length>0) t_tab.push(str);
- }
- close_file(g_file);
- return grab_timer(check_lyrics_type(t_tab));
- }
- function check_lyrics_type(t_tab) {
- var i;
- var count = 0;
- var ts_percent;
- var tab = Array();
- for(i=0;i<t_tab.length;i++) {
- if(IsTimestamped(t_tab[i])) {
- // format timestamps to default syntax : [99:99.99]
- tab.push(ts_analyzer(t_tab[i]));
- // count # of sync lines
- count++;
- } else {
- if(t_tab[i].length>1) tab.push(t_tab[i]);
- }
- }
- // calc percent of sync lines, if more than 50% of the total filled lines, it's sync lyrics, else, unsync lyrics!
- ts_percent = Math.round(count/tab.length*100);
- if(ts_percent>30) {
- // sync lyrics
- g_lyrics_status = 1;
- } else {
- // unsync lyrics
- g_lyrics_status = 2;
- }
- return tab;
- }
- function parse_tag(tag, delimiter) {
- var t_tab = Array();
- var i, j;
- j = 0;
- for(i=0;i<tag.length;i++) {
- if(i==tag.length-1 || tag.charCodeAt(i)==10 || (i>0 && (i<tag.length-5) && (tag.substring(i, i+1)==delimiter) && (tag.substring(i-1, i)!="]"))) {
- if(i==tag.length-1) {
- t_tab.push(tag.substring(j, i+1));
- } else {
- t_tab.push(tag.substring(j, i));
- }
- if(tag.charCodeAt(i)!=10) {
- j = i;
- } else {
- j = i+1;
- }
- }
- }
- return grab_timer(check_lyrics_type(t_tab));
- }
- function load_track_info() {
- var tab = Array(new sentence, new sentence, new sentence, new sentence);
- var count = 0;
- tab[count].text = "---";
- count++;
- tab[count].text = artist.Eval();
- count++;
- tab[count].text = title.Eval();
- count++;
- tab[count].text = "---";
- count++;
- return calc_lines(tab);
- }
- function open_file(filePath, fileName, ioMode) {
- var fileInst = null;
- var bool = file_exists(filePath + fileName);
- if(bool) {
- fileInst = g_fso.OpenTextFile(filePath + fileName, ioMode);
- }
- return fileInst;
- }
- function close_file(fileInst) {
- fileInst.Close();
- }
- function read_file(fileInst) {
- var line = fileInst.ReadLine();
- return line;
- }
- function folder_exists(folderPath) {
- var fso, bool;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- bool = fso.FolderExists(folderPath);
- return bool;
- }
- function file_exists(filePath) {
- var fso, bool;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- bool = fso.Fileexists(filePath);
- return bool;
- }
- function lyrics_folder_exists(folder_name) {
- var fso;
- var bool=1;
- fso = new ActiveXObject("Scripting.FileSystemObject");
- if (folder_exists(fb.ProfilePath + folder_name) == false) {
- fso.CreateFolder(fb.ProfilePath + folder_name);
- bool=0;
- }
- return bool;
- }
- function change_focus() {
- var i, j, t1;
- t1 = elap_seconds.Eval()*100+centiemes;
- if(g_lyrics_status>0) {
- // search line index just after actual timer
- for(i=focus;i<g_tab.length;i++) {
- if(g_tab[i].timer>t1) break;
- }
- focus_next=i;
- focus = (i>0)?i-1:0;
- // now i check if there are more than one line with the same timer as focus one & if found, i take it as new focus 'cause it's the first (not a blank line)
- if(focus>0) {
- for(i=0;i<focus;i++) {
- if(g_tab[i].timer==g_tab[focus].timer) {
- focus = i;
- break;
- }
- }
- }
- }
- }
- function calc_lines(ctab) {
- var i, j;
- var padx = 0;
- var tmp_img;
- var gp;
- var lineh;
- g_tab_length = 0;
- if(ww==0) return ctab; // test to avoid errors if panel is hidden (ww=0)
- tmp_img = gdi.CreateImage(ww-(H_PADDING*2)-padx, 100);
- gp = tmp_img.GetGraphics();
- for(i=0;i<ctab.length;i++) {
- // calc sentence #lines to display / window.width
- lineh = gp.MeasureString(ctab[i].text, g_font, 0, 0, ww-(H_PADDING*2)-padx, wh).Height;
- ctab[i].total_lines = (lineh/LINE_HEIGHT) > Math.floor(lineh/LINE_HEIGHT) ? Math.floor(lineh/LINE_HEIGHT) + 1 : Math.floor(lineh/LINE_HEIGHT) ;
- ctab[i].ante_lines = 0;
- for(j=0;j<i;j++) {
- ctab[i].ante_lines += ctab[j].total_lines;
- }
- g_tab_length += ctab[i].total_lines;
- }
- CollectGarbage();
- return ctab;
- }
- function sort_tab(tab2sort) {
- var tab = Array();
- var i, j;
- var tmp = new sentence;
- var smallest = 0;
- for(i=0;i<tab2sort.length;i++) {
- for(j=i;j<tab2sort.length;j++) {
- if(tab2sort[i].timer > tab2sort[j].timer) {
- tmp = tab2sort[i];
- tab2sort[i] = tab2sort[j];
- tab2sort[j] = tmp;
- }
- }
- tab.push(tab2sort[i]);
- }
- return tab;
- }
- function remove_enhanced_balises(str) {
- var i;
- var chr1, chr2;
- var new_str="";
- for(i=0;i<str.length;i++) {
- chr1 = str.substring(i, i+1);
- if(i+10<=str.length) chr2 = str.substring(i+9, i+10); else chr2=null;
- if(chr1=="<" && chr2==">") {
- i = i + 10 - 1;
- } else {
- new_str = new_str + chr1;
- }
- }
- return new_str;
- }
- function ts_analyzer(str) {
- var i, j, ch, ts_len;
- var str2 = "";
- var state=0;
- var deb = -1;
- var fin = -1;
- var sep1 = -1;
- var sep2 = -1;
- var suite=0;
- for(i=0;i<str.length;i++) {
- ch = str.substring(i, i+1);
- switch(state) {
- case 0:
- if(ch=="[" && IsNumeric(str.substring(i+1, i+2))) {
- state=1;
- deb=i;
- fin=-1;
- }
- break;
- case 1:
- if(deb>=0 && ch==":") {
- state=2;
- sep1=i;
- }
- if(i>deb+3) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 2:
- if(sep1>=0 && (ch==":" || ch==".")) {
- state=3;
- sep2=i;
- }
- if(sep1>=0 && sep2==-1 && ch=="]") {
- state=4;
- fin=i;
- }
- if(i>sep1+3) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 3:
- if(deb>=0 && ch=="]") {
- state=4;
- if(i==str.length-1) {
- str=str+" ";
- }
- fin=i;
- }
- if(i>deb+10) {
- deb=-1;
- fin=-1;
- sep1=-1;
- sep2=-1;
- state=0;
- }
- break;
- case 4:
- ts_len=fin-deb+1;
- switch(ts_len) {
- case 6:
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + ".00]";
- break;
- case 7:
- str2 = str2 + str.substring(deb,deb+6) + ".00]";
- break;
- case 9:
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + "." + str.substring(deb+6, deb+8) + "]";
- break;
- case 10:
- if(sep1==deb+2) {
- str2 = str2 + "[0" + str.substring(deb+1,deb+2) + ":" + str.substring(deb+3, deb+5) + "." + str.substring(deb+6, deb+8) + "]";
- } else {
- str2 = str2 + str.substring(deb,deb+10);
- }
- break;
- case 11:
- str2 = str2 + str.substring(deb,deb+9) + "]";
- break;
- }
- j += 10;
- if(str.substring(fin+1,fin+2)=="[") {
- suite = 1;
- i = fin;
- deb = -1;
- fin = -1;
- sep1 = -1;
- sep2 = -1;
- state = 0;
- } else {
- suite = -1;
- i = str.length - 1;
- str2 = str2 + str.substring(fin+1, str.length);
- }
- break;
- }
- }
- return str2;
- }
- function IsNumeric(str) {
- var ValidChars = "0123456789.";
- for (i = 0; i < str.length; i++) {
- if (ValidChars.indexOf(str.charAt(i)) == -1) {
- return false;
- }
- }
- return true;
- }
- function IsTimestamped(str) {
- var ValidChars = "[0123456789:.]";
- var count = 0;
- for (i = 0; i < (str.length>10?10:str.length); i++) {
- if (ValidChars.indexOf(str.charAt(i)) >=0) {
- count++;
- }
- }
- if(count>=6 && count <=11) {
- return true;
- } else {
- return false;
- }
- }
- function check_file(path, filename) {
- if(file_exists(path+filename+".lrc")) {
- g_lyrics_filename = filename+".lrc";
- g_lyrics_path = path;
- return true;
- } else {
- if(file_exists(path+filename+".txt")) {
- g_lyrics_filename = filename+".txt";
- g_lyrics_path = path;
- return true;
- }
- }
- return false;
- }
- function get_lyrics() {
- var i, count, delta, tag;
- var tpath = Array(lyrics_dir1.EvalWithMetadb(g_metadb), lyrics_dir2);
- var tfilename= Array(artist.Eval() + " -" + title.Eval(), artist.Eval() + " - " + title.Eval());
- var bool_tag = false;
- var bool_file = false;
- // reset lyrics tab
- g_lyrics_status = 0;
- if(g_tab.length>0) g_tab.splice(0, g_tab.length);
- pos = midpoint;
- focus = 0;
- window.Repaint();
- // check TAGs
- tag = lyrics.Eval();
- if(tag.length>0) {
- bool_tag = true;
- if(tag.substring(0,1)=="[") g_lyrics_status = 1; else g_lyrics_status = 2;
- } else {
- // check files
- i = 0;
- while(!bool_file && i<2) {
- j = 0;
- while(!bool_file && j<2) {
- bool_file = check_file(tpath[i], tfilename[j]);
- j++;
- }
- i++;
- }
- }
- // if lyrics found
- if(bool_tag || bool_file) {
- if(bool_tag) {
- g_tab = parse_tag(tag, "[");
- } else {
- g_tab = load_file(g_lyrics_path, g_lyrics_filename);
- }
- } else {
- g_tab = load_track_info();
- delta = (g_tab[g_tab.length-1].ante_lines + g_tab[g_tab.length-1].total_lines);
- pos = (wh / 2) - (delta * LINE_HEIGHT / 2);
- }
- if(g_lyrics_status==2) {
- for(i=0;i<g_tab.length-1;i++) {
- g_tab[i].timer = i * Math.floor(len_seconds.Eval() * 100 / g_tab.length);
- }
- }
- // dump
- for(i=0;i<g_tab.length;i++) {
- //fb.trace("i="+i+" // timer="+g_tab[i].timer+" // txt="+g_tab[i].text+" // ante="+g_tab[i].ante_lines+" // nbl="+g_tab[i].total_lines);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement