#!/usr/bin/perl
#
# Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
# Creation Date: Tue Feb 13 02:05:45 PST 2007
# Last Modified: Tue Feb 13 02:05:45 PST 2007
# Filename:      /project/mazurka/website/info/dyn/dynbeat100/extractcleanlist
# Syntax:        perl 5
#
# Description:
#

use strict;

my $basedir   = $ARGV[0];
my $indexfile = $ARGV[1];

my $faad = "/usr/bin/faad";
my $recdir = "/project/mazurka/website/private/recording";
#my $vamphost = "/project/mazurka/website/software/sv/plugin/vamp/sdk/host/vamp-simple-host";
#my $vamphost = "/disk/linux3/craigsites/mazurka/website/auto/onset-sapp/bin/vamp-simple-host-0.9";

my $vamphost = "/project/mazurka/website/auto/onset-sapp/bin/vamp-simple-host-0.9";

#my $plugin = "/project/mazurka/website/software/sv/plugin/download/linux/MzPowerCurve.so:mzpowercurve";
#my $plugin = "/disk/linux3/craigsites/mazurka/website/auto/onset-sapp/bin/MzPowerCurve.so:mzpowercurve";
my $plugin = "/project/mazurka/website/auto/onset-sapp/bin/MzPowerCurve.so:mzpowercurve";

my @pids = getPidList($basedir);
my %pidindex = getIndex($indexfile);

my $pid;
my $subdir;
foreach $pid (@pids) {
   $subdir = $pidindex{$pid};
   if ($subdir =~ /^\s*$/) {
      print "********************************************\n";
      print "ERROR: $pid is not associated with a mazurka\n";
      print "********************************************\n";
      next;
   }

   if (!-d "$subdir") {
      mkdir($subdir, 0755);
   }

   if (!-r "$subdir/$pid.dyn") {
      print "Extracting dynamics for $pid ($subdir)\n";
      extractDynamics($pid, $subdir);
   }

}


###########################################################################


##############################
##
## getPidList --
##

sub getPidList {
   my ($basedir) = @_;
   opendir (BDIR, $basedir) or die "Cannot find directory $basedir";

   my $file;
   my @output;

   while ($file = readdir(BDIR)) {
      next if $file =~ /^\./;
      next if $file !~ /^pid/;
      next if !-d "$basedir/$file";
      next if !-r "$basedir/$file/$file-clean.txt";
      $output[@output] = $file;
   }

   closedir BDIR;

   return @output;

}



##############################
##
## getIndex --
##

sub getIndex {
   my ($file) = @_;

   my %output;
   my $pid;
   my $line;
   my $mazurka;

   open (IFILE, $file) or die "Cannot open $file for reading";
   while ($line = <IFILE>) {
      chomp $line;
      if ($line =~ /(pid[^\s]+)\s+.*(mazurka\d\d-\d)/) {
         $pid = $1;
         $mazurka = $2;
         $output{$pid} = $mazurka;
      }
   }
   close IFILE;

   return %output;
}

 



##############################
##
## extractDynamics --
##

sub extractDynamics {
   my ($pid, $subdir) = @_;

   my $onsetfile = "$basedir/$pid/$pid-clean.txt";
   if (!-r $onsetfile) {
      print "ERROR: cannot read $onsetfile\n\n";
      return;
   }

   `cp $recdir/$subdir/$pid.mp4 .`;
   `$faad $pid.mp4`;
   `$vamphost $plugin $pid.wav 1 > $pid.smoothpower`;

   print ">>>>> Creating $subdir :: $pid\n";
   `../bin/extractbeatdynamics100 $onsetfile $pid.smoothpower > $subdir/$pid.dyn`;

   `rm -f $pid.mp4`;
   `rm -f $pid.wav`;
   `rm -f $pid.smoothpower`;
}



