|
- hsboscil_synth.csd
-
- Synthesizer is divided into seven panels.
-
- Amplitude
- ---------
- Amp - amplitude control
- Att. - amplitude envelope attack time
- Dec. - amplitude envelope decay time
- Sus. - amplitude envelope sustain level
- Rel. - amplitude envelope release time
- Mod.Shape- shape used for amplitude modulation (tremolo). Choose from sine shaped, random splines, random sample and hold (randomh) or square wave.
- Rate - rate of amplitude LFO (tremolo)
- Depth - depth of amplitude LFO
- Delay - delay time before amplitude LFO begins
- Rise - time over which amplitude LFO depth rises from zero to its prescribed value
-
- Brightness - brightness is really just a description of where the emphasis is in the stack of octave spaced tones that hsboscil produces
- ----------
- Brite - manual brightness control
- Vel. - amount of velocity to brightness control
- Att. - brightness envelope attack time
- Att.Lev - brightness envelope attack level
- Dec. - brightness envelope decay time
- Sus. - brightness envelope sustain level
- Rel. - brightness envelope release time
- Rel.Lev - brightness envelope release level
- Oct.Cnt.- Number of octave spaced partials in a tone
- Mod.Shape- shape used for brightness modulation. Choose from sine shaped, random splines, random sample and hold (randomh) or square wave.
- Rate - rate of brightness LFO
- Depth - depth of brightness LFO
- Delay - delay time before brightness LFO begins
- Rise - time over which brightness LFO depth rises from zero to its prescribed value
-
- Noise - interpolated gaussian modulation is applied to the pitch (tone) parameter which, at high rates/frequencies results in the addition of a noise component in the tone
- -----
- Rate - rate/frequency of noise modulation
- Depth - depth of noise modulation
-
- Reverb - the screverb opcode is used
- ------
- Mix - amount of reverb that is mixed into the output. When mix is zero the effect is bypassed.
- Size - size of the virtual space created by the reverb effect
-
- Pitch Modulation - modulation of the tone (pitch) parameter. This will be at a much slower rate than that applied using the 'noise' function
- ----------------
- Mod.Shape- shape used for pitch modulation. Choose from sine shaped, random splines, random sample and hold (randomh) or square wave.
- Rate - rate of pitch modulation LFO
- Depth - depth of pitch modulation LFO
- Delay - delay time before pitch modulation LFO begins
- Rise - time over which pitch modulation LFO depth rises from zero to its prescribed value
-
- Freq.Shift - a frequency shifting effect
- ----------
- Freq. - frequency by which the signal will be shifted
-
- Chorus - a stereo chorus effect. Two chorus voices are created which the panning of which is modulated randomly. Delay time/pitch modulations are random rather than cyclical.
- ------
- Mix - Amount of chorussed signal that is mixed into the output
- Depth - Depth of modualtion used in the chorus effect
- Rate - Rate of modulation used in the chorus effect
-
-
-
-
- <Cabbage>
- form caption("hsboscil Synth") size(590, 480), pluginID("hsbo")
-
- snapshot bounds( 5,455,200, 20), preset("hsboscil"), master(1), items("Preset 1", "Preset 2", "Preset 3", "Preset 4", "Preset 5", "Preset 6", "Preset 7", "Preset 8", "Preset 9", "Preset 10")
-
- ;AMPLITUDE
- groupbox bounds(0, 0, 590, 100), colour( 10, 15, 30, 100) text("Amplitude"), fontcolour(255,0,0){
- rslider bounds( 5, 30, 60, 60), text("Amp."), channel("amp"), range(0, 1, 0.3)
- line bounds( 65, 30, 2, 60), colour("DarkSlateGrey")
- rslider bounds( 70, 30, 60, 60), text("Att."), channel("AAtt"), range( 0, 8.00, 0.3,0.5)
- rslider bounds(120, 30, 60, 60), text("Dec."), channel("ADec"), range( 0, 8.00, 0.01,0.5)
- rslider bounds(170, 30, 60, 60), text("Sus."), channel("ASus"), range( 0, 1.00, 0.5,0.5)
- rslider bounds(220, 30, 60, 60), text("Rel."), channel("ARel"), range(0.01, 8, 0.3,0.5)
- line bounds(285, 30, 2, 60), colour("DarkSlateGrey")
- label bounds(305, 35, 70, 12), text("Mod.Shape")
- combobox bounds(300, 50, 70, 20), channel("amplfo"), value(2), text("sine", "splines", "S+H", "square")
- rslider bounds(375, 30, 60, 60), text("Rate"), channel("ARte"), range(0, 16.0, 4)
- rslider bounds(425, 30, 60, 60), text("Depth"), channel("ADep"), range(0, 1.00, 1)
- rslider bounds(475, 30, 60, 60), text("Delay"), channel("ADel"), range(0, 2.00, 0, 0.5)
- rslider bounds(525, 30, 60, 60), text("Rise"), channel("ARis"), range(0, 2.00, 0.1, 0.5)
- }
-
- ;BRIGHTNESS
- groupbox bounds(0, 100,450,170), colour( 6, 18, 22, 100), text("Brightness"), fontcolour(205,10,10){
- rslider bounds( 5,135, 60, 60), text("Brite"), channel("brite"), range(-6, 6.00, -2)
- rslider bounds( 5,200, 60, 60), text("Vel."), channel("BVelDep"), range(0, 6.00, 3)
- rslider bounds( 65,135, 60, 60), text("Oct.Cnt."), channel("octcnt"), range(2, 20, 3, 1, 1)
- line bounds(130,127, 2, 60), colour("DarkSlateGrey")
- rslider bounds(135,135, 60, 60), text("Att."), channel("BAtt"), range(0, 8.00, 0.1,0.5)
- rslider bounds(185,135, 60, 60), text("Att.Lev."), channel("BAttLev"), range(-6.00, 6, 1)
- rslider bounds(235,135, 60, 60), text("Dec."), channel("BDec"), range(0, 8.00, 0.1,0.5)
- rslider bounds(285,135, 60, 60), text("Sus."), channel("BSus"), range(-6, 6.00, 0)
- rslider bounds(335,135, 60, 60), text("Rel."), channel("BRel"), range(0, 8.00, 0.01,0.5)
- rslider bounds(385,135, 60, 60), text("Rel.Lev."), channel("BRelLev"), range(-4.00, 4, 0)
- line bounds( 90,200, 2, 60), colour("DarkSlateGrey")
- label bounds(120,205, 70, 12), text("Mod.Shape")
- combobox bounds(115,220, 70, 20), channel("britelfo"), value(2), text("sine", "splines", "S+H", "square")
- rslider bounds(185,200, 60, 60), text("Rate"), channel("BRte"), range(0, 30.0, 4)
- rslider bounds(235,200, 60, 60), text("Depth"), channel("BDep"), range(0, 6.00, 2)
- rslider bounds(285,200, 60, 60), text("Delay"), channel("BDel"), range(0, 2.00, 0.5, 0.5)
- rslider bounds(335,200, 60, 60), text("Rise"), channel("BRis"), range(0, 4.00, 1.5, 0.5)
- }
-
- ;NOISE
- groupbox bounds(450, 100, 70,170), colour( 20, 7, 19, 100), text("Noise"), fontcolour(255,40,60){
- rslider bounds(455, 135, 60, 60), text("Rate"), channel("NRte"), range(16,10000, 1000, 0.5)
- rslider bounds(455, 200, 60, 60), text("Depth"), channel("NDep"), range(0, 1.00, 0.05, 0.5)
- }
-
- ;REVERB
- groupbox bounds(520, 100, 70,170), colour( 3, 25, 11, 100), text("Reverb"), fontcolour(255,0,100){
- rslider bounds(525,135, 60, 60), text("Mix"), channel("RvbMix"), range(0, 1.00, 0.3)
- rslider bounds(525,200, 60, 60), text("Size"), channel("RvbSize"), range(0, 1.00, 0.82)
- }
-
- ;PITCH MOD.
- groupbox bounds( 0,270,350,100), colour( 20, 25, 40, 100), text("Pitch Modulation"), fontcolour(255,100,0){
- label bounds( 15,305, 65, 12), text("Mod.Shape")
- combobox bounds( 10,320, 65, 20), channel("pitchlfo"), value(1), text("sine", "splines", "S+H", "square")
- rslider bounds( 80,300, 60, 60), text("Rate"), channel("PRte"), range(0, 16.00, 0, 0.5)
- rslider bounds(130,300, 60, 60), text("Depth"), channel("PDep"), range(0, 1.00, 0)
- rslider bounds(180,300, 60, 60), text("Delay"), channel("PDel"), range(0, 2.00, 0, 0.5)
- rslider bounds(230,300, 60, 60), text("Rise"), channel("PRis"), range(0, 2.00, 0.1, 0.5)
- rslider bounds(280,300, 60, 60), text("Risset"), channel("TRate"), range(-3.00, 3, 0)
- }
-
- ;FREQ. SHIFT
- groupbox bounds(350,270, 70,100), colour( 20, 5, 25, 100), text("Freq.Shift"), fontcolour(200,0,0){
- rslider bounds(355,300, 60, 60), text("Freq."), channel("FShift"), range(-1000, 1000, -1000)
- }
-
- ;CHORUS
- groupbox bounds(420,270,170,100), colour( 3, 10, 13, 100), text("Chorus"), fontcolour(255,200,0){
- rslider bounds(425,300, 60, 60), text("Mix"), channel("ChoMix"), range(0, 1.00, 1)
- rslider bounds(475,300, 60, 60), text("Depth"), channel("ChoDep"), range(0, 0.100, 0.01,0.5,0.0001)
- rslider bounds(525,300, 60, 60), text("Rate"), channel("ChoRte"), range(0, 20.0, 4, 0.5)
- }
-
- keyboard pos(0, 370), size(590, 80)
- }
- image bounds(290, 455, 210, 20), colour(75, 85, 90, 100), plant("credit"){
- label bounds(0.03, 0.15, .9, .7), text("Author: Iain McCurdy |2012|"), colour("white")
- </Cabbage>
-
-
- <CsoundSynthesizer>
-
- <CsOptions>
- -dm0 -n -+rtmidi=null -M0
- </CsOptions>
-
- <CsInstruments>
-
- sr = 44100 ;SAMPLE RATE
- ksmps = 4 ;NUMBER OF AUDIO SAMPLES IN EACH CONTROL CYCLE. HIGHER ksmps can result in quantisation noise in kbrite modulations.
- nchnls = 2 ;NUMBER OF CHANNELS (2=STEREO)
- 0dbfs = 1
- seed 0
- massign 0,2
-
- ;Author: Iain McCurdy (2012)
-
- gisine ftgen 0,0,4096,10,1
- giwfn ftgen 0, 0, 131072, 10, 1 ;A SINE WAVE
- gioctfn ftgen 0, 0, 1024, -19, 1, 0.5, 270, 0.5 ;A HANNING-TYPE WINDOW
- gasendL,gasendR init 0
-
- opcode FreqShifter,a,aki
- ain,kfshift,ifn xin ;READ IN INPUT ARGUMENTS
- areal, aimag hilbert ain ;HILBERT OPCODE OUTPUTS TWO PHASE SHIFTED SIGNALS, EACH 90 OUT OF PHASE WITH EACH OTHER
- asin oscili 1, kfshift, ifn, 0
- acos oscili 1, kfshift, ifn, 0.25
- ;RING MODULATE EACH SIGNAL USING THE QUADRATURE OSCILLATORS AS MODULATORS
- amod1 = areal * acos
- amod2 = aimag * asin
- ;UPSHIFTING OUTPUT
- aFS = (amod1 - amod2)
- xout aFS ;SEND AUDIO BACK TO CALLER INSTRUMENT
- endop
-
- instr 1 ;read in widgets
- gkamplfo chnget "amplfo"
- gkbritelfo chnget "britelfo"
- gkChoMix chnget "ChoMix"
- gkChoDep chnget "ChoDep"
- gkChoRte chnget "ChoRte"
- gkRvbMix chnget "RvbMix"
- gkRvbSize chnget "RvbSize"
- gkFShift chnget "FShift"
- gkNRte chnget "NRte"
- gkNDep chnget "NDep"
- gkpitchlfo chnget "pitchlfo"
- gkPDel chnget "PDel"
- gkPRis chnget "PRis"
- gkPRte chnget "PRte"
- gkPDep chnget "PDep"
- endin
-
- instr 2 ;hsboscil instrument. MIDI notes are directed here.
- kporttime linseg 0,0.001,0.01 ;PORTAMENTO TIME VALUE RISES QUICKLY FROM ZERO TO A HELD VALUE
- kamp chnget "amp" ;READ WIDGETS...
- iAAtt chnget "AAtt" ;
- iADec chnget "ADec" ;
- iASus chnget "ASus" ;
- iARel chnget "ARel" ;
- aenv linsegr 0.001,iAAtt+0.001,1,iADec+0.001,iASus,iARel+0.001,0.001 ;AMPLITUDE ENVELOPE
- iADel chnget "ADel" ;
- iARis chnget "ARis" ;
- kADep chnget "ADep" ;
- kARte chnget "ARte" ;
- kbrite chnget "brite" ;
- kbrite portk kbrite,kporttime
- koctcnt chnget "octcnt" ;
- iBVelDep chnget "BVelDep" ;
-
- iBAtt chnget "BAtt" ;
- iBAttLev chnget "BAttLev" ;
- iBDec chnget "BDec" ;
- iBSus chnget "BSus" ;
- iBRel chnget "BRel" ;
- iBRelLev chnget "BRelLev" ;
- kBEnv linsegr 0,iBAtt+0.001,iBAttLev,iBDec+0.001,iBSus,iBRel+0.001,iBRelLev ;'BRIGHTNESS' ENVELOPE
- iBDel chnget "BDel" ;
- iBRis chnget "BRis" ;
- kBDep chnget "BDep" ;
- kBRte chnget "BRte" ;
-
- kTRate chnget "TRate" ;
-
- ibasfreq cpsmidi ;READ MIDI NOTE PITCH
-
- ktrig changed koctcnt ;IF 'NUMBER OF OCTAVES' AS DEFINED BY WIDGET CHANGES GENERATE A TRIGGER
- if ktrig==1 then ;IF 'NUMBER OF OCTAVES' CHANGE TRIGGER HAS BEEN GENERATED...
- reinit UPDATE ;BEGIN A REINITIALISATION PASS FROM LABEL 'UPDATE'
- endif ;END OF CONDITIONAL
- UPDATE: ;LABEL 'UPDATE'. REINITIALISATION PASS BEGINS FROM HERE
-
- ;AMPLITUDE LFO
- kdepth linseg 0,iADel+0.001,0,iARis+0.001,1 ;DEPTH OF MODULATION ENVELOPE
- if gkamplfo==1 then
- kALFO lfo (kdepth*kADep)/2,kARte,0 ;LFO (sine)
- elseif gkamplfo==2 then
- kALFO jspline (kdepth*kADep)/2,kARte,kARte
- elseif gkamplfo==3 then
- kALFO randomh -(kdepth*kADep)/2,(kdepth*kADep)/2,kARte
- kALFO port kALFO,0.001 ;smooth out the clicks
- else
- kALFO lfo (kdepth*kADep)/2,kARte,2 ;LFO (bi-square)
- kALFO port kALFO,0.001 ;smooth out the clicks
- endif
-
- kALFO = (kALFO+0.5) + (1 - kADep) ;OFFSET AND RESCALE LFO FUNCTION
-
- ;VELOCITY TO AMPLITUDE
- iVelAmp veloc 0.2,1 ;READ IN MIDI NOTE VELOCITY AS A VALUE WITHIN THE RANGE 0.2 TO 1
-
- ;BRIGHTNESS LFO
- kdepth linseg 0,iBDel+0.001,0,iBRis+0.001,1 ;DEPTH OF MODULATION ENVELOPE
- if gkbritelfo==1 then
- kBLFO lfo kdepth*kBDep,kBRte,0 ;LFO (sine)
- elseif gkbritelfo==2 then
- kBLFO jspline kdepth*kBDep,kBRte,kBRte
- elseif gkbritelfo==3 then
- kBLFO randomh -kdepth*kBDep,kdepth*kBDep,kBRte
- kBLFO port kBLFO,0.004 ;smooth out the clicks
- else
- kBLFO lfo kdepth*kBDep,kBRte,2 ;LFO (bi-square)
- kBLFO port kBLFO,0.004 ;smooth out the clicks
- endif
-
- ;VELOCITY TO BRIGHTNESS
- iBVel ampmidi iBVelDep ;MIDI NOTE VELOCITY USED TO DERIVE A VALUE THAT WILL INFLUENCE 'BRIGHTNESS'
-
- ;NOISE
- knoise gaussi 1, gkNDep, gkNRte
-
- ;RISSET
- kRisset lfo 1,kTRate,4 ;'RISSET GLISSANDO' FUNCTION
-
- ;PITCH MODULATION
- kPDepth linseg 0,i(gkPDel)+0.001,0,i(gkPRis)+0.001,1 ;DEPTH OF MODULATION ENVELOPE
- if gkpitchlfo==1 then
- kPLFO lfo gkPDep*kPDepth,gkPRte,0 ;LFO
- elseif gkpitchlfo==2 then
- kPLFO jspline gkPDep*kPDepth,gkPRte,gkPRte
- elseif gkpitchlfo==3 then
- kPLFO randomh -gkPDep*kPDepth,gkPDep*kPDepth,gkPRte
- kPLFO port kPLFO,0.002 ;smooth out the clicks
- else
- kPLFO lfo gkPDep*kPDepth,gkPRte,2 ;LFO (bi-square)
- kPLFO port kPLFO,0.002 ;smooth out the clicks
- endif
-
- aL hsboscil kamp*kALFO*iVelAmp, kPLFO+kRisset+knoise, kbrite+kBEnv+kBLFO+iBVel, ibasfreq, giwfn, gioctfn, i(koctcnt), rnd(1) ;CREATE AN hsboscil TONE FOR THE LEFT CHANNEL. RANDOM INITIAL PHASE CREATE STEREO EFFECT.
- aR hsboscil kamp*kALFO*iVelAmp, kPLFO+kRisset+knoise, kbrite+kBEnv+kBLFO+iBVel, ibasfreq, giwfn, gioctfn, i(koctcnt), rnd(1) ;CREATE AN hsboscil TONE FOR THE RIGHT CHANNEL. RANDOM INITIAL PHASE CREATE STEREO EFFECT.
- aL = aL*aenv ;APPLY AMPLITUDE ENVELOPE TO AUDIO OUTPUT OF hsboscil
- aR = aR*aenv ;APPLY AMPLITUDE ENVELOPE TO AUDIO OUTPUT OF hsboscil
- rireturn
-
- /*FREQUENCY SHIFTER*/
- if gkFShift==0 kgoto SKIP_FSHIFT ;IF F.SHIFT VALUE = 0, BYPASS THE EFFECT
- kFShift portk gkFShift,kporttime
- aL FreqShifter aL,kFShift,gisine
- aR FreqShifter aR,kFShift,gisine
- SKIP_FSHIFT:
-
- outs aL,aR ;SEND AUDIO TO OUTPUTS
- gasendL = gasendL+aL
- gasendR = gasendR+aR
- endin
-
- instr 3 ;Chorus effect
- if gkChoMix==0 goto SKIP_CHORUS
- kporttime linseg 0,0.001,1
- kporttime = kporttime/gkChoRte
- kdlt1 randomi ksmps/sr,gkChoDep,gkChoRte,1
- kdlt1 portk kdlt1,kporttime
- adlt1 interp kdlt1
- acho1 vdelay gasendL,adlt1*1000,1*1000
-
- kdlt2 randomi ksmps/sr,gkChoDep,gkChoRte,1
- kdlt2 portk kdlt2,kporttime
- adlt2 interp kdlt2
- acho2 vdelay gasendR,adlt2*1000,1*1000
-
- kpan1 randomi 0,1,gkChoRte,1
- kpan2 randomi 0,1,gkChoRte,1
- a1L,a1R pan2 acho1,kpan1
- a2L,a2R pan2 acho2,kpan2
- achoL = a1L+a2L
- achoR = a1R+a2R
- outs achoL*gkChoMix,achoR*gkChoMix
-
-
- gasendL = (gasendL+achoL)*gkRvbMix
- gasendR = (gasendR+achoR)*gkRvbMix
- SKIP_CHORUS:
- gasendL = gasendL*gkRvbMix
- gasendR = gasendR*gkRvbMix
- endin
-
- instr 4 ;reverb
- if gkRvbMix==0 goto SKIP_REVERB
- aL,aR reverbsc gasendL,gasendR,gkRvbSize,12000
- outs aL,aR
- SKIP_REVERB:
- clear gasendL,gasendR
- endin
-
- </CsInstruments>
-
- <CsScore>
- i 1 0 [3600*24*7]
- i 3 0 [3600*24*7]
- i 4 0 [3600*24*7]
- </CsScore>
-
- </CsoundSynthesizer>
|