#! /usr/bin/perl
#
# Read a list of Chunk label files and construct a long praat script to split the 
# underlying sound files into sentences
#
# use:
#> SplitChunks.pl pattern
#
###############################################################################
#
# Copyright R.J.J.H. van Son © 2000, 2001
#
# Author Rob van Son
# Institute of Phonetic Sciences & ACLC
# University of Amsterdam
# Herengracht 338
# NL-1016CG Amsterdam, The Netherlands
# Email: Rob.van.Son@hum.uva.nl
#        rob.van.son@workmail.com
# WWW  : http://www.fon.hum.uva.nl/rob/
# mail:  Institute of Phonetic Sciences
#        University of Amsterdam
#        Herengracht 338
#        NL-1016CG Amsterdam
#        The Netherlands
#        tel +31 205252183
#        fax +31 205252197
#
# License for use and disclaimers
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
#
#######################################################
#
# Define and initialize
$HomeDir = '../../..';
require "$HomeDir/Links.pl";
require "$Scripts/SentenceLabel.pl";

$SpeechPath = "$DataPath/home/Shadowing/chunks";
$LabelDir = "ChunkLabels";
$SpeechDestination = "$DataPath/home/Shadowing/sentences";

my @GlobFileList = @ARGV;
my $FilePattern;

print "#! praat\n\n";
foreach $FilePattern (@GlobFileList)
{
        # Get the real filenames (expand * and ?)
        my @FileList = glob("$FilePattern");

        my $FileName;

        # Handle All files
        foreach $FileName (@FileList)
        {        	
        	# Take apart the file path to get the relevant directories and ID numbers
        	# e.g., "./Labels/chunks/F28G/F28G1FPA1.translit"
        	# -> $`=".", $1="Labels/chunks", $2="F28G", $3="translit", $4="F28G1FPA1" , $5="translit"
        	$FileName =~ m@([^/\.]+)\.([\w]+)$@i;
        	my $Code = $1;
         	
         	# Tear apart the CodeName
         	$Code =~ /^([FM][\d]+[A-Z]+)/;
        	my $SpeakerID = $1;
		my $SpeechFile = "$SpeechPath/$SpeakerID/$Code.aifc";
		
		# Open sound file in praat
		print STDOUT << "OPENPRAATFILE";
Open long sound file... $SpeechFile
Rename... speech
select LongSound speech
View
editor LongSound speech

OPENPRAATFILE
		# Read the required start and end points
		my $LabelFile = new SentenceLabel;
		$LabelFile->ReadLabelFile($FileName);
		$LabelFile->presetItem('TRANSLIT');
		while($LabelFile->nextItem('TRANSLIT') > -1)
		{
			# Skip pauses
			next if $LabelFile->currentValue('TRANSLIT') eq 'ISI*x';
			
			my $SentenceName = $LabelFile->currentIDcode('TRANSLIT').".aifc";
			# next if -e "$SpeechDestination/$SpeakerID/$SentenceName";
			
			# Praat script
			my $Begin = $LabelFile->currentStart('TRANSLIT') - 2;
			my $End = $LabelFile->currentEnd('TRANSLIT') + 2;
			print STDOUT << "PRAATSCRIPT";
	Move B to... $Begin
	Move E to... $End
	Write selection to AIFC file... $SpeechDestination/$SpeakerID/$SentenceName

PRAATSCRIPT
		};
		print STDOUT << "CLOSEPRAATFILE";
	Close
endeditor 
select all
Remove

CLOSEPRAATFILE

         };
};

print "Quit\n";
