diff src/libvorbis-1.3.3/vq/make_residue_books.pl @ 1:05aa0afa9217

Bring in flac, ogg, vorbis
author Chris Cannam
date Tue, 19 Mar 2013 17:37:49 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/libvorbis-1.3.3/vq/make_residue_books.pl	Tue Mar 19 17:37:49 2013 +0000
@@ -0,0 +1,177 @@
+#!/usr/bin/perl
+
+# quick, very dirty little script so that we can put all the
+# information for building a residue book set (except the original
+# partitioning) in one spec file.
+
+#eg:
+
+# >res0_128_128 interleaved
+# haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9
+# :1 res0_128_128_1.vqd, 4, nonseq cull, 0 +- 1
+# :2 res0_128_128_2.vqd, 4, nonseq, 0 +- 1(.7) 2
+# :3 res0_128_128_3.vqd, 4, nonseq, 0 +- 1(.7) 3 5
+# :4 res0_128_128_4.vqd, 2, nonseq, 0 +- 1(.7) 3 5 8 11
+# :5 res0_128_128_5.vqd, 1, nonseq, 0 +- 1 3 5 8 11 14 17 20 24 28 31 35 39 
+
+
+die "Could not open $ARGV[0]: $!" unless open (F,$ARGV[0]);
+
+$goflag=0;
+while($line=<F>){
+
+    print "#### $line";
+    if($line=~m/^GO/){
+	$goflag=1;
+	next;
+    }
+
+    if($goflag==0){
+	if($line=~m/\S+/ && !($line=~m/^\#/) ){
+	    my $command=$line;
+	    print ">>> $command";
+	    die "Couldn't shell command.\n\tcommand:$command\n" 
+		if syst($command);
+	}
+	next;
+    }
+
+    # >res0_128_128
+    if($line=~m/^>(\S+)\s+(\S*)/){
+	# set the output name
+	$globalname=$1;
+	$interleave=$2;
+	next;
+    }
+
+    # haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9
+    if($line=~m/^h(.*)/){
+	# build a huffman book (no mapping) 
+	my($name,$datafile,$bookname,$interval,$range)=split(' ',$1);
+ 
+	# check the desired subdir to see if the data file exists
+	if(-e $datafile){
+	    my $command="cp $datafile $bookname.tmp";
+	    print ">>> $command\n";
+	    die "Couldn't access partition data file.\n\tcommand:$command\n" 
+		if syst($command);
+
+	    my $command="huffbuild $bookname.tmp $interval";
+	    print ">>> $command\n";
+	    die "Couldn't build huffbook.\n\tcommand:$command\n" 
+		if syst($command);
+
+	    my $command="rm $bookname.tmp";
+	    print ">>> $command\n";
+	    die "Couldn't remove temporary file.\n\tcommand:$command\n" 
+		if syst($command);
+	}else{
+	    my $command="huffbuild $bookname.tmp 0-$range";
+	    print ">>> $command\n";
+	    die "Couldn't build huffbook.\n\tcommand:$command\n" 
+		if syst($command);
+
+	}
+	next;
+    }
+
+    # :1 res0_128_128_1.vqd, 4, nonseq, 0 +- 1
+    if($line=~m/^:(.*)/){
+	my($namedata,$dim,$seqp,$vals)=split(',',$1);
+	my($name,$datafile)=split(' ',$namedata);
+	# build value list
+	my$plusminus="+";
+	my$list;
+	my$thlist;
+	my$count=0;
+	foreach my$val (split(' ',$vals)){
+	    if($val=~/\-?\+?\d+/){
+		my$th;
+
+		# got an explicit threshhint?
+		if($val=~/([0-9\.]+)\(([^\)]+)/){
+		    $val=$1;
+		    $th=$2;
+		}
+
+		if($plusminus=~/-/){
+		    $list.="-$val ";
+		    if(defined($th)){
+			$thlist.="," if(defined($thlist));
+			$thlist.="-$th";
+		    }
+		    $count++;
+		}
+		if($plusminus=~/\+/){
+		    $list.="$val ";
+		    if(defined($th)){
+			$thlist.="," if(defined($thlist));
+			$thlist.="$th";
+		    }
+		    $count++;
+		}
+	    }else{
+		$plusminus=$val;
+	    }
+	}
+	die "Couldn't open temp file $globalname$name.vql: $!" unless
+	    open(G,">$globalname$name.vql");
+	print G "$count $dim 0 ";
+	if($seqp=~/non/){
+	    print G "0\n$list\n";
+	}else{	
+	    print G "1\n$list\n";
+	}
+	close(G);
+
+	my $command="latticebuild $globalname$name.vql > $globalname$name.vqh";
+	print ">>> $command\n";
+	die "Couldn't build latticebook.\n\tcommand:$command\n" 
+	    if syst($command);
+
+	if(-e $datafile){
+	
+	    if($interleave=~/non/){
+		$restune="res1tune";
+	    }else{
+		$restune="res0tune";
+	    }
+	    
+	    if($seqp=~/cull/){
+		my $command="$restune $globalname$name.vqh $datafile 1 > temp$$.vqh";
+		print ">>> $command\n";
+		die "Couldn't tune latticebook.\n\tcommand:$command\n" 
+		    if syst($command);
+	    }else{
+		my $command="$restune $globalname$name.vqh $datafile > temp$$.vqh";
+		print ">>> $command\n";
+		die "Couldn't tune latticebook.\n\tcommand:$command\n" 
+		    if syst($command);
+	    }
+
+	    my $command="mv temp$$.vqh $globalname$name.vqh";
+	    print ">>> $command\n";
+	    die "Couldn't rename latticebook.\n\tcommand:$command\n" 
+		if syst($command);
+
+	}else{
+	    print "No matching training file; leaving this codebook untrained.\n";
+	}
+
+	my $command="rm $globalname$name.vql";
+	print ">>> $command\n";
+	die "Couldn't remove temp files.\n\tcommand:$command\n" 
+	    if syst($command);
+
+	next;
+    }
+}
+
+$command="rm -f temp$$.vqd";
+print ">>> $command\n";
+die "Couldn't remove temp files.\n\tcommand:$command\n" 
+    if syst($command);
+
+sub syst{
+    system(@_)/256;
+}