add examples

This commit is contained in:
2025-09-27 23:12:09 +02:00
parent a3c8e198a7
commit 940dd06b83
68 changed files with 2064 additions and 0 deletions

16
examples/ameliewaltz.js Normal file
View File

@@ -0,0 +1,16 @@
setDefaultVoicings('legacy')
stack(
n("[0@2 ~, ~ [[1,2,3] ~]!2]")
.chord("<[Dm Am]!2 [F C]!2>/4")
.anchor("<[B3 G3]!2 [C4 B3]!2>/4")
.voicing().velocity(0.5)
,
n("<[3@5.5 2@0.5 1@3 0@3] [3@3.5 [4 3 2 1 2]@2.5 1@3 0@3] [2@5.5 1@0.5 -3@6]!2>/4")
.scale("a4:minor")
).s("gm_harmonica").lpf(4000).clip(1)
.attack(0.1).release(0.1)
.room(1.5)
.cpm(64).gain(.6)
.pianoroll()

23
examples/anniesroom.js Normal file
View File

@@ -0,0 +1,23 @@
// "Up In Annie's Room" (work in progress)
// song @by The Sea Nymphs
// script @by eefano
setcps(90/60)
const split = register('split', (deflt, callback, pat) =>
callback(deflt.map((d,i)=>pat.withValue((v)=>Array.isArray(v)?(i<v.length?v[i]:d):(i==0?v:d)))));
c: "<0@32 1@24>/2".pickRestart([
"<Bm@3 G Em A Em D G@2 A Em D G A Em>/2",
"<C#m G A# F E B Em G@3 D# Dm A C#m G B A G A G A G A G>/2"])
.layer(x=>x.chord().anchor('b4').voicing().s("gm_reed_organ").attack(0.1).release(1.5).room(1).rsize(4).gain(0.4),
x=>n("<0!32 [0,1,2,3,4]!24>/2").chord(x).anchor('c3').mode('root').voicing().s("gm_church_organ").room(1).rsize(4).gain(0.4),
x=>n("<[0,[~ 1@20],[~@2 2@20],[~@3 3@20],[~@4 4@20]]>/2").chord(x).anchor('e4').voicing().s("gm_acoustic_guitar_nylon").room(0.6).gain(0.5))
v: "<0@16 1@16 2@24>/2".pickRestart([
"<f#3 ~ d3 e3 ~ e3 ~ f#3 ~ f3:-2 ~ d3@7 ~@14 d3@2 ~ b3 ~ b3 ~ e3@7 ~@18>*2",
"<f#4 ~ d4 e4 ~ e4 ~ f#4@4 d4:-4@7 ~@14 d4@2 ~ b4 ~ b4 ~ e4@7 ~@18>*2","<~>*2"])
.split([0,0],(x)=>note(x[0]).penv(x[1]))
.patt('0.4').s("gm_choir_aahs:5").room(1).gain(1)
//d: s("<hh>")

View File

@@ -0,0 +1,36 @@
// "Another Satellite" (work in progress)
// song @by XTC
// script @by eefano
setcps(119/60)
samples({'gtr': {'g3': 'https://cdn.freesound.org/previews/705/705412_11110011-lq.mp3'}})
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
gtr: "<~ 0:.6@2 1:.6@8 2@2 3@2.5 1:.6!2>/16".split([0,1],(y)=>y[0].pickRestart([
"<bb2@7 eb3>/2",
"<[bb2@3 eb3]!2 [c#3 f#3] [e3 d3] [g2@3 f3] [bb2@3 eb3] g2@2 >/8",
"<a3 g3 a3 f3 g3 f3 g3 e3>/4",
"<a3 g3 a3 f3 g3 f3 c3@4>/4"
]).s('gtr').begin(.045).end(.5).clip(1).note().gain(.9).room(2).gain(.8).velocity(y[1]))
vox: "<~@3 0:0.6@8 1 2 1 3@1.5 ~!2>/16".split([0,1],(y)=>y[0].pickRestart([
`<~ d4:.7!3 d4:1 c4:.7!4 ~ f4 ~ d4@2:1 c4:1 bb3 ~ d4:.7!3 d4:1 c4:.7!4 d4!2 f4 d4!2 d4:1 db4 db4@3:1 ab3 ab3@2 ~@2
[db4!3]@6 db4 db4@2:1 d4 d4 ~ d4 ~@3 d4@2 d4 d4@2 d4 e4 d4@3 b3 b3@2:1 a3:1 g3@2 ~
~ d4 d4@2 c4!3 c4@2 f4 d4@2:1 c4:1 bb3@3:1 g3:1 f3@2:1 c4@4:1:4 c#4@10:1 ~@22>*2`,
`<~@4 e4@4 e4@3 d4 db4@2:1 b3@2:1 a3@4:1 a4@3 a4!2 e4 e4@3:1 d4:1 c4@2>*2`,
`<~@4 d4@4 d4@3:1 c4:1 b3@2 a3@2:1 c4@4:1:4 b3@4:1:-1 ~@4>*2`,
`<~@4 [d4:1 e4:1 d4:1 c4:1 b3:1 a3]@12 c4:1:4@8 d4:1:2@8 a3:1:-4@8 ~@8>*2`,
]).split([0, .9, 0], (x) => note(x[0]).clip(x[1]).penv(x[2])).patt('.2').s('gm_oboe').lpf(30000).room(.5).gain(1.7).velocity(y[1]))
.superimpose(x=>x.late(2).gain(0.5).pan("<0 1>/16").room(1.5))
faf: "<~@62 [0,1]@8 >/4".pickRestart([
`<~ d4:.5!2 d4@2:1 c4:.5!3 c4 ~ f4 ~ d4@2:1 c4:1 bb3 ~@2 d4:0.5 d4@2:1 c4:.5 c4:1 bb3:.5 bb3@2:1 f3@2:1 c4:1:4@3 ~ >*2`.pan(.3),
`<~ f4:.5!2 f4@2:1 eb4:.5!3 eb4 ~ bb4 ~ f4@2:1 eb4:1 d4 ~@2 f4:0.5 f4@2:1 eb4:.5 eb4:1 d4:.5 d4@2:1 bb3@2:1 eb4:1:4@3 ~ >*2`.pan(.7),
]).split([0,.9,0],(x)=>note(x[0]).clip(x[1]).penv(x[2])).patt('.2').s('triangle').lpf(30000).room(.5).gain(0.2)
$: s("<hh*2>").bank("RolandMT32").gain(.05).room(.2)
$: s("<bd ~ ~ <bd ~>>*2").bank("RolandMT32").gain("<0.4 0.2>").room(.2)
$: s("<[[~ ~ rim]!5]@15 ~>*2").bank("RolandMT32").gain(.2).room(.2)

View File

@@ -0,0 +1,38 @@
// "Appealing to Venus"
// song @by The Sea Nymphs
// script @by eefano
setDefaultVoicings('legacy')
const chords = `<Cm@2 Ab@2 Db@2 Cm F Bb C@2 F Bb C@2 F Bb Eb Dm [Cm Dm] [Eb ~] Eb Dm [Cm Dm] [Eb ~]
C@2 Ab Eb Ab A E B Db Cm [Bbm Cm] [Db ~] Db Cm [Bbm Cm] [Db ~]>/2`
stack(
// melody
`<
~@2 c5 d5@2 eb5 d5@3 c5@2 g#4@3 eb5@8 ~@2
~@2 c#5 d#5@2 f5 d#5@3 c#5@2 d#5@3
d#5@3 f5@3 a5@3 a#5@3 a#5@3 g5@6 f5 e5@4
~ e5 f5@2 a5@3 a#5@3 a#5@3 g5@6 f5 e5@4
~ e5 f5@2 a5@3 a#5@3 a#5@3
g5@7 f5@6 d#5@3 f5@3 g5@6
~@24
e5@2 e5@3 f5@3 g5@3 g#5@3 g5@3 g5@3 c6@3
c6@3 c6@3 c#6@3 b5@3 [f#5 g#5 f#5@3]@3 e5@3 b5@3 b5@3
g#5@7 d#5@6 c#5@3 d#5@3 f5@6
~@24
>*3`.note().clip(0.95).s('gm_oboe').gain(0.5)
,
// second voice
`<
~@150
c5@2 c5@3 d5@3 e5@3 d#5@3 d#5@3 c5@3 g5@3
g5@3 g5@3 g#5@3 e5@3 [c#5 d#5 c#5@3]@3 b4@3 f#5@3 f#5@3
c#5@7 c5@6 a#4@3 c5@3 c#5@6
~@24
>*3`.note().clip(0.95).s('gm_oboe').gain(0.5)
,
chords.rootNotes(2).note().s('gm_bassoon').lpf(400).gain(0.5),
chord(chords).anchor("C5").voicing().struct("x").piano().gain(0.4),
chord(chords).anchor("E5").voicing().s('gm_drawbar_organ').gain(0.15),
).cpm(120).room(0.5)//.pianoroll()

View File

@@ -0,0 +1,20 @@
// "Aztec Challenge"
// song @by Paul Norman
// script @by eefano
setcps(180/60)
let parts =
{a1:n("<0>/32")
,a2:n("<-7>/32")
,a3:n("<-14@5 [4 7]*5 4@2 >/4")
,b:n("<0 ~@3 0 ~ 0 ~>*4".sub(7))
,c1:n("<0@2 2 1 1b@2 3 2>")
,c2:n("<<0 1b> 5 4 3 4 5 4 3>*2")
,d1:n("<0@2 2 1 1b@2 3 2>/2")
,d2:n("<<-7 -6b> -2 -3 -4 -3 -2 -3 -4>")
,e1:n("<0 ~ 0 1 0 ~ 0 1 0 ~ 0 1 2 1 0 -1 1 ~ 1 2 1 ~ 1 2 1 ~ 1 2 1 0 -1 -2#>*2")
,e2:n("<-2@2 4b ~ 2@2 4b 5 >*2")
,e3:n("<2@3 3 3#@3 4 7@2 6 5# 3#@3 4 7@2 6 5# 3#@3 1 0@8>/2")
}
sid1: "<a1@2 ~ b c1@2 b a1@2 e1@3 e2 e1@3 e2 e1@3 e2 e1@3 e2>/16".pickRestart(parts).scale('a1:minor').s('gm_lead_2_sawtooth').lpf(4000).color('yellow').gain(0.9)._scope()
sid2: "<a2@2 b@2 c2@2 d1 a2@2 e1@3 e2 e1@3 e2 e1@3 e2 e1@3 e2>/16".pickRestart(parts).scale('a2:minor').s('sawtooth').lpf(3000).color('cyan')._scope()
sid3: "<a3@2 ~@2 b@2 d2 a3@2 ~@4 e3@4 e3@4 e3@4>/16".pickRestart(parts).scale('a4:minor').s("<triangle@17 sawtooth@8>/16").color('magenta')._scope()

47
examples/bennington.js Normal file
View File

@@ -0,0 +1,47 @@
// "Bennington" (work in progress)
// composed @by John Maus
// script @by eefano
setcps(135 / 60 / 4)
bass: "<0@3 1 0 1@2 0@2 0*4 [2@25 3@7]@2 0 [0 ~@31]>/8".pickRestart([
n("<7!3 [4 6] 7*2 7!2 6 9!3 [6 9] 11*2 11!2 10>*4"),
n("<[9*2 9!2 [6 7]]!2 [11*2 11!2 [6 7]] [11 12# 13 14] >"),
n("<[~ 9 12!2]!2 [~ 9 10!2] [~ 7 10!2] [7!2 14!2] [~ 7 11!2]!2>*2"),
n("<[~ 6 13!2]!3>*2")
]).scale('c1:minor').s('sawtooth').clip(.95).lpf(300).lpe(1).gain(1).room(.2)
gneeow: "<0 ~@3 0 ~@4 ~ ~@2 0 1>/8".pickRestart([
n("<~ [4,7,9]@3 ~@4>*2"),n("<[4,7,9]@2 ~@6>")
]).scale('c5:minor').s('sawtooth').vib(4.5).vibmod(.4).gain(1).room(.8)
dindin: "<~ 0@2 ~@4 0@2 ~@5>/8".pickRestart([
n("[1 2]*4").pan("[.45 .55]*4")
]).scale('c6:minor').s('square').att(0).dec(.5).rel(.3).gain(.15)
pads: "<5 ~@2 0 1 0@2 ~@2 2 [3@25 4@7]@2 ~@2>/8".pickRestart([
n("<[2,4,6] [-3,-1,1]>/2").lpf(1500).att(.4).rel(.5).gain(.7),
n("<~@4 11 [9 10] 8 -1 [0@3 ~]@2 ~@2 11 [9 10] 8 13 >*2").lpf(1500).att(.4).rel(.5).gain(1.2),
n("<[-3,0,2] [-3,-1,1]>/2").lpf(1500).gain(.5),
n("<[5,7,9]@2 [5,7,10]@2 [[4,7,9] [4,7,8] [4,6]]@3>*2").gain(1),
n("<[6,8,10]@3 ~@4>*2").gain(1),
n("<0>").gain(0) // preload
]).scale('c4:minor').s('gm_pad_warm').room(.4)
voice: "<~ 0 1 2 ~ 2 2*2 0 1 ~ [3@27 ~@5]@2 ~@2>/8".pickRestart([
n("<~@3 [2 2@3]@2 3 4 [5 6@3]@2 7 [8 6] [~ 4@3]@2 ~@9 [4 3@3]@2 4 3 4 [5 6@3]@2 [7 8@3]@2 ~>*4").gain(.4),
n("<~@5 4 [4 ~] [3 ~] [4 6@2 4@5]@4 ~@7 [2 2@3]@2 3 4 [5 6@3]@2 ~@4 >*4").gain(.4),
n("<~@4 6 7 8 [6 4@3]@2 ~@10 4 [6 7@2 8@2 6@2 4@3]@5 ~@7>*4").gain(.5),
n("<9 ~ 7 ~ 11 8 ~ ~ [9 10 9] 7 ~ 11 8 ~>*2").gain(.8).delay(.4).dt(.3).dfb(.75)
]).scale('c3:minor').s('pulse').clip(.9).layer(x=>x.pan(.2),x=>x.late(.02).pan(.8)).room(.5)
drums: "<[0,1,2] 2@2 [0,2] [0,1,2] [0,2]@2 2@2 [2,[~ 1*2]] 2@2 [0,1,2] ~>/8".pickRestart([
"<[~ <~@3 bd ~@4>]>*4", "<~ <cp ~> ~@6>*4", "<bd sd>*4"
]).pickOut({
bd:s('linndrum_bd').lpf(3000).room(.2).gain(.8),
sd:s('linndrum_sd').room(.2).gain(.65),
cp:s('cp').velocity(2).room(1)
})
all(x=>x
//.ribbon(13*8,1*8)
)

17
examples/bigship.js Normal file
View File

@@ -0,0 +1,17 @@
// "Big Ship (Coda)"
// song @by Cardiacs
// script @by eefano
setDefaultVoicings('legacy')
const progr = "<Am!2 D F Am D@2 Am!2 A# Am E@2 C F Am D@4>".fast(2);
const anchr = "<A5 F5 F5 F5 F5 G5@2 A5 F5 G#5 F5 E5@2 E5 F5 F5 G5@4>".fast(2);
stack(
n("-2 -1 0 2 0 1").chord(progr).anchor("G5").voicing().s('gm_violin').clip(1).gain(0.3).room(0.1)
, chord(progr).anchor(anchr).voicing().s('gm_drawbar_organ').clip(1).gain(0.9).room(0.3)
, chord(progr).rootNotes(1).struct("x*2").s('gm_electric_bass_finger').clip(1).gain(1)
, s("[bd!2 ~ bd]*2").bank("AkaiLinn").lpf(200).gain(0.35)
, s("[~ <[sd ~ ~ sd] sd>]*2").bank("AkaiLinn").hpf(250).lpf(4000).gain(0.30)
, s("oh*4").gain(0.15)
).cpm(120/4).room(0.3)//.pianoroll()

6
examples/bluemonday.js Executable file
View File

@@ -0,0 +1,6 @@
stack(
s("bd!2 [bd*4]!2 bd!4").slow(8).bank("SequentialCircuitsDrumtracks"),
s("~ hh").bank("SequentialCircuitsDrumtracks"),
n("<[[2 ~] [2 ~] 2 3] [[3 ~] [3 ~] 3 3]>@4 [-1 ~] -1 -1 [0 ~] 0 0 [0 ~] 0 0 [0 ~] 0 0").slow(8).scale("d2:minor").s("gm_lead_8_bass_lead")
).cpm(130)

27
examples/breakfastline.js Normal file
View File

@@ -0,0 +1,27 @@
// "Theme from The Breakfast Line"
// song @by Cardiacs
// script @by eefano
const maj = "[0,4,7]"
const imaj = "[0,4,-5]"
const melody =`[
c#6@2 f5 c6@3 a#5 a5@2 g5@3 c#5 e5@2 d#5@2 f#5 a5@3 a5@3
a5 g5 f5 d#5 c#5 b4 a5@3 a5@3 f5 g5 a5 a#5 g#5 g5 f5 g5 a5 b5 d5 g5
c#5@2 b4 f5@3 c#5 d#5 f5 g5 c#5@2 c5@3 c#5@3 c#5@6
c#5 g#5 g5 a#4 f5 d#5 c#5 c5 g#5 c#5 c5 b4 c#5@2 b4 a5@3 c#5 b4@2 a5@6
b5 g5@2 e5 a5 b5 b5@6 b5 a#5 g5 a5@3 b5 g5 d5 c#5 a5@2 b5 g5 d#5 c#5 a5@2
g5@2 d#5 f5 d#5 c#5 b4 a4 g4 a4 b4 c#5 d#5 f5 g5 ]/24`.clip(0.93)
stack(
// melody
melody.note().transpose( 0).s('gm_overdriven_guitar').pan(0.45).gain(0.70),
melody.note().transpose(-12).s('gm_overdriven_guitar').pan(0.55).gain(0.80),
// chords
"<C#4 D#4 F4 G4 A3 B3>*2".add(imaj)
.note().s('gm_string_ensemble_2').gain(0.6),
// bass
"<C#2 D#2 C2 D2 A1 B1>*2".clip(0.90)
.note().s('gm_electric_bass_finger').gain(0.7),
// drums
s("<[bd ~ bd sd ~ bd]!23 [sd*6]>").bank("AkaiLinn").gain(0.30),
s("hh*6").gain(0.10)
).cpm(76/2).room(0.6)//.pianoroll()

24
examples/budsandspawn.js Normal file
View File

