aboutsummaryrefslogtreecommitdiff
path: root/site/app/partialemergence/sequence_sections.inc
diff options
context:
space:
mode:
Diffstat (limited to 'site/app/partialemergence/sequence_sections.inc')
-rw-r--r--site/app/partialemergence/sequence_sections.inc439
1 files changed, 439 insertions, 0 deletions
diff --git a/site/app/partialemergence/sequence_sections.inc b/site/app/partialemergence/sequence_sections.inc
new file mode 100644
index 0000000..b281a04
--- /dev/null
+++ b/site/app/partialemergence/sequence_sections.inc
@@ -0,0 +1,439 @@
+#ifndef INC_SECTION_SEQ
+#define INC_SECTION_SEQ ##
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+ Partial Emergence
+ by Richard Knight 2022
+
+ Installation submission for the International Csound Conference 2022
+
+ Section subsequencers
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "/bussing.udo"
+#include "/instruments_water.inc"
+#include "/instruments_idiophone.inc"
+#include "/instruments_synthesis.inc"
+
+
+/*
+ Pause the melodic progression for the duration of the calling instrumnet
+*/
+opcode pause_melprogression, 0, 0
+ gkmel_pause = 1
+ if (lastcycle() == 1) then
+ gkmel_pause = 0
+ endif
+endop
+
+
+/*
+ Call an instrument for outward transition; p4 is passed as the rise ratio of total duration
+*/
+opcode transition_out, 0, S
+ Sinstrument xin
+ iduration = random(4, min(12, p3*0.5))
+ iriseratio = random(0.5, 0.9)
+ schedule(Sinstrument, p3 - (iduration * iriseratio), iduration, iriseratio)
+endop
+
+
+/*
+ Call an instrument for inward transition; p4 is passed as short duration for an almost immediate attack
+*/
+opcode transition_in, 0, S
+ Sinstrument xin
+ iduration = random(3, min(10, p3*0.25))
+ schedule(Sinstrument, 0, iduration, 0.03)
+endop
+
+
+instr sequencer_s0
+ transition_in("transition_idiophone_randtime")
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(5, 10)
+ idur = (idur + itime > imaxlen) ? imaxlen - itime : idur
+ schedule("phrase_idiophone1", itime, idur, 1)
+ itime += random(idur*0.6, idur*0.8)
+ od
+ transition_out("transition_idiophone_stretch1")
+endin
+
+
+instr sequencer_s1
+ schedule("phrase_idiophone_stretch1", 0, i(gkseq_beattime) * i(gkmel_section_change_due), 0)
+ schedule("phrase_idiophone1", 0, i(gkseq_beattime) * i(gkmel_section_change_due), 1)
+
+ kdo init 0
+ if (gkmel_section_change == 1) then
+ klen = mel_length:k()
+ schedulek("phrase_idiophone_stretch1", 0, klen*random:k(1, 1.5), 0)
+
+ if (kdo == 0) then
+ schedulek("phrase_idiophone1", 0, klen*random:k(1, 1.3), 0) ; chords
+ kdo = 1
+ else
+ kdo = 0
+ endif
+ endif
+ transition_out("transition_idiophone_randtime")
+endin
+
+
+instr sequencer_s2
+
+ schedule("note_bass1", 0, p3, 0)
+ schedule("phrase_idiophone1", 0, i(gkseq_beattime) * i(gkmel_section_change_due), 1)
+
+ if (gkmel_section_change == 1) then
+ klen = mel_length:k()
+ schedulek("phrase_idiophone1", 0, klen, 1) ; single note only
+ schedulek("phrase_idiophone_stretch1", 0, klen*1.3, 0)
+ endif
+
+ if (lastcycle:k() == 1) then
+ turnoff2("note_bass1", 0, 1)
+ endif
+
+endin
+
+
+instr sequencer_s3
+ schedule("note_bass1", 0, p3, 0)
+ schedule("phrase_idiophone_stretch1", 0, i(gkseq_beattime) * i(gkmel_section_change_due), 1)
+
+ if (gkmel_section_change == 1) then
+ klen = mel_length:k()
+ schedulek("phrase_idiophone1", 0, klen, 0) ; chords
+ schedulek("phrase_idiophone_stretch1", 0, klen*0.8, 1)
+ endif
+
+ if (lastcycle:k() == 1) then
+ turnoff2("note_bass1", 0, 1)
+ endif
+
+endin
+
+
+instr sequencer_s4
+ idiophone_change()
+ schedule("phrase_dropstretch1", 0, i(gkseq_beattime) * 2 * i(gkmel_section_change_due), random(0.5, 1.5), 1, 1, 0.5)
+ if (gkmel_section_change == 1) then
+ klen = mel_length:k()
+ schedulek("phrase_idiophone1", 0, klen, 1) ; single note only
+ schedulek("phrase_idiophone_stretch1", 0, klen*1.3, 1)
+ endif
+ transition_out("transition_waterbubbler1")
+endin
+
+
+instr sequencer_s5
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(5, 20)
+ schedule("phrase_dropstretch1", itime, idur, random(0.5, 1.5), 1, 1, 1)
+ if (random(0, 1) > 0.5) then
+ schedule("phrase_dropstretch1", itime + random(0, 5), idur, random(0.5, 1.5), 1, 1, 2)
+ endif
+
+ if (random(0, 1) > 0.5) then ; no reson
+ schedule("phrase_dropstretch1", itime + random(0, 5), idur, random(0.5, 1.5), 0, 1, 1)
+ endif
+
+ if (random(0, 1) > 0.5) then
+ schedule("phrase_waterbubbler1", itime, idur, 1)
+ endif
+
+ if (random(0, 1) > 0.5) then
+ schedule("play_waterpaddling1", itime + random(0, 5), 1)
+ endif
+
+ itime += idur * random(0.5, 0.8)
+ od
+endin
+
+
+instr sequencer_s6
+ schedule("phrase_dropstretch1", 0, i(gkseq_beattime) * 1.5 * i(gkmel_section_change_due), random(0.5, 1.5), 0, 1, 1)
+
+ if (gkmel_section_change == 1) then
+ ;turnoff2 "phrase_idiophone_stretch2", 0, 1
+ schedulek("phrase_idiophone_stretch2", 0, mel_length:k()*1.3, 0)
+ schedulek("phrase_waterbubbler1", 0, mel_length:k(), 0)
+ endif
+
+ awL, awR bus_read "phrase_waterbubbler"
+ amL, amR bus_read "note_idiophonestretch2"
+
+ ir = 256
+ irm = 2
+ fwL pvsanal awL, ir, ir/irm, ir, 1
+ fwR pvsanal awR, ir, ir/irm, ir, 1
+ fmL pvsanal amL, ir, ir/irm, ir, 1
+ fmR pvsanal amR, ir, ir/irm, ir, 1
+ fxL pvsmorph fwL, fmL, 0, 1
+ fxR pvsmorph fwR, fmR, 0, 1
+ aL pvsynth fxL
+ aR pvsynth fxR
+ kamp linseg 0, p3*0.01, 1, p3*0.98, 1, p3*0.01, 0 ; has click at start
+ bus_mix("main", aL*kamp, aR*kamp)
+endin
+
+
+instr sequencer_s7
+ idiophone_change()
+ schedule("phrase_dropstretch1", 0, i(gkseq_beattime) * 1.5 * i(gkmel_section_change_due), random(0.5, 1.5), 1, 1, 8)
+ if (gkmel_section_change == 1) then
+ schedulek("phrase_idiophone_stretch2", 0, mel_length:k()*1.3, 0)
+ schedulek("phrase_waterbubbler1", 0, mel_length:k(), 1)
+ endif
+
+ aL, aR bus_read "note_idiophonestretch2"
+ bus_mix("delay1", aL*0.2, aR*0.2)
+ bus_mix("main", aL*0.8, aR*0.8)
+ transition_out("transition_idiophone_randtime")
+endin
+
+
+instr sequencer_s8
+ pause_melprogression()
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(p3*0.1, p3*0.3)
+ idur = (idur + itime > imaxlen) ? imaxlen - itime : idur
+ schedule("phrase_dropstretch1", itime, idur, random(0.5, 1.5), 1, 1, 0.5)
+ if (random(0, 1) > 0.5) then
+ schedule("phrase_dropstretch1", itime + random(0, 5), idur, random(0.5, 1.5), 1, 1, 2)
+ endif
+
+ if (random(0, 1) > 0.5) then ; no reson
+ schedule("phrase_dropstretch1", itime + random(0, 5), idur, random(0.5, 1.5), 0, 1, 1)
+ endif
+
+ if (random(0, 1) > 0.2) then
+ schedule("play_waterpaddling1", itime + random(0, 5), random(0.5, 6))
+ if (random(0, 1) > 0.6) then
+ schedule("play_waterpaddling1", itime + random(0, 5), random(0.5, 6))
+ endif
+ endif
+ itime += idur * random(0.5, 1.2)
+ od
+ transition_out("transition_idiophone_gliss1")
+endin
+
+
+instr sequencer_s9
+ transition_in("transition_idiophone_stretch1")
+ idiophone_change()
+ gimel_portamento_beatratio = 0.4
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(5, 20)
+ idur = (idur + itime > imaxlen) ? imaxlen - itime : idur
+ schedule("phrase_idiophone_stretch3", itime, idur)
+ itime += idur
+ od
+ transition_out("transition_idiophone_stretch1")
+endin
+
+
+instr sequencer_s10
+ transition_in("transition_idiophone_randtime")
+ gimel_portamento_beatratio = 0.4
+ schedule("phrase_idiophone_stretch4", 0, p3)
+ schedule("note_bass1", 0, p3, 0)
+
+ kmetrofreq = abs:k(oscil:k(5, 0.01)) + 0.1
+ knotemetro = metro(kmetrofreq)
+ if (knotemetro == 1) then
+ if (random:k(0, 1) > 0.8) then
+ kstart = random:k(0, 0.3)
+ schedulek("note_hybrid1", kstart, 1, mel_randomnote:k())
+ ;schedulek("_note_idiophone1", kstart, 0.1, mel_randomnote:k()+12, random:k(2, 7))
+ ;schedulek("note_drop1", kstart, 0.5)
+ endif
+ endif
+
+ kdroprollmetro = metro(0.1)
+ if (kdroprollmetro == 1 && random:k(0, 1) > 0.5) then
+ schedulek("fnmi_sineblips", random:k(0, 2), random:k(3, 10), "reverb1")
+ schedulek("phrase_droproll1", random:k(0, 2), random:k(3, 10), 1)
+ endif
+
+endin
+
+
+instr sequencer_s11
+ transition_in("transition_idiophone_gliss1")
+ ; resonated droplets
+ kmetrofreq = abs:k(oscil:k(3, 0.01)) + 0.1
+ knotemetro = metro(kmetrofreq)
+ if (knotemetro == 1) then
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0, 0.3), 1, mel_randomnote:k())
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0.3, 1), 1, mel_randomnote:k()+12)
+ endif
+ endif
+ endif
+
+ ; water droplets
+ kdroprollmetro = metro(0.2)
+ if (kdroprollmetro == 1 && random:k(0, 1) > 0.5) then
+ schedulek("phrase_droproll1", random:k(0, 2), random:k(3, 10), 0.2)
+ endif
+
+ ; subtle notes
+ if (gkmel_section_change == 1) then
+ schedulek("note_idiophonestretch1", random:k(0, 2), random:k(4, 12), mel_randomnote:k()-12, 0)
+ schedulek("note_idiophonestretch1", random:k(0, 2), random:k(4, 12), mel_randomnote:k()-12, 0)
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_idiophonestretch1", random:k(0, 2), random:k(4, 12), mel_randomnote:k()-12, 0)
+ schedulek("note_idiophonestretch1", random:k(0, 2), random:k(4, 12), mel_randomnote:k()-12, 0)
+ endif
+
+ ; paddling stretch
+ schedulek("play_waterpaddling1", random:k(0, 2), random:k(3, 15))
+
+ ; bass note
+ if (random:k(0, 1) > 0.4) then
+ klen = mel_length:k()
+ schedulek("note_bass2", random:k(0, 3), random:k(klen, klen*1.5), 0)
+ endif
+ endif
+endin
+
+
+instr sequencer_s12
+ kmetrofreq = abs:k(oscil:k(3, 0.01)) + 0.1
+ knotemetro = metro(kmetrofreq)
+ if (knotemetro == 1) then
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0, 0.3), 1, mel_randomnote:k()-12)
+ endif
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0.3, 1), 1, mel_randomnote:k())
+ endif
+ if (random:k(0, 1) > 0.5) then
+ kstart = random:k(0.3, 1)
+ schedulek("note_hybrid1", kstart, 1, mel_randomnote:k()+24)
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_drop1", kstart, 1)
+ endif
+ endif
+ if (random:k(0, 1) > 0.9) then
+ schedulek("phrase_dropstretch1", random:k(0, 3), random:k(4, 7), 2, round:k(random:k(0, 1)), 1, 2)
+ schedulek("note_bass2", random:k(0, 3), random:k(4, 5), 0)
+ endif
+ endif
+ schedule("phrase_droproll1", 0, 1, 2.4)
+endin
+
+
+instr sequencer_s13
+ if (random(0, 1) >= 0.5) then
+ pause_melprogression()
+ endif
+ idiophone_change()
+ iplayidiophone = round(random(0, 1))
+ kmetrofreq expseg 0.3, p3, 20
+ knotemetro = metro(kmetrofreq)
+ if (knotemetro == 1) then
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0, 0.3), 1, mel_randomnote:k()+12)
+ if (iplayidiophone == 1 && active:k("note_idiophonestretch1") == 0) then
+ schedulek("note_idiophonestretch1", random:k(0, 2), random:k(1, 3), mel_randomnote:k()-12, 0)
+ endif
+ endif
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_hybrid1", random:k(0.3, 1), 1, mel_randomnote:k())
+ endif
+ if (random:k(0, 1) > 0.5) then
+ kstart = random:k(0.3, 1)
+ schedulek("note_hybrid1", kstart, 1, mel_randomnote:k()-12)
+ if (random:k(0, 1) > 0.5) then
+ schedulek("note_drop1", kstart, 1)
+ endif
+ endif
+ endif
+ schedule("phrase_droproll1", 0, 1.3, 2.4)
+endin
+
+
+instr sequencer_s14
+ gimel_portamento_beatratio = 0.2
+ imaxlen = p3
+ iplaydrops = round(random(0, 1))
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(5, 20)
+ idur = (idur + itime > imaxlen) ? imaxlen - itime : idur
+ schedule("phrase_hybridstretch1", itime, idur)
+ if (iplaydrops == 1) then
+ schedule("phrase_droproll1", itime, idur, 0.4)
+ endif
+ itime += idur
+ od
+
+ ; play one music box glissando just before the next mel section change
+ kglissset init 0
+ if (kglissset == 0 && gkmel_section_change == 1) then
+ schedulek("phrase_idiophone_gliss1", mel_length:k()-0.5, 1, 3)
+ kglissset = 1
+ endif
+
+ ; water transition out
+ transition_out("transition_droplets1")
+endin
+
+
+instr sequencer_s15
+ transition_in("transition_idiophone_gliss1")
+ idiophone_change()
+ pause_melprogression()
+
+ ;schedule("phrase_idiophone1", 0, p3, 0)
+ schedule("phrase_hybrid2", 0, p3, 0)
+ transition_out("transition_waterbubbler1")
+endin
+
+
+instr sequencer_s16
+ idiophone_change()
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ idur = random(5, 20)
+ idur = (idur + itime > imaxlen) ? imaxlen - itime : idur
+ schedule("phrase_hybrid1", itime, idur)
+ itime += idur
+ od
+ transition_out("transition_idiophone_gliss1")
+endin
+
+
+instr sequencer_s17
+ pause_melprogression()
+ imaxlen = p3
+ itime = 0
+ while (itime < imaxlen) do
+ schedule("note_idiophone_randtime", itime+random(0, 1), random(2, 5))
+ schedule("note_idiophone_randtime", itime+random(0, 4), random(2, 5))
+ schedule("play_waterpaddling1", itime+random(0, 1), random(1, 2))
+ itime += random(5, 20)
+ od
+
+ schedule("phrase_dropstretch1", 0, p3, 1, 1, 1, 1)
+ schedule("phrase_dropstretch1", 0, p3, 2, 1, 1, 0.5)
+ transition_out("transition_droplets1")
+endin
+
+
+
+#end