René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Composition 005 [CSound]

This composition is 'randomized' by a perl script.
use strict;
use warnings;

use Math::Random qw(random_poisson);

srand;

open SCO, ">005_001.sco";

print SCO << 'H';
f1 0 2048 10 1
f2 0 4096 10 1 .5 .333 .25 .2 .167 .1428 .125 .111 .1 .0909 .0833 .0769 .0714 .0667 .0625  ; SAW

t 0 30
H

for (my $bl = 0; $bl < 16; $bl++) {
  bass_line($bl);
}

## Hi Hat
for (my $i=0; $i <= 16.0; $i+=0.25) {
  my $when = $i + (random_poisson(1, 100) - 100) / 10000;
  print SCO "i2 $when 0.25 4000\n";
}

## Snare
for (my $i=0.5; $i <= 16.0; $i+=1) {
  print SCO "i3 $i 1 8000\n";
}

my $kick=0;
while ($kick <= 16.0) {
  my $len = 0.125 * int (2 + rand(3));
  print SCO "i4 $kick $len 0.3\n";

  $kick += $len;
}

my $sine = 0;
while ($sine < 16.0) {

  my $len = int (rand(5)) * 1/32;

  my $len_played = 0.1 + rand(0.1);

  my $beat = int $sine;

  my $pan  = rand;

  my @possble_notes;

  @possble_notes = qw(.04 .07 0.11 0.02) unless ($beat % 4) -0;
  @possble_notes = qw(.06 .09 0.11 0.03) unless ($beat % 4) -1;
  @possble_notes = qw(.07 .11 0.02 0.04) unless ($beat % 4) -2;
  @possble_notes = qw(.09 .00 0.04 0.06) unless ($beat % 4) -3;

  my $oct = 7 + int (rand(3));

  my $note = $oct . $possble_notes[rand (@possble_notes)];

  my $amp = 1000 + rand(2000);

  print SCO "i5 $sine $len_played 2500 $note $pan\n";

  $sine += $len;
}

print SCO "i6  4 3.5 8.11 200 5000 100\n";
print SCO "i6  8 3.5 8.04 200 5000 100\n";
print SCO "i6 12 3.5 8.11 400 5000 100\n";

sub bass_line {

  my $beat  = shift;
  my $pitch;

  $pitch = '6.04' unless ($beat % 4) -0;
  $pitch = '6.06' unless ($beat % 4) -1;
  $pitch = '6.07' unless ($beat % 4) -2;
  $pitch = '6.09' unless ($beat % 4) -3;

  my $pan_start = rand;
  my $pan_end   = rand;

  print SCO "i1 $beat 1 12000 $pitch $pan_start $pan_end\n"; 
}

system ("cs 005_001");
#system ("005_001.wav");
system ('"c:\program files\audacity\audacity" 005_001.wav');
sr     = 44100
ksmps  = 2
nchnls = 2

seed 0; (instr 4)

instr 1

  p3   =  0.9

  ilen        =        p3
  iamp        =        p4
  ifrq        = cpspch(p5)

  ipan_start  =        p6
  ipan_end    =        p7

  kpan_       phasor   1/ilen
  kpan        = ipan_start + kpan_ * (ipan_end - ipan_start)

  i_time_up   = 0.20
  i_time_down = 0.34

  i_time_rest = ilen - i_time_up - i_time_down
   
  kenv  linseg 0, 0.02, iamp, ilen-0.02-0.1, iamp, 0.1, 0

  kenv1 linseg 0, 0/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 5/6*i_time_rest, 0
  kenv2 linseg 0, 1/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 4/6*i_time_rest, 0
  kenv3 linseg 0, 2/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 3/6*i_time_rest, 0
  kenv4 linseg 0, 3/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 2/6*i_time_rest, 0
  kenv5 linseg 0, 4/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 1/6*i_time_rest, 0
  kenv6 linseg 0, 5/6*i_time_rest, 0, i_time_up, 1, i_time_down, 0, 0/6*i_time_rest, 0

  asig1 oscili 1, 1*ifrq, 1
  asig2 oscili 1, 2*ifrq, 1
  asig3 oscili 1, 3*ifrq, 1
  asig4 oscili 1, 4*ifrq, 1
  asig5 oscili 1, 5*ifrq, 1
  asig6 oscili 1, 6*ifrq, 1


  asig_ = 1.0 * kenv1 * asig1 + \
          0.7 * kenv2 * asig2 + \
          0.5 * kenv3 * asig3 + \
          0.3 * kenv4 * asig4 + \
          0.2 * kenv5 * asig5 + \
          0.1 * kenv6 * asig6 

  asig_ = asig_ * kenv

  asig_r reverb asig_, 0.5

  asig_t = asig_ / 2 + asig_r /2 

  outs asig_t * kpan, asig_t * (1-kpan)