@@ -0,0 +1,24 @@
// "Buds And Spawn" (work in progress)
// song @by Cardiacs
// script @by eefano
const i_chords = x => x.s("recorder_tenor_sus").clip(1).decay(1.2).sustain(0).release(0.5)
const i_sax = x => x.s("sax").gain(0.3).clip(1).release(0)
const i_bass = x => x.s("triangle").clip(1).release(0.1)
const i_drums = x => x.bank("YamahaRY30").clip(1).gain(0.08)
const i_piano = x => x.piano().gain(0.2)
const I_chord = n("[0,2,4]")
const p_up = n("[-5@0.5 -4 -3 [-2 -1] 0 1 2@0.5]").clip(0.7)
const p_dw = p_up.rev()
function stackme(sc, chordpart, saxpart, drumpart) {
return stack(chordpart.scale(sc).apply(i_chords), saxpart.scale(sc).apply(i_sax), s(drumpart).apply(i_drums))
}
const s1=stackme("f#:major" ,I_chord,p_up,"cr,bd")
const s2=stackme("a#:major" ,I_chord,p_up,"[bd sd bd*2 sd bd*2 sd]")
const s3=stackme("b:whole:tone",I_chord,p_dw,"[sd@0.5 sd sd [ht ht] lt lt bd@0.5]")
const s4=stackme("f#:major" ,I_chord,p_up,"[bd sd [~ bd] sd bd sd],hh*6")
arrange([3,s1],[1/1.2,s2.fast(1.2)],[1/1.3,s3.fast(1.3)],[4,s4]).cpm(165/4)
//.pianoroll()

62
examples/bugfromheaven.js Normal file
View File

