zkwm — Writes to a zk variable at k-rate with mixing.
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 file zkwm.csd.
Example 1079. Example of the zkwm opcode.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o zkwm.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; 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 </CsInstruments> <CsScore> ; 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 </CsScore> </CsoundSynthesizer>