View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

Musikstück "Ferrous Feel"

Home   How To   Code Pool   Public Library   Theory   Events
//--------------------------------------
// Musikstück "Ferrous Feel" von ChrisB
//--------------------------------------


//------------------------
//Synthesizer-Definitionen

(

  //SynthDef für die Bass-Drum
  SynthDef(\drum, { |freq=60, sustain=5, amp=0.1|
        var mod, sound, env;
        //Modulator für die Sinus-Frequenz:
        mod = XLine.kr(freq*2.2, freq, sustain); 
        env = EnvGen.ar(Env.perc(0.05, sustain, 1, -4), doneAction:2);
        //Sinus mit 'mod' als sinkendem Frequenz-Modulator:
        sound = SinOsc.ar(mod, 0, amp.dup);      
        Out.ar(0, sound * env);
        };
  ).store;


  //SynthDef für die Snare-Drum
  SynthDef(\snare, { |sustain=3, amp=0.5, hard=0|
        var sound, env, env2;
        env = EnvGen.ar(Env.perc(0, sustain*(1-hard), 1, -12));
        env2 = EnvGen.ar(Env.perc(0, sustain*1.5), doneAction: 2);
	//Der Sound wird durch den 'Decay' UGen erzeugt. Dieser bekommt als Eingangssignal einen Impuls
	//mit der Fequenz 0. Das Signal wird durch graues und weißes Rauschen verstärkt (siehe mul und add Parameter):
        sound = Decay.ar(Impulse.ar(0), sustain * 0.1, GrayNoise.ar([1, 1] * 0.3), WhiteNoise.ar(0.1.dup) + 0.3);
	//Das Decay-Signal wird mit einem Sägezahn-Signal multipliziert, dessen Frequenz ein Zufallswert von 5 bis 10 
        //ist. Negative Werte des Sägezahn-Signals werden durch den Wert 1 ersetzt (.max(0) + 1):
        sound = sound * (LFSaw.ar(Rand(5, 10)).max(0) + 1) * (env * amp);
        Out.ar(0, sound * env2);
    };
  ).store;


  //Bass SynthDef für das Bass-Intro
  SynthDef(\tremBass, { |gate=1, freq=130.81|
        var env, osc, sound;
        env = EnvGen.ar(Env.new([0, 1, 0], [0.08, 0.6],'sine'), gate, doneAction:2);
	//Ein Sägezahn- und ein Pulse-Signal werden zu einem Kanal zusammengefasst:
        osc = Mix([LFSaw.ar(freq * [1, 1]), LFPulse.ar(freq / 2, 0.5)]);
	//Das 'osc'-Signal wird durch einen Tiefpass-Filter (Lowpass Filter) bei 150 Hertz abgeschnitten:
        sound = LPF.ar(osc, 150, env);
        Out.ar(0, sound);
    };
  ).store;


  //SynthDef für den "normalen" Bass
  //Dieser SynthDef unterscheidet sich zum Bass-Intro SynthDef lediglich durch einen
  //anderen Envelope. Hier kommt ein adsr-Envelope zum Einsatz, mit dem ein Anschlag (Lautstärke) erzeugt wird,
  //der gleichmäßiger ist:
  SynthDef(\bass, { |gate=1, freq=130.81, amp=0.2|
        var env, osc, sound;
        env = EnvGen.ar(Env.adsr(0.04, 1, 0.7, 0.02, 0.7), gate, doneAction:2);
        osc = Mix([LFSaw.ar(freq * [1, 1]), LFPulse.ar(freq / 2, 0.5)]);
        sound = LPF.ar(osc, 150, env * amp);
        Out.ar(0, sound);
    };
  ).store;


  //SynthDef für den "Knister"-Sound
  SynthDef(\crackle, {
       var env, sound;
       env = EnvGen.ar(Env.new([0.1, 1, 0.2, 0.9, 0.4, 0.7, 0.1], [1, 3.5, 3, 4, 3, 1],'sine'), doneAction:2);
       //Der Sound wird durch braunes Rauschen multipliziert mit dem Blip-UGen (dt. kurzer Impuls) erzeugt:
       sound = BrownNoise.ar(0.1.dup) * Blip.ar(200,100,8,0.7) * env;
       Out.ar(0, sound);
   };
  ).store;


  //SynthDef für den "Sirenen"-Sound
  SynthDef(\siren, {
       var env, sound;
       env = EnvGen.ar(Env.new([0,0.4],[15.1],'linear'), doneAction:2);
       //Der "Sirenen"-Sound entsteht durch ein Sägezahn-Signal, dessen Frequenz durch ein Sinus-Signal
       //moduliert wird:
       sound = LFSaw.ar(SinOsc.ar(2.12, 0, 60, 190.81), 0, 0.2.dup) * env;
       Out.ar(0, sound);
   };
  ).store;

 
  //SynthDef für das tiefe Rauschen
  SynthDef(\deepnoise, {
       var env, sound, bnoise;
       env = EnvGen.ar(Env.new([0.1, 1, 0.3], [0.04, 7.55],'sine'), doneAction:2);
       //Das tiefe Rauschen und Knistern wird durch braunes Rauschen multipliziert mit dem 
       //Blip-UGen (dt. kurzer Impuls) erzeugt. Die Frequenz des Blip-UGens wird durch ein XLine-Signal moduliert:
       bnoise = BrownNoise.ar(0.12.dup) * Blip.ar(XLine.kr(200, 100, 3),100,8,0.7); 
       //Durch einen Bandpass-Filter werden vom 'bnoise'-Signal nur bestimmte Frequenzbereiche durchgelassen:
       sound = BPF.ar(bnoise, 1000, 0.3) * env;
       Out.ar(0, sound);
   };
  ).store;


  //SynthDef für den tiefen Hall-Sound
  SynthDef(\reverb, { |sustain=6|
       var welle, filter, env, env2, sound;
       env = EnvGen.ar(Env.perc(0, sustain, 1, -5));
       env2 = EnvGen.ar(Env.perc(0, sustain*45), doneAction: 2);
       //rosa Rauschen mit drei verschiedenen Werten für den mul-Parameter
       //(-> drei versch. Spektren):
       welle =  PinkNoise.ar(8 * [1, 1.2, 1.5]).sum * env;
       //Durch den Bandpass-Filter werden einige Frequenzen des 'welle'-Signals herausgefiltert:
       filter = BPF.ar(welle, LFNoise1.kr(0.01).exprange(523.25, 523.25), 0.05);
       //Auf das gefilterte Signal wird ein Delay (Verzögerung - dadurch Hall/Echo) gelegt:
       sound = CombL.ar(filter, 1, [0.47, 0.48], 8);
       Out.ar(0, sound * env2 * 0.6);
   };
  ).store;


  //SynthDef für den Triangel ähnlichen Sound
  SynthDef(\triangle, { |sustain=0.05|
        var sound, env;
        env = EnvGen.kr(Env.perc(0.01, sustain, 0.6), doneAction:2);
        //Der Sound entsteht durch die Addition zweier Sinus-Signale mit einem Sägezahnsignal.
	//Die Frequenzen der drei Signale entsprechen dem Ton "c" auf drei versch. Oktaven:
        sound =  SinOsc.ar(523.25, 0, env * 0.1.dup) + SinOsc.ar(1046.5, 0, env * 0.05.dup) + 
		 LFSaw.ar(2093, 0, env * 0.03.dup);
        Out.ar(0, sound);
    };
  ).store;

);