endin


instr 2; Hi Hat

  ilen init p3
  iamp init p4

  kcutfreq  expon     1000, 0.1, 250
  aamp      expon     iamp,  0.1,   10
  arand     rand      aamp
  alp1      butterlp  arand,kcutfreq
  alp2      butterlp  alp1,kcutfreq
  ahp1      butterhp  alp2,3500
  asigpre   butterhp  ahp1,3500
  asig      linen    (asigpre+arand/2),0,ilen, .05  

  outs asig, asig
endin

instr 3; Snare
  icps0  = 147
  iamp   = p4*0.7

  icps1  =  2.0 * icps0
  
  kcps   port icps0, 0.007, icps1
  kcpsx  =  kcps * 1.5
  
  kfmd   port   0.0, 0.01, 0.7
  aenv1  expon  1.0, 0.03, 0.5
  kenv2  port 1.0, 0.008, 0.0
  aenv2  interp kenv2
  aenv3  expon  1.0, 0.025, 0.5
  
  a_     oscili 1.0, kcps, 1
  a1     oscili 1.0, kcps * (1.0 + a_*kfmd), 1
  a_     oscili 1.0, kcpsx, 1
  a2     oscili 1.0, kcpsx * (1.0 + a_*kfmd), 1
  
  a3     unirand 2.0
  a3     =  a3 - 1.0
  a3     butterbp a3, 5000, 7500
  a3     =  a3 * aenv2
  
  a0     =  a1 + a2*aenv3 + a3*1.0
  a0     =  a0 * aenv1

  outs a0*iamp, a0*iamp
endin


instr 4;
  iamp =  p4

  icps  = 50
  
  print icps
  print iamp
  
  /* ------------------------------------------------------------------------- */
  
  ivol     = 7000
  ibpm     = 190        ;  <=== Change here
  
  ifrqs    = 5.3333     /* oscillator start frq. / note freq.   */
  ifrqe    = 1.0        /* oscillator end frequency / note frq. */
                        /*                                      */ 
  ifrqd    = 20.0       /* osc. freq. envelope speed            */
                        /*                                      */ 
  iffr1s   = 880        /* lowpass filter start freq. 1 (Hz)    */
  iffr1d   = 128        /* lowpass filter freq. 1 decay speed   */
  iffr2s   =   0        /* lowpass filter start freq. 2 (Hz)    */
  iffr2d   =   1        /* lowpass filter freq. 2 decay speed   */
  iffr3s   =   8        /* LP filter start freq. 3 / note frq   */
  iffr3d   =   8        /* lowpass filter freq. 3 decay speed   */
  iffr4s   =   0        /* LP filter start freq. 4 / note frq   */
  iffr4d   =   1        /* lowpass filter freq. 4 decay speed   */
                        /*                                      */ 
  iEQ1fo   =   0.5      /* EQ 1 frequency / osc. frequency      */
  iEQ1fn   =   0        /* EQ 1 frequency / note frequency      */
  iEQ1fa   =   0        /* EQ 1 frequency (Hz)                  */
  iEQ1l    =   0.25     /* EQ 1 level                           */
  iEQ1q    =   0.7071   /* EQ 1 Q                               */
  iEQ1m    =   1        /* EQ 1 mode (0:peak,1:low,2:high)      */
                        /*                                      */
  iEQ2fo   =   0.5      /* EQ 2 frequency / osc. frequency      */
  iEQ2fn   =   0        /* EQ 2 frequency / note frequency      */
  iEQ2fa   =   0        /* EQ 2 frequency (Hz)                  */
  iEQ2l    =   0.25     /* EQ 2 level                           */
  iEQ2q    =   0.7071   /* EQ 2 Q                               */
  iEQ2m    =   1        /* EQ 2 mode (0:peak,1:low,2:high)      */
                        /*                                      */ 
  iEQ3fo   =   0.5      /* EQ 3 frequency / osc. frequency      */
  iEQ3fn   =   0        /* EQ 3 frequency / note frequency      */
  iEQ3fa   =   0        /* EQ 3 frequency (Hz)                  */
  iEQ3l    =   4        /* EQ 3 level                           */
  iEQ3q    =   2.0      /* EQ 3 Q                               */
  iEQ3m    =   0.0      /* EQ 3 mode (0:peak,1:low,2:high)      */
                        /*                                      */ 
  iEQ4fo   =   0        /* EQ 4 frequency / osc. frequency      */
  iEQ4fn   =   1.5      /* EQ 4 frequency / note frequency      */
  iEQ4fa   =   0        /* EQ 4 frequency (Hz)                  */
  iEQ4l    =   2.0      /* EQ 4 level                           */
  iEQ4q    =   1.0      /* EQ 4 Q                               */
  iEQ4m    =   0        /* EQ 4 mode (0:peak,1:low,2:high)      */
                        /*                                      */ 
  insmix   =   16. 0    /* noise mix                            */
                        /*                                      */ 
  iEQn1fo  =   0        /* noise EQ 1 frequency / osc. freq.    */
  iEQn1fn  =   16       /* noise EQ 1 frequency / note freq.    */
  iEQn1fa  =   0        /* noise EQ 1 frequency (Hz)            */
  iEQn1l   =   0.0625   /* noise EQ 1 level                     */
  iEQn1q   =   0.7071   /* noise EQ 1 Q                         */
  iEQn1m   =   1        /* noise EQ 1 mode (0:peak,1:lo,2:hi)   */
                        /*                                      */ 
  iEQn2fo  =   0        /* noise EQ 2 frequency / osc. freq.    */
  iEQn2fn  =   16       /* noise EQ 2 frequency / note freq.    */
  iEQn2fa  =   0        /* noise EQ 2 frequency (Hz)            */
  iEQn2l   =   0.0625   /* noise EQ 2 level                     */
  iEQn2q   =   0.7071   /* noise EQ 2 Q                         */
  iEQn2m   =   1        /* noise EQ 2 mode (0:peak,1:lo,2:hi)   */

