#!/usr/bin/perl -w srand( time() ^ ($$ + ($$ << 15)) ); @engines = qw( AltaVista Yahoo Excite WebCrawler NorthernLight ); @queries = ("music", "sound files", "wave files", "aiff", "aiff files", "music files", "wav files", "sounds", "sound samples"); chdir "/home/peter/web/search_results/" or die "Can't cd: $!\n"; `rm -f *`; $engine_arrsize = @engines; $query_arrsize = @queries; #print $engine_arrsize . "\n"; #print $query_arrsize . "\n"; $pick_engine = randchooser($engine_arrsize); $pick_query = randchooser($query_arrsize); print "choosing $engines[$pick_engine] search engine with $queries[$pick_query] search query.\n"; system "AutoSearch", "-n", "'sounds'", "-s", "'$queries[$pick_query]'", "-e", "$engines[$pick_engine]", "/home/peter/web/search_results"; sub randchooser { my $number; $number = int(rand $_[0]); return $number; }
Code to parse search results and download sound files:
#!/usr/bin/perl -w # this program parses the web page created by AutoSearch and, for each # link encountered, calls a routine to search that page for soundfile links # and, if any are found, download and convert them to 16 bit 44k WAVE. srand( time() ^ ($$ + ($$ << 15)) ); use strict; use LWP 5.000; use URI::URL; use HTML::LinkExtor; my %searchresults; my %pageresults; my @addresses; my $address; my $link; my $search = "http://music.dartmouth.edu/~peter/search_results/index.html"; my $dlcount = 0; my $getURL; my $namelocation; my $namecount = $dlcount + 1; my @filename; my @splitfilename; my $oldfilename; my $newfilename; my $sfconvert_error; my $sndinfo_error; my $count; my $total_arraysize; my $arraysize; my $arrayindex; %searchresults = pageparser(1, $search); push (@addresses, keys %searchresults); $total_arraysize = @addresses; OUTTER: for ($count=0; $count<$total_arraysize; $count++) { # the following 5 lines $arraysize = @addresses; # randomly pick from print "address array size is $arraysize\n"; # the array of $arrayindex = randchooser($arraysize); # addresses $link = splice(@addresses, $arrayindex, 1); print "printing results for $link\n"; %pageresults = pageparser(2, $link); chdir "/django/people/peter/downloads" or die "can't cd: $!\n"; ####### TAKE AN ADDRESS, FIND OLD FILENAME, MAKE NEW FILENAME ################## INNER: foreach $address (sort keys %pageresults) { $getURL = "$address"; @filename = split(/\//, $address); # split http address to into # array. $namelocation = @filename - 1; # index into array to find # filename. $oldfilename = "$filename[$namelocation]"; # this finds the #filename at the end # of the array. @splitfilename = split(/\./, $oldfilename); # split oldfilename print STDERR "saving $getURL\n"; print "the old filename is $oldfilename\n"; $newfilename = "soundfile_" . $namecount . ".wav"; print "the new filename is $newfilename\n"; ################# DOWNLOAD, TRANSLATE, ERRORCHECK, AND MOVE TO SOUNDBIN ############# system "/django/people/peter/bin/lwp-download2", "$getURL"; # uses modified downloader open(STDERR, ">sfconvert_error"); #create a STDERR file to #check for file errors system "/django/people/peter/bin/translate", "$oldfilename", "$newfilename"; close(STDERR); open(SNDINFO_OUT, "/django/people/peter/bin/infoparse $newfilename|"); open(SNDINFOERRORFILE, ">sndinfo_error"); while (<SNDINFO_OUT>) { print SNDINFOERRORFILE $_; } close(SNDINFOERRORFILE); close(SNDINFO_OUT); open(CONVERTERROR, "sfconvert_error"); # open errorfile # for reading open(SNDINFOERRORFILE, "sndinfo_error"); $sfconvert_error = <CONVERTERRPR>; $sndinfo_error = <SNDINFOERRORFILE>; if ($sfconvert_error =~ /\w/) { # if error, erase both # files unlink($oldfilename); unlink($newfilename); print "$sfconvert_error\n"; print "SFCONVERT NO LIKE! BAD FILES REMOVED!\n\n"; close(CONVERTERROR); close(SNDINFOERRORFILE); next INNER; } elsif ($sndinfo_error =~ /\d/) { print "$sndinfo_error\n"; rename("$newfilename", "/django/people/peter/soundbin/$newfilename"); print "FILE IS OK! moved to soundbin.\n"; close(CONVERTERROR); close(SNDINFOERRORFILE); } else { unlink($oldfilename); unlink($newfilename); print "$sndinfo_error\n"; print "SNDINFO NO LIKE! BAD FILES REMOVED!\n\n"; close(CONVERTERROR); close(SNDINFOERRORFILE); next INNER; } $dlcount++; print "successful d-load number " . $dlcount . "\n\n"; $namecount = $dlcount + 1; if ($dlcount >= 25) { last OUTTER; } } } chdir "/django/people/peter/downloads/" or die "Can't cd to d-loads: $!\n"; `rm -f *`; #clean out d-loads directory when done. ################################### FUNCTIONS ######################### # FUNCTION TO PARSE HTML sub pageparser { my($url, $browser, $time, %saw); $time = 10; $browser = LWP::UserAgent->new(); #make fake browser $browser->timeout($time); foreach $url ($_[1]) { # fetch doc via fake browser my $webdoc = $browser->request(HTTP::Request->new(GET => $url)); next unless $webdoc->is_success; next unless $webdoc->content_type eq 'text/html'; #can't parse gifs my $base = $webdoc->base; #now extract all links of type <A ...> foreach(HTML::LinkExtor->new->parse($webdoc->content)->eof->links) { my($tag, %links) = @$_; my $link; next unless $tag eq "a"; if ($_[0] =~ /1/) { foreach $link (values %links) { $saw{ url($link, $base)->abs->as_string }++; } } else { foreach $link (values %links) { if ($link =~ /.*\.wav\b/) { $saw{ url($link, $base)->abs->as_string }++; } elsif ($link =~ /.*\.aiff\b/) { $saw{ url($link, $base)->abs->as_string }++; } } } } } return %saw; } #FUNCTION TO PICK RANDOM NUMBER BETWEEN 0 AND UPPER LIMIT GIVEN AS FUNC. ARGUMENT sub randchooser { my $number; $number = int(rand $_[0]); return $number; }
Code to convert soundfiles to 44.1kHz, 16-bit, stereo WAVE files:
#!/usr/bin/perl -w #system "sfconvert", "$ARGV[0]", "$ARGV[1]", "format aiff", "srate 44100"; `sfconvert $ARGV[0] $ARGV[1] format wave rate 44100 int 16 2 channels 2`;
Code to retrieve number of sample frames from sndinfo header:
#!/usr/bin/perl -w # this process outputs the number of frames in the soundfile given # in the command line. #system "sndinfo", "$ARGV[0]"; foreach $_ (`/django/musr/bin/sndinfo $ARGV[0]`) { chomp; if ($_ =~ /\(\d* sample frames\)/) { #$output = /\(\d* sample frames\)/; #($frames) = (split /\(\d* sample frames\)/) [1]; ($match) = (split /\(/) [1]; ($frames) = split(/\s/, $match); print $frames; } } Code for choosing sound generating process, converting to RealAudio, and updating .ram files: #!/usr/bin/perl -w #PROCESS CHOOSER PICKS WHICH PROCESS TO RUN FOR THE CURRENT PIECE open(NUMBER, "tracker"); while (<NUMBER>) { chomp; $number = $_; } close(NUMBER); $number++; #print "the file number is $number\n"; ($number = 1) if ($number > 20); $name_isdn = "BandP_ISDN_" . "$number" . ".rm"; $name_28 = "BandP_28_" . "$number" . ".rm"; ramnamer($number); #srand( time() ^ ($$ + ($$ << 15)) ); srand; my $timestamp = `date '+%r %Z %D'`; my $choose = randchooser(5); if ($choose == 1) { `/django/people/peter/bin/newscrew`; } elsif ($choose == 2) { `/django/people/peter/bin/3graincomber`; } elsif ($choose == 3) { `/django/people/peter/bin/newmonkey`; } elsif ($choose == 4) { `/django/people/peter/bin/chunkymonkey`; } elsif ($choose == 5) { `/django/people/peter/bin/layers`; } `rmenc -I BandP.wav -O $name_28 -T "bits & pieces - $timestamp" -U "peter m traub" -C "1999" -A 6`; `rmenc -I BandP.wav -O $name_isdn -T "bits & pieces - $timestamp" -U "peter m traub" -C "1999" -A 11`; `/django/people/peter/bin/ftpput server $name_28 $name_isdn`; print "file succesfully sent to raven.\n"; `/django/people/peter/bin/ftpput ramfile BandP_ISDN.ram BandP_28.ram`; `rm -f tracker $name_28 $name_isdn`; #clean up a bit open(NUMBER, ">tracker"); print NUMBER "$number\n"; close(NUMBER); ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; } sub ramnamer { my $number = $_[0]; open(ISDN, ">BandP_ISDN.ram"); open(SLOW, ">BandP_28.ram"); for($count=1;$count<=10;$count++) { ($number = 20) if ($number < 1); print ISDN "pnm://raven.dartmouth.edu/peter/BandP_ISDN_" . "$number" . ".rm\n"; print SLOW "pnm://raven.dartmouth.edu/peter/BandP_28_" . "$number" . ".rm\n"; $number--; } close(ISDN); close(SLOW); }
Example of generated .ram file:
pnm://raven.dartmouth.edu/peter/BandP_ISDN_5.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_4.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_3.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_2.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_1.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_20.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_19.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_18.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_17.rm pnm://raven.dartmouth.edu/peter/BandP_ISDN_16.rm
Code to FTP finished RealAudio files to server:
#!/usr/bin/perl -w # this script takes a WAVE file and puts it in a directory on Raven use Net::FTP; $ftp = Net::FTP->new("raven.dartmouth.edu"); $ftp->login("peter","my_password"); if ($ARGV[0] eq "ramfile") { $ftp->cwd("/home/peter/web/ramfiles/"); #for putting ram files on Raven } elsif ($ARGV[0] eq "server") { $ftp->cwd("/usr/local/pnserver/content/peter/"); #put .rm file on Raven } $ftp->binary; $ftp->put("$ARGV[1]"); # name of RM file to put on raven $ftp->put("$ARGV[2]"); # #if ($ftp->is_success) { #print "successful ftp\n"; #} else { #print "ftp failed\n"; #} $ftp->quit;
Current PERL/Csound sound generating processes (subject to change):
Process 1:
#!/usr/bin/perl -w open(TIME, ">timecheck"); my $date = `date`; print TIME "$date\n"; #srand( time() ^ ($$ + ($$ << 15)) ); srand; $soundnumber1 = randchooser(25); SOUNDPICK1: $soundnumber2 = randchooser(25); next SOUNDPICK1 if ($soundnumber2 == $soundnumber1); SOUNDPICK2: $soundnumber3 = randchooser(25); next SOUNDPICK2 if (($soundnumber3 == $soundnumber1) || ($soundnumber3 == $soundnumber2)); $soundname1 = "soundfile_" . $soundnumber1 . ".wav"; $soundname2 = "soundfile_" . $soundnumber2 . ".wav"; $soundname3 = "soundfile_" . $soundnumber3 . ".wav"; open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname1|"); $frames1 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname2|"); $frames2 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname3|"); $frames3 = <INFOPROC> - 1; close(INFOPROC); #$soundlength1 = $frames1/44100; #dur variables for orc score #$soundlength2 = $frames2/44100; #dur variables for orc score #$soundlength3 = $frames3/44100; #dur variables for orc score open(ORC, ">3graincomber.orc") || die "can't open 3graincomber.orc: $!"; print ORC <<EOF; sr = 44100 kr = 44100 ksmps = 1 nchnls = 2 instr 1 gkread line 0, p3, 1 endin instr 2 kamp = ampdb(p6) ipit1 = p4 kpan = p19 ;;;;;;;;;;; SAMPLE 1 ;;;;;;;;;;;;;;;;;;; ilen1 = $frames1 isam1 = 44100*p3*ipit1 istart1 = i(gkread)*$frames1 aindex1 line istart1, p3, istart1 + isam1 a1 tablei aindex1, 1 a2 tablei aindex1, 2 ;;;;;;;;;;; SAMPLE 2 ;;;;;;;;;;;;;;;;;;; ilen2 = $frames2 isam2 = 44100*p3*ipit1 istart2 = i(gkread)*$frames2 aindex2 line istart2, p3, istart2 + isam2 a3 tablei aindex2, 3 a4 tablei aindex2, 4 ;;;;;;;;;;; SAMPLE 3 ;;;;;;;;;;;;;;;;;;; ilen3 = $frames3 isam3 = 44100*p3*ipit1 istart3 = i(gkread)*$frames3 aindex3 line istart3, p3, istart3 + isam3 a5 tablei aindex3, 5 a6 tablei aindex3, 6 if p21 == 1 goto OUT1 if p21 == 2 goto OUT2 if p21 == 3 goto OUT3 OUT1: adryoutl1 butterhp a1*kamp, 20 adryoutr1 butterhp a2*kamp, 20 adryoutl butterlp adryoutl1, 22000 adryoutr butterlp adryoutr1, 22000 goto DELAY OUT2: adryoutl2 butterhp a3*kamp, 20 adryoutr2 butterhp a4*kamp, 20 adryoutl butterlp adryoutl2, 22000 adryoutr butterlp adryoutr2, 22000 goto DELAY OUT3: adryoutl3 butterhp a5*kamp, 20 adryoutr3 butterhp a6*kamp, 20 adryoutl butterlp adryoutl3, 22000 adryoutr butterlp adryoutr3, 22000 goto DELAY DELAY: adelaysig = (adryoutl+adryoutr)/2 ;delay unit kdelay1 = p7 kdelay2 = p8 kdelay3 = p9 kdelay4 = p10 kdelay5 = p11 kdelay1lvl = p12 kdelay2lvl = p13 kdelay3lvl = p14 kdelay4lvl = p15 kdelay5lvl = p16 kfeedback = p17 ktotalvol = p18 adumm1 delayr 2 adel1 deltapi kdelay1+1/kr delayw adelaysig + (adel1*kfeedback*.01) adumm2 delayr 2 adel2 deltapi kdelay2+1/kr delayw adelaysig + (adel2*kfeedback*.01) adumm3 delayr 2 adel3 deltapi kdelay3+1/kr delayw adelaysig + (adel3*kfeedback*.01) adumm4 delayr 2 adel4 deltapi kdelay4+1/kr delayw adelaysig + (adel4*kfeedback*.01) adumm5 delayr 2 adel5 deltapi kdelay5+1/kr delayw adelaysig + (adel5*kfeedback*.01) a1 = adel1*(kdelay1lvl*.01) a2 = adel2*(kdelay2lvl*.01) a3 = adel3*(kdelay3lvl*.01) a4 = adel4*(kdelay4lvl*.01) a5 = adel5*(kdelay5lvl*.01) acomboutl = ((a1 + a2 + a3 + a4 + a5)/5)*(ktotalvol*.01) acomboutr = ((a1 + a2 + a3 + a4 + a5)/5)*(ktotalvol*.01) acomboutl butterhp acomboutl, 20 acomboutr butterhp acomboutr, 20 kcrossfade = p5 kdeclick oscil1i 0, 1, 2*p3, p20 ;adeclick linseg 0, p3*.3, 1, p3*.4, 1, p3*.3, 0 aoutl = kpan*kdeclick*((adryoutl*(1-kcrossfade))+(acomboutl*kcrossfade)) aoutr = (1-kpan)*kdeclick*((adryoutr*(1-kcrossfade))+(acomboutr*kcrossfade)) ;aoutl butterhp aoutl, 30 ;aoutr butterhp aoutr, 30 outs aoutl, aoutr endin EOF close(ORC); $pow2_1 = 2; while( $pow2_1 < $frames1 ){ $pow2_1 *= 2; } $pow2_2 = 2; while( $pow2_2 < $frames2 ){ $pow2_2 *= 2; } $pow2_3 = 2; while( $pow2_3 < $frames3 ){ $pow2_3 *= 2; } open(SCO, ">3graincomber.sco") || die "can't open 3graincomber.sco: $!"; print SCO "f1 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 1\n"; print SCO "f2 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 2\n"; print SCO "f3 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 1\n"; print SCO "f4 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 2\n"; print SCO "f5 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 1\n"; print SCO "f6 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 2\n"; print SCO "f7 0 1024 10 1\n"; #print SCO "f4 0 2048 5 .0001 300 1 1748 .0001\n"; # bell envelope #print SCO "f5 0 2048 5 .0001 1748 1 300 .0001\n"; # reverse bell #print SCO "f6 0 2048 7 0 682 1 684 1 682 0\n"; # equal time adr my($starttime, $dur, $pit_offset, $space, $samplenumber, $combval1, $combval2, $combval4, $combval4, $combval5, $crossfade, $jitter, $pan_var, $pan_spread, $total_time) = 0; ########### SET STARTING VARIABLES ######## my $durset = 50; # set starting grain duration in ms my $spaceset = 50; # set starting intergrain space in ms my $pitch_var = 50; # set starting pitch variation my $pancenter = .5; # set panning center (0 = left, 1 = right) my $amp = 83; # set grain amplitude; my $pulse = .125; # set start time pulse in ms my $grainmin = .1; # minimum grain size #$total_time = $soundlength1*50; # set total length of file $total_time = 180; print SCO "i1 0 $total_time\n"; # $space = .5; # $dur = .3; for( ;$starttime<=$total_time; ) { $dur = .01*(randchooser($durset)) + $grainmin; #set grain duration # between 10 - 40ms $space = .01*(randchooser($spaceset)) + $pulse; #set intergrain space # 10 - 40ms $sign = randchooser(2); if ($sign == 2) { #block to determine pan #spread $pan_var = (-.01*randchooser($pan_spread)) + $pancenter; } else { $pan_var = .01*randchooser($pan_spread) + $pancenter; } $pit_offset = .001*randchooser($pitch_var); #pitch offset above original pitch $sign = randchooser(2); if ($sign == 2) { if (1+(-1*$pit_offset) < 0.2){ $pit_offset = 1 - (-1*$pit_offset); } else { $pit_offset = 1 + (-1*$pit_offset); } } else { $pit_offset = 1 + $pit_offset; } #print "$pit_offset\n"; if ($crossfade < 1.0){ #set crossfade jitter $jitter = (.01*randchooser(10)-.05); if (($crossfade+$jitter) > 1.0) { $crossfade = $crossfade - $jitter; } elsif (($crossfade + $jitter) < 0.0) { $crossfade = $crossfade - $jitter; } else { $crossfade = $crossfade + $jitter; } } $combval1 = .0001*randchooser(100); $combval2 = .00001*randchooser(200); $combval3 = .00001*randchooser(500); $combval4 = .00001*randchooser(200); $combval5 = .0001*randchooser(100); # $envtable = randchooser(3) + 3; #choose envelope for #grain $envtable = 7; $samplenumber = randchooser(3); printf SCO "i2 %8.5f %8.5f %8.5f %8.5f %2s %8.5f %8.5f %8.5f %8.5f %8.5f 100 100 100 100 100 99.4 75 %8.5f %2s %2s\n", $starttime, $dur, $pit_offset, $crossfade, $amp, $combval1, $combval2, $combval3, $combval4, $combval5, $pan_var, $envtable, $samplenumber; ################ INCREMENT LOOP VARIABLES ############### $starttime += $space; if ($starttime/$total_time <= .5) { ($durset -= .2) if ($durset > 0); ($durset = 0) if ($durset < 0); ($spaceset -= .2) if ($spaceset > 0); ($spaceset = 0) if ($spaceset < 0); } else { ($durset += .1); ($spaceset += .1); } $pitch_var += 10; $pan_spread = ($starttime/$total_time) * 50; $crossfade = ($starttime/$total_time);#*($starttime/$total_time); } print SCO "e\n"; close(SCO); system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "BandP.wav", "-W", "3graincomber.orc", "3graincomber.sco"; $date = `date`; print TIME "$date\n"; close(TIME); ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; }
Process 2:
#!/usr/bin/perl -w #srand( time() ^ ($$ + ($$ << 15)) ); srand; $soundnumber1 = randchooser(25); SOUNDPICK1: $soundnumber2 = randchooser(25); next SOUNDPICK1 if ($soundnumber2 == $soundnumber1); SOUNDPICK2: $soundnumber3 = randchooser(25); next SOUNDPICK2 if (($soundnumber3 == $soundnumber1) || ($soundnumber3 == $soundnumber2)); $soundname1 = "soundfile_" . $soundnumber1 . ".wav"; $soundname2 = "soundfile_" . $soundnumber2 . ".wav"; $soundname3 = "soundfile_" . $soundnumber3 . ".wav"; #$soundname1 = "cymbalbow.wav"; open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname1|"); $frames1 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname2|"); $frames2 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname3|"); $frames3 = <INFOPROC> - 1; close(INFOPROC); #$soundlength1 = $frames1/44100; #dur variables for orc score #$soundlength2 = $frames2/44100; #dur variables for orc score #$soundlength3 = $frames3/44100; #dur variables for orc score open(ORC, ">chunkymonkey.orc") || die "can't open chunkymonkey.orc: $!"; print ORC <<EOF; sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 instr 1 gkread line 0, p3, 1 endin instr 2 kamp = ampdb(p5) ipit1 = p4 ipan = p6 ;;;;;;;;;;; SAMPLE 1 ;;;;;;;;;;;;;;;;;;; ilen1 = $frames1 isam1 = 44100*p3*ipit1 istart1 = i(gkread)*$frames1 aindex1 line istart1, p3, istart1 + isam1 a1 tablei aindex1, 1 a2 tablei aindex1, 2 ;;;;;;;;;;; SAMPLE 2 ;;;;;;;;;;;;;;;;;;; ilen2 = $frames2 isam2 = 44100*p3*ipit1 istart2 = i(gkread)*$frames2 aindex2 line istart2, p3, istart2 + isam2 a3 tablei aindex2, 3 a4 tablei aindex2, 4 ;;;;;;;;;;; SAMPLE 3 ;;;;;;;;;;;;;;;;;;; ilen3 = $frames3 isam3 = 44100*p3*ipit1 istart3 = i(gkread)*$frames3 aindex3 line istart3, p3, istart3 + isam3 a5 tablei aindex3, 5 a6 tablei aindex3, 6 if p8 == 1 goto OUT1 if p8 == 2 goto OUT2 if p8 == 3 goto OUT3 OUT1: adryoutl1 butterhp a1*kamp, 20 adryoutr1 butterhp a2*kamp, 20 adryoutl butterlp adryoutl1, 22000 adryoutr butterlp adryoutr1, 22000 goto OUTPUT OUT2: adryoutl2 butterhp a3*kamp, 20 adryoutr2 butterhp a4*kamp, 20 adryoutl butterlp adryoutl2, 22000 adryoutr butterlp adryoutr2, 22000 goto OUTPUT OUT3: adryoutl3 butterhp a5*kamp, 20 adryoutr3 butterhp a6*kamp, 20 adryoutl butterlp adryoutl3, 22000 adryoutr butterlp adryoutr3, 22000 goto OUTPUT OUTPUT: kdeclick oscil1i 0, 1, p3, p7 ;adeclick linseg 0, p3*.3, 1, p3*.4, 1, p3*.3, 0 aoutl = adryoutl*kdeclick*(ipan) aoutr = adryoutr*kdeclick*(1-ipan) outs aoutl, aoutr endin EOF close(ORC); $pow2_1 = 2; while( $pow2_1 > $frames1 ){ $pow2_1 *= 2; } $pow2_2 = 2; while( $pow2_2 < $frames2 ){ $pow2_2 *= 2; } $pow2_3 = 2; while( $pow2_3 < $frames3 ){ $pow2_3 *= 2; } open(SCO, ">chunkymonkey.sco") || die "can't open chunkymonkey.sco: $!"; print SCO "f1 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 1\n"; print SCO "f2 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 2\n"; print SCO "f3 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 1\n"; print SCO "f4 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 2\n"; print SCO "f5 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 1\n"; print SCO "f6 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 2\n"; print SCO "f7 0 1024 10 1\n"; print SCO "f8 0 2048 5 .0001 300 1 1748 .0001\n"; # bell envelope print SCO "f9 0 2048 5 .0001 1748 1 300 .0001\n"; # reverse bell print SCO "f10 0 2048 7 0 682 1 684 1 682 0\n"; # equal time adr my($starttime, $dur, $pit_offset, $space, $samplenumber, $pan_var, $pan_spread, $total_time) = 0; ########### SET STARTING VARIABLES ######## my $durset = 50; # set starting grain duration in ms my $spaceset = 10; # set starting intergrain space in ms my $pitch_var = 50; # set starting pitch variation my $pancenter = .5; # set panning center (0 = left, 1 = right) my $amp = 85; # set grain amplitude; my $pulse = .2; # set start time pulse in ms my $grainmin = .5; # minimum grain size #$total_time = $soundlength1*50; # set total length of file $total_time = 120; print SCO "i1 0 $total_time\n"; for( ;$starttime<=$total_time; ) { $dur = .01*(randchooser($durset)) + $grainmin; #set grain duration $space = .01*(randchooser($spaceset)) + $pulse; #set intergrain $sign = randchooser(2); if ($sign == 2) { #block to determine pan #spread $pan_var = (-.01*randchooser($pan_spread)) + $pancenter; } else { $pan_var = .01*randchooser($pan_spread) + $pancenter; } $pit_offset = .001*randchooser($pitch_var); #pitch offset above #original pitch $sign = randchooser(2); if ($sign == 2) { if (1+(-1*$pit_offset) < 0.2){ $pit_offset = 1 - (-1*$pit_offset); } else { $pit_offset = 1 + (-1*$pit_offset); } } else { $pit_offset = 1 + $pit_offset; } $envtable = randchooser(3) + 7; #choose envelope for #grain $samplenumber = randchooser(3); printf SCO "i2 %8.5f %8.5f %8.5f %2s %8.5f %2s %2s\n", $starttime, $dur, $pit_offset, $amp, $pan_var, $envtable, $samplenumber; ################ INCREMENT LOOP VARIABLES ############### $starttime += $space; if ($starttime/$total_time <= .8) { ($durset -= .1) if ($durset > 0); ($durset = 0) if ($durset < 0); ($spaceset -= .5) if ($spaceset > 0); ($spaceset = 0) if ($spaceset < 0); } else { ($durset += .1); ($spaceset += .1); } $pitch_var += 10; $pan_spread = ($starttime/$total_time) * 50; } print SCO "e\n"; close(SCO); system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "BandP.wav", "-W", "chunkymonkey.orc", "chunkymonkey.sco"; ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; }
Process 3:
#!/usr/bin/perl -w
#srand( time() ^ ($$ + ($$ << 15)) ); srand; open(ORC, ">layers.orc") || die "can't open newscrew.orc: $!"; print ORC <<EOF; sr=44100 kr=4410 ksmps=10 nchnls=2 instr 1 kamp = ampdb(75) kenv linseg 0, .05, 1, p3 - .1, 1, .05, 0 a1, a2 diskin p4, 1 a1 = kamp*(kenv*(a1/32768)) a2 = kamp*(kenv*(a2/32768)) outs a1, a2 endin EOF close(ORC); close(ORC); open(SCO, ">layers.sco") || die "can't open newscrew.sco: $!"; $total_time = 120; $starttime = 0; $randvar = 2; for (;$starttime <= $total_time;) { $soundname = "soundfile_" . randchooser(25) . ".wav"; open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname|"); $frames = <INFOPROC> - 1; close(INFOPROC); $soundlength = $frames/44100; #dur variables for orc score redo if ($soundlength + $starttime) > ($total_time + 20); print SCO "i1 $starttime $soundlength \"/django/people/peter/soundbin/$soundname\"\n"; last if ($starttime + $soundlength) > $total_time; $starttime += (.1*randchooser($randvar)); $randvar += 1; } close(SCO); system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "BandP.wav", "-W", "layers.orc", "layers.sco"; #system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "devaudio", "newscrew.orc", "newscrew.sco"; ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; } sub randfloat { $number = rand $_[0]; }
Process 4:
#!/usr/bin/perl -w #srand( time() ^ ($$ + ($$ << 15)) ); srand; $soundnumber1 = randchooser(25); SOUNDPICK1: $soundnumber2 = randchooser(25); next SOUNDPICK1 if ($soundnumber2 == $soundnumber1); SOUNDPICK2: $soundnumber3 = randchooser(25); next SOUNDPICK2 if (($soundnumber3 == $soundnumber1) || ($soundnumber3 == $soundnumber2)); $soundname1 = "soundfile_" . "$soundnumber1" . ".wav"; $soundname2 = "soundfile_" . "$soundnumber2" . ".wav"; $soundname3 = "soundfile_" . "$soundnumber3" . ".wav"; open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname1|"); $frames1 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname2|"); $frames2 = <INFOPROC> - 1; close(INFOPROC); open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname3|"); $frames3 = <INFOPROC> - 1; close(INFOPROC); open(ORC, ">newmonkey.orc") || die "can't open newmonkey.orc: $!"; print ORC <<EOF; sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 instr 1 gkread line 0, p3, 1 endin instr 2 kamp = ampdb(p5) ipit1 = p4 ipan = p6 ;;;;;;;;;;; SAMPLE 1 ;;;;;;;;;;;;;;;;;;; ilen1 = $frames1 isam1 = 44100*p3*ipit1 istart1 = i(gkread)*$frames1 aindex1 line istart1, p3, istart1 + isam1 a1 tablei aindex1, 1 a2 tablei aindex1, 2 ;;;;;;;;;;; SAMPLE 2 ;;;;;;;;;;;;;;;;;;; ilen2 = $frames2 isam2 = 44100*p3*ipit1 istart2 = i(gkread)*$frames2 aindex2 line istart2, p3, istart2 + isam2 a3 tablei aindex2, 3 a4 tablei aindex2, 4 ;;;;;;;;;;; SAMPLE 3 ;;;;;;;;;;;;;;;;;;; ilen3 = $frames3 isam3 = 44100*p3*ipit1 istart3 = i(gkread)*$frames3 aindex3 line istart3, p3, istart3 + isam3 a5 tablei aindex3, 5 a6 tablei aindex3, 6 if p8 == 1 goto OUT1 if p8 == 2 goto OUT2 if p8 == 3 goto OUT3 OUT1: adryoutl1 butterhp a1*kamp, 20 adryoutr1 butterhp a2*kamp, 20 adryoutl butterlp adryoutl1, 22000 adryoutr butterlp adryoutr1, 22000 goto OUTPUT OUT2: adryoutl2 butterhp a3*kamp, 20 adryoutr2 butterhp a4*kamp, 20 adryoutl butterlp adryoutl2, 22000 adryoutr butterlp adryoutr2, 22000 goto OUTPUT OUT3: adryoutl3 butterhp a5*kamp, 20 adryoutr3 butterhp a6*kamp, 20 adryoutl butterlp adryoutl3, 22000 adryoutr butterlp adryoutr3, 22000 goto OUTPUT OUTPUT: kdeclick oscil1i 0, 1, p3*2, p7 ;adeclick linseg 0, p3*.3, 1, p3*.4, 1, p3*.3, 0 aoutl = adryoutl*kdeclick*(ipan) aoutr = adryoutr*kdeclick*(1-ipan) outs aoutl, aoutr endin EOF close(ORC); $pow2_1 = 2; while( $pow2_1 < $frames1 ){ $pow2_1 *= 2; } $pow2_2 = 2; while( $pow2_2 < $frames2 ){ $pow2_2 *= 2; } $pow2_3 = 2; while( $pow2_3 < $frames3 ){ $pow2_3 *= 2; } close(ORC); open(SCO, ">newmonkey.sco") || die "can't open newmonkey.sco: $!"; print SCO "f1 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 1\n"; print SCO "f2 0 $pow2_1 1 \"/django/people/peter/soundbin/$soundname1\" 0 4 2\n"; print SCO "f3 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 1\n"; print SCO "f4 0 $pow2_2 1 \"/django/people/peter/soundbin/$soundname2\" 0 4 2\n"; print SCO "f5 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 1\n"; print SCO "f6 0 $pow2_3 1 \"/django/people/peter/soundbin/$soundname3\" 0 4 2\n"; print SCO "f7 0 4096 10 1\n"; print SCO "f8 0 2048 5 .0001 300 1 1748 .0001\n"; # bell envelope print SCO "f9 0 2048 5 .0001 1748 1 300 .0001\n"; # reverse bell print SCO "f10 0 2048 7 0 682 1 684 1 682 0\n"; # equal time adr my($starttime, $dur, $pit_offset, $space, $samplenumber, $pan_var, $pan_spread, $total_time) = 0; ########### SET STARTING VARIABLES ######## my $durset = 50; # set starting grain duration in ms my $spaceset = 50; # set starting intergrain space in ms my $pitch_var = 0; # set starting pitch variation my $pancenter = .5; # set panning center (0 = left, 1 = right) my $amp = 84; # set grain amplitude; my $pulse = .2; # set start time pulse in ms my $grainmin = .3; # minimum grain size my $prob = 0; my $crossover = .7; $total_time = 180; # set total length of file print SCO "i1 0 $total_time\n"; for( ;$starttime<=$total_time; ) { $dur = .01*(randchooser($durset)) + $grainmin; #set grain duration $space = .01*(randchooser($spaceset)) + $pulse; #set intergrain $sign = randchooser(2); if ($sign == 2) { #block to determine pan #spread $pan_var = (-.01*randchooser($pan_spread)) + $pancenter; } else { $pan_var = .01*randchooser($pan_spread) + $pancenter; } $pit_offset = .001*randchooser($pitch_var); #pitch offset above #original pitch $sign = randchooser(2); if ($sign == 2) { if (1+(-1*$pit_offset) < 0.2){ $pit_offset = 1 - (-1*$pit_offset); } else { $pit_offset = 1 + (-1*$pit_offset); } } else { $pit_offset = 1 + $pit_offset; } #$envtable = randchooser(3) + 7; #choose envelope for #grain $envtable = 7; $samplenumber = randfloat($crossover); $sign = randchooser(2); if ($sign == 2) { $samplenumber = -1*$samplenumber; } $samplenumber = $prob + $samplenumber; if ($samplenumber < 0) { $samplenumber = -1 * $samplenumber; } elsif ($samplenumber > 3) { $samplenumber = 3 - ($samplenumber - 3); } if (($samplenumber >= 0) && ($samplenumber <=1)) { $samplenumber = 1; } elsif (($samplenumber > 1) && ($samplenumber <= 2)) { $samplenumber = 2; } else { $samplenumber = 3; } # print $samplenumber . "\n"; printf SCO "i2 %8.5f %8.5f %8.5f %2s %8.5f %2s %2s\n", $starttime, $dur, $pit_offset, $amp, $pan_var, $envtable, $samplenumber; ################ INCREMENT LOOP VARIABLES ############### #$startold = $starttime; $starttime += $space; if ($starttime/$total_time <= 1) { ($durset -= .05) if ($durset > 0); ($durset = 0) if ($durset < 0); ($spaceset -= .1) if ($spaceset > 0); ($spaceset = 0) if ($spaceset < 0); } else { ($durset += .1); ($spaceset += .1); } $pitch_var += 1; $prob = ($starttime/$total_time)*3; $pan_spread = ($starttime/$total_time) * 50; #$startnew = $starttime; #printf "%8.4f %8.4f %8.4f\n", $startnew - $startold, $starttime, $dur; } print SCO "e\n"; close(SCO); system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "BandP.wav", "-W", "newmonkey.orc", "newmonkey.sco"; #system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "devaudio", "newmonkey.orc", "newmonkey.sco"; ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; } sub randfloat { $number = rand $_[0]; }
Process 5:
#!/usr/bin/perl -w #srand( time() ^ ($$ + ($$ << 15)) ); srand; open(ORC, ">newscrew.orc") || die "can't open newscrew.orc: $!"; print ORC <<EOF; sr=44100 kr=4410 ksmps=10 nchnls=2 instr 1 kamp = ampdb(82) kenv linseg 0, .05, 1, p3 - .1, 1, .05, 0 a1, a2 diskin p4, 1 a1 = kamp*(kenv*(a1/32768)) a2 = kamp*(kenv*(a2/32768)) outs a1, a2 endin EOF close(ORC); close(ORC); open(SCO, ">newscrew.sco") || die "can't open newscrew.sco: $!"; $total_time = 140; $starttime = 0; for (;$starttime <= $total_time;) { $soundname = "soundfile_" . randchooser(25) . ".wav"; open(INFOPROC, "/django/people/peter/bin/infoparse /django/people/peter/soundbin/$soundname|"); $frames = <INFOPROC> - 1; close(INFOPROC); $soundlength = $frames/44100; #dur variables for orc score redo if ($soundlength + $starttime) > ($total_time + 20); print SCO "i1 $starttime $soundlength \"/django/people/peter/soundbin/$soundname\"\n"; last if ($starttime + $soundlength) > $total_time; $starttime += (randfloat(1)*$soundlength); } close(SCO); system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "BandP.wav", "-W", "newscrew.orc", "newscrew.sco"; #system "/django/people/peter/cs/csound_irix5.3", "-g", "-o", "devaudio", "newscrew.orc", "newscrew.sco"; ################# FUNCTIONS ########################## sub randchooser { my $number; $number = int(rand $_[0]) + 1; return $number; } sub randfloat { $number = rand $_[0]; }