//--------------------
//PATTERN-Definitionen

(

  Pdef(\bdrum,
        Pbind(
        \instrument, \drum,
        \freq, 62,
        \sustain, 0.1,
        \dur, Pn(0.5, 8),
        \amp, 0.65
    )
  );

  Pdef(\introBdrum,
        Pbind(
        \instrument, \drum,
        \freq, 62,
        \sustain, 0.1,
        \dur, Pseq([0.22, 0.8, 0.7, 0.84, 0.44, 0.2, 0.8], 1),
	\lag, 0.27,
        \amp, 0.65
    )
  );

  Pdef(\snaredrum1,
    Pbind(
        \instrument, \snare,
        \hard, 0.8,
        \sustain, 4,
        \dur, Pn(1, 4),
        \lag, 0.5,
        \amp, 0.5
    )
  );

  Pdef(\snaredrum2,
    Pbind(
        \instrument, \snare,
        \hard, 0.8,
        \sustain, 4,
        \dur, Pseq([0.34, 0.66, 0.15, 0.15, 0.7, 1, 1], 1),
        \lag, 0.5,
        \amp, 0.5
    )
  );

  Pdef(\snaredrum3,
    Pbind(
        \instrument, \snare,
        \hard, 0.8,
        \sustain, 4.5,
        \dur, Pseq([0.34, 0.66, 1, 1, 1], 1),
        \lag, 0.5,
        \amp, 0.5
    )
  );

  Pdef(\snaredrum4,
    Pbind(
        \instrument, \snare,
        \hard, 0.8,
        \sustain, 4.5,
        \dur, Pseq([1, 0.8, 1.2, 1], 1),
        \amp, 0.5
    )
  );

  Pdef(\bass1,
     Pmono(\bass,
       \freq, Pseq([155.56, 130.81, 155.56, 130.81, 174.61, 164.81, 174.61, 164.81], 1),
       \dur, Pn(0.5, 8),
       \amp, 1
     )
  );

  Pdef(\bass2,
     Pmono(\bass,
       \freq, Pseq([155.56, 130.81, 155.56, 174.61, 130.81, 130.81, 130.81, 130.81], 1),
       \dur, Pn(0.5, 8),
       \amp, 1
     )
  );

  Pdef(\bassIntro1,
     Pbind(
        \instrument, \tremBass,
        \freq, Pseq([130.81], 4),
        \sustain, 0.08,
        \dur, Pseq([1], 8)
     )
  );

  Pdef(\bassIntro2,
     Pbind(
        \instrument, \tremBass,
        \freq, Pseq([174.61, 164.81], 4),
        \sustain, 0.08,
        \dur, Pseq([1], 4)
     )
  );

  Pdef(\bassIntro3,
      Pmono(\bass,
        \freq, Pn(65.41, 32),
        \dur, Pn(0.5, 32),
        \amp, 0.2
     )
  );

 Pdef(\crackleNoise,
     Pbind(
        \instrument, \crackle,
        \dur, Pseq([15.5], 1)
     )
 );

 Pdef(\sirenNoise,
     Pbind(
        \instrument, \siren,
        \dur, Pseq([15.5], 1)
     )
 );


 Pdef(\chorusNoise,
     Pbind(
        \instrument, \deepnoise,
        \dur, Pseq([8], 2)
     )
 );


 Pdef(\reverberation,
     Pbind(
        \instrument, \reverb,
        \sustain, 2,
        \dur, Pseq([4], 4),
        \lag, 0.5
     )
 );  


 Pdef(\highPerc,
     Pbind(
        \instrument, \triangle,
        \sustain, 0.5,
        \dur, Pseq([0.66, 0.5, 0.5, 0.34, 0.5, 0.66, 0.84], 1),
        \lag, 0.34
     )
 );  

  Pdef(\intro1, Ppar([Pdef(\introBdrum), Pdef(\bassIntro1), Pdef(\snaredrum4)]));
  Pdef(\intro2, Ppar([Pdef(\introBdrum), Pdef(\bassIntro2), Pdef(\snaredrum4)]));
   
  Pdef(\intro1Bridge, Ppar([Pdef(\introBdrum), Pdef(\snaredrum4)], 4));
  Pdef(\bridge, Ppar([Pdef(\intro1Bridge), Pdef(\crackleNoise), Pdef(\sirenNoise), Pdef(\bassIntro3)]));

  Pdef(\beat1, Ppar([Pdef(\bdrum), Pdef(\snaredrum1), Pdef(\bass1)]));
  Pdef(\beat2, Ppar([Pdef(\bdrum), Pdef(\snaredrum2), Pdef(\bass1)]));
  Pdef(\beat3, Ppar([Pdef(\bdrum), Pdef(\snaredrum3), Pdef(\bass1)]));
  Pdef(\beat4, Ppar([Pdef(\bdrum), Pdef(\snaredrum1), Pdef(\bass2), Pdef(\highPerc)]));

  Pdef(\beatSeq1, Pseq([Pdef(\beat1), Pdef(\beat3), Pdef(\beat1), Pdef(\beat2)]));
  Pdef(\beatSeq2, Pseq([Pdef(\beat4), Pdef(\beat4), Pdef(\beat4), Pdef(\beat4)]));
  Pdef(\highPercSeq, Pseq([Pdef(\highPerc), Pdef(\highPerc), Pdef(\highPerc), Pdef(\highPerc)]));

  Pdef(\clinkyBeat, Ppar([Pdef(\beatSeq1), Pdef(\highPercSeq)]));

  Pdef(\noisyBeat1, Ppar([Pdef(\beatSeq1), Pdef(\chorusNoise)]));
  Pdef(\noisyBeat2, Ppar([Pdef(\beatSeq1), Pdef(\crackleNoise)]));
  Pdef(\noisyBeat3, Ppar([Pdef(\beatSeq1), Pdef(\chorusNoise), Pdef(\reverberation)]));
  Pdef(\noisyBeat4, Ppar([Pdef(\beatSeq2), Pdef(\chorusNoise), Pdef(\reverberation)])); 
  Pdef(\noisyBeat5, Ppar([Pdef(\beatSeq2), Pdef(\chorusNoise), Pdef(\reverberation), Pdef(\crackleNoise)]));

);


//--------------
//Song abspielen
(
Tempo.bpm = 64;

Pseq([ //Intro:
       Pdef(\bassIntro1), Pdef(\intro1), Pdef(\intro1), Pdef(\intro2), Pdef(\intro1), 

       Pdef(\bridge),        

       //erster Chorus:
       Pdef(\noisyBeat1), Pdef(\noisyBeat1), Pdef(\beat4), Pdef(\beat4), 
       Pdef(\clinkyBeat), Pdef(\noisyBeat2), Pdef(\beat4),
 
       Pdef(\bridge),       

       //zweiter Chorus:
       Pdef(\noisyBeat3), Pdef(\noisyBeat4), Pdef(\noisyBeat5),

       //Outro:
       Pdef(\intro1), Pdef(\intro1)]).play;
)


Link to this Page