This should play if your Web browser has WebAssembly enabled (most do). Most examples will play unless they need to load files. The first time you click Play, Csound will spend a few seconds loading, then play. You can edit this code and replay it.
; Select audio flags here according to platform ; Audio out Audio in ;-odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: -o modmatrix.wav -W ;;; for file output any platform ; Required settings for WebAudio: sr = 48000 ksmps = 128 nchnls = 2 nchnls_i = 1 sr = 44100 kr = 441 ksmps = 100 nchnls = 2 0dbfs = 1 ; basic waveforms giSine ftgen 0, 0, 65537, 10, 1 ; sine wave giSaw ftgen 0, 0, 4097, 7, 1, 4096, -1 ; saw (linear) giSoftSaw ftgen 0, 0, 65537, 30, giSaw, 1, 10 ; soft saw (only 10 first harmonics) ; modmatrix tables giMaxNumParam = 128 giMaxNumMod = 32 giParam_In ftgen 0, 0, giMaxNumParam, 2, 0 ; input parameters table ; output parameters table (parameter values with added modulators) giParam_Out ftgen 0, 0, giMaxNumParam, 2, 0 giModulators ftgen 0, 0, giMaxNumMod, 2, 0 ; modulators table ; modulation scaling and routing (mod matrix) table, start with empty table giModScale ftgen 0, 0, giMaxNumParam*giMaxNumMod, -2, 0 ;******************************************** ; generate the modulator signals ;******************************************** instr 1 ; LFO1, 1.5 Hz, normalized range (0.0 to 1.0) kLFO1 oscil 0.5, 1.5, giSine ; generate LFO signal kLFO1 = kLFO1+0.5 ; offset ; LFO2, 0.4 Hz, normalized range (0.0 to 1.0) kLFO2 oscil 0.5, 0.4, giSine ; generate LFO signal kLFO2 = kLFO2+0.5 ; offset ; write modulators to table tablew kLFO1, 0, giModulators tablew kLFO2, 1, giModulators endin ;******************************************** ; set parameter values ;******************************************** instr 2 ; Here we can set the parameter values icps1 = p4 icps2 = p5 icutoff = p6 ; write parameters to table tableiw icps1, 0, giParam_In tableiw icps2, 1, giParam_In tableiw icutoff, 2, giParam_In endin ;******************************************** ; mod matrix edit ;******************************************** instr 3 ; Here we can write to the modmatrix table by using tablew or tableiw iLfo1ToCps1 = p4 iLfo1ToCps2 = p5 iLfo1ToCutoff = p6 iLfo2ToCps1 = p7 iLfo2ToCps2 = p8 iLfo2ToCutoff = p9 tableiw iLfo1ToCps1, 0, giModScale tableiw iLfo1ToCps2, 1, giModScale tableiw iLfo1ToCutoff, 2, giModScale tableiw iLfo2ToCps1, 3, giModScale tableiw iLfo2ToCps2, 4, giModScale tableiw iLfo2ToCutoff, 5, giModScale ; and set the update flag for modulator matrix ; ***(must update to enable changes) ktrig init 1 chnset ktrig, "modulatorUpdateFlag" ktrig = 0 endin ;******************************************** ; mod matrix ;******************************************** instr 4 ; get the update flag kupdate chnget "modulatorUpdateFlag" ; run the mod matrix inum_mod = 2 inum_parm = 3 modmatrix giParam_Out, giModulators, giParam_In, \ giModScale, inum_mod, inum_parm, kupdate ; and reset the update flag chnset 0, "modulatorUpdateFlag" ; reset the update flag endin ;******************************************** ; audio generator to test values ;******************************************** instr 5 ; basic parameters iamp = ampdbfs(-5) ; read modulated parameters from table kcps1 table 0, giParam_Out kcps2 table 1, giParam_Out kcutoff table 2, giParam_Out ; set filter parameters kCF_freq1 = kcps1*kcutoff kCF_freq2 = kcps2*kcutoff kReso = 0.7 kDist = 0.3 ; oscillators and filters a1 oscili iamp, kcps1, giSoftSaw a1 lpf18 a1, kCF_freq1, kReso, kDist a2 oscili iamp, kcps2, giSoftSaw a2 lpf18 a2, kCF_freq2, kReso, kDist outs a1, a2 endin ;******************************************** ; set initial parameters ; cps1 cps2 cutoff i2 0 1 400 800 3 ;******************************************** ; set modmatrix values ; lfo1ToCps1 lfo1ToCps2 lfo1ToCut lfo2ToCps1 lfo2ToCps2 lfo2ToCut i3 0 1 40 0 -2 -50 100 3 ;******************************************** ; start "always on" instruments #define SCORELEN # 20 # ; set length of score i1 0 $SCORELEN ; start modulators i4 0 $SCORELEN ; start mod matrix i5 0 $SCORELEN ; start audio oscillator e