ksig -- value to be written to the zk location.
kndx -- points to the zk or za location to which to write.
zkwm is a mixing opcode, it adds the signal to the current value of the variable. If no imix is specified, mixing always occurs. imix = 0 will cause overwriting like ziw, zkw, and zaw. Any other value will cause mixing.
Caution: When using the mixing opcodes ziwm, zkwm, and zawm, care must be taken that the variables mixed to, are zeroed at the end (or start) of each k- or a-cycle. Continuing to add signals to them, can cause their values can drift to astronomical figures.
One approach would be to establish certain ranges of zk or za variables to be used for mixing, then use zkcl or zacl to clear those ranges.
Here is an example of the zkwm opcode. It uses the files zkwm.orc and zkwm.sco.
Example 1. Example of the zkwm opcode.
/* zkwm.orc */
/* Written by Kevin Conder */
; Initialize the global variables.
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
; Initialize the ZAK space.
; Create 1 a-rate variable and 1 k-rate variable.
zakinit 1, 1
; Instrument #1 -- a basic instrument.
instr 1
; Generate a k-rate signal.
; The signal goes from 30 to 20,000 then back to 30.
kramp linseg 30, p3/2, 20000, p3/2, 30
; Mix the signal into the zk variable #1.
zkwm kramp, 1
endin
; Instrument #2 -- another basic instrument.
instr 2
; Generate another k-rate signal.
; This is a low frequency oscillator.
klfo lfo 3500, 2
; Mix this signal into the zk variable #1.
zkwm klfo, 1
endin
; Instrument #3 -- generates audio output.
instr 3
; Read zk variable #1, containing a mix of both signals.
kamp zkr 1
; Create a sine waveform. Its amplitude will vary
; according to the values in zk variable #1.
a1 oscil kamp, 880, 1
; Generate the audio output.
out a1
; Clear the zk variable, get it ready for
; another pass.
zkcl 0, 1
endin
/* zkwm.orc */
/* zkwm.sco */
/* Written by Kevin Conder */
; Table #1, a sine wave.
f 1 0 16384 10 1
; Play Instrument #1 for 5 seconds.
i 1 0 5
; Play Instrument #2 for 5 seconds.
i 2 0 5
; Play Instrument #3 for 5 seconds.
i 3 0 5
e
/* zkwm.sco */