annotate src/libvorbis-1.3.3/vq/make_residue_books.pl @ 36:55ece8862b6d

Merge
author Chris Cannam
date Wed, 11 Mar 2015 13:32:44 +0000
parents 05aa0afa9217
children
rev   line source
Chris@1 1 #!/usr/bin/perl
Chris@1 2
Chris@1 3 # quick, very dirty little script so that we can put all the
Chris@1 4 # information for building a residue book set (except the original
Chris@1 5 # partitioning) in one spec file.
Chris@1 6
Chris@1 7 #eg:
Chris@1 8
Chris@1 9 # >res0_128_128 interleaved
Chris@1 10 # haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9
Chris@1 11 # :1 res0_128_128_1.vqd, 4, nonseq cull, 0 +- 1
Chris@1 12 # :2 res0_128_128_2.vqd, 4, nonseq, 0 +- 1(.7) 2
Chris@1 13 # :3 res0_128_128_3.vqd, 4, nonseq, 0 +- 1(.7) 3 5
Chris@1 14 # :4 res0_128_128_4.vqd, 2, nonseq, 0 +- 1(.7) 3 5 8 11
Chris@1 15 # :5 res0_128_128_5.vqd, 1, nonseq, 0 +- 1 3 5 8 11 14 17 20 24 28 31 35 39
Chris@1 16
Chris@1 17
Chris@1 18 die "Could not open $ARGV[0]: $!" unless open (F,$ARGV[0]);
Chris@1 19
Chris@1 20 $goflag=0;
Chris@1 21 while($line=<F>){
Chris@1 22
Chris@1 23 print "#### $line";
Chris@1 24 if($line=~m/^GO/){
Chris@1 25 $goflag=1;
Chris@1 26 next;
Chris@1 27 }
Chris@1 28
Chris@1 29 if($goflag==0){
Chris@1 30 if($line=~m/\S+/ && !($line=~m/^\#/) ){
Chris@1 31 my $command=$line;
Chris@1 32 print ">>> $command";
Chris@1 33 die "Couldn't shell command.\n\tcommand:$command\n"
Chris@1 34 if syst($command);
Chris@1 35 }
Chris@1 36 next;
Chris@1 37 }
Chris@1 38
Chris@1 39 # >res0_128_128
Chris@1 40 if($line=~m/^>(\S+)\s+(\S*)/){
Chris@1 41 # set the output name
Chris@1 42 $globalname=$1;
Chris@1 43 $interleave=$2;
Chris@1 44 next;
Chris@1 45 }
Chris@1 46
Chris@1 47 # haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9
Chris@1 48 if($line=~m/^h(.*)/){
Chris@1 49 # build a huffman book (no mapping)
Chris@1 50 my($name,$datafile,$bookname,$interval,$range)=split(' ',$1);
Chris@1 51
Chris@1 52 # check the desired subdir to see if the data file exists
Chris@1 53 if(-e $datafile){
Chris@1 54 my $command="cp $datafile $bookname.tmp";
Chris@1 55 print ">>> $command\n";
Chris@1 56 die "Couldn't access partition data file.\n\tcommand:$command\n"
Chris@1 57 if syst($command);
Chris@1 58
Chris@1 59 my $command="huffbuild $bookname.tmp $interval";
Chris@1 60 print ">>> $command\n";
Chris@1 61 die "Couldn't build huffbook.\n\tcommand:$command\n"
Chris@1 62 if syst($command);
Chris@1 63
Chris@1 64 my $command="rm $bookname.tmp";
Chris@1 65 print ">>> $command\n";
Chris@1 66 die "Couldn't remove temporary file.\n\tcommand:$command\n"
Chris@1 67 if syst($command);
Chris@1 68 }else{
Chris@1 69 my $command="huffbuild $bookname.tmp 0-$range";
Chris@1 70 print ">>> $command\n";
Chris@1 71 die "Couldn't build huffbook.\n\tcommand:$command\n"
Chris@1 72 if syst($command);
Chris@1 73
Chris@1 74 }
Chris@1 75 next;
Chris@1 76 }
Chris@1 77
Chris@1 78 # :1 res0_128_128_1.vqd, 4, nonseq, 0 +- 1
Chris@1 79 if($line=~m/^:(.*)/){
Chris@1 80 my($namedata,$dim,$seqp,$vals)=split(',',$1);
Chris@1 81 my($name,$datafile)=split(' ',$namedata);
Chris@1 82 # build value list
Chris@1 83 my$plusminus="+";
Chris@1 84 my$list;
Chris@1 85 my$thlist;
Chris@1 86 my$count=0;
Chris@1 87 foreach my$val (split(' ',$vals)){
Chris@1 88 if($val=~/\-?\+?\d+/){
Chris@1 89 my$th;
Chris@1 90
Chris@1 91 # got an explicit threshhint?
Chris@1 92 if($val=~/([0-9\.]+)\(([^\)]+)/){
Chris@1 93 $val=$1;
Chris@1 94 $th=$2;
Chris@1 95 }
Chris@1 96
Chris@1 97 if($plusminus=~/-/){
Chris@1 98 $list.="-$val ";
Chris@1 99 if(defined($th)){
Chris@1 100 $thlist.="," if(defined($thlist));
Chris@1 101 $thlist.="-$th";
Chris@1 102 }
Chris@1 103 $count++;
Chris@1 104 }
Chris@1 105 if($plusminus=~/\+/){
Chris@1 106 $list.="$val ";
Chris@1 107 if(defined($th)){
Chris@1 108 $thlist.="," if(defined($thlist));
Chris@1 109 $thlist.="$th";
Chris@1 110 }
Chris@1 111 $count++;
Chris@1 112 }
Chris@1 113 }else{
Chris@1 114 $plusminus=$val;
Chris@1 115 }
Chris@1 116 }
Chris@1 117 die "Couldn't open temp file $globalname$name.vql: $!" unless
Chris@1 118 open(G,">$globalname$name.vql");
Chris@1 119 print G "$count $dim 0 ";
Chris@1 120 if($seqp=~/non/){
Chris@1 121 print G "0\n$list\n";
Chris@1 122 }else{
Chris@1 123 print G "1\n$list\n";
Chris@1 124 }
Chris@1 125 close(G);
Chris@1 126
Chris@1 127 my $command="latticebuild $globalname$name.vql > $globalname$name.vqh";
Chris@1 128 print ">>> $command\n";
Chris@1 129 die "Couldn't build latticebook.\n\tcommand:$command\n"
Chris@1 130 if syst($command);
Chris@1 131
Chris@1 132 if(-e $datafile){
Chris@1 133
Chris@1 134 if($interleave=~/non/){
Chris@1 135 $restune="res1tune";
Chris@1 136 }else{
Chris@1 137 $restune="res0tune";
Chris@1 138 }
Chris@1 139
Chris@1 140 if($seqp=~/cull/){
Chris@1 141 my $command="$restune $globalname$name.vqh $datafile 1 > temp$$.vqh";
Chris@1 142 print ">>> $command\n";
Chris@1 143 die "Couldn't tune latticebook.\n\tcommand:$command\n"
Chris@1 144 if syst($command);
Chris@1 145 }else{
Chris@1 146 my $command="$restune $globalname$name.vqh $datafile > temp$$.vqh";
Chris@1 147 print ">>> $command\n";
Chris@1 148 die "Couldn't tune latticebook.\n\tcommand:$command\n"
Chris@1 149 if syst($command);
Chris@1 150 }
Chris@1 151
Chris@1 152 my $command="mv temp$$.vqh $globalname$name.vqh";
Chris@1 153 print ">>> $command\n";
Chris@1 154 die "Couldn't rename latticebook.\n\tcommand:$command\n"
Chris@1 155 if syst($command);
Chris@1 156
Chris@1 157 }else{
Chris@1 158 print "No matching training file; leaving this codebook untrained.\n";
Chris@1 159 }
Chris@1 160
Chris@1 161 my $command="rm $globalname$name.vql";
Chris@1 162 print ">>> $command\n";
Chris@1 163 die "Couldn't remove temp files.\n\tcommand:$command\n"
Chris@1 164 if syst($command);
Chris@1 165
Chris@1 166 next;
Chris@1 167 }
Chris@1 168 }
Chris@1 169
Chris@1 170 $command="rm -f temp$$.vqd";
Chris@1 171 print ">>> $command\n";
Chris@1 172 die "Couldn't remove temp files.\n\tcommand:$command\n"
Chris@1 173 if syst($command);
Chris@1 174
Chris@1 175 sub syst{
Chris@1 176 system(@_)/256;
Chris@1 177 }