#!/usr/bin/perl
#
# Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
# Creation Date: Thu Dec  9 00:48:09 PST 2004
# Last Modified: Thu Dec  9 00:48:09 PST 2004
# Filename:      tskey2hum
# Syntax:        perl 5
#
# Description:
#

## Example input:
## 
## Bb  Bb  Bb  Bb  Bb  Bb  Bb  Bb  Bb  Bb  
## Bb  Bb  Bb  
## 
## Kostka-Payne Roman Numeral Analysis:
## 
## Segment: 15750 17990
## Segment: 17990 20265
## Segment: 20265 22505
## Segment: 22505 24745
## Segment: 24745 26985
## Segment: 26985 29260
##
## |Bb: I  .  V6 |I  .  vi |V  .  V42 |I6 ii I  |V  V7 I  |.  V43 I6 |IV .  I  |.  IV6 V42 |I6 .  IV |V  .  .  |I6 II6 V7 |
## 
## vi V6 I  |V  V7 I  ]|
## 
## 

use strict;
my @contents = <>;

my $line;
my $analysis;
my @segments;

foreach $line (@contents) {
   if ($line =~ /\|/) {
      # print $line;
      chomp $line;
      $analysis .= " $line";
   } elsif ($line =~ /Segment:\s+(\d+)\s+(\d+)\s*$/) {
      if (@segments == 0) {
         $segments[@segments] = $1;
         $segments[@segments] = $2;
      } else {
         $segments[@segments] = $2;
      }
   }
}

$analysis =~ s/\|/ \| /g;

my $token;
my $count = 0;

print "**tsharm\t**time\n";
while ($analysis =~ s/^(\s*)([^ \t\n]+)//) {
   $token = $2;
   if ($token =~ /\]/) {
      next;
   } elsif ($token =~ /:/) {
      if ($token =~ /(.)bb:/) {
         $token =~ s/b:/--:/;
      } elsif ($token =~ /(.)b:/) {
         $token =~ s/b:/-:/;
      }
      print "*$token\t*\n";
   } elsif ($token =~ /\|/) {
      print "$token\t$segments[$count]\n";
      $count++;
   } else {
      $token = convertInversions($token);
      print "$token\t.\n";
   }
}
print "*-\t*-\n";



# Contents of parameter file:
# 
# verbosity=2
# default_profile_value = 1.5
# npc_or_tpc_profile=1
# scoring_mode = 1
# segment_beat_level=3
# beat_printout_level=2
# romnums=1
# romnum_type=0
# running=0
# 


##############################
##
## convertInversions --
##

sub convertInversions {
   my ($token) = @_;

   my $digits = "";
   if ($token =~ /(\d+)/) {
      $digits = $1;
   }

   if ($digits eq "6") {
      $token =~ s/6/b/;
   }

   if ($digits eq "64") {
      $token =~ s/64/c/;
   }

   if ($digits eq "65") {
      $token =~ s/65/7b/;
   }

   if ($digits eq "43") {
      $token =~ s/43/7c/;
   }

   if ($digits eq "42") {
      $token =~ s/42/7d/;
   }

   return $token;
}





