#!/usr/bin/perl # FORM2 2 Wavesurfer # # This scripts takes a .form2 file as an arugment # and converts it to the .dat file format for display # in the Wavesurfer speech analysis tool. # # Chris Osborn # cosborn@ldc.upenn.edu # # FORM Project, Linguistic Data Consortium # University of Pennsylvania # # http://www.ldc.upenn.edu/Projects/FORM/ # $fps = 29.97; #video framerate, change to appropriate value $spf = 1/$fps; $lastFrameRight = -1; $lastFrameLeft = -1; $inputFile = $ARGV[0]; if($inputFile !~ /.form2$/){ print "Invalid file format. Use .form2 files.\n"; } else{ open(FORMFILE, "./$inputFile"); $outFileRight = $inputFile; $outFileLeft = $inputFile; $outFileRight =~ s/.form2/RIGHT.dat/g; $outFileLeft =~ s/.form2/LEFT.dat/g; open(WAVEOUT_RIGHT, ">./$outFileRight"); open(WAVEOUT_LEFT, ">./$outFileLeft"); while(){ if(/Right Hand/){$arm = 0;} elsif(/Left Hand/){$arm = 1;} elsif($_ !~ /$\#/ && $_ =~ /\d/){ ($frame, $xval, $yval, $zval, $lift, $orientation, $shape, $wristUpDown, $wristSideSide, $effort, $tension) = ($_ =~ /(\d*?),([\d\.-]*?),([\d\.-]*?),([\d\.-]*?),([\d\.-]*?),([\d\.-]*?),(\d*?),([\d\.-]*?),([\d\.-]*?),(\d*?),(\d*?)$/); if($arm eq 0){ if($frame > $lastFrameRight){$lastFrameRight = $frame;} } elsif($arm eq 1){ if($frame > $lastFrameLeft){$lastFrameLeft = $frame;} } $waveTable[$arm][$frame] = "$xval $yval $zval $lift $orientation $shape $wristUpDown $wristSideSide $effort $tension\n"; } } for($i=0; $i<=$lastFrameRight; $i++){ if($waveTable[0][$i] eq ""){print WAVEOUT_RIGHT "\n";} else{print WAVEOUT_RIGHT $waveTable[0][$i];} } for($i=0; $i<=$lastFrameLeft; $i++){ if($waveTable[1][$i] eq ""){print WAVEOUT_LEFT "\n";} else{print WAVEOUT_LEFT $waveTable[1][$i];} } close(WAVEOUT_RIGHT); close(WAVEOUT_LEFT); }