<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac ;;;realtime audio
;-iadc ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o polynomial.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
; The polynomial y=x^n where n is odd always produces a curve
; that traverses the range [-1, 1] when the input is within
; the same range. Therefore, we can use one of these curves
; to make a nonlinear phasor that repeatedly reads a table
; from beginning to end like a linear phasor (maintaining
; continuity) but that distorts the waveform in the table.
instr 4 ; This instrument demonstrates phase distortion with x^3
idur = p3
iamp = p4
ifreq = p5
itable = p6
aenv linseg 0, .001, 1.0, idur - .051, 1.0, .05, 0 ; declicking envelope
aosc phasor ifreq ; create a linear phasor
apd polynomial aosc, 0, 0, 0, 1 ; distort the phasor with x^3
aout tablei apd, itable, 1 ; read a sine table with the nonlinear phasor
outs aenv*aout*iamp, aenv*aout*iamp
endin
instr 5 ; This instrument demonstrates phase distortion with x^11
idur = p3
iamp = p4
ifreq = p5
itable = p6
aenv linseg 0, .001, 1.0, idur - .051, 1.0, .05, 0 ; declicking envelope
aosc phasor ifreq ; create a linear phasor
apd polynomial aosc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ; distort the phasor with x^11
aout tablei apd, itable, 1 ; read a sine table with the nonlinear phasor
outs aenv*aout*iamp, aenv*aout*iamp
endin
instr 6 ; This instrument crossfades between a pure sine and one distorted with x^11
idur = p3
iamp = p4
ifreq = p5
itable = p6
aenv linseg 0, .001, 1.0, idur - .051, 1.0, .05, 0 ; declicking envelope
aosc phasor ifreq ; create a linear phasor
aout3 tablei aosc, itable, 1 ; read a sine table without the linear phasor
apd11 polynomial aosc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ; distort the phasor with x^11
aout11 tablei apd11, itable, 1 ; read a sine table with the nonlinear phasor
kamount linseg 1.0, 0.05, 0.9, 1.0, 0.0 ; crossfade between two outputs
aout = aout3*kamount + aout11*(1.0 - kamount)
outs aenv*aout*iamp, aenv*aout*iamp
endin
</CsInstruments>
<CsScore>
f1 0 16385 10 1 ; sine wave
; descending "just blues" scale
t 0 100
i4 0 .333 .7 512 1
i. + . . 448
i. + . . 384
i. + . . 360
i. + . . 341.33
i. + . . 298.67
i. + 2 . 256
s
t 0 100
i5 0 .333 .7 512 1
i. + . . 448
i. + . . 384
i. + . . 360
i. + . . 341.33
i. + . . 298.67
i. + 2 . 256
s
t 0 100
i6 0 .333 .7 512 1
i. + . . 448
i. + . . 384
i. + . . 360
i. + . . 341.33
i. + . . 298.67
i. + 2 . 256
e
</CsScore>
</CsoundSynthesizer>