/* ------------------------------------------------------------------------- */

  p3  =  p3+0.15  /* increase note length */
  
  ibtime  =  60/ibpm
  
  kamp  linseg 1,p3-0.15,1,0.05,0,0.1,0   /* amp. envelope */
  kamp  =  kamp*iamp*ivol
  
  kcps  port ifrqe*icps,ibtime/ifrqd,ifrqs*icps /* kcps = osc. frequency */
  knumh =  sr/(2*kcps)        /* knumh = num. of harmonics */
  
  a_  buzz sr/(3.14159265*10),kcps,knumh,1,0    /* square oscillator */
  a__ buzz sr/(3.14159265*10),kcps,knumh,1,0.5
  
  a0  tone a_-a__,10
  
  a_  unirand 2         /* noise generator */
  a_  =  a_-1
  
  a_  pareq a_,iEQn1fa+icps*iEQn1fn+kcps*iEQn1fo,iEQn1l,iEQn1q,iEQn1m
  a_  pareq a_,iEQn2fa+icps*iEQn2fn+kcps*iEQn2fo,iEQn2l,iEQn2q,iEQn2m
  
  a0  =  a0+insmix*a_
  
  /* EQ */
  
  a0  pareq a0,iEQ1fa+icps*iEQ1fn+kcps*iEQ1fo,iEQ1l,iEQ1q,iEQ1m
  a0  pareq a0,iEQ2fa+icps*iEQ2fn+kcps*iEQ2fo,iEQ2l,iEQ2q,iEQ2m
  a0  pareq a0,iEQ3fa+icps*iEQ3fn+kcps*iEQ3fo,iEQ3l,iEQ3q,iEQ3m
  a0  pareq a0,iEQ4fa+icps*iEQ4fn+kcps*iEQ4fo,iEQ4l,iEQ4q,iEQ4m
  
  
  kffr1 port 0,ibtime/iffr1d,iffr1s /* LP filter freq. envelopes */
  kffr2 port 0,ibtime/iffr2d,iffr2s
  kffr3 port 0,ibtime/iffr3d,iffr3s*icps
  kffr4 port 0,ibtime/iffr4d,iffr4s*icps
  
  kffrq =  kffr1+kffr2+kffr3+kffr4  /* kffrq = LP filter frequency */
  
  a0  butterlp a0,kffrq   /* LP filter */
  
  a_  =  a0*kamp      /* apply envelope */

  outs a_, a_
endin


instr 5;  Simple Sine
  ilen  =        p3
  iamp  =        p4
  ifrq  = cpspch(p5)
  ipan  =        p6

  kenv  linseg 0, ilen/30*3, iamp, ilen/30*3, iamp/2, ilen/30*18, iamp/2.4, ilen/30*6, 0

  asig  oscili   kenv, ifrq, 1

  outs asig * ipan, asig *(1-ipan)

endin


instr 6; filtered saw
  ilen             =        p3
  ifrq             = cpspch(p4)
  iamp             =        p5

  i_filt_frq_start =        p6  
  i_filt_frq_end   =        p7

  kenv  linen iamp,ilen/5,ilen,ilen/5
  kpan  phasor 1/ilen
  a1    oscil kenv,ifrq       ,2
  a2    oscil kenv,ifrq*0.999 ,2
  a3    oscil kenv,ifrq*1.001 ,2
  k_flt_freq    expseg i_filt_frq_start,ilen,i_filt_frq_end
  a4=(a1+a2+a3)/3
  aout  reson a4,k_flt_freq,100, 2
  outs aout*kpan , aout*(1-kpan)
endin