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/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc for RT audio input as well ; For Non-realtime ouput leave only the line below: ; -o genfarey.wav -W ;;; for file output any platform ; Required settings for WebAudio: sr = 48000 ksmps = 128 nchnls = 2 nchnls_i = 1 ; sr = 44100 ; ksmps = 32 ; nchnls = 2 0dbfs = 1 ; GENfarey creates table gidelta. ; The table contains the delta values of Farey Sequence 7 (p5=7). ; They are used as Inter Onset Intervals (IOIs) or event durations. ; If p6 is set to 1 for IOI output then the length of the table (p3=-18) is -(|F_7| - 1) ; Remember that a negative sign is for non-power-of-2 table lengths. ; The negative sign in front of the GEN number prevents post-normalisation of its values. gidelta ftgen 0,0,-18,"farey",7,1 ; Use GENfarey with p6 set to 2 to generate the denominators of fractions of F_7 ; this is used in this example as factors to create a series of pitches: gimult ftgen 0,0,-18,"farey",7,2 ;-------- loop and trigger instrument 901 using a Farey Sequence polyrhythm instr 1 kindx init 0 kindx2 init 0 ktrigger init 0 ktime_unit init p6 kstart init p4 kloop init p5 kinitndx init 0 kfn_times init gidelta knote init 60 kbasenote init p8 ifundam init p7 ktrigger seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times if (ktrigger > 0 ) then kpitch = cpspch(ifundam) kmult tab kindx2, gimult kpitch = kpitch * kmult knote = kbasenote + kmult event "i", 901, 0, .4, .10, kpitch, kpitch * .9, 0.4, 5, .75, .8, 1.0, .15, .0, .125, .125, .25, .5, 1.0, .0, .0, .0, .0, .125, .25, .25, .25, knote kindx = kindx + 1 kindx = kindx % kloop kindx2 = kindx2 + 1 kindx2 = kindx2 % kloop endif endin ;------ basic 2 Operators FM algorithm ---------------- instr 901 inotedur = p3 imaxamp = p4 ;ampdb(p4) icarrfreq = p5 imodfreq = p6 ilowndx = p7 indxdiff = p8-p7 knote = p27 aampenv linseg p9, p14*p3, p10, p15*p3, p11, p16*p3, p12, p17*p3, p13 adevenv linseg p18, p23*p3, p19, p24*p3, p20, p25*p3, p21, p26*p3, p22 amodosc oscili (ilowndx+indxdiff*adevenv)*imodfreq, imodfreq, 10 acarosc oscili imaxamp*aampenv, icarrfreq+amodosc, 10 outs acarosc, acarosc endin f10 0 4096 10 1 ;sine wave ; p4 kstart := index offset into the Farey Sequence ; p5 kloop := end index into Farey Seq. ; p6 timefac := time in seconds for one loop to complete ; p7 fundam := fundamental of the FM instrument ; p8 basenote:= root pitch of the midi voice output ; note that pitch structures of the midi file output are not equivalent to the ; ones used for the FM real-time synthesis. ; start dur kstart kloop timefac fundam. basenote i1 0.0 44 0 18 2 6.05 60 i1 4 30 0 18 3 7.05 72 i1 34 12 9 18 3 7.05 72 i1 10 12 0 18 1.5 8 84 i1 22 12 0 9 1.5 8 84 i1 15 16 0 18 1 5 48 i1 22 20 5 17 1.7 4 36 i1 46 20 3 11 2.5 7.04 71 i1 51 20 5 13 2.5 7.06 72 i1 73.5 1.5 11 18 1.5 5.05 48 i1 75 1 12 18 1 6.03 58 e