#!/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];
}