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

Cottle Chapter 3 - Frequency, Amplitude, Phase

[Cottle examples]
// Set up 

// Use internal server
s = Server.internal;
(
// Make sure the server is running
if(s.serverRunning,
	{ "The server is already running.".postln; }, // post informative message
	{ s.boot; } // otherwise go ahead and start it up
)
)

// Example 3.1
SynthDef("ex3", { Out.ar(0, SinOsc.ar(440, 0, 0.4, 0) ) }).send(s);
Synth("ex3", target: s); // Play it
s.scope; // Look at it

// Press command-. to stop it
// Linux: C-c C-s or Stop Main from SCLang menu.



// Example 3.2
// LFSaw is a low frequency sawtooth oscillator, in SC3 LFSaw also accepts an
// argument for initial phase.  Using the function notation is a quick way to test 
// things.
{ LFSaw.ar(60, 0, 0.3) }.scope;

// Linux: The .scope is not yet supported, replace here with .play

// Examples 3.3-3.8 can be done just like the last one.



// Example 3.9

/**
 The SinOsc is where the actual audio frequency is generated.  The frequency for 
 SinOsc is determined by the LFNoise and LFSaw.  They are linked in a rather 
 complicated way.  It would be easy to enter values that would result in negative 
 output (not appropriate for frequency), so they both are wrapped in an abs() 
 function to protect against this.  You can experiment at will but the range of sweep
 should be greater than the range of overall wandering.  That entire section is
 plugged into a Comb filter.  The max delay should always be greater than the actual
 delay. The decay time is how long the echo resonates.  Have fun. */

(
// Now create a SynthDef and send it to the server
SynthDef("ch3.9", {
	Out.ar(0, // Send to output bus 0
		CombN.ar( // An echo UGen
			SinOsc.ar( // Sine wave oscillator
				abs( // Protect against negative values for frequency argument
					LFNoise1.kr(
						0.4, // frequency overall wandering
						800, // range of overall wandering
						LFSaw.kr(
							[3.5, 3.51], // expands to a left channel and right channel
								 		// of the individual sweeps
							300, // width of sweep
							1200 // range of sweep
						)
					)
				),
				0, // phase
				0.2 // amplitude, stay below 0.2
			),
			0.6, // max delay
			0.27, // actual delay, should always be < max delay
			4 // decay time
		)
	)
}).send(s);
)

// Create a Synth to play it on the internal server
a = Synth("ch3.9", target: s);

// Look at it
s.scope;

// Free the synth
a.free;

// Create a similiar SynthDef to the one above, but this one accepts
// arguments
(
SynthDef("ch3.9-args", { arg wander=800, sweep=1200, decay=4;
	Out.ar(0, // Send to output bus 0
		CombN.ar( // An echo UGen
			SinOsc.ar( // Sine wave oscillator
				abs( // Protect against negative values for frequency argument
					LFNoise1.kr(
						0.4, // frequency overall wandering
						wander, // range of overall wandering
						LFSaw.kr(
							[3.5, 3.51], // expands to a left channel and right channel
								 		// of the individual sweeps
							300, // width of sweep
							sweep // range of sweep
						)
					)
				),
				0, // phase
				0.2 // amplitude, stay below 0.2
			),
			0.6, // max delay
			0.27, // actual delay, should always be < max delay
			decay // decay time
		)
	)
}).send(s);
)

// Play the synth, this is exactly the same as the first Synth we played
// It uses the default values of 800, 1200 and 4 provided in the SynthDef
a = Synth("ch3.9-args", target: s);
s.scope;
a.free;

// Lets specify different values to the Synth now
a = Synth("ch3.9-args", [\wander, 281, \sweep, 401, \decay, 7], target: s);
s.scope;
a.free;


*
/*
authors so far:
*/


Link to this Page