51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Raku
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Raku
		
	
	
	
	
	
| #!C:/Perl/bin/perl
 | |
| 
 | |
| if ($#ARGV==-1) {
 | |
|     printf "Usage: align.pl binary_alignment_filename\n";
 | |
|     exit (0);
 | |
| };
 | |
| 
 | |
| system ("align_info -labels %SWISRSDK%/config/en.sg/models/SpeechPearl.hmmlabels $ARGV[0] > $ARGV[0].txt");
 | |
| printf ("$ARGV[0] -> $ARGV[0].txt\n");
 | |
| 
 | |
| open(BINARY_ALIGN, "$ARGV[0].txt") or die "Cannot open file $ARGV[0].txt";
 | |
| 
 | |
| $count=1;
 | |
| 
 | |
| while(<BINARY_ALIGN>){
 | |
| 
 | |
|     s/\s+$//;
 | |
| 
 | |
|     if(/^uttname: $1/){
 | |
| 	close FD;
 | |
| 	$lola = sprintf("alignments_%d.txt", $count++); 
 | |
| 	print "$' => $lola\n";
 | |
| 	open(FD, ">$lola") || die "cannot open $lola";
 | |
| 	printf FD "$'\n";
 | |
| 	printf FD "MillisecondsPerFrame: 10\nEND OF HEADER\n";
 | |
| 	printf FD "start end   phoneme                  score     -sscore score/msec\n";
 | |
| 	$total_score=0;
 | |
|     } elsif (/^ortho: /){
 | |
| 	printf FD "$'\n";
 | |
|     } elsif(/^ label index (.*)/){
 | |
| 	$label=$1;
 | |
|     } elsif (/^ model score (.*)/){
 | |
| 	$score=$1;
 | |
| 	$total_score += $score;
 | |
|     } elsif (/^ from time (.*)/){
 | |
| 	$from_time=$1;
 | |
|     } elsif (/^ to time (.*)/){
 | |
| 	$to_time=$1;
 | |
|     } elsif (/^ segment type (.*)/){
 | |
| 	if (0){
 | |
| 	    next if $from_time == $to_time;
 | |
| 	    printf FD "%5.3f %5.3f %-20s %10.2f %10.2f %.2f\n", $from_time*100, $to_time*100, $label,$score, -$total_score, $score/($to_time -$from_time)/100;
 | |
| 	} else {
 | |
| 	    $dscore = ($to_time==$from_time) ? 0 : $score/($to_time -$from_time)/1000;
 | |
| 	    printf FD "%5.3f %5.3f %-20s %10.2f %10.2f %.2f\n", $from_time, $to_time, $label,$score, -$total_score, $dscore;
 | |
| 	}
 | |
|     }
 | |
| }
 | |
| 
 | |
| exit 0;
 |