ibasfreq -- base frequency to which tonality and brighness are relative
iwfn -- function table of the waveform, usually a sine
ioctfn -- function table used for weighting the octaves, usually something like:
f1 0 1024 -19 1 0.5 270 0.5
ioctcnt (optional) -- number of octaves used for brightness blending. Must be in the range 2 to 10. Default is 3.
iphs (optional, default=0) -- initial phase of the oscillator. If iphs = -1, initialization is skipped.
Performance
kamp -- amplitude of note
ktone -- cyclic tonality parameter relative to ibasfreq in logarithmic octave, range 0 to 1, values >> 1 can be used, and are internally reduced to frac(ktone).
kbrite -- brightness parameter relative to ibasfreq, achieved by weighting ioctcnt octaves. It is scaled in such a way, that a value of 0 corresponds to the orignal value of ibasfreq, 1 corresponds to one octave above ibasfreq, -2 corresponds to two octaves below ibasfreq, etc. kbrite may be fractional.
hsboscil takes tonality and brightness as arguments, relative to a base frequency (ibasfreq). Tonality is a cyclic parameter in the logarithmic octave, brightness is realized by mixing multiple weighted octaves. It is useful when tone space is understood in a concept of polar coordinates.
Making ktone a line, and kbrite a constant, produces Risset's glissando.
Oscillator table iwfn is always read interpolated. Performance time requires about ioctcnt * oscili.
Examples
Here is an example of the hsboscil opcode. It uses the file hsboscil.csd.
<CsoundSynthesizer><CsOptions>; Select audio/midi flags here according to platform-odac;;;realtime audio out;-iadc ;;;uncomment -iadc if realtime audio input is needed too; For Non-realtime ouput leave only the line below:; -o hsboscil.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1; synth waveformgiwaveftgen1,0,1024,10,1,1,1,1; blending windowgiblendftgen2,0,1024,-19,1,0.5,270,0.5instr1; produces Risset's glissando.kamp=.4kbrite=0.3ibasfreq=200ioctcnt=5; Change ktone linearly from 0 to 1, ; over the period defined by p3.ktoneline0,p3,1asighsboscilkamp,ktone,kbrite,ibasfreq,giwave,giblend,ioctcntoutsasig,asigendin</CsInstruments><CsScore>i1010e</CsScore></CsoundSynthesizer>
Here is an example of the hsboscil opcode in a MIDI instrument. It uses the file hsboscil_midi.csd.
Example of the hsboscil opcode in a MIDI instrument.
<CsoundSynthesizer><CsOptions>; Select audio/midi flags here according to platform; Audio out -odac-M0;;;realtime audio out and realtime MIDI in;-iadc ;;;uncomment -iadc if realtime audio input is needed too; -o hsboscil_midi.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1; synth waveformgiwaveftgen1,0,1024,10,1,1,1,1; blending windowgiblendftgen2,0,1024,-19,1,0.5,270,0.5instr1ibase=cpsoct(6)ioctcnt=5; all octaves sound alike.itonaoctmidi; velocity is mapped to brightnessibriteampmidi4; Map an exponential envelope for the amplitude.kenvexpon.8,1,.01asighsboscilkenv,itona,ibrite,ibase,giwave,giblend,ioctcntoutsasig,asigendin</CsInstruments><CsScore>i1030; play for 30 secondse</CsScore></CsoundSynthesizer>