@@ -0,0 +1,62 @@
// "Bug From Heaven (wip)"
// song @by Tim Smith
// script @by eefano
setcps(108/60/2)
const standardtuning = [40,45,50,55,59,64];
const fingering =
{A:"0:0:2:2:2:0",Am:"0:0:2:2:1:0",A7:"x:0:2:0:2:0",D:"x:0:0:2:3:2",Dm:"x:0:0:2:3:1",D7:"x:0:0:2:1:2",
E:"0:2:2:1:0:0",Em:"0:2:2:0:0:0",E7:"0:2:2:1:3:0",G7:"3:2:0:0:0:1",C:"x:3:2:0:1:0",
// guitar only chords
Dx:"x:0:0:2:3:2",Ds:"x:0:0:1:3:0",
Ax:"0:0:2:2:2:0",Amx:"0:0:2:2:1:0",
Ex:"0:2:2:1:0:0",Emx:"0:2:2:0:0:0",
};
const gstrum =
{u:"<[[1,[~ 3@10],4]@2 ~]!2 [1,4,5]>*3",
v:"<[[0,[~ 3@10],5]@2 ~]!2 [0,3,4]>*3",
w:"<[[1,[~ 3@10],4]@2 ~]!2 [1,2,3]>*3",
x:"<[1,[~ 2@50],[~ ~ 4@50]] ~@3>/4",
z:"<[[3,4,5] ~]*2>",
k:"<[[2,3,4] ~]*2>",
n:"~"
};
const bstrum = {u:"<[1 2]>", v:"<[2 1]>", w:"<[1 0]>", x:"~", z:"~", k:"~", n:"0"};
const gString = register('gString', (n, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+standardtuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=standardtuning) => (strums.pickOut(
[fingers.pickOut(fingering).gString(0),fingers.pickOut(fingering).gString(1),fingers.pickOut(fingering).gString(2)
,fingers.pickOut(fingering).gString(3),fingers.pickOut(fingering).gString(4),fingers.pickOut(fingering).gString(5)]));
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
gtr: "<~@2 [[0 1]!2]@16 2@3 3@13 4@3 3@4 5@2 3@13 4@3 3@4 5@2 3@4 3@2 6@11 3@4 5@2 3@13 4@3 3@4 5@2 3@4 3@2 6@11 3@4 5@2 7@8 [[0 1]!2]@16 8@5>"
.pickRestart([
"<Am:u:6 E:v:5 Am:u:4 E:v:3>","<Am:u:2 A:w:7>","<Am:u:2 E:x A:x>",
"<Dx:z Ds:z>","<Ax:z Emx:k:2 Ax:z:2>","<Ax:k:2 Ex:z:5>",
"<A:n:2 E:n A:n E:n E:n:4 A:n:4 E:n:2 E:n:6 A:n:6 A:n:11 E:n:9>",
"<E:k:2!3 A:k:1 E:k:5!3 A:k:2 >",/* 157 */"<Am:u:2 E:x@2 ~@2>"
]).split([0,0,0],s=>s[0].layer(
x=>guitar(s[1].pick(gstrum),x).s("gm_acoustic_guitar_steel:1").release(.1).gain(.75).room(.5).hpf(300).lpf(5000).late(1/64),
x=>guitar(s[1].pick(bstrum),x).s("gm_pizzicato_strings:1").transpose(-12).release(.1).gain(.65).room(.6).lpf(1000),
x=>chord(x).anchor("g5").voicing().s("gm_string_ensemble_1").gain(.15).room(1).layer(p=>p.pan(1),p=>p.pan(0).late(.1))
).transpose(s[2]))
vox: "<~@25 0@22 0@22 1@13 2@10 0@22 1@13 3@8 ~@30>".pickRestart([
"<f#4@2 f#4@3 [e4!2]@6 [f#4!2]@6 g#4@19 f#4@2 f#4@3 [e4!2]@6 [f#4!2]@6 c#4@13 b3@3 f#3@13 ~@100>*6",
/*69*/"<f#4@2 f#4@3 [e4!2]@6 [f#4!2]@6 [g#4!2]@6 [a4!2]@6 [g#4!3]@9 d#4@3 [f4!2]@6 [f#4!2]@6 [f4!2]@6 [d#4!4]@12 c#4@3 f4@3 f#4@3>*6",
/*82*/"<f#4@2 f#4@3 [e4!2]@6 [f#4!2]@6 b3@16 c#4@3 d4@12 ~@100>*6",
/*127*/"<f#4 e4 [d4@2 ~] e4 [f#4@2 ~] a4 f#4@2>"
]).s("sawtooth").note().attack(.05).release(.05).gain(.30).hpf(500).clip(0.95)
drm: "< 0@2 [0,1]@17 2 ~ 0@32>".pick([
s("<rd>*2"),
s("<~ sd>*2"),
s("<rd>")
]).bank("BossDR110").room(1).lpf(1800).gain(.6)
uff: "<[gm_acoustic_guitar_steel:1,gm_string_ensemble_1,gm_pizzicato_strings:1] ~@1000>".gain(0)

71
examples/bustybeez.js Normal file
View File

@@ -0,0 +1,71 @@
// "Busty Beez" (work in progress)
// song @by Cardiacs
// script @by eefano
setcps(182 / 60 / 8)
const beez = `<~@8
i@28 j@18 k@5 l@2 m@30 n@22 o@22
i@28 j@18 k@5 l@2 m@30 n@22 o@22
n@22 m@30 k@5 l@2 k@5 p@16
i@28 j@18 j@18 k@5 l@2 m@30 k@5 l@2 m@30 n@22 o@22
i@28 j@18 k@5 l@2 m@30 n@22 o@22
i@28 j@18 k@5 l@2 m@30 n@22 o@22
n@22 m@30 k@5 l@2 k@5 p@16
i@28 j@18 j@18 k@5 l@2 m@30 k@5 l@2 m@30 n@22 q@6 p@16
i@28 j@18 j@18 j@18 j@18 j@18 j@18 j@18 j@18 ~@18 >`
const melody = {
i: "<b4@3 c5 g4@2 g4 f4 c#4 c#4@2 a4@2:4 a4 b4@2 b4 f#4 d#4 b3 c4 d#4 g#4 c5@2 c#5 c#4@2>",
j: "<d4 c#4 b3 b3 b4@2 a4 g4 f4 d#4 d#4 c#4 b3 g4@2 f4 d#4 c#4>",
k: "<c#4 c4@2 a#3@2>",
l: "<f#4@2>",
m: "<e4@2 a3@2 g#3 a#3 c4 c#4 d4 e4 f#4 [g#4 ~] g#4@2 a#4@2 c5@2 c#5@2 c5@2 f#4@2 g4@5 ~>",
n: "<g4 d4 b3 c#4 d#4 c#4 c4 a#3 a#3 d4 g4 g#4@2 a#4@2 a#4@2 f4 d4@2 g#4@2>",
o: "<g4@6 g4@12 g#4 d#4 a#4 b4>",
p: "<g4@4 g4@4 g4@3 g4 g#4 d#4 a#4 b4>",
q: "<g#4@2 g4@4>" }
const ch0rds = {
i: "<G@3 C@3 C#@3 A@4 F@3 B@4 G#@5 F#@3>",
j: "<G@10 A@8>",
k: "<F#@5>",
l: "<D@2>",
m: "<A@4 C#@4 D@4 E@2 A#@4 A@2 F@2 B@2 D#@6>",
n: "<G@2 B@3 F#@3 Gm@3 E@4 D#m@2 Dm@3 C#@2>",
o: "<C#@6 D#@4 C#@4 G@4 E B F# B>",
p: "<D#@4 C#@4 G@4 E B F# B>",
q: "<C#@6>" }
const drums = {
i: "<[bd,cr]@3 bd sd@2 bd@2 sd bd@2 sd@2 sd [bd,cr]@2 [bd,cr]@2 sd@2 bd!2 sd@2 sd [bd,cr]@2 sd>",
j: "<[bd,cr]@2 sd@3 bd sd [sd,mt] [sd,lt]!2 [bd,cr]@2 sd@3 bd@2 sd>",
k: "<[bd,cr] bd sd bd sd>",
l: "<[bd,cr]@2>",
m: "<[bd,cr]@2 sd@2 bd!2 sd@2 bd!2 sd@2 bd sd [bd,cr]@2 sd bd sd bd [bd,cr]@2 [bd,cr]@2 [bd,cr]@2 sd bd [sd,mt] lt>",
n: "<[bd,cr]@2 sd@3 bd@3 sd@2 bd sd@2 bd@2 bd@2 sd bd@2 [bd,cr]@2>",
o: "<sd@2 sd [bd,cr]!2 ~ [bd,cr]@2 sd bd [sd,mt] bd [bd,cr]@2 [bd,cr]@3 sd!2 [sd,mt] [sd,lt]!2 >",
p: "<[bd,cr]@2 sd bd [sd,mt] bd [bd,cr]@2 [bd,cr]@3 sd!2 [sd,mt] [sd,lt]!2>",
q: "<sd@2 sd [bd,cr]!2 ~>" }
const colors= {i:'white',j:'yellow',k:'cyan',l:'green',m:'red',n:'salmon',o:'magenta',p:'orange',q:'lightgrey'}
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
$: beez.pickRestart(melody).split([0,0],s=>note(s[0]).penv(s[1])).patt(.1).clip(.98)
.layer(x=>x.s("gm_overdriven_guitar:3").vib(10).vibmod(.09).delay(.4).dt(.2).dfb(.30).gain(1),
x=>x.transpose(12).s("gm_pad_bowed:1").gain(.4))
$: chord(beez.pickRestart(ch0rds)).anchor('F4').voicing()
.layer(x=>x.s("gm_church_organ:3").pan(.40).gain(.4),
x=>x.s("gm_brass_section:1").pan(.55).gain(.7))
$: beez.pickRestart(ch0rds).rootNotes(2).note()
.s("gm_electric_bass_pick:2").lpf(200).gain(.6)
$: beez.pickRestart(drums).pickOut({
bd:s('bd').velocity(.55).lpf(500),
sd:s('sd').velocity(.55).hpf(200),
cr:s('cr').velocity(.1).pan(.55),
mt:s('mt').velocity(.3).pan(.6),
lt:s('lt').velocity(.2).pan(.7)}).bank("linn9000").speed(.95).gain(.7)
$: s("<r8_rd:1>").speed(1.1).hpf(4000).gain(.1)
all(x => x.room(.2)
//.color(beez.pick(colors))
.fast(8)
)

23
examples/byebyespirit.js Normal file
View File

@@ -0,0 +1,23 @@
// "Bye Bye Spirit" (Work In Progress)
// song @by The Sea Nymphs
// script @by eefano
setDefaultVoicings('legacy')
setcps(140/60*3/4/3)
const ch = ["<Cm A# D# D E F C A E G# C# Cm F Cm F>",
"<A@8 ~ Em A G C B ~ A G C B ~ A G D Em ~ G D Em ~ ~>"]
const bs = ["<c2 a#1 d#2 d2 e2 f2 c2 a1 e2 g#1 c#2 c2 f2 c2 f2>"
,"<a1 g1 f#1 f1 a1 g1 f#1 f1 ~ e2 a1 g1 c2 b1@2 a1 g1 c2 b1@2 a1 g1 f#1 e2@2 g1 f#1 e2@2 ~>"]
const me = ["<g4@2 ~ a#4@2 ~ g4@2 ~ f#4 d4 a3 g#3 b3 e4 a3 c4 f4 e4@4 ~@2 e4 b3 g#3 g#3 c4 g#4 f4 c#4@2 d#4 d4 c4 a3@2 ~ g4@3 a3@3>*3"
,`<[a3 b3 c#4] g3 c#4 g3 [a3 b3 c#4] [g3@2 b3] c#4 g3 ~
[e4 ~ e4] [a3 ~ a3] [b3 ~ b3] [[g3@4 f#3]@2 e3] b3 ~
[a3 ~ a3] [b3 ~ b3] [[g3@4 f#3]@2 e3] b3 ~ g3 b3@2 ~ g3 b3@2 g3 ~ ~ >`]
piano: "<0@30 1@30>".pickRestart(ch).chord().anchor("e4".add("<~ -2 2>*3")).voicing().struct("<~ x x>*3").piano().room(0.8).gain(0.4)
bass: "<0@30 1@30>".pickRestart(bs).note().piano().room(.8).gain(0.6)
bowed: n("<0 1 2 2 1 0>*3").chord("<~@15 0@15 ~@30>".pickRestart(ch)).anchor("g5").voicing().s('gm_pad_bowed').sustain(0.4).room(0.7).gain(0.5)
voice: "<0@30 1@30>".pickRestart(me).transpose(12).s('triangle').note().room(0.6).attack(0.05).release(0.2).gain(0.4).vmod(0.10).v(5)

22
examples/cabinet.js Normal file
View File

@@ -0,0 +1,22 @@
// "Cabinet" (work in progress)
// song @by Spratleys Japs
// script @by eefano
setDefaultVoicings('legacy')
function arr(p,l) { return [l,p.slow(l)]; }
const h1 = arr(`D@8 A F@3`,24/2);
const h2 = arr(`D@5 E C@3 A@2 B G@2 E@7 F# D@2 B C# A@2 F#@3 G# E@2`,68/2);
const h3 = arr(`C#@8 D# B@2 G# A# F#@2 D#@3 F C#@3 A# C G#@2 F@3 G D#@3 C@2 D A#@2 G@3 A F@2`,88/2);
const chords = arrange(h1,h2,h3);
stack(
chord(chords).rootNotes(3).s('triangle').lpf(400).gain(0.6),
chord(chords).anchor("E5").voicing().s('gm_drawbar_organ').gain(0.35),
s("sleighbells").struct("x*6").gain(3),
s("[bd sd]").gain(0.4).room(2),
s("rd*6").gain(0.01)
).cpm(133/8).pianoroll()

10
examples/cadenza.js Normal file
View File

@@ -0,0 +1,10 @@
// "The Cardiacs Cadence"
// script @by eefano
setDefaultVoicings('legacy')
const magic = "<G@3 Bm E@3 G#m C#@3 Fm A#@3 Dm>";
stack(
chord(magic).anchor("G4".transpose("<3 0 -3 0>")).voicing().struct("x").piano().gain(cosine.segment(16).range(0.5,1).slow(8)),
chord(magic).anchor("B5".transpose("<0 -3 6 3>/16")).voicing().s("gm_drawbar_organ").gain(0.8),
"<G2 E2 C#2 A#2>/4".transpose("<0 <-12 -8>>").struct("x!2").note().lpf(180).s("gm_electric_bass_finger").gain(1)
).cpm(120/2).room(0.5).pianoroll()

View File

@@ -0,0 +1,11 @@
let mytempo = 0
window.onkeydown = (e) => {
if (e.key === 'ArrowLeft') { mytempo -= 1; console.log(mytempo); }
if (e.key === 'ArrowRight') { mytempo += 1; console.log(mytempo); }
}
const addmytempo = register('addmytempo', (pat) => pat.withValue((v) => {
if (v.cps !== undefined) return { ...v, cps: v.cps + (mytempo / 60) };
else return v;
}));
note("c d e f").cps(100 / 60).addmytempo()

19
examples/cinghiale.js Normal file
View File

@@ -0,0 +1,19 @@
// "L'Era Del Cinghiale Bianco"
// song @by Franco Battiato
// script @by eefano
setCps(127/60/2)
setDefaultVoicings('legacy')
stack(
"<0@16 1@14 >".pickRestart(["<[0 1]!2 [0 2] [0 3]>/4","<[4!2]@14>"]).pickRestart(
["<[7 6 5 6 7 5 6 7]!2>".add("<0 1>")
,"<[9 8 7 8]*3@1.5 [9 ~!1]@0.5>"
,"<9 [~ 7 8 6]>","<9 [~ 7 8 9]>"
,"<7@3 6@3 7@5 8 9 7 5@3 6@3 7@5 ~@5>*4"
]).n().scale("c4:major").transpose("<[0 -5]@16 [[0@7 -5@8]!2]@14 >").s("sawtooth").vib(5).vmod(0.1).clip(0.85).attack(0.05).release(0.1).gain(0.6)
,"<0@16 [1!2]@14 >".pickRestart(["<[Am G C@2]!2 [Em D G@2]!2>/4","<Am@3 G@3 C@5 ~@3 Em@3 D@3 G@5 ~@5>*4"])
.chord().anchor("C4").voicing().s("triangle").lpf(1200).attack(0.01).gain(0.35)
,"<0@16 1@14 >".pickRestart(["[[bd <~!7 bd>] sd],<hh!31 oh>*4",
"<bd [sd bd] bd bd [sd bd] bd sd>*2,<hh!17 oh>*4"]).s().bank("YamahaRY30").clip(1).gain(0.4)
).room(0.4)

View File

@@ -0,0 +1,24 @@
// "The Sicilian Clan" (work In Progress)
// song @by Ennio Morricone
// script @by eefano
const chrds = "<Am@3 E Edim@2 D@3 Ddim E7@2 Am@3 [B@2 A#]@3 A@2 Am@2 E@2 Am@4>*2";
const anchr = "<E4@3 E4 E4@2 D4@3 D4 D4@2 C4@3 [B3@2 A#3]@3 A3@2 A3@2 G#3@2 A3@4>*2";
const dickt = {
'': ['0 4 7', '4 7 12', '7 12 16'], // major chords (no symbol)
m: ['0 3 7', '3 7 12', '7 12 15'], // minor chords via 'm'
dim: ['0 3 6', '3 6 12', '6 12 15'], // diminished
7: ['4 7 10'], // upper 7th
};
stack(
n("<0@12 1@2>".pickRestart(["<[~ 0 1 0 2@2]!14 [~ 0 1 2 2@2] [~ 1 4 3 4@2]>*8/6","<2 ~>"]))
.chord(chrds).dict(dickt).anchor(anchr).voicing().s("gm_electric_guitar_jazz").gain(0.8).color('red'),
n("<[2@2 ~ 2 1@2 ~@2]!4>")
.chord(chrds).dict(dickt).anchor(chrds.rootNotes(2)).voicing().s("gm_electric_bass_finger").lpf(190).gain(1).color('blue'),
"<A4@2 C5 B4 A#4@2 A4@3 C5 B4 A#4 A4@2 C5@2 B4 A#4@2 A4@2 C5 B4 A#4 A4@2 ~@2>*2"
.note().s("gm_oboe").gain(0.4).color('green'),
chord(chrds).anchor("G4").struct("x*4").dict(dickt).voicing().s("gm_synth_strings_2").gain(0.2).color('yellow'),
s("[~ rim]*2").bank("AlesisHR16").gain(0.4),
s("rd*8").note(42).bank("AkaiLinn").gain(0.08)
).cpm(120.3/4).room(0.6)//.pianoroll();

31
examples/clubbed.js Normal file
View File

@@ -0,0 +1,31 @@
// "Clubbed"
// @by eefano
setcps(162/60/3)
const standardtuning = [40,45,50,55,59,64];
const fingering =
{A:"x:0:2:2:2:0",Am:"x:0:2:2:1:0",A7:"x:0:2:0:2:0",D:"x:0:0:2:3:2",Dm:"x:0:0:2:3:1",D7:"x:0:0:2:1:2",
E:"0:2:2:1:0:0",Em:"0:2:2:0:0:0",E7:"0:2:2:1:3:0",G7:"3:2:0:0:0:1",C:"x:3:2:0:1:0",
};
const strumming =
{d: "<[1,3,4]*8>/3", u:"<[2,4,5]*8>/3"
};
const gString = register('gString', (n, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+standardtuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=standardtuning) =>
(strums.pickRestart(strumming).pickOut(
[fingers.pickOut(fingering).gString(0),fingers.pickOut(fingering).gString(1),fingers.pickOut(fingering).gString(2)
,fingers.pickOut(fingering).gString(3),fingers.pickOut(fingering).gString(4),fingers.pickOut(fingering).gString(5)]));
guy: "<0@2 1 0 1 0>/24".pickRestart(["<Am Dm>/4","<Em G7>/4"]).layer(
x=>guitar("<u d>/3",x).s("gm_electric_guitar_clean:2").clip(0.5).release(0.1).gain(0.9).room(0.2).layer(p=>p.pan(1),p=>p.pan(0).late(.01)),
x=>chord(x).anchor("g5").voicing().s("gm_percussive_organ").gain(0.8).mask("<~@3 1@6 ~@3>/12").room(.4)
)
drm: "<~ 0 [0,1]@6 [1,2]@4 [0,1]@8 1@3 ~ >/6".pick([
s("<[~ hh]*2>"),
s("<bd sd [bd [~ bd]] sd [bd <~ bd>] [[sd bd] ~]>*2"),
s("<oh:2*8>")
]).bank("RolandTR808").room(1).lpf(1800).gain(3.5)

21
examples/disto.js Normal file
View File

@@ -0,0 +1,21 @@
setcps(90/60)
g: n("<[[0,4]]*3>")
.scale("c#2:minor").s("supersaw").transpose("<0 2 [3 1]>/8")
.lpa(0).lpe(10).lpd(0.2).lpr(1).lpf("<[10 10 100]>").dist("8:0.18")
s: n("<[[5 ~]*3] 4 4b 3 [1 2 1] 0 [4 5 2] 4 >")
.scale("c#4:minor").transpose("<0 2 [3 1]>/8")
.s("supersaw").lpf(500).dist("10:0.12").room(0.2)
.mask("<0@3 1@4 >/8").hush()
d: "[<bd*3 [~ bd bd] [sd ~ bd] [mt lt bd] [[sd,[~ sd@6]] sd mt] >,<oh!4 ~>,<cr>/5]"
.pickOut({bd:s("EmuDrumulator_bd").velocity(1).lpf(1000),
sd:s("EmuDrumulator_sd").velocity(1),
oh:s("EmuDrumulator_oh").pan(0.6).speed(0.7).velocity(0.2),
mt:s("EmuDrumulator_mt").velocity(0.6),
lt:s("EmuDrumulator_lt").velocity(0.6),
cr:s("SequentialCircuitsDrumtracks_cr").speed(1.3).pan(0.4).velocity(0.5)})
.room(0.9).gain(0.5)
.mask("<0 1@5 0 1 >/8")

9
examples/edenontheair.js Normal file
View File

@@ -0,0 +1,9 @@
setDefaultVoicings('legacy')
const chrds = "A@2 E@2 A F#m B@2 E@2 A ~ F#@4 A@2 ~ F#@4 ~@2".slow(25/4);
stack(
n(run(6).palindrome().fast(5)).clip(2).chord(chrds).anchor(chrds.rootNotes(5)).voicing().s("gm_electric_guitar_jazz"),
chord(chrds).anchor("B4").voicing().s("gm_piccolo")
).gain("0.4@12 1@4 0.4@3 1@4 0.4@2".slow(25/4)).cpm(95/4).room(0.5)

45
examples/elpueblo.js Normal file
View File

@@ -0,0 +1,45 @@
// "El Pueblo Unido Jamas Sera Vencido" (work in progress)
// song @by Inti-Illimani
// script @by eefano
setCps(95/60/4)
const standardtuning = [40,45,50,55,59,64];
const fingering =
{Am:"0:0:2:2:1:0",C:"x:3:2:0:1:0",Dm:"x:0:0:2:3:1",E7:"0:2:2:1:3:0",G7:"3:2:0:0:0:1",
F:"1:3:3:2:1:1",A7:"x:0:2:2:2:3",E:"0:2:2:1:0:0",B7:"0:2:4:2:4:2"
};
const sk = 300, sh = silence, strumming =
{d: stack(0,timeCat([1,sh],[sk,1]),timeCat([2,sh],[sk,2]),timeCat([3,sh],[sk,3]),timeCat([4,sh],[sk,4]),timeCat([5,sh],[sk,5]))
,u: stack(5,timeCat([1,sh],[sk,4]),timeCat([2,sh],[sk,3]),timeCat([3,sh],[sk,2]),timeCat([4,sh],[sk,1]),timeCat([5,sh],[sk,0]))
};
const gString = register('gString', (n, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+standardtuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=standardtuning) =>
(strums.pickRestart(strumming).pickOut(
[fingers.pickOut(fingering).gString(0),fingers.pickOut(fingering).gString(1),fingers.pickOut(fingering).gString(2)
,fingers.pickOut(fingering).gString(3),fingers.pickOut(fingering).gString(4),fingers.pickOut(fingering).gString(5)]));
stack(
guitar("<d [d@2 u]>*4",
"<0@4 1 2 1 3 4@2>/2".pickRestart(
["<Am C Dm E7>*2","<Dm G7 C F>*2","<Dm E7 Am A7>*2","<Dm E7 [Am E7] Am>*2","<Dm B7 Am E7>"]))
.s("gm_acoustic_guitar_steel:2").clip(1).release(0.4).gain(0.4).room(0.6),
"<~@2 0@2 1 2 1 3 4@2>/2".pickRestart([
"<0@5 0 2@5 2 4@2 4 3@2 2 1@5 <-3 4>>*12",
"<5@5 2 1@5 5 4@2 3 4@2 1 0@5 4>*12",
"<3@5 0 0b@5 3 2@2 1 2@2 3 4@2 4b 4@2 6>*12",
"<3@5 0 0b@5 3 2@2 1 0@2 0b 0@5 0>*12",
"<[3!2]@4 ~ 3 [3!2]@4 ~ 3 [4b@!2]@4 ~ 4b [4b!2]@4 ~ 4b [4!2]@4 ~ 4 [4!2]@4 ~ 4 [4!2]@4 ~ 4 [4!2]@4 ~ ~>*12",
]).scale("a5:minor").note().clip(0.95).color('yellow')
.layer(x=>x.s("gm_ocarina").gain(0.6).room(0.6)
,x=>x.transpose(-24).attack(0.01).release(0.1).s("gm_choir_aahs:3").gain(0.8).room(0.5)),
"<0@2 ~@8>/2".pickRestart([note("<b@2 f@2 ~ b b@2 f@2 ~ b b@2 b b@b b@2 f@2 ~ <b ~>>*12")])
.clip(0.90).s("gm_applause:3").color('red').room(2).gain(0.35)
)//.pianoroll()

View File

@@ -0,0 +1,21 @@
// "Enjoy The Silence (coda)"
// song @by Depeche Mode
// script @by eefano
setCps(113/60/4)
await samples({'gtr': 'gtr/0001_cleanC.wav'}, 'github:tidalcycles/Dirt-Samples/master/');
const melodia = x => x.note().s("ocarina").gain(0.6).clip(1).release(0.1)
const guitar = x => x.note().s("gtr").room(1).gain(0.25).clip(1).release(0.5)
const accordi = x => x.note().s("recorder_bass_sus").gain(1.5).clip(1).release(0.5)
const basso = x => x.note().s("triangle").gain(0.8).clip(1).sustain(0.8)
const ritmo = x => x.bank("AlesisHR16").clip(1).gain(0.08)
const scala = cat('c minor') // IV VI I III
stack(
"<[3,5,0] [5,0,2] [0,2,4] [2,4,-1]>".scale(scala).apply(accordi),
"<[2@3 3] [0@3 2] [4@3 6] [2@3 3] [0@3 1] [-1@3 -2] -3 [0 1]>".scale(scala).transpose(12).apply(melodia),
"~@2 2 <7 9 6 6>@2 2 <8 6 4 4>@2".scale(scala).transpose(-12).apply(guitar),
"<-4 -2 0 -1>".struct("[[x ~]!2 x x@0.5 [x ~]!2 x@0.5 [x ~]!2]").scale(scala).apply(basso),
s("bd!4,[~ sd]!2,[~ hh!2 hh*2]!2").apply(ritmo),
//s("hh!4").apply(ritmo)
)

61
examples/epicbiopic.js Normal file
View File

@@ -0,0 +1,61 @@
// "Epic Biopic" version 1.0
// song @by eefano
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
const toscale = register('toscale', (pat) => pat.withValue((v)=>
v.endsWith('m') ? [v.substring(0,v.length-1),'minor']:[v,'major']));
setCps(1)
orch: "<~ a@2 b a@2 b c@6 d@2 a@2 b e@2 f@9 i@6 g@4 h ~>/5".pickRestart({
a:"<B@3 Am F>",
b:"<F# C#@2 E@2>",
c:"<Fm@4:1 F#@2:1 A#@4:1>",
d:"<Fm@2:2 F@3:2 D#m:2 D@3:2 A:2>",
e:"<A@6 ~ Cm@3:4>",
f:"<G@2:4 B:4 F#m@2:4 A@2:4 Em@2:4 G:4 Dm:4 F@2:4 <Cm!2 [C F#]>@2:4>",
g:"<C#@2:2 Dm@2:2 D#@2:2 F@3:2 C#:2 G#@4:2 A#m@2:2 F@4:2>",
h:"<F@3 ~@2>",
i:"<[[Fm@4:1 F#@2:1 A#@4:1]!2]@20 [Fm@2:2 F@3:2 D#m:2 D@3:2 A:2]@10>"
}).split([0,0],t=>stack(
chord(t[0]).anchor('c5').voicing().s(t[1].pickOut([
"supersaw".lpf(5000).velocity(.9),
"triangle".velocity(.65),
"supersaw".lpf(4800).velocity(.51).attack(.05).release(.05),
"triangle".lpf("4000").velocity(.55)
])).room(.4).gain(.75).color('yellow'),
n(t[1].pickRestart([
"<-1 [0 1]*3 0>".velocity(1.1),
"<1 0*3>".velocity(.7).lpf(2800),
"<[1 1*3] 2*3>","<[1 0] ~>".lpf(2500).velocity(.78)
])).chord(t[0]).mode('root').anchor('g2').voicing().clip(.97).s("square").color('cyan').gain(.85),
"<~@4 a@2 b ~@2 c@4 d@2 e ~@2 ~@2 f@6 i@3 c@4 d@2 g@4 h ~>/5".pickRestart({
a: "<~ [[5b 4 2]*2] [7 8b 7] [4 6b 4] [4 6] [[2 3] 4@7]@2 [~@3 6b*2] [6b@3 7*2] 9 >",
b: "<9*3 11 9*3 11@2>",
c: `<[2 1 0] [4@2 4*2] [4 ~ 0] [2@3 1 0@2] 2 [5@2 4] [2@3 1 2@2] [0 1] [2@3 1 2@2] [0@2 1]
[9@3 7*2] [7@2 7] [9@3 7*2] [4 ~ 0] [2@3 1 0@2] [7@3 6 7@2] [6 7] [7@3 6 7@2] [6 7] [7@3 6 7@2]>`,
d: "<[11 10] <[9 8] [9 10]> [9 8 7] [6 5 4]>",
e: "<2@2 ~@3>",
f: "<[[2 3] 4@2]!2 <[2] [4 3]> >".add("<0 [0,-2]>/15"),
g: "<[9@8 9]@2 7@2 [9@8 8 9]@2 9@3 [9@2 [10 11]] 9@3 [[9 7 9]!2] [9@5 9]@2 9@4>".add("<0@14 [0,-2]@6>"),
h: "<[11 ~]>/5".add("0,-2"),
i: "<[2 1 0] <[4@2 4*2]!2 4> <[4 ~ 0] 2*3 2> [2@3 1 0@2] 2 [4 3 2]>".add("<[0,-2]>/15"),
}).scale(t[0].toscale()).s("gm_tuba").clip(.9).note().color('magenta').gain(1).room(.2)
))
drums: "<x a@2 b a@2 b [c,k]@6 d@2 a@2 b e@2 f@9 [i,k]@6 g@4 h ~>/5".pickRestart({
a: s("<[[cr,lt]!2]@10>").lpf(2600),
b: s("<~ [[cr,lt]!2]@4>").lpf(2600),
c: s("<[lt ~ lt]>").lpf(200),
d: s("<[[cr,lt]!5]@10>").lpf(2600),
e: s("<[cr,lt]@5 [cr,lt] [lt mt*2 lt*2] lt@3>").lpf(2800),
f: s("<[lt mt lt]!30 [lt mt*2 lt*2]!13 lt*3 [lt mt*2 lt*2]>")
.lpf("<200@15 400@15 1000@13 1500@2>").velocity("<.9@28 1.2@2>"),
g: s("<[mt mt*2 mt*2]>,<[[cr,lt]!3]@6 [[cr,lt]!4]@8 [[cr,lt]!3]@6>").lpf(2600).velocity(.78),
h: s("<[[cr,lt]!2]@4 ~>").lpf(2800).velocity(.9),
i: s("<[lt mt*2 lt*2],<~@20 [cr!3]@6 [cr!2]@4>>").lpf("<1500 1800 2400>/10").velocity(.78),
k: s("<cr,lt>/30").lpf(2800).velocity(.45),
x: s("<[mt mt lt] lt>").lpf("<800@2 1200@2 2400>")
}).bank("BossDR550").room(1.4).speed(.7).gain(.45)

35
examples/eversoclosely.js Executable file
View File

@@ -0,0 +1,35 @@
// "The Everso Closely Guarded Line (Coda)" - Work In Progress
// song @by Cardiacs
// script @by eefano
setCps(93.2/60*3/4/9)
setDefaultVoicings('legacy')
const epic = "<D Dm Am D Gm C F Am A#>*9";
const mels ={0:"d4@2 a d4 g c4 f a d4"
,1:"a@7 c4@3 d4@6 e4@2 c4@7 d4@2"
,2:"a@7 e4 c4 [d4@3 e4]@2 f#4 ~ g4@2 [c4@3 d4]@2 e4 [c4@5 ~]@4 c5@2 ~ d5@2"
,3:"a@2 f#4 f4@2 a ~ e4@2 d4@2 a ~ g4@2 c4@2 e4 ~ f4@2 c5@2 e4 ~ d4@2"
,4:"a d4 f#4 [a4 e5 c5]@6 d5 a4 f#4 [a4 g4]@4 c5@3 a4 f4 [e4 c4]@4 d4@2"
,5:"a d4 f#4 [a4 c5 a4]@6 d5 a4 f#4 [a4 g4]@4 c5@3 a4 f4 [e4 c4]@4 d4@2"
,6:"f#4 f4 e4 f#4 g4 e4 f4 [a@2 c4] [[a#@3 c4]@2 d4]"
,7:"[f#4 f4]@6 <e4 [e4 e4@2]>@3 [d4@3 e4]@2 f#4 [g4 a#4 c5 a4]@8 f4 e4 <[c5@2 ~ a#4@2] [c4@3 a#@2]>@5"
,8:"[~@25 d4@29]/2"
,9:"<0,1,2,3,4,5,6,7>*9"}
stack
("<0 1 2 3 4 0 1 2 3 [4@26 ~] 0 1 2 3 [[4@25 ~@29],8]@2 >".pickRestart(mels).sub(12).note().s("gm_overdriven_guitar").gain(.8)
,"<~ ~ ~ ~ 5 5 6 7@2 [2@4 ~] 5 5 6 7 [[5@25 ~@29],8]@2>".pickRestart(mels).note().s("gm_tenor_sax").gain(.8).color("yellow")
,"<1@14 [[4@25 ~@29],8]@2>".pickRestart(mels).add(24).note().s("gm_ocarina").gain(.3).color("red")
,"<9@14 ~@2>".pickRestart(mels).n().chord(epic).anchor("C4").voicing().s("<gm_reed_organ@10 gm_church_organ:1@4 ~@2>").gain("<.25@10 .45@4 ~@2>").color("green").midichan(3)
,"<0@14 [[4@25 ~@29],8]@2>".pickRestart(mels).sub(24).note().s("gm_electric_bass_finger").lpf(400).gain(.77).color("blue")
,"<0 [0@2 1@2 0 2@4] 0!4 [0@2 1@2 0 2@4] 0!2 [0@26 ~] 0!2 [0@2 1@2 0 2@4] 0 3@2>".pickRestart(
["<rd*3 , <<<bd!4 sd> sd> ~ bd>*3 , cr/9>*9"
,"[[sd [bd,cr] ~]!2@3]*9/2"
,"<[sd,[~ sd@10]] [[[bd,cr] ~]!2]@4 bd [sd,[~ sd@10]] mt lt >*9*3"
,"< [<[sd,[~ sd@10]]!2 ~> <[bd,cr]!2 [sd,[~ sd@10]]> [bd,cr]!2 ~ [bd,cr] ~ [bd,cr,cr] ~]*3 ~*4 >"
]).pickOut({rd:s('rd').velocity(.12).hpf(9000).pan(.45),
bd:s('bd').velocity(.5).lpf(2500),
sd:s('sd').velocity(.5).hpf(200),
cr:s('cr').velocity(.1).pan(.55),
mt:s('mt').velocity(.3).pan(.6),
lt:s('lt').velocity(.3).pan(.7)
}).bank("Linn9000").speed(.95).gain(.7).color("cyan").midichan(10) ).room(.8)

13
examples/happybirthday.js Normal file
View File

@@ -0,0 +1,13 @@
// HAPPY BIRTHDAY
setDefaultVoicings('legacy')
const chrds = "F@3 C@6 F@6 Bb@3 F@2 C F@3".slow(8);
stack(
"[C4@3 C4] D4 C4 F4 E4@2 [C4@3 C4] D4 C4 G4 F4@2 [C4@3 C4] C5 A4 F4 E4 D4 [Bb4@3 Bb4] A4 F4 G4 F4@2".slow(8).early(1/3).note().s("gm_harmonica").gain(0.4).color('green'),
chord(chrds).anchor("G4").struct("x*3").voicing().piano().gain(0.2).color('yellow'),
n("2 ~ ~ 2 1 ~").chord(chrds).anchor(chrds.rootNotes(2)).voicing().s("gm_electric_bass_finger").lpf(190).gain(1).color('blue'),
s("hh*3, <bd ~>, ~ ~ rim").bank("KorgDDM110").gain(0.2)
).cpm(120/4).room(0.3)//.pianoroll();

View File

@@ -0,0 +1,18 @@
// "HAPPY BIRTHDAY BURNSIE"
// song @by Ramones
// script @by eefano
setDefaultVoicings('legacy')
const chrds = "F@3 C@6 F@6 Bb@3 F@2 C F@3".slow(8);
stack(
"C4*2 [D4 C4]@3 F4 E4 ~@2 C4*2 [D4 C4]@3 G4 F4 ~@2 C4*2 [C5 A4]@3 ~ [E4 D4]@3 Bb4*2 [A4 F4]@3 G4 F4 ~@2".slow(8).early(1/4).note().s("gm_distortion_guitar").gain(1).color('green'),
n("0,2").chord(chrds).anchor("E3").mode('root').struct("[[x ~]*2 x*2]*2").voicing().s("gm_distortion_guitar").clip(0.95).gain(0.7).color('yellow'),
n("0").chord(chrds).anchor("E2").mode('root').voicing().s("gm_electric_bass_finger").lpf(190).gain(1).color('blue'),
s("<[~@5 crow crow ~]!2 ~ [~@3 crow crow ~@3 ]>").slow(2).gain(1.2),
s("oh*4, <bd!3 [bd*2 ~]>*2 , [~ sd]*2").bank("Linn9000").gain(0.15)
).cpm(200/4).room(0.3)//.scope()//.pianoroll()

21
examples/heymoon.js Normal file
View File

@@ -0,0 +1,21 @@
// "Hey Moon" (work in progress)
// song @by John Maus
// script @by eefano
setcps(88/60)
const split = register('split', (deflt, callback, pat) =>
callback(deflt.map((d,i)=>pat.withValue((v)=>Array.isArray(v)?(i<v.length?v[i]:d):(i==0?v:d)))));
c: n("<~ 1 2 3>*2").chord("<F C G F>/2").anchor("<F4 C4 G4 F4>/2").voicing().s("gm_pad_warm").release(2).room(0.6).gain(0.6)
m: "<0@16>/2".pickRestart([
"<~!14 3 1 3@2 ~@4 0 5 4 4 4 [5 3@3]@2 ~!5 [1 0] -1b 0@2 0 [0 0] ~!14 >*2",
"<~!15 3 3@3 0 0@2 5@2 4@2 3 2 2 3 3 0 0 >*2"])
.layer(x=>x.scale("g4:major").note().s("gm_piccolo").pan(0.4).room(1).gain(0.5),
x=>x.scale("g2:major").note().s("supersaw").pan(0.6).room(1).gain(0.6))
$: s("<hh*2>").gain(0.3).room(1)
$: s("<bd>/2").gain(0.1).room(1)
$: s("<[~ <~!3 sd>] sd>").gain(0.3).room(1)

View File

@@ -0,0 +1,45 @@
// "Human Performance" (work in progress)
// @song by Parquet Courts
// @script by eefano
setcps(110 / 60 / 2)
const song = "<0@2 1@11 1@11 1@6 2@3 3@24 4@4 1@11 1@11 1@6 2@3 3@24 4@4>"
const zero = register('zero', (pat) => pat.withValue((v)=>0))
const chseq = song.pickRestart(["~","<B@2 F#m@2 E@2 D@2 D A@2>","<B@3>".struct("x*4"),
"<A@3 <F#m!2 E D B F#m E D>@9>*4".struct("x*4"),"<F#m@4>"])
const cs = zero(chseq).pickRestart(["<[0,[~ 1@40],[~@2 2@40],[~@3 3@40]]@2>"])
const ds= "<0@3 0@2 0 0@2 0!2 0@2>*4".pickRestart(["[0,1,2,3]"])
const cln = x=>x.s("gm_electric_guitar_clean:2").lpf(1800).gain(.7)
const dst = x=>x.s("gm_electric_guitar_clean:2").hpf(100).lpf(1800).clip(1).gain(.7)
$: n(song.pick([cs,cs,ds,ds,cs])).chord(chseq).mode('above').anchor('e3')
.voicing().mode("root").pickF(song,[cln,cln,cln,dst,cln]) ._pianoroll()
$: n(song.pickRestart(["~", "<~ 8 8 7 9 8 ~ ~ ~ 7 7 5 8 7 ~ ~ ~ 8 8 7 9 8 7 6 7 5 ~ 4 7 5 ~ ~ ~ 7 7 6 7 2@2 ~@5>*4",
"<7@2 ~ [7 5] [9 7]@2 ~@100>*4",
"<<[12!2 11 12]!2 [9!3 8] [9 8 7 9] [9!3 8] [9 8 7 9] [9!3 8] [9 8 7 9]> ~@2>","~"]))
.scale("a2:major").s("gm_tenor_sax:1").gain(1).color('yellow')
$: n(song.pickRestart(["<~ [~ 0 2 2b]>",
"<1 [4b 4] 5 [2 5] 4 [1 4] [3@3 3] [0@3 0] [-4@3 -4] [0 0] [0 0 2 2b]>",
"<1>*4","<<0!2 2 0!2 2 0!2>@3 <-2!2 4 3 1 -2 4 3>@9>*4".struct("x*4"),"<5!4 2!4 -2!3 2 5 -2 2 2b>*4"]))
.scale("a2:major").s("gm_electric_bass_finger:3").clip(.97).lpf(350).gain(1).color('cyan')
$: song.pickRestart(["<~>","<rd*4,[bd sd]>","<rd*4,[sd bd]*2>",
"<cr@3 cr@9>*4,<sd ~ bd sd ~ sd!7>*4","~"]).pickOut({
rd:s("<r8_rd:1>").speed(1.1).hpf(4000).velocity(.1),
bd:s('linn9000_bd').velocity(.55).lpf(500),
sd:s('linn9000_sd').velocity(.55).hpf(200),
cr:s('linn9000_cr').velocity(.1).pan(.55),
mt:s('linn9000_mt').velocity(.3).pan(.6),
lt:s('linn9000_lt').velocity(.2).pan(.7)}).speed(.94).gain(.6) .color('magenta')
all(x => x
.room(.3)
//.ribbon(24*2,1*8)
)

26
examples/hydraswap.js Executable file
View File

@@ -0,0 +1,26 @@
await initHydra()
let bass = note("<C3 Eb3 G2 Bb2>").euclid(3,8).s("sawtooth").lpf(sine.range(400, 1000))
let kick = s("<[bd ~ ~ bd]!3 [bd(5,8,1)]> ")
let hihat = s("hh!6 [hh*2 hh]!2").slow(2)
let final = stack(note("c3@4, c2@4").s("sawtooth").lpf(1000),
s("cr")).delay(.5).delaytime(".75")
let silence = s("bd").hush()
let sequence = "0@4 1@4 2@8 3 4@7".slow(24)
solid(0,0,0)
.add(osc(10, 0.1, 10) ,H(sequence.pick([1,0,0,1])))
.add(noise() ,H(sequence.pick([0,1,0,1])))
.add(shape() ,H(sequence.pick([0,0,1,0])))
.out()
sequence.pick([ bass, // = 0
stack(bass, kick), // = 1
stack(bass,kick,hihat), // = 2
final, // = 3
silence]) // = 4

29
examples/ilredelmondo.js Normal file
View File

@@ -0,0 +1,29 @@
// "Il Re Del Mondo (intro)"
// song @by Franco Battiato
// script @by eefano
setCps(91/60/4)
const accordi = x => x.note().s("recorder_tenor_sus").clip(1).release(0.5)
const melodia = x => x.note().s("sax").gain(0.3).clip(1).release(0.5)
const walking = x => x.note().s("triangle").clip(1).release(0.1)
const ritmo = x => x.bank("YamahaRY30").clip(1).gain(0.08)
const scaleggio = x => x.piano().gain(0.2)
const myscale = "[e:major e:minor]!3 [e:major]@0.5".slow(14)
const scala2 = "<e:major e:minor>".slow(2.5)
const verse = stack(
"[4 5 6 7]*2".scale(scala2).note().apply(scaleggio),
"[0@4 [7 ~]!2 0@3 7@2 ~ 7 ~ 0@3 7@3]/2.5".scale(scala2).transpose(-12).apply(walking),
s("hh!4").apply(ritmo),
"<-3,-2,-1,0,1,2,3 ~@1000>".scale(myscale).velocity(0).apply(melodia).color('black')
)
const chorus = stack(
"[0,2,4]/2".scale(myscale).apply(accordi),
"[-3@3 -2 -1@3 0 -1@8 0@3 1 2@3 3 2@8 2@8 2@8 1@8]/14".scale(myscale).transpose(12).apply(melodia),
"~ -3 [0 ~] [0 ~] [1 ~] [1 ~] [2 3] [4 ~] ".scale(myscale).apply(walking),
s("[[bd [sd [~ bd]] [bd bd] sd,hh!7 oh]!13 [bd sd sd*4 lt*4,hh!3 oh ~!4]]/14").apply(ritmo),
)
arrange([10,verse],[14,chorus])

27
examples/jitterbug.js Normal file
View File

@@ -0,0 +1,27 @@
// "Jitterbug (Coda)"
// song @by Cardiacs
// script @by eefano
setDefaultVoicings('legacy')
const m1 = `f#4@3 d4@4 g4@6 g#4@4 f4@3 d#4@3 e4@4 c#4@6 b3@4 g#3@3 g#4@5 a4@4 f#4@3 d#4@3 f#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1 d#4@3`.slow(82/8);
const m2 = `f4@3 d4@4 d#4@5 e4@3 g4@4 e4@6 f#4@4 c4@2.9 ~@0.1 c4@3 g#3@4 a#3@4 b3@6 c#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1`.slow(73/8);
const m3 = `d#4@3 f#4@3.5 ~@0.5`.slow(7/8);
const m4 = `c#4@4 f#4@4 `.slow(8/8);
const m5 = `e4@4 g4@7.9 ~@0.1 f4@4 f#4@4.9 ~@0.1 d#4@3 e4@4 c#4@6.9 ~@0.1 f#4@2 f4@3.9 ~@0.1`.slow(41/8);
const melody = arrange([82/8,m1],[73/8,m2],[7/8,m3],[82/8,m1],[8/8,m4],[73/8,m2],[41/8,m5]);
const h1 = `D@2 G@2 C D#@2 G#@2 C# B@2 E@2 A F#m@2 B@2 G#@2 C#@2 A@2 D Cm@2 F#@2 D# Em@2 A@2 F# D#m@2 G#@2`.slow(40/4);
const h2 = `Cm F@2`.slow(3/4);
const h3 = `Bm@2 B@2 C@2 G@2 C A@2 D@2 Am C@2 G#@2 F#@2 E B@2 C#m@2 D# Em@2 A@2 F# D#m@2 G#@2`.slow(35/4);
const h4 = `Cm F#@2`.slow(3/4);
const h5 = `Cm F#@4 F@2`.slow(7/4);
const h6 = `C#m@2 D#@4 C#@2 F#@2 B@2 E@2 C#m@2 F#@2 A#@2`.slow(20/4);
const chords = arrange([40/4,h1],[3/4,h2],[35/4,h3],[3/4,h4],[40/4,h1],[7/4,h5],[35/4,h3],[20/4,h6]);
stack(
n(stack("0","1".late(.1),"2".late(.2)).fast(4)).chord(chords).anchor("G5").voicing().s("gm_pad_choir").echo(2,1/6,.7).gain(0.8),
chords.rootNotes(2).note().s("gm_lead_2_sawtooth").attack(0.2).sustain(1.2).lpf(1000).gain(0.4),
melody.note().s("gm_lead_1_square").attack(0.02).sustain(1.5).lpf(1200).gain(0.75),
s("<rd*4>").bank('LinnDrum').gain(0.07)
).cpm(115/4)
.room( slider(0.91,0,10))
.rsize( slider(4,0,8,1))

View File

@@ -0,0 +1,31 @@
// "Jitterbug (Coda)" - In Reverse
// song @by Cardiacs
// script @by eefano
setDefaultVoicings('legacy')
const melody =
`f#4@3 d4@4 g4@6 g#4@4 f4@3 d#4@3 e4@4 c#4@6 b3@4 g#3@3 g#4@5 a4@4 f#4@3 d#4@3 f#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1 d#4@3
f4@3 d4@4 d#4@5 e4@3 g4@4 e4@6 f#4@4 c4@2.9 ~@0.1 c4@3 g#3@4 a#3@4 b3@6 c#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1
d#4@3 f#4@3.5 ~@0.5
f#4@3 d4@4 g4@6 g#4@4 f4@3 d#4@3 e4@4 c#4@6 b3@4 g#3@3 g#4@5 a4@4 f#4@3 d#4@3 f#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1 d#4@3
c#4@4 f#4@4
f4@3 d4@4 d#4@5 e4@3 g4@4 e4@6 f#4@4 c4@2.9 ~@0.1 c4@3 g#3@4 a#3@4 b3@6 c#4@4 g4@6 a4@4 a#4@6 d#4@3.9 ~@0.1
e4@4 g4@7.9 ~@0.1 f4@4 f#4@4.9 ~@0.1 d#4@3 e4@4 c#4@6.9 ~@0.1 f#4@2 f4@3.9 ~@0.1`
.rev();
const chords =
`D@2 G@2 C D#@2 G#@2 C# B@2 E@2 A F#m@2 B@2 G#@2 C#@2 A@2 D Cm@2 F#@2 D# Em@2 A@2 F# D#m@2 G#@2
Cm F@2
Bm@2 B@2 C@2 G@2 C A@2 D@2 Am C@2 G#@2 F#@2 E B@2 C#m@2 D# Em@2 A@2 F# D#m@2 G#@2
Cm F#@2
D@2 G@2 C D#@2 G#@2 C# B@2 E@2 A F#m@2 B@2 G#@2 C#@2 A@2 D Cm@2 F#@2 D# Em@2 A@2 F# D#m@2 G#@2
Cm F#@4 F@2
Bm@2 B@2 C@2 G@2 C A@2 D@2 Am C@2 G#@2 F#@2 E B@2 C#m@2 D# Em@2 A@2 F# D#m@2 G#@2
C#m@2 D#@4 C#@2 F#@2 B@2 E@2 C#m@2 F#@2 A#@2`
.rev();
stack(
chord(chords).anchor("C5").voicing().s("gm_rock_organ").pan(0.4).gain(0.9),
chord(chords).anchor("G5").voicing().s("gm_pad_choir").pan(0.6).gain(0.9),
chords.rootNotes(2).note().s("gm_lead_2_sawtooth").attack(0.2).sustain(1.2).lpf(1000).gain(0.5),
melody.note().s("gm_lead_1_square").attack(0.02).sustain(1.5).lpf(1200).gain(0.75),
).cpm(115/183).room( slider(0.91,0,10)) .rsize( slider(4,0,8,1))

42
examples/lovegoeson.js Normal file
View File

@@ -0,0 +1,42 @@
// "Love Goes On" (work in progress)
// song @by The Go-Betweens
// script @by eefano
const standardtuning = [40,45,50,55,59,64];
const fingering =
{Am:"0:0:2:2:1:0",C:"x:3:2:0:1:0",
D:"x:0:0:2:3:2", Dm:"x:0:0:2:3:1",
G:"3:2:0:0:0:3", G7:"3:2:0:0:0:1",
F:"1:3:3:2:1:1", A7:"x:0:2:2:2:3",
E:"0:2:2:1:0:0", Em:"0:2:2:0:0:0", E7:"0:2:2:1:3:0",
B7:"0:2:4:2:4:2",Bm:"0:2:4:4:3:2"
};
const sk = 300, sh = silence, strumming =
{d: stack(0,timeCat([1,sh],[sk,1]),timeCat([2,sh],[sk,2]),timeCat([3,sh],[sk,3]),timeCat([4,sh],[sk,4]),timeCat([5,sh],[sk,5]))
,u: stack(5,timeCat([1,sh],[sk,4]),timeCat([2,sh],[sk,3]),timeCat([3,sh],[sk,2]),timeCat([4,sh],[sk,1]),timeCat([5,sh],[sk,0]))
};
const gString = register('gString', (n, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+standardtuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=standardtuning) =>
(strums.pickRestart(strumming).pickOut(
[fingers.pickOut(fingering).gString(0),fingers.pickOut(fingering).gString(1),fingers.pickOut(fingering).gString(2)
,fingers.pickOut(fingering).gString(3),fingers.pickOut(fingering).gString(4),fingers.pickOut(fingering).gString(5)]));
setcps(150/60)
strum:
guitar("<d@2 d u@2 u d u >*2",
"<0@2>/16".pickRestart(
["<Am Em Bm C G Em D C>/4"]))
.s("gm_acoustic_guitar_steel:2").clip(1).release(0.4).gain(0.4).room(0.6)
voice:
"<0 1>/16".pickRestart([
"<2 2@2 2@2 2 2 2@2 1@2 ~@5 3 3@2 3@2 1 1@2 2@2 ~@6>*2",
"<3 1@2 -1@2 -1 -1 0@2 1@2 ~@5 0 0@2 0@2 1 1@2 -1@4 ~@4>*2"
]).scale("a3:minor").note().clip(0.95).color('yellow')
.s("gm_bassoon:2").gain(1).room(0.4)

62
examples/madeallup.js Normal file
View File

@@ -0,0 +1,62 @@
// "Made All Up (wip)"
// song @by Cardiacs
// script @by eefano
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
setCps(138/60)
const sequence = "<a@38 b@38 c@48 d@16 e@30 a@38 b@38 c@48 d@16 e@18 e@30>";
orch: sequence.pickRestart({
a: `<C!2 [C B] B [B D] D!2 F!2 [F C] C [C D#] D# A#!2 [A# F] F!2 D#!2 [D# A#] A# F!2
G#!2 [G# D#] [D#@3 F]@2 F C G!2 [G D] [D@3 E]@2 E B>`,
b: `<C#!2 [C# Fm] Fm [Fm A#] A# D# F#!2 [F# C#] C# [C# E] E B!2 [B F#] F#!2 E!2 [E B] B F#!2
A!2 [A E] [E@3 F#]@2 F# C# G#!2 [G# D#] [D#@3 F]@2 F C>`,
c: `<E@6 B!2>`,
d: `<D#@6 G#m!2 E@6 B!2 >`,
e: `<[F# D A]@6 [[[C#:1 ~]!2 [C#:1:-2 ~]!2 [C#:1:-4 ~]!2]!4]@24>`
}).split([0,0,0],t=>stack(
chord(t[0])
.anchor(sequence.pickRestart(
{a:"<b4@7 b4@6 b4@5 c5@6 d5@7 c#5@7>",
b:"<c5@7 c5@6 c5@5 c#5@6 d#5@7 d5@7>",
c:"<c4>",d:"<c4>",e:"<g5>"
})).voicing().s("gm_piano").room(.4).gain(.9).color('yellow')
.superimpose(x=>x.late(0.1).attack(.1).velocity(.7).pan(.2)),
n(t[1].pickRestart(["<0>/8","<[0 ~]>"])).chord(t[0]).mode('root').anchor('e2').voicing()
.transpose(t[2]).s("gm_electric_bass_finger").lpf(200).gain(1.4).color('cyan')
).rsize(4)
)
const choirline = note(`<c4@2 c4!3 b3 b3@2 b3 a3 [a3!2]@4
[c4!2]@4 c4!2 c4@2 c4 d#4 d#4@2
[f4!2]@4 f4 c4 [c4!2]@4
d#4@2 f4@2 f4 c4 c4@2 a#3@2 d#4@10 ~@20>*2`);
const mode1 = x => x.adsr([0,.1,.8,0]).clip("0.92")
.superimpose(x=>x.transpose(12).velocity(.8).speed(1.002).pan(.4),
x=>x.transpose(24).velocity(.4).speed(.998).pan(.6));
const mode2 = x => x.attack(.04).release(.02).clip("0.85");
choir: sequence.pickRestart({
a: mode1(choirline),
b: mode1(choirline.transpose(1)),
c: mode2(note(`<~ b4@2 g#4@2 a#4@2 f#4 ~ g#4@2 a#4@2 b4@2 d#5
~ f#5@2 a#4@2 e5@2 d#5 ~ c#5@2 b4@2 a#4@2 ~>`)),
d: mode2(note(`<~ a#4@2 g4@2 c5@2 b4 ~ a#4@2 f#4@2 g#4@2 ~>`)),
e: mode2(note(`<~ c#5@2 d5@2 c#5@8 ~@18 >`))
}).s("triangle").gain(0.9).lpf(5000).color('magenta').room(.5).rsize(4)//.pdec("<0@23 1@15>")
const tricky = "<0@7 0@6 0@4 0 0@6 0@7 0@7>"
.pickRestart(["<cr,<bd [sd@3 sd] [bd bd] sd [bd bd] [sd bd] sd>>"]);
drums: sequence.pickRestart({
a: tricky,
b: tricky,
c:"<cr/16,rd,<[<bd ~> <~ bd>] sd>>",
d:"<cr/16,rd,<[<bd ~> <~ bd>] sd>>",
e:"<[rd!3]@6 sd!22 sd*4@2>"
}).pickOut({
bd: s('bd').lpf(800).velocity(1.1),
sd: s('sd').velocity(.7),
rd: s('rd').velocity(0.3).hpf(8000),
cr: s('cr').speed(0.7).velocity(0.1).hpf(6000),
}).bank("Linn9000").room(0.4).gain(0.5).rsize(4)

View File

@@ -0,0 +1,70 @@
// "Mammals Chilling" version 1.0
// song @by eefano
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
setCps(155/60)
orch: "<a b@2 a [b@11 ~]@2 c e d c>/40".pickRestart({
a: "<<F:f3:h D7:g3:i> ~>/5",
b: "<F:f3:h@8 Em7:b3:i@12 C:f3:i@8 D7:g3:h@12>",
c: "<Bm7:b3:j@8 Em7:b3:k@8 F:g3:j@8 C:f3:k@8 G7:b3:j@4 G7:b3:l@4>".velocity(1.4),
d: "<Bm7:b3:j@8 Em7:b3:k@8 F:g3:k@8 C:f3:k@8 D7:f3:j@8 >".velocity(1.6),
e: "<<F:f3:h Em7:b3:i C:f3:h D7:g3:i> ~>/5".velocity(1.3),
}).split([0,0,0],s=>stack(
n(s[2].pickRestart({
h:"<~ [<0@2 2 1>@3 ~]>*2", i:"<~ [<3@2 0 1>@3]>*2",
j:"<0 2>/2", k:"<1 <0 2>>/2", l:"<2 ~>/8"
})).chord(s[0]).anchor(s[1].transpose(-22)).mode('above').voicing()
.s("gm_pizzicato_strings:4").gain(1.35).color('green'),
n(s[2].pickRestart(
{h:"<[[0,[~ 1@40],[~@2 2@40],[~@3 3@40]] ~@2]>/2",
i:"<[[3,[~ 2@40],[~@2 1@40],[~@3 0@40]] ~@2]>/2",
j:"<[[~ 0@3],[~@1 1@3],[~@2 <2 3>@2],[~@3 <3 2>]]>/2",
k:"<[[~ 3@3],[~@1 2@3],[~@2 <1 0>@2],[~@3 <0 1>]]>/2",
l:"<[[1,[~ 2@30],[~@2 3@30],[~ 0]]]>/4"}))
.chord(s[0]).anchor(s[1]).mode('above').voicing()
.s("gm_acoustic_guitar_nylon").gain(.65).color('yellow')
)).room(.2)
melo: "<~ a b ~@2 c d e ~ d>/40".pickRestart({
a: n(`<~ 4 0 ~ 1 0 ~ 1 2*3 ~@2 5 5 6 ~ 2 ~ 5 2 5 ~ 2 ~@5 6 ~ 2*3 ~@5 6 ~ 1*3 ~ [6*3]@2
5 4 5 ~ 2 ~ 6 ~ 4 ~@3 4 ~ 3#!2 [2 0# 2]@2 3# ~ 4 ~ 3#!2 0# ~ 3# ~ 5!2 6!2 2 ~@6>*2`).late(.1),
b: n(`<~@4 2 ~ 3# ~ 4 ~@7 3# ~@5 7 ~ 8 ~@15 9*2 8 ~@14 8*2 6 ~@10 [4*3]@4 ~@6>*2`),
c: n(`<7 [9 13 12@2]@3 ~@2 [9 12 13 9 8 6]@4 ~@8 [9 12 13 9 8 6]@4 ~@8 [6 8 9 13 12 9]@4 ~@6>`),
d: n(`< ~ [~ 2] [~ 5] [~ 3#] ~@5 [~ 8] [~ 7] [~ 6] ~@8 [9*2 8] ~@7 [8*2 6]
~@3 8*2 9*3 10#*4 9*5 6*3 6*4 5*5 ~>`),
e: n(`<~@10 12 12 13 ~ 9 ~ 12 9 12 ~ ~@32 [9 12 13 9 8 6]@8 ~@100>*2`).velocity(.5).pan(.3)
}).scale('f4:major').s("gm_marimba").room(.2).gain("<.65 .75 .85>").color('cyan')
trom: "<~@2 b ~ a c d e ~ d>/40".pickRestart({
a: `<~ [2 ~] [6:1 ~] [4 ~] ~ [2 ~] [5:1 ~] [6 ~] [1@4 0# 1]@3
[2 ~] [3# ~] ~ [3# 4] [4# ~] [5 ~] 7*2 6*2 5*2 [4 6:2@3]@2 4@3
~ 4*2 [3# 3] 2 ~ 2*2 [1# 1] 0# [3# 0# 2@2]@3 0# [3# 6 5@2]@3 >`.clip(.9),
b: `< ~ 2:3@5 6 ~ 4 ~ ~@4 2:3@2 1@6 9:1 ~ 8 ~ ~@6 9:1 8 ~@14 8:1 6 ~@10 [[0# ~]*3]@4 ~@20>*2`.clip(.9),
c: `<~@10 [[[-2 ~] [1 ~] 2 [-2 ~] [3# ~] ~]!2]@8 ~@4
[[[3# ~] [2 ~] 1 [-1 ~] [2 ~] ~]!2]@8 ~@6 >`.clip(.9),
d: `<[2:3@5 5]@3 [~ 3#] [~@5 2:3@2 1@6 7]@7 [~ 8] ~@4 [9:1 8] ~@7 [8:1 6]
~@7 1 2 3# 2:2 -1 ~ -2 ~>`.clip(.9),
e: `<~@30 0!2 -1!2 -2!2 -3 -1:2@3 -3@2 ~@10 [2 -2 -1 2 1 -1]@8 ~@100 >*2`.velocity(.5).pan(.7).clip(.4)
}).split([0,0],t=>n(t[0]).scale('f3:major').penv(t[1]))
.s("gm_trombone:4").room(.2).gain(.85).color('magenta')
drums: `<[a,c]@4 [a,c,e]@7 [a,c,e,f] [v,a,b]@4 [[a,b,d]@11 g]@8 [v,a]@4 [~ a]!3 [~ h] [a,k]@4 a@4>/10`
.pickRestart({
a:"<sh ~ sk sh ~ sk sh sk ~ sh sk ~ sh ~ sk sh ~ sk sh sk>*2",
b:"<~@8 [~ cw]!2>", c:"<~@8 [cw ~]!2>",
d:"<[<cm ~@3> [<cl ~>,<bd ~@7>]]>", e:"<<[<~ cl>@3 <cm,<~ bd> ~@3>]>@2>",
f:"<~@6 [[cj*3]!2]@4>",g:"<[~ cj!6 wh@5]@8>", h:"<cj*2 cl*2 ~ wx*2 vi>",
k:"<se@8 ~@2>",v:"<vi@40>"
}).pickOut({
sh: s("shaker_small:0").velocity(3), sk: s("shaker_small:1").velocity(2),
cl: s("clave").velocity(7), cm: s("clave").velocity(4).speed(.95),
bd: s("bongo:3").velocity(5), cj: s("agogo").velocity(7),
cw: s("cowbell").velocity(1.2).pan("<.2 .8>/10"),
wh: s("ballwhistle"), wx: s("ballwhistle:1"),
vi: s("vibraslap").velocity(.9),
se: s("brown").adsr([1,0,1,1]).speed("<1.4 1.5>/10").pan("<.4 .6>/10")
}).room(.2).gain(1)

40
examples/markovchain.js Normal file
View File

@@ -0,0 +1,40 @@
let markovstates = {};
let markovtables = {
'drums':
//bd sd hh
[[ 0, .2, .8], // bd
[ .3, 0, .7], // sd
[ .9, .1, 0]] // hh
, 'chords':
[[ .2, .2, .4, .2],
[ .5, .3, .2, .1],
[ 0, .2, .7, .1],
[ .7, .1, .1, .1]]
}
const markov = register('markov', (id, pat) => pat.withHap((hap)=> {
if(markovstates[id]===undefined) markovstates[id]=[0];
const mystate = markovstates[id];
const mytable = markovtables[id];
//console.log(mytable)
const p = hap.whole.begin.n;
while(mystate.length<=p)
{
const prev = mystate[mystate.length-1];
const t = mytable[prev];
let next = prev;
for(let i=0,j=t[i];i<t.length;i++,j+=t[i]) if(hap.value<j) { next = i; break; }
mystate.push(next);
//console.log(mystate);
}
return hap.withValue((v)=>mystate[p]);
}))
$: s(rand.segment(1).markov('drums').pick(["bd","sd","hh"])).fast(8)
$: chord(rand.late(.2).segment(1).markov('chords').pick(["C","Dm","F","A"])).fast(2).voicing().piano()

22
examples/mouthbreather.js Normal file
View File

@@ -0,0 +1,22 @@
// "Mouth Breather" (work in progress)
// composed @by The Jesus Lizard
// script @by eefano
setcps(215/60*2)
const xposes = "<0@9 -5 -7 0@4 ~ 0@2 -5 -7 ~@2>/48"
g:"<0@5 1 0 1 0@3 ~@2 0 ~ 0@4 ~@2 >/48".pickRestart(
[stack("<c3@9 c#3 c3@2>","<g3 f3@2 g3@4 f3 g3 g#3 g3 f3>".add("<0,5>")).struct("<x!4 ~!2 x!9 x@3 x!6>")
,"<[c3,g3,c4]@6 ~@42>".add(-3).penv(-3).patt(1)
]).note().transpose(xposes).s("gm_electric_guitar_clean:2").distort("10:.17").room(.1)
b:"<~@3 0@2 ~ 0 ~ 0@6 ~ 0@4 ~@2 >/48".pickRestart(["<c2!3 c2@2 ~ c2!3 <[c#2 f2 c#2] [c2 f2 g2]>@3>"])
.note().transpose(xposes).s("gm_electric_bass_pick").release(.06).distort("5:.3").room(.2).color('green')
d:"<~ 0@14 ~ 0@6>/48".pickRestart(
[stack(s("<bd ~ bd ~!2 bd!2 ~!2 bd ~!2 bd ~!2 bd ~ bd ~ bd ~!2 bd ~>"),
s("<~!3 sd ~!6 sd ~!5 sd ~!3 sd ~!3>").gain(1.4),
s("<oh>/2").speed(1.03).gain(.3).pan(.4),
s("<cr>/12").speed(1.1).gain(.2).pan(.6))])
.room(.8).color('cyan')
// all((x)=>x.scope({scale:.05})) //._pianoroll({minMidi:10,maxMidi:60,autorange:false})

View File

@@ -0,0 +1,35 @@
// "Mouth Breather" (work in progress, complex variant)
// composed @by The Jesus Lizard
// script @by eefano
setcps(215/60*2)
const fvi = register('fvi', (i, d, pat) => pat.filterValues(v=>v[i]==d))
const ati = register('ati', (i, d, pat) => pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }));
// Index0 = Instrument, Index1 = Part, Index2 = Transpose
`<G@3 [G,D]@6 [G,D,B]@6 [G:1,D]@3 [G,D,B]@3 [G:1,D]@3 [G,D,B]@3 [G:0:-5,D,B:0:-5]@3 [G:0:-7,D,B:0:-7]@3
[D,B]@6 [G,D,B]@3 ~ [G,D,B]@6 [G:0:-5,D,B:0:-5]@3 [G:0:-7,D,B:0:-7]@3 D@3 ~@3 >/16`
.layer(
x=>x.fvi(0,'G').ati(1,0).pickRestart(
[stack("<c3@9 c#3 c3@2>".pan(.51),"<g3 f3@2 g3@4 f3 g3 g#3 g3 f3>".add("<0,5>").pan(.49)).struct("<x!4 ~!2 x!9 x@3 x!6>")
,"<[c3,g3,c4]@3 ~@45>".add(-8).penv(-3).patt(.6).lpf(3000)
]).note()
.transpose(x.fvi(0,'G').ati(2,0))
.s("gm_electric_guitar_clean:2").hpf(80).distort("10:.17").room(.1)
,x=>x.fvi(0,'B').ati(1,0).pickRestart(
["<c2!3 c2@2 ~ c2!3 <[c#2 f2 c#2] [c2 f2 g2]>@3>"])
.note()
.transpose(x.fvi(0,'B').ati(2,0))
.s("gm_electric_bass_pick").release(.06).distort("5:.31").room(.2).color('green')
,x=>x.fvi(0,'D').ati(1,0).pickRestart(
["<[bd ~ bd sd ~ bd!2 ~!2 bd sd ~ bd ~!2 bd sd bd ~ bd sd ~ bd ~],oh*12,cr*2>/24"])
.pickOut({bd:s('bd').lpf(1800),
sd:s('sd').speed(.88),
oh:s('oh').speed(.9).velocity(.15).pan(.45),
cr:s('cr').speed(.95).velocity(.2).pan(.55)
}).bank("linn9000").gain(1.3).room(.85).color('cyan')
)

36
examples/nudelimprov1.js Normal file
View File

@@ -0,0 +1,36 @@
setcpm(120/4)
let key = "<c:major c:minor>/2";
let tra = "0, 3, 5".add("<0 [0 2]>/2");
$: n("<6 3> - [2 <1 0>] <0*2 ->")
.scale(key)
.scaleTranspose(tra)
.s("kawai")
.lpf("<2000 1000 500>/2")
.gain("<0 .3 .7@2>/8")
$: n("<[2 -]*4 [0 -]*6>")
.scale(key)
.s("supersaw")
.scaleTranspose(tra)
.transpose("<0 -5>/8")
.room(.5)
.gain(.5)
$: n("<0 0 0>").scale(key).transpose(-12)
.penv("<0 12 -12>")
.patt(.3)
.s("gm_fretless_bass")
.gain(1)
$: s("white*16").clip(.5)
.speed("<<1@2 1 2> <2 3>>*16")
.hpa(.05).hpd(.05).hpe(3).hpf("<1000@2 2000 500>*8")
.gain(0.4)
$: s("<<bd bd*2> ~@14 <~@15 bd>>*8")
.speed(1.2).lpf(1000).gain(0.6).room(1)
$:
s("- - [clap | -] clap*2:<0 4 5 1>").room(.6).gain(.5)

22
examples/oddeven.js Executable file
View File

@@ -0,0 +1,22 @@
// "Odd Even" (Work In Progress)
// song @by Cardiacs
// script @by eefano
setDefaultVoicings('legacy')
const k = 0.01;
stack(
n(stack("0@2 0 3@2 3 0 3",
"1@2 1 2@2 2 1 2".late(k),
"2@2 2 1@2 1 2 1".late(k*2),
"3@2 3 0@2 0 3 0".late(k*3)))
.chord("<G [Bm E] [G@3 C]>".slow(2)).voicing()
.s("gm_electric_guitar_jazz").clip(1).release(0.2).gain(0.5),
`< ~!4
[4 3 [2 ~] [1 ~] 0@2 4@2]
[4 3 [2 ~] [1 ~] 0@2 7@2]
>`.scale("g2:lydian").note().s("gm_bassoon")
).cpm(120/4)//.pianoroll()

21
examples/oh.js Normal file
View File

@@ -0,0 +1,21 @@
// "Oh"
// song @by Tim Smith Spratleys Japs
// script @by eefano
setDefaultVoicings('legacy')
const ln = 24;
const cresc = saw.range(0.4,0.7).slow(ln*2);
const chrds = "G#@4 F#@2 B@3 E A@2 D G@2 A G@4 A G@4 G# C# F# B E A@2 B A@2 C D#@6 F@2 D#@4".slow(ln);
const meldy = "[d#5@4 d#5@2 d#5@3 e5 c#5@2 d5 d5@2 c#5 b4@4 c#5 b4@4 c5 f5 a#4 d#5 g#4 e5 [b4@3 d#5] f#5 d#5@2 e5 g4 g5@3 f5 a5@4 a#5@3]".slow(ln);
stack(
meldy.note().s('gm_piccolo').velocity(.9).gain(add(cresc,0.1)).color("yellow"),
chord(chrds).anchor("C4".transpose(run(12).slow(ln))).voicing().s('gm_choir_aahs').velocity(.8).pan(0.6).gain(add(cresc,tri.range(0,0.1).slow(ln))),
chord(chrds).anchor("C5".transpose(run(12).slow(ln))).voicing().s('gm_string_ensemble_2').pan(0.4).gain(add(cresc,tri.range(0,0.1).slow(ln))),
n("[0 1 2 3 4 3 4 5 4 3 2 3 2 1]*1.7").chord(chrds).anchor("C6").voicing().s('gm_oboe').room(0.5).gain(0.2),
chrds.rootNotes("[1 2]!2").struct("x*8").clip(0.90).note().s('gm_electric_bass_finger').lpf(280).gain(0.5),
s("[bd!2 ~ bd]*2").bank("AkaiLinn").lpf(300).gain(0.15),
s("<~ sd>*4").bank("AkaiLinn").hpf(250).lpf(3500).gain(0.30),
s("hh*8").hpf(8000).gain(0.08)
).cpm(90/4).room(0.8) //.pianoroll()

26
examples/oldmacdonald.js Normal file
View File

@@ -0,0 +1,26 @@
// old mcdonalds has bad samples
setDefaultVoicings('legacy')
const beast = ["crow","space","gm_bird_tweet","space:4","clash","space:1"]
const bsequ = "<~@2 0 ~@3 1 0 ~@3 2 1 0 ~@3 3 2 1 0 ~@3 4 3 2 1 0 ~@2>".pick(beast)
const chrds = "F [A# F] [F C] [F@3 ~]";
const strct = "[[x ~]!2] [[x ~]!2 x ~]";
const bstrc = "[[~ x]!2] [[~ x]!2 ~ x]";
const trnsp = "<0!4 1!5 2!6 3!7 4!8 ~>";
"<[0,3] [0,1] 2 0!2 [0,1] [2,1] 2 0!2 [0,1] [2,1]!2 2 0!2 [0,1] [2,1]!3 2 0!2 [0,1] [2,1]!4 2 [0@7 ~] ~>".pick(
[stack(
"F5*2 [F5 C5] D5*2 C5 A5*2 G5*2 F5@2".note().clip(0.9),
chord(chrds).anchor("G4").voicing().struct("[~ x]*4 [[~ x]*2 [x@3 ~]]").gain(0.6),
n("[2 1]*4").chord(chrds).anchor("F2").voicing().struct("[x ~]*8").gain(0.6),
).piano().add(note(trnsp))
,"~@7 [C5 D5]".note().clip(0.8).piano().add(note(trnsp))
,stack(
stack(
"[[F5*2 ~]!2] [[F5 ~]!2 F5*2 ~]".note(),
chord("F").anchor("G4").voicing().struct(strct).gain(0.6),
"F2".struct(strct).note().gain(0.6)
).clip(0.8).piano().add(note(trnsp)),
"F".struct(bstrc).s(bsequ).release(0))
,"0,1,2,3,4,5".pick(beast).gain(0) // samples preload trick
]).cpm(140/8).room(0.4)

23
examples/omalley.js Executable file
View File

@@ -0,0 +1,23 @@
// "O'Malley, Former Underdog" (work in progress)
// song @by Deerhoof
// script @by eefano
setDefaultVoicings('legacy')
const crdpart = "<~@6 0@17 1@4 0@17 1@4 2@10>".pickRestart(
["< C@2 D@2 [[C ~]!3 D@2 [D ~] D@2]@2 G@2 D@3 Am G D A D@2 >"
,"< Em@2 D@2 >"
,"< [G A] [[C ~]!3 D@2 [D ~] D@2]!3 D >/2"
,"< G [D@6 G@10] >"
]);
stack("~"
,"<0@6 1@17 2@4 1@17 2@4 3@2 ~@8>".pickRestart(
["< <~ 0 1 2 3 4 5 6 7 4 5 6 7 8 9 10 11 7 8 9 10 11 12 13> ~>*8".sub(7)
,"< ~@2 5 6 7@2 6 5 6 ~ 4 ~@3 8 ~@11 7 8 9@2 8 7 8 ~ 6 ~@3 11@4 10 9 10 ~ 8 ~ 9@2 8 7 8 ~ 6 ~ 7 6 5 ~ 6 ~ 4 ~@5 >*4"
,"< 7@3 8 9@2 12@2 11@3 8 6@4 >*4"
,"< 7@2 6@2 5 6 5 4 >*4"
,"< 7 ~@7 6 ~@7 5 ~@2 5 ~ 5 4 ~@9 >*4"
]).n().scale("g3:major").s("gm_lead_1_square").room(0.4).delay(0.4).dfb(0.3).dt(60/128).gain(0.65)
,crdpart.chord().anchor("A4").voicing().s("gm_lead_8_bass_lead").room(0.4).color("blue").gain(0.5)
,s("hh*2").bank("RolandTR909").room(0.2).color("yellow").gain(0.2)
).cpm(147/2)

42
examples/pumpupthejam.js Normal file
View File

@@ -0,0 +1,42 @@
// "Pump Up The Jam" - Work In Progress
// song @by Technotronic
// script @by eefano
const pickRestart = register('pickRestart', (arr, pat) => pat.pick(arr.map((x)=>x.restart(pat.collect().fmap(v=>v+1)))))
const as = register('as', (mapping, pat) => { mapping = Array.isArray(mapping) ? mapping : [mapping];
return pat.fmap((v) => { v = Array.isArray(v) ? v : [v, 0];
return Object.fromEntries(mapping.map((prop, i) => [prop, v[i]])); }); });
stack("~"
,"<~@8 0@4 1@4 ~@8>".pickRestart(
["[u [u e] a [u i] [u ~] [a u] [i a] [o@3 i] ~ [a e] [a i] [o@3 i] [~ u@2 a] [e e] [o i] [o@3 i]]/4"
,"~ [u i] [u ~ ~ a] [i i@2 o]"
]).vowel().s("z_sawtooth").clip(0.8).gain(1.4)
,"<~@16 0@8>".pickRestart(
["[ ~@2 4 [5:1 ~] ~ [~ 0] [3:-1@5 3:1@2 2]@2 ~ [4@3:1 3 3@3 2 2@3 3 4:1@3 0 0@2 2:2@2]@5 [~ ~ 0@2 ~ 0@2 -2:-3]@2 ]/4"
]).as("n:penv").scale("c4:minor").clip(0.90).patt("0.15").s("square").delay(0.3).dfb(0.3).dt(60/128).gain(0.7)
,"<0@32>".pickRestart(
["[~@13 [[~@3 [0,-2,-4]@2 ~]@3 [0,-2,-4] [1,-1,-3]!2]@3 ]/4"
]).scale("c4:minor").note().clip(0.7).s("z_sawtooth").color("red").adsr("0.07:.1:0.6:0.1").gain(0.5)
,"<0@12 0 1 ~@2 3@8>".pickRestart(
["[0 ~@23]/2"
,"~@2 [~ [e2 ~]] [[0 2] ~]"
,"[0 ~ ~ 0 ~ ~ 0 ~] <[[~ [0 1]] [2 ~]] ~>"
]).scale("c2:minor").note().clip(0.9)
.layer(x=>x.s("z_sawtooth").delay(0.6).dfb(0.5).dt(60/125*3/4).pan(0.55).gain(0.8)
,x=>x.s("z_square").lpf(300).lpe(2).lpa(-1.5).lpd(0.1).lpr(0.05).pan(0.45).gain(1)).color("green")
,"<0@4 [0,1]@12 [0,1,2]@4 [0,1,2,3]@4>".pickRestart(
[stack(s("oh*16").pan(0.45).gain("[0.08 0.16]*4").release(0),s("hh*4").pan(0.7).gain(0.20))
,s("bd*4").lpf(150).gain(1)
,s("[~ cp]*2").gain(0.5).pan(0.25)
,s("[~ rd]*4").gain(0.15).release(0).hpf(1500).pan(0.75)
,s("[~ sd!3]!4 [sd*4]!4").slow(2).gain(run(32).slow(2).mul(1/31).add(0.1).mul(0.4))
,s("cr").gain(0.2)
,s("bd").gain(0.8)
]).bank("RolandTR909").color("yellow").velocity(0.7)
).cpm(124.5/4).room(0.3)

40
examples/pyramidsong.js Normal file
View File

@@ -0,0 +1,40 @@
// "Pyramid Song (wip)"
// song @by Radiohead
// script @by eefano
setcps(104/60/4)
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
let chr = {X:"f#2,c#3,a#3,c#4,f#4", Y:"g2,d3,b3,d4,f#4", Z:"a2,e3,a3,c#4,f#4", J:"g2,d3,b3,d4,g4", K:"f#2,c#3,a#3,c#4,g4",
V:"f#2,c#3,a3,c#4,f#4", W:"e2,b2,g#3,b3,f#4"}
piano: "<[i1 i2 i3 i4] ooooh [v1 v2]!4 ooooh@2 [v1 v2]!3 [v1 v3] [v3 v2] [i1 i2 i3 i2] [i3 i2 i3 i2] end>/8".pickRestart(
{i1:`<[[X:.6 X:.8]@3 Y:.5@2 [Z:.5 Z:.5]@3]>/2`, i2: `<[[Z:.4 Y:.4]@3 Y:.3@2 [J:.6 J:.9]@3]>/2`,
i3:`<[[K:.8 X:.6]@3 Y:.5@2 [Z:.5 Z:.5]@3]>/2`, i4: `<[[Z:.4 Y:.4]@3 Y:.4@2 [Y:.4 Y:.7]@3]>/2`,
ooooh:`<[[X X]@3 Y@2 [Z Z]@3] [[Z Y]@3 Y@2 [X X]@3] [[X X]@3 Y@2 [Z Z]@3] [[Z Y]@3 Y@2 [Y Y]@3]>/2`,
v1:`<[[X X]@3 Y@2 [Z Z]@3] [[Z Y]@3 Y@2 [X X]@3]>/2`,
v2:`<[[V V]@3 W@2 [W W]@3] [[Y Y]@3 Y@2 [Y Y]@3]>/2`,
v3:`<[[V V]@3 W@2 [W W]@3] [[Y Y]@3 X@2 [X X]@3]>/2`,
end:`<X:1>/8`,
}).split([0,.5],(x)=>x[0].pickOut(chr).velocity(x[1])).note().piano().gain(0.8).room(.6)
ooooh: "<~ 0 ~@4 0@2 ~@8>/8".pickRestart([
"<f#5@11 e5:-2 g#5:4 e5:-4 [f#5:2 ~] [~ g#5 e5] f#5@4 g#5 f#5 e5 d5 c#5@5 ~@3>*4"
]).split([0,0],(x)=>x[0].penv(x[1])).patt(0.04).s("triangle").attack(.08).release(.08).note().vmod(.1).vib(5).gain(0.3).lpf(2000).room(1.5)
drums: "<~@6 [~@15 0@15 1@2] [2,3]@8 3>/8".pick([
"<[bd,rd] ~ [~ sf*3] [bd,rd] ~ [~ sf*3] [bd,rd] ~ ~ [~ sf*3] [bd,rd] ~ [~ sf*3] [bd,rd] ~ [~ sf*3]>*8",
"<[sd sf bd] [sf sd sd]>*4",
"<[rd*4],[<~ ~ ~ bd ~ bd ~ ~ bd ~ bd ~ ~ bd ~ bd> <~!14 sf!2> <~ sd bd ~ sd ~ sd bd ~ sd ~ ~ sd ~ sd sd>]*4>",
"<cr,bd>/8",
]).pickOut({
bd: s('bd').bank('Linn9000').lpf(1000),
sd: s('sd').bank('RolandMT32').velocity(.5),
sf: s('sd').bank('RolandMT32').velocity(.2),
rd: s('rd').bank('Linn9000').velocity(0.3).hpf(8000),
mt: s('mt').bank('RolandMT32'),
lt: s('lt').bank('RolandMT32'),
cr: s('cr').bank('Linn9000').speed(0.4).velocity(0.3).hpf(4000),
}).room(.2).gain(0.5)

40
examples/rhythmofthenight.js Executable file
View File

@@ -0,0 +1,40 @@
// "The Rhythm Of The Night" - Work In Progress
// song @by Corona
// script @by eeefano
setDefaultVoicings('legacy')
const as = register('as', (mapping, pat) => { mapping = Array.isArray(mapping) ? mapping : [mapping];
return pat.fmap((v) => { v = Array.isArray(v) ? v : [v, 0];
return Object.fromEntries(mapping.map((prop, i) => [prop, v[i]])); }); });
const crdpart = "<~ 0@10 1@24 0@19>".pickRestart(
["Ab Cm Bb F@2".slow(5)
,"Bb@3 Ab@3 Cm@2".slow(8)
]);
stack
("<0 1@4 0 1@4 ~@8 2 3@7 2 3@7 0 1@4 0 1@4 0 1@4 0 1@4>".pickRestart(
["~ [4@3 ~]!3 7:5 6 4 3"
,"2:-1 0:-2 ~@4 6:1 4:-1 6 4:2 ~@4 [4:2 3]@3 ~@6 4 7:5 6 [4@2 ~] [3:-1 2@3]@2 0 ~@2".slow(4)
,"~@6 [6 ~]!2"
,"6 5@0.5 [5 ~] [4 ~]!2 [3 ~] 3:2@1.5 ~@7 6@2 6:2 [5 ~ ]!2 4 3@2 4 2 0:-2 ~@7 [0 2]@3 3@2 4 6:4 4:-4 ~ 0 2 0 4 ~ 0 0:2@2 ~@7".slow(7)
]).as("n:penv").scale("c4:minor").patt("0.07").s("gm_lead_1_square").room(0.4).delay(0.3).dfb(0.35).dt(60/128).gain(0.85)
,crdpart.chord().anchor("F4").voicing().s("gm_synth_strings_1").color("blue").gain(0.4)
,"<~@11 1@23 ~ 0@19>".pickRestart(
["2 ~@2 2 ~@2 2 ~@3 2 ~@3 2 ~"
,"[2 ~@2 2 ~@2 2 ~]!2"
]).n().chord(crdpart).anchor(crdpart.rootNotes(2)).voicing().s("gm_synth_bass_1").lpf(1500).room(0.5).color("green").gain(0.9)
,"<~@11 1@8 ~@16 0@19>".pickRestart(
["<5 7 6 3!2> ~ 9 ~ 10 ~ ~ 12 ~ 11 ~ 10 ~ 11 9 ~"
,"<6!3 5!3 7!2> ~ 9 ~ 10 ~ ~ 12 ~ 11 ~ 10 ~ 11 9 ~"
]).scale("c3:minor").note().s("gm_lead_2_sawtooth").room(0.3).delay(0.3).dfb(0.5).dt(60/128*2).color("red").gain(0.6)
,"<[2,3] ~@10 0@6 [0,1]@2 [0,2] 0@5 [0,1]@2 [0,2] 0@6 [2,3] 0@8 [0,1]@2 [0,2] 0@8>".pickRestart(
[stack(s("bd*4").gain(0.8),s("[~ oh]*4").gain(0.14),s("hh*16").gain(0.09),s("[~ cp]*2").gain(0.4))
,s("[~ sd!3]!4 [sd*4]!4").slow(2).gain(run(32).slow(2).mul(1/31).add(0.1).mul(0.4))
,s("cr").gain(0.2)
,s("bd").gain(0.8)
]).bank("RolandTR909").room(0.2).color("yellow").velocity(1)
).cpm(128/4)

15
examples/shanghai.js Normal file
View File

@@ -0,0 +1,15 @@
// "Shanghai" (work in progress)
// composed @by King Gizzard
// script @by eefano
setcps(81 / 60)
shangai: n("<0 1 2 ~ 4 5 5 ~ 4 2 1 5 8 7 9!2 7 8 5 1 2 4 ~ 5!2 4 ~ 2 1 0 -7!8>*4").scale('ab4:major').clip(.5).s("triangle").room(.8)
chords: n("<[0,2,4]!4>".add("<0 1 0 1 -2 0>/8")).scale("<ab3:major@5 bb3:major@1>/8").piano().gain(.5)
bass: n("<0@7 -4 0@6 0@4 -4 0@9 3@2 4@2>*4".add("<0 1 0 1 5 1>/8")).scale('ab1:major').clip(.95).s("gm_electric_bass_finger").lpf(800)
hh: s("<hh*4>").bank('9000').speed(1.5).gain(.2)
bd: s("<[bd@3 <~ bd>] ~>").bank('9000').gain(.7)
sd: s("<~ sd>").bank('9000').gain(.7)

View File

@@ -0,0 +1,62 @@
// "She don't use jelly" (work in progress)
// composed @by The Flaming Lips
// script @by eefano
const gString = register('gString', (n,tuning, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+tuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=[40,45,50,55,59,64]) => (strums.pickOut(
[fingers.pickOut(fingering).gString(0,tuning),fingers.pickOut(fingering).gString(1,tuning),fingers.pickOut(fingering).gString(2,tuning)
,fingers.pickOut(fingering).gString(3,tuning),fingers.pickOut(fingering).gString(4,tuning),fingers.pickOut(fingering).gString(5,tuning)]));
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
setCps(86 / 60 )
const fingering =
{D5:"x:5:7:7:x:x",G5:"3:5:5:x:x:x",A5:"5:7:7:x:x:x",
D:"10:12:12:11:10:10",C:"8:10:10:9:8:8",G:"3:5:5:4:3:3",A:"5:7:7:6:5:5"
};
const sk = 300, sh = silence, strumming =
{d: stack(0,timeCat([1,sh],[sk,1]),timeCat([2,sh],[sk,2]),timeCat([3,sh],[sk,3]),timeCat([4,sh],[sk,4]),timeCat([5,sh],[sk,5]))
,u: stack(5,timeCat([1,sh],[sk,4]),timeCat([2,sh],[sk,3]),timeCat([3,sh],[sk,2]),timeCat([4,sh],[sk,1]),timeCat([5,sh],[sk,0]))
};
const song = "<0 1@8 2>/4"
lead: song.pickRestart(
["<~ ~ ~ [~ c4:7:.5]>"
,"<f#4 f#4*2 [a4:3:.1 f#4:-2:.1] [e4 f#4@2:3:.1 f#4]@2 f#4*2 [g4 f#4] [c#5:-2:.1 e4:2:1] >"
,"<f#4 ~@3>"
]).as("note:penv:patt").release(song.pickRestart([0,0,2]))
.s("gm_overdriven_guitar:11").color('magenta').gain(.55).hpf(400).lpf(5000).pan(.5)
rthm: song.pickRestart(
["~"
,"<D5:d [D5:d D5:u] G5:d [G5:d A5:u@2 A5:d]@2 [G5:d G5:u] [A5:d A5:u] [G5:d ~]>"
,"<D5:d ~@3>"
]).split([0,0],s=>guitar(s[1].pickRestart(strumming),s[0]).transpose(-12)
.release(song.pickRestart([.1,.1,2]))
.s("gm_overdriven_guitar:6").color('cyan').hpf(700).lpf(6000)).gain(1.5).pan(.4)
bass: song.pickRestart(
["~"
,note("<d2 d2*2 g1*2 [g1 a1@2 a1]@2 g1*2 a1*2 [g1 ~]>")
,"~"
]).s("gm_electric_bass_finger").color('green').lpf(500).dist("4:.25")
drum: song.pickRestart(
["~"
,"<cr,[hh!15 oh],[bd sd bd*2 [sd bd] [~ sd] [bd ~] [sd bd] [bd sd]]>/8"
,"<cr,bd>/4"
]).pickOut({
bd:s('linndrum_bd').hpf(50).lpf(2000).velocity(.8),
sd:s('linndrum_sd').hpf(200).velocity(.7),
hh:s('linndrum_hh').hpf(7000).speed(1.5).velocity(.3),
oh:s('linndrum_oh').hpf(7000).speed(1.1).velocity(.3),
cr:s('linndrum_cr').hpf(7000).speed(1.2).velocity(.3),
}).color('yellow').gain(1.2)
all(x=>x.rsize(.8).room(1.3)
// .ribbon(1*4,2*4)
)

17
examples/sparky.js Normal file
View File

@@ -0,0 +1,17 @@
await samples({'gtr': 'gtr/0001_cleanC.wav'}, 'github:tidalcycles/Dirt-Samples/master/');
const melodia = x => x.note().s("ocarina").gain(0.6).clip(1).release(0.1).color(2)
const guitar = x => x.note().s("gtr").room(1).gain(0.20).clip(1).release(0.3)
const accordi = x => x.note().s("recorder_bass_sus").gain(1.5).clip(1).release(0.5)
const basso = x => x.note().s("gm_electric_bass_pick").gain(0.8).clip(1).sustain(0.8)
const ritmo = x => x.bank("AlesisHR16").clip(1).gain(0.08)
const scala = "<c#4:major [f#4:major b3:major] [g#4:minor e4:major] [a4:major f#4:minor] [e4:major a4:major]>"
stack(
"<[0,2,4]*2>".struct("[x ~]*4").scale(scala).apply(accordi),
"<[4 2 0 4]*2 >".scale(scala).transpose(-12).apply(guitar),
"-3".struct("[x ~]*4").scale(scala).transpose(-12).apply(basso),
s("[sd,hh*2]!4").apply(ritmo),
).cpm(120/4)

17
examples/stacktricks.js Executable file
View File

@@ -0,0 +1,17 @@
stack("c","e","g")
.withHap((hap)=>{
hap.context.tempvalue=hap.value;
hap.value=hap.context.stacking===undefined?0:hap.context.stacking[0];
return hap;})
.eq("<0 1 2>").filterValues((val) => val)
.withHap((hap)=>{
hap.value=hap.context.tempvalue;
delete hap.tempvalue;
return hap;})
.note().piano()

View File

@@ -0,0 +1,11 @@
setcps(0.7);
p1: n("0 2 4 6 7 6 4 2")
.scale("<c3:major>/2")
.s("supersaw")
.distort(0.7)
.superimpose((x) => x.detune("<0.5>"))
.lpenv(perlin.slow(3).range(1, 4))
.lpf(perlin.slow(2).range(100, 2000))
.gain(0.3);
p2: "<a1 e2>/8".clip(0.8).struct("x*8").s("supersaw").note();

23
examples/strudelman.js Normal file
View File

@@ -0,0 +1,23 @@
// "Strudelman will eat you"
// @by eefano
setcps(1)
die: s("cr/16").late(666)
.bank(rand.range(0,3).pick(["RolandTR707","RolandS50","SequentialCircuitsDrumtracks","Linn9000"]))
.clip(rand.range(1,3))
.loop(1).loopBegin(.1)
.loopEnd(rand.range(.18,.3))
.speed(rand.range(.06,.10))
.pan(rand.range(.3,.7))
.gain(.2).attack(.5).release(3).color('black')
doom: note("a1/8").late(333)
.s(rand.range(0,40).pick(["numbers:0","numbers:1","numbers:2","numbers:3","numbers:4",
"numbers:5","numbers:6","numbers:7","numbers:8","numbers:9","~"]))
.speed(rand.range(.2,.3))
.gain(.9).color('black')
pain: s(`<[RolandTR707_cr,RolandS50_cr,SequentialCircuitsDrumtracks_cr,Linn9000_cr,
numbers:0,numbers:1,numbers:2,numbers:3,numbers:4,
numbers:5,numbers:6,numbers:7,numbers:8,numbers:9] ~@666>`).gain(0).color('black')

30
examples/strudelwall.js Normal file
View File

@@ -0,0 +1,30 @@
// "Strudelwall"
// guitar prototype @by eefano
const standardtuning = [40,45,50,55,59,64];
const fingering =
{C:"x:3:2:0:1:0",A:"x:0:2:2:2:0",G:"3:2:0:0:0:3",E:"0:2:2:1:0:0",D:"x:0:0:2:3:2"
,Am:"0:0:2:2:1:0",Em:"0:2:2:0:0:0",Dm:"x:0:0:2:3:1",Em7:"0:2:2:0:3:3", G_:"3:2:0:0:3:3"
,Dsus4:"x:x:0:2:3:3",A7sus4:"x:0:2:0:3:3"
};
const sk = 300, sh = silence, strumming =
{d: stack(0,timeCat([1,sh],[sk,1]),timeCat([2,sh],[sk,2]),timeCat([3,sh],[sk,3]),timeCat([4,sh],[sk,4]),timeCat([5,sh],[sk,5]))
,u: stack(5,timeCat([1,sh],[sk,4]),timeCat([2,sh],[sk,3]),timeCat([3,sh],[sk,2]),timeCat([4,sh],[sk,1]),timeCat([5,sh],[sk,0]))
//{d: "[~@0 0@300],[~@1 1@300],[~@2 2@300],[~@3 3@300],[~@4 4@300],[~@5 5@300]"
//,u: "[~@5 0@300],[~@4 1@300],[~@3 2@300],[~@2 3@300],[~@1 4@300],[~@0 5@300]"
};
const gString = register('gString', (n, pat) =>
(pat.fmap((v) => { if(v[n]=='x') return note(0).velocity(0);
return note(v[n]+standardtuning[n]); }
).innerJoin()));
const guitar = (strums,fingers,tuning=standardtuning) =>
(strums.pickRestart(strumming).pickOut(
[fingers.pickOut(fingering).gString(0),fingers.pickOut(fingering).gString(1),fingers.pickOut(fingering).gString(2)
,fingers.pickOut(fingering).gString(3),fingers.pickOut(fingering).gString(4),fingers.pickOut(fingering).gString(5)]));
stack(
guitar("[d@4 d@3 u d u d@2 d@3 u d u d@2 d@2 d u@2 u@2 u d u d u]/4","[Em7@9 G_@8 Dsus4@6 A7sus4@7 G_@2]/4")
.s("gm_acoustic_guitar_steel:2").clip(1).release(0.4).gain(0.6)
).cpm(174/4)//.pianoroll()

19
examples/strumtest1.js Normal file
View File

@@ -0,0 +1,19 @@
const k = 0.02;
function tablature(te,tB,tG,tD,tA,tE)
{ return stack(tE.add(64).late(k*5),
tA.add(59).late(k*4),
tD.add(55).late(k*3),
tG.add(50).late(k*2),
tB.add(45).late(k),
te.add(40)); }
const guitar = seq(tablature("0","2","2","1","0","0"),
tablature("0","3","2","0","1","0"),
"~");
stack(
guitar.note().s("gm_electric_guitar_jazz").clip(1).release(0.4).gain(0.5),
).cpm(110/4/2).pianoroll()

9
examples/strumtest2.js Normal file
View File

@@ -0,0 +1,9 @@
setDefaultVoicings('legacy')
const k = 0.01;
stack(
n(stack("~ -1","~@0.5 0@1.5","1 1".late(k),"~ 2".late(k*2),"~ 3".late(k*3)))
.chord("G!2 Bm E ".slow(4)).anchor("G4!2 F#4 E4".slow(4)).voicing()
.s("gm_electric_guitar_jazz").clip(1).release(0.4).gain(0.5),
).cpm(140/4).pianoroll()

13
examples/strumtest3.js Normal file
View File

@@ -0,0 +1,13 @@
setDefaultVoicings('legacy')
const k = 0.01;
stack(
n(stack("0@2 0 3@2 3 0 3",
"1@2 1 2@2 2 1 2".late(k),
"2@2 2 1@2 1 2 1".late(k*2),
"3@2 3 0@2 0 3 0".late(k*3)))
.chord("G!2 Bm E ".slow(4)).anchor("G4!2 F#4 A4".slow(4)).voicing()
.s("gm_electric_guitar_jazz").clip(1).release(0.2).gain(0.5),
).cpm(140/4).pianoroll()

102
examples/swimandsleep.js Normal file
View File

@@ -0,0 +1,102 @@
// "Swim And Sleep Like A Shark" (Work In Progress)
// song @by Unknown Mortal Orchestra
// script @by eefano
setCps(123/60)
Pattern.prototype.enumerate = function () {
const pat = this.sortHapsByPart()
return new Pattern(state => {
const haps = pat.query(state.withSpan(span => span.begin.wholeCycle()))
const chunks = haps.length
return haps.map((hap, i) => new Hap(hap.whole, hap.part.intersection(state.span), [hap.value, i, chunks])
).filter(hap => hap.part != undefined)
}).splitQueries()
}
Pattern.prototype.warp = function (tpat) {
const pat = this;
return tpat.enumerate().withValue(v => pat.zoom(Fraction(v[1]).div(v[2]),
Fraction(v[1]).add(1).div(v[2])) ).outerJoin()}
function tablature(te,tB,tG,tD,tA,tE)
{ return stack(te.add(64),tB.add(59),tG.add(55),tD.add(50),tA.add(45),tE.add(40)); }
const parts =
{theme: tablature(
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 11 ~",
"9 ~ 9 ~ 10 9 7 ~ 9 6 ~ 10 ~ 10 ~ 12 14 14 ~ 13",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 6 ~ ~ ~ ~ ~ ~ ~ ~ ~",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~",
"7 7 ~ 7 ~ 7 5 5 ~ 4 ~ 9 9 ~ 9 ~ ~ 11 ~ 11",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~",
).warp("t@2 t!4 [t!2]@4 t!2 [t!3]@6 t!4 t@2 t@3 t t@4").slow(16)
,arp1: tablature(
"~ ~ ~ 0 ~ ~ ~ 0 ~ ~ ~ 0",
"~ ~ ~ ~ ~ ~ ~ ~ ~ 0 ~ ~",
"~ 6 ~ ~ ~ 4 ~ ~ ~ ~ 2 ~",
"~ ~ 6 ~ ~ ~ 4 ~ ~ ~ ~ ~",
"4 ~ ~ ~ 2 ~ ~ ~ 0 ~ ~ ~",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~",).slow(6)
,chords: tablature(
"~ ~ ~",
"0 2 0",
"1 2 1",
"2 2 2",
"2 0 2",
"0 ~ 0",).warp("t@3 t t@4").slow(8)
,arp2: tablature(
"~ ~ ~ 4 ~ ~ ~ ~ ~ 4 ~ ~ ~",
"~ ~ 2 ~ 2 ~ ~ 4 ~ ~ 4 ~ ~",
"~ 3 ~ ~ ~ 3 ~ ~ 4 ~ ~ 4 ~",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 4",
"~ ~ ~ ~ ~ ~ 2 ~ ~ ~ ~ ~ ~",
"2 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~",).warp("t!3 t@2 t t@2 t!6 t@2").slow(8)
,arp3: tablature(
"~ ~ ~ 0 ~ ~ ~ ~ ~ ~ 0 ~ ~ ~ ~",
"~ ~ ~ ~ ~ ~ ~ ~ 0 ~ ~ 0 ~ ~ ~",
"~ 4 ~ ~ 4 ~ ~ ~ ~ 2 ~ ~ 2 ~ ~",
"~ ~ 4 ~ ~ 4 ~ ~ ~ ~ ~ ~ ~ ~ ~",
"2 ~ ~ ~ ~ ~ 2 0 ~ ~ ~ ~ ~ 0 2",
"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 0",).warp("t!3 t@2 t!11").slow(8)
,lick1: tablature(
" ~ ~ ~ ~ 17 ~",
"17 ~ 17 ~ ~ 17",
" ~ ~ ~ ~ ~ ~",
" ~ ~ ~ ~ ~ ~",
"16 16 ~ 16 ~ ~",
" ~ ~ ~ ~ ~ ~",).warp("t@2 t!4 t@2").slow(4)
,lick2: tablature(
" ~ ~ ~ ~ 16 ~",
"16 ~ 16 ~ ~ 16",
" ~ ~ ~ ~ ~ ~",
" ~ ~ ~ ~ ~ ~",
"14 14 ~ 14 ~ ~",
" ~ ~ ~ ~ ~ ~",).warp("t@2 t!4 t@2").slow(4)
,coda: tablature(
"~ ~ ~ ~ ~ ~ ~ ~",
"7 5 7 9 10 10 12 9",
"~ ~ ~ ~ ~ ~ ~ ~",
"~ ~ ~ ~ ~ ~ ~ ~",
"5 4 5 7 9 9 11 7",
"~ ~ ~ ~ ~ ~ ~ ~",).warp("t@3 t!3 t@2 t@3 t t@4").slow(8)
}; // end of parts
const split = register('split', (deflt, callback, pat) =>
callback(deflt.map((d,i)=>pat.withValue((v)=>Array.isArray(v)?(i<v.length?v[i]:d):(i==0?v:d)))));
stack(
"<~@2 intro@16 verse@66 intro@16 verse@66 intro@16 solo@32 verse@66 intro@16 solo@32 ~@4>".pickRestart(
{intro: "<theme@16>",
verse: "<arp1@6 chords@8 arp2@8 arp1@6 chords@8 arp1@6 chords@8 arp3@8 chords@8>",
solo: "<lick1 lick2 lick2:-2 lick1:-5 lick1:-7 lick2:-7 coda@2>/4"}).split([0,0],(x)=>x[0].pickRestart(parts).transpose(x[1]))
.note().s("gm_electric_guitar_jazz:0").clip(1).release(0.4).gain(0.6).color('yellow'),
"<~@2 ~@16 0@66 ~@16 0@66 ~@48 0@66 ~@48 ~@4>".pickRestart([
`<7@2 9 7 6@2 8@2 5@2 7@2 7@2 6 5 4@2 2@6 ~@2
4@2 4b@5 4 5 6 4@5 4 6@2 7@4 6@4 5@3 4 2@6 ~@8
8@2 9@4 8@4 7@4 7@6 ~@7
5@3 [4@4 5 4]@8 [3 4 5 7 5 3]@8 2@6 ~@10>*2`]).scale("e:major").transpose(12)
.note().s("gm_ocarina").gain(0.6).color('green'),
"<0@2 1@16 1@66 1@16 1@66 1@48 1@66 1@48 ~@4>".pickRestart([
"<mt sd*4 sd lt>*2",
"<bd ~ bd*2 bd*2>,sd,hh*2"])
.s().bank("Linn9000").clip(1).gain(0.08).color('cyan')
).room(0.3)

37
examples/swimmingsnake.js Normal file
View File

@@ -0,0 +1,37 @@
// "Swimming With The Snake" - Work In Progress
// song @by Tim Smith of Cardiacs
// script @by eefano
setCps(95/60)
const rando1 = `4 5 6 3 5 6 5 2 3 4 5 2 6 ~ 7 6
4 2 5 3 6 5 3 7 4 5 6 3 7 ~ 9 4 6 7 3 5 3 6 5 1 4 5 3 4 2 3 4 5
7 8 9 7 8 9 10 6 3 7 6 4 5 6 7 8 9 3 5 6 7 8 3 5 6 7 5 6 7 9 8@2`
const rando2 = `0 1 2 -1 0 1 -2 2 1 5 4 -3 0 1 2 -2
2 1 0 1 2 0 1 0 1 -1 0 -2 0 -1 -2 -1 -2 -3 -2 -1 0 -1 0 -2 -1 -2 1 0 ~ 0 -2 0
1 3 0 1 -1 2 1 0 -1 -2 -1 0 1 -3 -1 0 1 -2@2 -1 0 1 -1 -2 1 3 4 5 -1 2 3 1`
const halo = x =>
x.slow(20).scale("c#:minor").add(12).note()
const part = stack(rando1.apply(halo).gain(0.2), rando2.apply(halo).gain(0.1))
const pats =
{ba1: "[0@8 -1@4 -2@2 -3@2 -2@8]/24"
,ba2: "[-2 -1 0]/6"
,ba4: "[-1 -2 -3 2 -2 -5 [-4 -3 -2 -1 0 2 -4 -3]@12 -2@8]/26"
,al2: "[[5,2] ~ [5,2] [3,0] ~ [3,0] [4,1] ~ [4,1] [0,-3] ~ [0,-3]]/6"
,vr1: "[~@0.5 11 13!2 11@4 ~ 11 13!2 11 9 10 11 <[ 9@2.5 8@2 7@3 ~] [~@0.5 9@3 ~@5]>@8.5 ]/24"
,vr4: "[10 13 11 9 10 11 [9!2]@3 [7!2]@3 ~@14]/26"
,tr1: "[0 3 1 4 2 5 -1 2 0 3 1 4 2 5 3 6 4 1 2 -1 3 0 4 1]/6"
}
stack(part.layer(x=>x.pan(0.2),x=>x.pan(0.8).late(3/4)).s("gm_pad_warm").release(0.05).room(0.5).color("white")
,"<ba1@48 ba2@24 ba1@24 ba1@22 ba4@26 ba1@24 ba1@22 ba4@26>"
.pickRestart(pats).scale("c#:minor").sub(12).note().s("gm_synth_strings_2").gain(1).color("green")
,"<~@48 al2@24 ~@24 ~@22 ~@26 ~@46 ~@26>".pickRestart(pats).scale("c#:minor").add(24).note()
.s("gm_recorder").superimpose(x=>x.late(1/2).velocity(.5)).release(0.2).gain(0.4).color("red")
,stack("<~@48 ~@24 vr1@46 vr4@26 vr1@46 vr4@26>".pickRestart(pats),
"<~@48 ~@24 ~@46 ~@26 vr1@46 vr4@26>".pickRestart(pats).sub(2))
.scale("c#:minor").transpose(0).note().s("triangle").hpf(900).attack(.05).release(.05).clip(.97).gain(1.2).color("yellow")
,"<~@48 ~@24 ~@46 ~@26 ~@46 tr1@26>".pickRestart(pats).scale("c#4:minor")
.superimpose(x=>x.transpose(12)).note().s("supersaw").gain(0.20).lpf(2000).color("red")
,s("shaker_small").struct("[x ~ ~ x]").gain("4.0 ~ ~ 2.0").color("brown")
,s("handbells").struct("x*2 x").gain(rand.range(0.1,0.4)).color("brown")
)//.pianoroll()

21
examples/tablaturetest.js Executable file
View File

@@ -0,0 +1,21 @@
// NOT WORKING UNTIL mixJoin is implemented
const k = 2;
const tablature = (pat) => reify(pat)
.fmap(([te,tB,tG,tD,tA,tE]) => stack(
pure(tE+64).late(k*5).color("#FFF0F0"),
pure(tA+59).late(k*4).color("#FFE0E0"),
pure(tD+55).late(k*3).color("#FFD000"),
pure(tG+50).late(k*2).color("#FFD8D8"),
pure(tB+45).late(k*1).color("#FFD0D0"),
pure(te+40).late(k*0).color("#FFE8E8"))
).outerJoin()
const guitar = tablature("0:2:2:1:0:0!2 0:3:2:0:1:0 ~");
stack(
"E3 C3 ~".s("triangle"),
guitar.note().s("gm_electric_guitar_jazz").clip(1).release(0.4).gain(0.5),
).slow(5).pianoroll()

19
examples/tarantella.js Normal file
View File

@@ -0,0 +1,19 @@
// "Endless Tarantella"
// script @by eefano
setcps(140/60)
//let pizza = run(16).slow(16)
let pizza = rand.range(0,16).segment(16).slow(16)
iamme: pizza.pick(["4 ~ 4","7 ~ 7","4","4 ~ 4","5 ~ 5","5 6 5","4","4 ~ 5","4@2 3","3 ~ 4","3@2 2","2 ~ 3","4 5 4","3 2 1","0","7 ~ 7"])
.scale("a:minor").s('gm_clarinet').note()
let pasta = pizza.pick([0,0,0,0,1,1,0,0,2,2,0,0,2,2,0,0]).fast(2)
funiculi: pasta.pick(["[0 ~] [-3 ~]","[3 ~] [-2 ~]","[1 ~] [-3 ~]"]).slow(2)
.scale("a2:minor").s('gm_tuba').note().lpf(800)
funicula: pasta.pick(["[~@2 [0,2,4]]!2","[~@2 [1,3,5]]!2","[~@2 [4,-1,1]]!2"]).slow(2)
.scale("a3:minor").s('gm_harmonica').note()
uagliu: s("tambourine")

55
examples/ventocaldo.js Normal file
View File

@@ -0,0 +1,55 @@
// "Il Vento Caldo Dell'Estate (wip)"
// song @by Alice
// script @by eefano
const split = register('split', (deflt, callback, pat) => callback(deflt.map((d,i)=> pat.withValue((v)=>{
const isobj = v.value !== undefined; const value = isobj ? v.value : v;
const result = Array.isArray(value)?(i<value.length?value[i]:d):(i==0?value:d);
return (i==0 && isobj) ? {...v,value:result} : result; }))));
setCps(115/60)
synt: "<a@27 b@70 b@75 ~@56 b@70 b@75 ~@56 ~@87 ~@8>".pickRestart({
a: "<0@6 0@6 0@7 0@7 0@8 0@10 0@10>*2",
b: "<0@6 0@6 0@6 0@7 0@7 0@6 0@6 0@6 0@6 0@7 0@7 0@6 0@8 0@10 0@8 0@10 0@8 0@10 0@10 0@10>*2"
}).pickRestart(["<0 4 7 8 10 11 9 12 14 12>*2"])
.scale("c#4:major").note().s("gm_drawbar_organ:4").room(.3).lpf(1200).gain(0.7).color('yellow')
bass: "<a@172 b@56 a@145 b@56 c@87 ~@8>".pickRestart({
a: "<[<c#2:1!22 [c#2:.8 c#2:.9] > <c#3:1!6 [c#3:.8 c#3:.9]>]>".s("gm_electric_bass_finger:2"),
b: "<~@2 c#2:1@4 c2:1@2 a#1:1@6 c2:1@2 g#1:1@8 d#2:1@8 c2:1@8 f2:1@8 c#2:1@8>".s("triangle"),
c: "<~@2 [[c#2!6 a#1!8 g#1!6 d#2!8 c2!8 f2!8 c#2!8]!2]@104>".fast(1.2).s("gm_electric_bass_finger:2"),
}).split([0,.6],s=>note(s[0]).clip(s[1])).lpf(400).gain(1.5).color('cyan')
wind: "<~@172 a@56 ~@145 a@56 b@87 ~@8>".pickRestart({
a: "<~@2 C#:g#2@4 G#:g#2@2 A#m:g#2@6 C#:g#2@2 G#:g#2@8 D#:d#2@8 Cm:d#2@8 F7:d#2@8 C#:d#2@8>",
b: "<~@2 [[C#:g#2:1@6 A#m:g#2:1@8 G#:g#2:1@6 D#:a#2:1@8 Cm:a#2:1@8 F7:a#2:1@8 C#:a#2:1@8]!2]@104>".fast(1.2)
}).split([0,0,0],s=>
n(s[2].pickRestart(["<0,1,2,3>/8","<[0,1,2,3]*3>/2"]))
.chord(s[0]).anchor(s[1]).mode('above').voicing().s("gm_church_organ").gain(0.7)
.superimpose(u=>u.when(s[2],w=>
n("<4 5 6 7 8 7 6 5 4>*8").chord(s[0]).anchor(s[1])).mode('above').voicing().s("sawtooth").gain(0.65))
).room(.7).color('green')
voic: "<~@172 a@56 ~@145 a@56 b@87 ~@8>".pickRestart({
a: note(`<~ c#4 d#4@2 c#4@2 [c4 c#4] [d#4 f4] c#4@2 d#4@2 ~ [~ c#4] [c4 c#4] [d#4 f4] d#4 g#3@5
~ [~ d#4] f4@2 d#4@2 d4 d#4 ~ [~ d#4] f4@2 [g4 f4] [d#4 f4] d#4@2
~ [~ d#4] f4@2 d#4@2 [f4@3 d#4@3]@3 f4@9 >`)
.s("gm_oboe").gain(1.7).lpf(3000).release(.1),
b: note(`<~@2 [[d#4@2 c#4@2 [c4 c#4] [d#4 f4] c#4@2 [d#4@6 ~ c#4]@4 [c4 c#4] [d#4 f4] d#4
[g#3@8 ~ d#4]@5 f4@2 d#4@2 d4 [d#4@4 ~ d#4]@3 f4@2 g4@2 d#4@3
[~ d#4] f4@2 d#4@2 f4@2 d#4 f4@8 [~ <c#4 ~>]]!2]@104 >`).fast(1.2)
.s("gm_distortion_guitar:2").gain(1).lpf(3000).release(.1)
}).color('purple').room(.2)
drums: `<a@27 [a,b]@24 [a,b,c]@5 [a,d]@56 [a,d,e]@2 [a,d]@20 [a,d,f]@2 [a,d]@24 [a,d,g]@2 [a,d]@10
~@56 [a,d]@145 ~@56 h@87 ~@8>`.pickRestart({
a: "<bd,hh>", b: "<~ ~ sd ~>", c:"<[~ sd*2] ~@4>", d:"<~ sd>", e:"<~ [~ sd*2]>",
f:"<~ [[~ sd] [sd ~]]>", g:"<~ [~ sd]>",
h:"<[[[sd,[~ sd@15]] sd] sd]@2 [[bd sd [~ bd] sd]!24]@96 bd@8>".fast(1.2)
}).pickOut({
bd: s('bd').lpf(800).velocity(1.1),
sd: s('sd').velocity(.7),
hh: s('hh').velocity(0.1).hpf(8000),
cr: s('cr').speed(0.7).velocity(0.1).hpf(6000),
}).bank("Linn9000").room(0.2).gain(0.8).rsize(4)

31
examples/verminmangle.js Normal file
View File

@@ -0,0 +1,31 @@
// "Vermin Mangle" (work in progress)
// song @by Tim Smith (Cardiacs)
// script @by eefano
setcps(52 / 60)
const song = `< i@8 j@27 >`
const melody = {
i: "<f#4 ~ c#5@3 ~ a#4@2 g#4 ~ f#4 ~ a4@2 g#4 ~ f#4 ~ e4 ~ d4@2 ~@2 >*6",
j: `<f#5@2 [e5@2 c#5] c#5 [f#4 a#4 c#5] [f#5@2 g#5] g#5 a5 [c#5@2 f#5 f#5@2 f#5] f#5 e5
[c#5 b4 a#4 f#4] f#4 g#4 [c#4@3 a#4 e5@2] [d5 c#5 b4] [b4 a4 g4] f#4!2 g#4 [c#4@2 f#4] f#4@2 ~@100>`,
}
const ch0rds = {
i: "<F#@2 E7@2>",
j: "<F#@2 E7@2 F#@2 E D F# D E F# B E F# E G D B E F# D E F#@2 E@2>",
}
$: note(song.pickRestart(melody)).clip(.98)
.apply(song.pickRestart(
{ i: x=>x.s("gm_trumpet").pan(.3).gain(.6),
j: x=>x.s("gm_vibraphone:4").vib(10).vibmod(.09).delay(.4).dt(.2).dfb(.10).gain(.7).dec(2)
}))
$: chord(song.pickRestart(ch0rds)).anchor('E4').voicing()
.layer(x=>x.s("gm_accordion:2").struct("[~ x x]").clip(.6).pan(.40).gain(.4),
x=>x.transpose(12).s("gm_string_ensemble_2:2").pan(.5).gain(.4))
$: n("[0 ~ ~]").chord(song.pickRestart(ch0rds)).mode('root').anchor('f#2').voicing()
.s("gm_tuba:3").gain(1)
$: s("bassdrum2:2,tambourine:0").clip(1.5).gain(1.5)
all(x => x.room(.8))

View File

@@ -0,0 +1,18 @@
// "Veronica In Ecstasy" (Chorus)
// song @by Tim Smith (of Cardiacs)
// script @by eefano
setDefaultVoicings('legacy')
const chrds = "<B [F# A] [C G] [D C#] [E A] [B C#] [Fm A#] [E A] [A# Fm] [E F#] [E F#]>";
const meldy = `[[f#6]*3 [f#6 [~ ~ f#6]]] [[f#6]*3 [[f#6 e6 ~] e6]]
[[e6 e6 [e6 f#6]] [[g6 ~ d6] d6]] [[d6 d6 [e6 f#6]] [g#6 f6 c#6]]
[[g#5 [ ~ ~ g#5]] [[a5 b5] c#6 c#6]] [[f#6]*3 [f6 c#6 g#5]]
[[g#5 [ ~ ~ g#5]] [[a#5 c6] d6 a#5]] [[g#5 a5 b5] [c#6 d6 e6]]
[[d6 a#5 f5] [[g#5 ~] g#5]] ~ [~@3 [~ ~ f#6]]`.slow(11);
stack(
meldy.clip(0.9).note(),
//meldy.transpose("-12").note(),
chord(chrds).anchor("G4").voicing().struct("<[[~ x x] [x@2 x] [~ x ~] x]!8 [x!4] [~ x ~ x]!2>").gain(0.6),
chrds.rootNotes(2).note().struct("<[x@2 ~]*2!9 [x ~ [~ ~ x] ~]!2>").gain(0.6),
).cpm(120/4).room(0.4).piano()//.pianoroll()
.room( slider(1.93,0,10))
.rsize( slider(2,0,8,1))

16
examples/veronicazigzag.js Executable file
View File

@@ -0,0 +1,16 @@
setDefaultVoicings('legacy')
const chrds = "<B [F# A] [C G] [D C#] [E A] [B C#] [Fm A#] [E A] [A# Fm] [E F#] [E F#]>".rev();
const meldy = `[[f#6]*3 [f#6 [~ ~ f#6]]] [[f#6]*3 [[f#6 e6 ~] e6]]
[[e6 e6 [e6 f#6]] [[g6 ~ d6] d6]] [[d6 d6 [e6 f#6]] [g#6 f6 c#6]]
[[g#5 [ ~ ~ g#5]] [[a5 b5] c#6 c#6]] [[f#6]*3 [f6 c#6 g#5]]
[[g#5 [ ~ ~ g#5]] [[a#5 c6] d6 a#5]] [[g#5 a5 b5] [c#6 d6 e6]]
[[d6 a#5 f5] [[g#5 ~] g#5]] ~ [~@3 [~ ~ f#6]]`.slow(11).rev();
stack(
meldy.clip(0.9).note(),
chord(chrds).anchor("G4").voicing().struct("<[[~ x x] [x@2 x] [~ x ~] x]!8 [x!4] [~ x ~ x]!2>").gain(0.55),
n("0").chord(chrds).mode("root:c3").voicing().struct("<[x@2 ~]*2!9 [x ~ [~ ~ x] ~]!2>").gain(0.7),
).cpm(105/4).piano()
.room( slider(1.93,0,10))
.rsize( slider(2,0,8,1))

48
examples/vine.js Normal file
View File

@@ -0,0 +1,48 @@
// "Vine" (work in progress)
// composed @by Tim Smith of Spratleys Japs
// script @by eefano
setCps(143 / 60 / 4)
const song = "<0@8 1@28 2@24 3@24 1@25 1@28 2@36 3@24 4@16 5@12 6@66 7@66 8@66 ~@8>*4"
const chordseq = song.pickRestart(["~",
"<C@3 G# C# Cm G# C# Cm B F# A@3>*2", // verse
"<E B C# G# A# F>*2", // chorus
"<G# C@2>/2", "~", // post-chorus
"<E@4 C@2 A#@3 D@4 C@2 G#@5 D@4>*8", // interlude
"<Dm@9 G@5 A@5 G@4 A@6 Dm@4 G@10 A@5 G@3 A@4 G@5 Dm@13 G@7 A@5 G@7 A@4 G@4 Dm@7 G@9 A@4 G@5 A@3 G@4>*8", //snare
"<Dm@9 G@5 A@5 G@4 A@6 Dm@4 G@9 A@6 G@3 A@4 G@5 Dm@13 G@7 A@5 G@7 A@4 G@4 Dm@7 G@9 A@4 G@5 A@3 G@4>*8", //handclaps
"<Dm@9 G@6 A@5 G@4 A@6 Dm@4 G@9 A@6 G@3 A@4 G@5 Dm@13 G@7 A@5 G@7 A@4 G@4 Dm@7 G@9 A@4 G@5 A@3 G@3>*8"]); //triangle
voice: song.pickRestart(["~",
note("<c4*2 c4 [a#3 c4] c4@2 ~ c4*2 d#4 f4 ~ d#4*2!2 d#4 c4 g#4 ~ g4 ~ [f#4 f4] [d#4 c#4] a#3 ~ [e4 d#4] e4 [e4 f#4] g#4@2 g#4>*4"),
note("<[g#4@2 ~ f#4] [f#4@2 ~ f4] [f4@2 ~ d#4] [d#4@2 ~ d4] [d4@2 ~ c4] [c4 a4@3]>*2").gain(1.4),
"~"
]).s('gm_oboe').clip(.95).color('yellow')
bass: n(song.pickRestart(["~","0*4","[0@2 ~ 0]*2","0*8"])).chord(chordseq).mode("root:e2").voicing()
.s("gm_electric_bass_pick").clip(.90).lpf(300).gain(1).color('green')
guitar: n(song.pickRestart(["~","[0,2,3]*2","[[0,2,3]@3 [0,2,3]]*2","~"])).chord(chordseq).mode("root:e3").voicing()
.s(song.pick(["~","gm_acoustic_guitar_steel:2","gm_overdriven_guitar:2","~"])).color('red')
organ: n(song.pick(["~","~","~","~","[2 1]*4"])).anchor("g5").chord(chordseq).voicing()
.s("sawtooth").clip(.6).color('cyan')
drums: song.pickRestart([
"<hh*4,[<bd bd*2> sd]>*2",
"<hh*4,[bd sd]>*2",
"<hh*4,[bd sd]>*2",
"~","<sl*4>","<sl*4>",
"<hh*4,[<bd bd*2> sd]>*2",
"<hh*4,[<bd bd*2> [sd,cp]]>*2",
"<hh*4,tr*2,[<bd bd*2> [sd,cp]]>*2",
]).pickOut({
bd:s('linndrum_bd').lpf(3000).room(.2).velocity(.8),
sd:s('linndrum_sd').room(.2).velocity(.65),
hh:s('linndrum_hh').hpf(7000).speed(1.5).velocity(.3),
oh:s('linndrum_oh'),
sl:s('sleighbells'),
tr:s('anvil').speed(1.15).velocity(30),
cp:s('cp')
})
all(x=>x.room(.1)
// .ribbon(2*4,1*8)
)

22
examples/waltzno2.js Normal file
View File

@@ -0,0 +1,22 @@
// "Waltz #2" (cps function demo)
// composed @by Dmitri Shostakovich
// script @by eefano
setDefaultVoicings('legacy')
melody: "<~@4 0@16 1@7 2@11.5 ~@3.5>".pickRestart([
`<4 [2@2 1] [0@4 0 1]@2 [2 0 2] [4@2 5] 4 3
3 [1@2 0] [0b@4 -3 0b]@2 [1 0b 1] [3 4 5] 4b 4>`,
"<[9,7] [[8,6]@2 [7,5]] [[6,4]@2 [5,3]] [3,0] [8,6] [[7,5]@2 [6,4]] [6,4]>",
"<[~ [2 ~] [3 ~]] [[4 ~] [4 3] [4 5]] [[3 ~] [3 2] [3 4]] [[2 ~] ~ [4 ~]] > ".sub("<0 0 [0,2]>/4") ])
.scale("c4:minor").note().s("gm_oboe:2").gain(0.7)._pianoroll({minMidi:10})
piano: "<0@28 1@10 0@4>".pickRestart([
n("<<0 -1> [4,5]!2>*3").chord("<Cm@10 Fm@4 G@4 Cm@4 Fm@2 Bb@2 Eb Ab>"),
n("<3 <[4,5] > ~>*3").chord("<G Ab Cm Ab>")
]).anchor('f2').mode('root').voicing().piano()._pianoroll()
tempochanges: cps(sine.segment(32).slow(16).mul(30).add(160).div(60*3)).gain(0)
all(x=>x
//.ribbon(24,16)
.room(0.6))

29
examples/woodeneye.js Normal file
View File

@@ -0,0 +1,29 @@
// "Woodeneye" (wip)
// song @by Cardiacs
// script @by eefano
setCps(200 / 60 / 2)
const song = "<1@16 2@16 3@7 4@4>"
const chordseq = song.pickRestart([
"~",
"<[~ A:f4:.6:0!15]>/4",
"<[~ A:g4:.6!7] [F:f4:.6!8]>/2",
"<D:d4 G:d4 A:d4:.8@2 B:g4 C:g4 G:d4:.8>",
"<[~ D:g4:.6!3] [D:g4 A:d4]>"])
mello: chordseq.as("chord:anchor:clip:n").voicing().speed(0.97).begin(.03).s('gm_synth_bass_1').lpf(2000).gain(.7).color('cyan')
drums: song.pickRestart([
"<oh,<~ bd!3> [sd <~!3 [sd,oh]>]>*2",
"<hh,<~ bd!3> [sd <~!3 bd ~!3 [sd,oh]>]>*2",
"<hh,<~ bd!3> [sd <~!3 [sd,oh]>]>*2",
"<oh,[bd <~!3 bd>] sd>*2",
]).pickOut({
bd: s('linndrum_bd').lpf(2000).room(.2).velocity(.8),
sd: s('linndrum_sd').room(.2).velocity(.75),
hh: s('linndrum_hh').hpf(7000).speed(1.5).velocity(.4),
oh: s('linndrum_oh').speed(1.3).hpf(3000).velocity(.3).clip(1.2),
})
all(x => x.room(.1)
// .ribbon(2*4,1*8)
)