bero1985

Kickdrum for BR808 PascalScriptSampleGenerator

Jul 19th, 2011
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.30 KB | None | 0 0
  1. program kickdrum;
  2. const Milliseconds=250;
  3.       SampleRate=44100;
  4.       SampleLen=(SampleRate*Milliseconds) div 1000;
  5. var i:integer;
  6.     Phases:array[0..1] of single;
  7.     s,pi2,Pitch,Frequency,Volume:single;
  8. begin
  9.  SetSampleLength(SampleLen); // in samples
  10.  SetSampleChannels(1); // 1=mono, 2=stereo
  11.  SetSampleRate(SampleRate); // the sample rate
  12.  Phases[0]:=0;
  13.  Phases[1]:=0;
  14.  pi2:=pi*2;
  15.  for i:=0 to SampleLen-1 do begin
  16.   // Lower sine from 220 Hz down to 55 Hz (for the abdomen)
  17.   Pitch:=pow(1-(i/SampleLen),4);
  18.   Frequency:=(220*Pitch)+(55*(1-Pitch));
  19.   Volume:=pow(1-(i/SampleLen),0.25);
  20.   s:=(sin(Phases[0]*pi2)*Volume);
  21.   Phases[0]:=frac(Phases[0]+(Frequency/SampleRate));
  22.  
  23.   // Higher sine from 440 Hz down to 88 Hz (for the head)
  24.   Pitch:=pow(1-(i/SampleLen),16);
  25.   Frequency:=(440*Pitch)+(88*(1-Pitch));
  26.   Volume:=pow(1-(i/SampleLen),2);
  27.   s:=s+(sin(Phases[1]*pi2)*Volume);
  28.   Phases[1]:=frac(Phases[1]+(Frequency/SampleRate));
  29.  
  30.   // Kick noise (also for the head as additional kick effect)
  31.   Volume:=pow(1-(i/SampleLen),4);
  32.   s:=s+((random-0.5)*Volume);
  33.  
  34.   // Amplify
  35.   s:=s*0.5;
  36.  
  37.   // Clip to -1 .. 1
  38.   if s<-1 then begin
  39.    s:=-1;
  40.   end else if s>1 then begin
  41.    s:=1;
  42.   end;
  43.  
  44.   // Write out sample
  45.   SetSample(i,s);
  46.  end;
  47. end.
Advertisement
Add Comment
Please, Sign In to add comment