SuperCollider
(
{
Mix(
Resonz.ar(
Saw.ar( [440,443,437] + SinOsc.ar(100,0,100) ),
XLine.kr(10000,10,10),
Line.kr(1,0.05, 10),
LFSaw.kr(Line.kr(3,17,3),0,0.5,0.5)*Line.kr(1,0,10)
)
)
}.play
)
Stride
signal SineWave { rate: AudioRate }
signal SawWaves [3] { rate: AudioRate }
signal SawWave { rate: ControlRate }
signal CenterFrequency { rate: ControlRate }
signal Bandwidth { rate: ControlRate }
signal Amplitude { rate: ControlRate }
signal AM_Frequency { rate: ControlRate }
Curve (
startValue: [ 10000. , 1. , 1. , 3. ]
stopValue: [ 10. , 0.05 , 0. , 17. ]
duration: [ 10, 10., 10., 3.]
mode: [ 'Exponential', 'Linear', 'Linear', 'Linear' ]
reset: none
)
>> [ CenterFrequency, Bandwidth, Amplitude, AM_Frequency ];
Oscillator (
type: [ 'Sine', 'Saw', 'Saw', 'Saw', 'Saw' ]
frequency: [ 100., [ 440., 443., 437.] + SineWave, AM_Frequency ]
amplitude: [ 100., 1., 1., 1., 0.5 ]
)
>> [ SineWave, SawWaves, AM_SawWave ];
SawWaves
>> Mix ()
>> Filter (
centerFrequency: CenterFrequency
qFactor: Bandwidth
)
>> Level (
gain: ( AM_SawWave + 0.5 ) * Amplitude
)
>> AudioOut[1:2];
module Curve {
input: none
output: Output
propertyName: [ 'startValue', 'stopValue', 'duration', 'mode', 'reset' ]
propertyDirection: in
propertyBlock: [
constant StartValue { value: 0.0 },
constant StopValue { value: 1.0 },
constant Duration { value: 1.0 },
constant Mode { value: 'Linear' },
trigger Reset {}
]
internalBlock: [
signal Output { rate: none }
signal Count { rate: streamRate reset: Reset}
trigger Done {}
]
streams: [
Counter (
startValue: 0
rollValue: 1
increment: 1 / (streamRate * Duration)
stop: Done
reset: Reset
)
>> Count
>> OnChange()
>> Map (
mode: Mode
minimum: StartValue
maximum: StopValue
)
>> Output;
Count >> Compare ( value: 1 operator: 'Equal' ) >> Done;
]
}