Snippets of sound and how I went about creating them.
Burst
Akin to something bright streaking by, a burst of light. To create the pitch, I stacked four sawtooth waves each detuned successively by a factor of 1.01. I shaped the attack and release of this composite wave in exponential curves: approaching slowly and quickly peaking, and then a fade that drops quickly at first but tapers out with a long tail.
sig = 4.collect({ arg i; LFSaw.ar(freq*(1.01.pow(i)), mul:0.1);});
To create the motion, there were two components: the panning and the frequency. The panning is obvious – it streaks from right to left. The frequency is also critical to create a Doppler effect of something passing by quickly, so I had it start at 1.5 times the base frequency and end at 0.8 times.
I ran four versions of this wave at subharmonics of the main one, but only the tail end is sounding for all but the main one, so that the fade out has a bit more echo to it. Finally, I applied a rather indulgent reverb to make the final sound.
Shimmer
A bright, shimmering timbre that came about in two parts. First was creating the base timbre: on a base frequency, ten overtones, rapidly dropping in amplitude, and ten undertones, slowly growing in amplitude, all in sine waves, to give a solid low foundation and a hint of upper harmonics. I add a varying phase shift for each partial as a dithering to avoid comb filtering.
sig = 10.collect({ arg i; var part; part = SinOsc.ar(freq*(i+1), phase:rrand(-2pi, 2pi), mul:1*(0.1.pow(i))) + SinOsc.ar(freq/(i+1), phase:rrand(-2pi, 2pi), mul:1*(1.1.pow(i)));});
Second was stacking about twenty of these composite waves at varying pan positions and at frequencies about 1 Hz apart, which creates the beating, shimmering effect that seems to bounce between the ears.
Expanse
This sound is first constructed with a triangle wave being modulated in both its frequency and amplitude. The amplitude modulator is a bipolar sine wave, while the the frequency modulator is a square wave.
sig = LFTri.ar(freq*LFPulse.ar(pulseMod))*SinOsc.ar(ampMod);
The driving force of this sound is the interpolation of multiple parameters. First, both modulation frequencies rise and fall in alternation with each other. Simultaneously, the sound pans from left to right and the room size of the reverb expands dramatically.
Swirling chimes
This timbre comes from a constantly shifting mix of sine, triangle, sawtooth, and square waves.
I first control the proportion of amplitudes on each of these waves. In this particular realization, the sine wave portion is about 60% of the total amplitude, with the remaining 40% being roughly equally distributed across the other three components. Each attack has a random range of about 10% in either direction for each amplitude.
Then I apply a slow fluctuating glissando on each constituent waveform, warping the frequency up to 20% higher or lower for a shimmering detune effect.
Schroeder experiments: thunder, whistle, swirl
The Schroeder reverb model is surprisingly versatile in creating so much more than just reverb. The basic model is pretty simple in principle – pass a signal through a few comb filters in parallel, and then allpass filters in series.
wet = 6.collect({ arg partSig; partSig = CombC.ar(inSig, 0.2, LFNoise1.kr(noiseFreqC!2).exprange(noiseMinC, noiseMaxC), decay, 0.1); partSig = LeakDC.ar(partSig);});wet = wet.sum;
6.do({ wet = AllpassC.ar(wet, 0.02, LFNoise1.kr(noiseFreqA!2).exprange(noiseMinA, noiseMaxA), decay);});
For both sets of filters, I have a fluctuating delay time bounded by the two sets of noiseMin and noiseMax arguments, at a frequency represented by the two noiseFreq arguments. Under “natural” circumstances, this rate would only fluctuate on the order of a few milliseconds at a frequency of around 1/50 Hz, to simulate some motion in an overall static room. But introducing some improbable values gives some very interesting effects. All of these come from an initial input of the first 10 partials of a given frequency in sine waves, each partial 0.2 times the previous.
Thunder
High frequency rates (500, 1000) for a harsh, clashing timbre. Comparatively long maximum delay time for more space between echoes in the already dense texture. Initial fundamental input of 30 Hz, with an attack time of 0.01 seconds and release of 10 seconds.
~schroeder.set(\noiseFreqC, 500, \noiseFreqA, 1000, \noiseMinC, 0.001, \noiseMaxC, 0.05, \noiseMinA, 0.001, \noiseMaxA, 0.05, \decay, 1);Synth(\clunk, [\freq, 30, \atk, 0.01, \rel, 10, \out, ~schroederBus]);
Whistle
Very slow frequencies to allow perceptible glissandi in the timbre. Narrow delay time range for clarity of timbre. High frequency input with long release time.
~schroeder.set(\noiseFreqC, 1, \noiseFreqA, 20, \noiseMinC, 0.001, \noiseMaxC, 0.002, \noiseMinA, 0.001, \noiseMaxA, 0.002);Synth(\clunk, [\freq, 5000, \atk, 0.01, \rel, 10, \out, ~schroederBus]);
Swirl
Lower noise frequencies as well as lower input, allowing more audible range and richer timbre. Attack time longer for a smoother entrance.
~schroeder.set(\noiseFreqC, 5, \noiseFreqA, 10, \decay, 5, \noiseMinC, 0.001, \noiseMaxC, 0.002, \noiseMinA, 0.001, \noiseMaxA, 0.002);Synth(\clunk, [\freq, 2000, \atk, 1, \rel, 5, \out, ~schroederBus]);
