share winlyrics to wmp SMI in perl

From: lechee (lecheel_at_yahoo.com)
Date: 08/31/04


Date: 31 Aug 2004 02:25:50 -0700


#!/usr/bin/perl
#
# lrc2smi lyrics to plain text (wmp smi) v1.00 (perl)
#
# convert lyrics .lrc to WMP smi
#
# copyright 2004 Lechee.Lai lecheel at yahoo dot com
#

# global variable
use File::Basename;
my $tcount=0;
my $tcontext;

$argc=@ARGV
&convertLRC();
exit 1;

sub convertLRC {
          open(FILE, @ARGV[0]) or die "lrc2smi: you must have \"@ARGV[0]\"
for convert :-)\n";
        my $out=basename(@ARGV[0],"");
        if ($out=~/(.*)\..*/ and !$option{'withextension'})
{$out=~s/(.*)\..*/$1\.smi/;}
        else {$out.=".smi";}
        $pureLrc = ">$out";
        
          @file = <FILE>;
          close (FILE);
          open (NEWFILE, $pureLrc) or die "$!";
        &SMIbegin();
        &SMItitle();
          foreach $line (@file) {
                chomp ($line);
                $line1 = $line;
# if ($line1 =~ /^\[(\d{2})\:(\d{2})\](.*)$/) { # check [nn:nn]
               if ($line1 =~ /^(.*)(:)(.*)(])/) { # check *:*]
                    $line2 = $line1;
                   if ($line2 =~ /\d(:)+\d+(])/) { # check nnn:nnn]
# if (1) {
                        $l1 = $line1;
                        checkTimeStamp($line1);
                        $noMore=0;
                        
                        while ($noMore==0) {
                        
                            if ($l1 =~ /^(.*)\d{2}(])/) { # have vaild
timestamp
                                    $pos = index($l1, "]");
                                    $timestamp = substr($l1, 0, $pos+1);
                                
                                
                                    if ($timestamp =~ /^\[(\d{2})\:(\d{2})\](.*)$/) {
                                
                                        my ($m, $s) = ($1, $2);
                                        my $sec = $s+60*$m;
                                
                                        while (exists $times{$sec}){
                                            $sec += 0.01;
                                        }
                                        
                                        &SMItime($sec);
                                }
                                    if ($tcount) {
                                            print NEWFILE "$tcontext";
                                    }
                                    print NEWFILE "\n";
                                    $l1 = substr($l1,$pos+1);
                            } else {
                              $noMore=1;
                            }
                       
                        }
                    } else {
                    
# print "###$line1\n";
                    }
                } else {
# print "---$line\n";
                }
               
        }
        &SMIend();
                close(NEWFILE);
}

sub checkTimeStamp($) {
        my ($line) = @_;
        $tcount = 0; # initialize for TimeCount
        $pos = rindex($line,"]");
        $tcontext = substr($line,$pos+1);
        if ($pos>5) {
            $tcount = 1;
        }
# print "...$tcontext\n";

}

sub SMIbegin {
        print NEWFILE "<SAMI>\n";
        print NEWFILE "<HEAD>\n";
        print NEWFIEL "<TITLE>Lechee Lyrics SMI</TITLE>\n";
}

sub SMItitle {
        print NEWFILE "<STYLE TYPE=\"text/css\">\n<!--\nP {\n";
        print NEWFILE "margin-left:8pt;\n";
        print NEWFILE "margin-right:8pt;\n";
        print NEWFILE "margin-bottom:24pt;\n";
        print NEWFILE "Background-image : url();\n";
        print NEWFILE "line-height:48pt;\n";
        print NEWFILE "Background-color:#000000;\n";
        print NEWFILE "text-align:center;\n";
        print NEWFILE "font-size:16pt;\n";
        print NEWFILE "font-family:,tahoma,arial,dotum,sans-serif;\n";
        print NEWFILE "font-weight:bold;\n";
        print NEWFILE "font-style:Normal;\n";
        print NEWFILE "color:#ffff00;\n";
        print NEWFILE "}\n";
        print NEWFILE ".CCUS {Name:English; lang: en-US;\n}\n-->\n";
        print NEWFILE "</STYLE>/n</HEAD>\n";
        print NEWFILE "<BODY>\n";
}

sub SMIend {
        print NEWFILE "</BODY>\n";
        print NEWFILE "</SAMI>\n";
}

sub SMItime($) {
        my ($tt) = @_;
        print NEWFILE "<SYNC Start=";
        print NEWFILE $tt;
        print NEWFILE "000><P Class=EGCC>";
}