1export const timeCatMini = `stack( 2 "c3@3 [eb3, g3, [c4 d4]/2]", 3 "c2 g2", 4 "[eb4@5 [f4 eb4 d4]@3] [eb4 c4]/2".slow(8) 5)`; 6 7export const timeCat = `stack( 8 timeCat([3, c3], [1, stack(eb3, g3, seq(c4, d4).slow(2))]), 9 seq(c2, g2), 10 seq( 11 timeCat([5, eb4], [3, seq(f4, eb4, d4)]), 12 seq(eb4, c4).slow(2) 13 ).slow(4) 14)`; 15 16export const shapeShifted = `stack( 17 seq( 18 e5, [b4, c5], d5, [c5, b4], 19 a4, [a4, c5], e5, [d5, c5], 20 b4, [r, c5], d5, e5, 21 c5, a4, a4, r, 22 [r, d5], [r, f5], a5, [g5, f5], 23 e5, [r, c5], e5, [d5, c5], 24 b4, [b4, c5], d5, e5, 25 c5, a4, a4, r, 26 ).rev(), 27 seq( 28 e2, e3, e2, e3, e2, e3, e2, e3, 29 a2, a3, a2, a3, a2, a3, a2, a3, 30 gs2, gs3, gs2, gs3, e2, e3, e2, e3, 31 a2, a3, a2, a3, a2, a3, b1, c2, 32 d2, d3, d2, d3, d2, d3, d2, d3, 33 c2, c3, c2, c3, c2, c3, c2, c3, 34 b1, b2, b1, b2, e2, e3, e2, e3, 35 a1, a2, a1, a2, a1, a2, a1, a2, 36 ).rev() 37).slow(16)`;
export const tetrisWithFunctions = stack(seq( 'e5', seq('b4', 'c5'), 'd5', seq('c5', 'b4'), 'a4', seq('a4', 'c5'), 'e5', seq('d5', 'c5'), 'b4', seq(r, 'c5'), 'd5', 'e5', 'c5', 'a4', 'a4', r, seq(r, 'd5'), seq(r, 'f5'), 'a5', seq('g5', 'f5'), 'e5', seq(r, 'c5'), 'e5', seq('d5', 'c5'), 'b4', seq('b4', 'c5'), 'd5', 'e5', 'c5', 'a4', 'a4', r), seq( 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'g#2', 'g#3', 'g#2', 'g#3', 'e2', 'e3', 'e2', 'e3', 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'b1', 'c2', 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', 'b1', 'b2', 'b1', 'b2', 'e2', 'e3', 'e2', 'e3', 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', ) ).slow(16);
export const tetris = stack( seq( "e5 [b4 c5] d5 [c5 b4]", "a4 [a4 c5] e5 [d5 c5]", "b4 [~ c5] d5 e5", "c5 a4 a4 ~", "[~ d5] [~ f5] a5 [g5 f5]", "e5 [~ c5] e5 [d5 c5]", "b4 [b4 c5] d5 e5", "c5 a4 a4 ~" ), seq( "e2 e3 e2 e3 e2 e3 e2 e3", "a2 a3 a2 a3 a2 a3 a2 a3", "g#2 g#3 g#2 g#3 e2 e3 e2 e3", "a2 a3 a2 a3 a2 a3 b1 c2", "d2 d3 d2 d3 d2 d3 d2 d3", "c2 c3 c2 c3 c2 c3 c2 c3", "b1 b2 b1 b2 e2 e3 e2 e3", "a1 a2 a1 a2 a1 a2 a1 a2", ) ).slow(16);
range ['g2','c4']
range ['G3','A4']
below doesn't work anymore due to constructor cleanup ).slow(1).transpose.cat(0, 2, 3, 4)`;
119export const confusedPhone = `"[g2 ~@1.3] [c3 ~@1.3]" 120.superimpose( 121 transpose(-12).late(0), 122 transpose(7).late(0.1), 123 transpose(10).late(0.2), 124 transpose(12).late(0.3), 125 transpose(24).late(0.4) 126) 127.scale(cat('C dorian', 'C mixolydian')) 128.scaleTranspose("<0 1 2 1>") 129.slow(2)`;
export const caverave = `const delay = new FeedbackDelay(1/8, .4).chain(vol(0.5), out()); const kick = new MembraneSynth().chain(vol(.8), out()); const snare = new NoiseSynth().chain(vol(.8), out()); const hihat = new MetalSynth().set(adsr(0, .08, 0, .1)).chain(vol(.3).connect(delay),out()); const bass = new Synth().set({ ...osc('sawtooth'), ...adsr(0, .1, .4) }).chain(lowpass(900), vol(.5), out()); const keys = new PolySynth().set({ ...osc('sawtooth'), ...adsr(0, .5, .2, .7) }).chain(lowpass(1200), vol(.5), out());
const drums = stack(
"c1*2".tone(kick).mask("<x@7 >/8"),
" <x!7 [x@3 x]>".tone(snare).mask("<x@7 >/4"),
"[ c4]*2".tone(hihat)
);
const thru = (x) => x.transpose("<0 1>/8").transpose(-1); const synths = stack( "<eb4 d4 c4 b3>/2".scale(timeCat([3,'C minor'],[1,'C melodic minor']).slow(8)).struct("[~ x]*2") .layer( scaleTranspose(0).early(0), scaleTranspose(2).early(1/8), scaleTranspose(7).early(1/4), scaleTranspose(8).early(3/8) ).apply(thru).tone(keys).mask("<~ x>/16"), "<C2 Bb1 Ab1 [G1 [G2 G1]]>/2".struct("[x [~ x] <[~ [~ x]]!3 [x x]>@2]/2".fast(2)).apply(thru).tone(bass), "<Cm7 Bb7 Fm7 G7b13>/2".struct("~ [x@0.1 ~]".fast(2)).voicings('lefthand').apply(thru).every(2, early(1/8)).tone(keys).mask("<x@7 ~>/8".early(1/4)) ) stack( drums.fast(2), synths ).slow(2)`;
168export const tetrisMini = `note(\`[[e5 [b4 c5] d5 [c5 b4]] 169[a4 [a4 c5] e5 [d5 c5]] 170[b4 [~ c5] d5 e5] 171[c5 a4 a4 ~] 172[[~ d5] [~ f5] a5 [g5 f5]] 173[e5 [~ c5] e5 [d5 c5]] 174[b4 [b4 c5] d5 e5] 175[c5 a4 a4 ~]], 176[[e2 e3]*4] 177[[a2 a3]*4] 178[[g#2 g#3]*2 [e2 e3]*2] 179[a2 a3 a2 a3 a2 a3 b1 c2] 180[[d2 d3]*4] 181[[c2 c3]*4] 182[[b1 b2]*2 [e2 e3]*2] 183[[a1 a2]*4]\`).slow(16) 184`;
186export const giantStepsReggae = `stack( 187 // melody 188 seq( 189 "[F#5 D5] [B4 G4] Bb4 [B4 A4]", 190 "[D5 Bb4] [G4 Eb4] F#4 [G4 F4]", 191 "Bb4 [B4 A4] D5 [D#5 C#5]", 192 "F#5 [G5 F5] Bb5 [F#5 [F#5 ~@3]]", 193 ), 194 // chords 195 seq( 196 "[B^7 D7] [G^7 Bb7] Eb^7 [Am7 D7]", 197 "[G^7 Bb7] [Eb^7 F#7] B^7 [Fm7 Bb7]", 198 "Eb^7 [Am7 D7] G^7 [C#m7 F#7]", 199 "B^7 [Fm7 Bb7] Eb^7 [C#m7 F#7]" 200 ) 201 .struct("~ [x ~]".fast(4*8)) 202 .voicings('lefthand'), 203 // bass 204 seq( 205 "[B2 D2] [G2 D2] [Eb2 Bb2] [A2 D2]", 206 "[G2 Bb2] [Eb2 F#2] [B2 F#2] [F2 Bb2]", 207 "[Eb2 Bb2] [A2 D2] [G2 D2] [C#2 F#2]", 208 "[B2 F#2] [F2 Bb2] [Eb2 Bb2] [C#2 F#2]" 209 ) 210 .struct("x ~".fast(4*8)) 211).slow(25).note()`;
range ['E3', 'G4']
TODO:
export const xylophoneCalling = // licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const t = x => x.scaleTranspose("<0 2 4 3>/4").transpose(-2) const s = x => x.scale(cat('C3 minor pentatonic','G3 minor pentatonic').slow(4)) const delay = new FeedbackDelay(1/8, .6).chain(vol(0.1), out()); const chorus = new Chorus(1,2.5,0.5).start(); stack( // melody "<<10 7> <8 3>>/4".struct("x*3").apply(s) .scaleTranspose("<0 3 2> <1 4 3>") .superimpose(scaleTranspose(2).early(1/8)) .apply(t).tone(polysynth().set({ ...osc('triangle4'), ...adsr(0,.08,0) }).chain(vol(0.2).connect(delay),chorus,out())).mask("<~@3 x>/16".early(1/8)), // pad "[1,3]/4".scale('G3 minor pentatonic').apply(t).tone(polysynth().set({ ...osc('square2'), ...adsr(0.1,.4,0.8) }).chain(vol(0.2),chorus,out())).mask("<~ x>/32"), // xylophone "c3,g3,c4".struct("<x*2 x>").fast("<1 <2!3 [4 8]>>").apply(s).scaleTranspose("<0 <1 [2 [3 <4 5>]]>>").apply(t).tone(polysynth().set({ ...osc('sawtooth4'), ...adsr(0,.1,0) }).chain(vol(0.4).connect(delay),out())).mask("<x@3 ~>/16".early(1/8)), // bass "c2 [c2 ~]*2".scale('C hirajoshi').apply(t).tone(synth({ ...osc('sawtooth6'), ...adsr(0,.03,.4,.1) }).chain(vol(0.4),out())), // kick "<c1!3 [c1 ~]*2>*2".tone(membrane().chain(vol(0.8),out())), // snare "~ <c3!7 [c3 c3*2]>".tone(noise().chain(vol(0.8),out())), // hihat "c3*4".transpose("[-24 0]*2").tone(metal(adsr(0,.02)).chain(vol(0.5).connect(delay),out())) ).slow(1) // strudel disable-highlighting;
TODO:
export const sowhatelse = // licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos // mixer const mix = (key) => vol({ chords: .2, lead: 0.8, bass: .4, snare: .95, kick: .9, hihat: .35, }[key]||0); const delay = new FeedbackDelay(1/6, .3).chain(vol(.7), out()); const delay2 = new FeedbackDelay(1/6, .2).chain(vol(.15), out()); const chorus = new Chorus(1,2.5,0.5).start(); // instruments const instr = (instrument) => ({ organ: polysynth().set({...osc('sawtooth4'), ...adsr(.01,.2,0)}).chain(mix('chords').connect(delay),out()), lead: polysynth().set({...osc('triangle4'),...adsr(0.01,.05,0)}).chain(mix('lead').connect(delay2), out()), bass: polysynth().set({...osc('sawtooth8'),...adsr(.02,.05,.3,.2)}).chain(mix('bass'),lowpass(3000), out()), pad: polysynth().set({...osc('square2'),...adsr(0.1,.4,0.8)}).chain(vol(0.15),chorus,out()), hihat: metal(adsr(0, .02, 0)).chain(mix('hihat'), out()), snare: noise(adsr(0, .15, 0.01)).chain(mix('snare'), lowpass(5000), out()), kick: membrane().chain(mix('kick'), out()) }[instrument]); // harmony const t = transpose("<0 0 1 0>/8"); const sowhat = scaleTranspose("0,3,6,9,11"); // track stack( "[<0 4 [3 [2 1]]>]/4".struct("[x]*3").mask("[~ x ~]").scale('D5 dorian').off(1/6, scaleTranspose(-7)).off(1/3, scaleTranspose(-5)).apply(t).tone(instr('lead')).mask("<~ ~ x x>/8"), "<<e3 [~@2 a3]> <[d3 ~] [c3 f3] g3>>".scale('D dorian').apply(sowhat).apply(t).tone(instr('organ')).mask("<x x x ~>/8"), "<[d2 [d2 ~]*3]!3 <a1*2 c2*3 [a1 e2]>>".apply(t).tone(instr('bass')), "c1*6".tone(instr('hihat')), "~ c3".tone(instr('snare')), "<[c1@5 c1] <c1 [[c1@2 c1] ~] [c1 ~ c1] [c1!2 ~ c1!3]>>".tone(instr('kick')), "[2,4]/4".scale('D dorian').apply(t).tone(instr('pad')).mask("<x x x ~>/8") ).fast(6/8) // strudel disable-highlighting;
TODO: rework tune to use freq
export const jemblung = // licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const delay = new FeedbackDelay(1/8, .6).chain(vol(0.15), out()); const snare = noise({type:'white',...adsr(0,0.2,0)}).chain(lowpass(5000),vol(1.8),out()); const s = polysynth().set({...osc('sawtooth4'),...adsr(0.01,.2,.6,0.2)}).chain(vol(.23).connect(delay),out()); stack( stack( "0 1 4 [3!2 5]".layer( // chords x=>x.add("0,3").duration("0.05!3 0.02"), // bass x=>x.add("-8").struct("x*8").duration(0.1) ), // melody "12 11*3 12 ~".duration(0.005) ) .add("<0 1>") .tune("jemblung2") //.mul(22/5).round().xen("22edo") //.mul(12/5).round().xen("12edo") .tone(s), // kick "[c2 ~]*2".duration(0.05).tone(membrane().chain(out())), // snare "[~ c1]*2".early(0.001).tone(snare), // hihat "c2*8".tone(noise().chain(highpass(6000),vol(0.5).connect(delay),out())), ).slow(3);
// TODO: does not work on linux (at least for me..)
export const speakerman = // licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos backgroundImage('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXR0rKqW3VwY%2Fmaxresdefault.jpg&f=1&nofb=1', { className:'darken', style:'background-size:cover'}) stack( "[g3,bb3,d4] [f3,a3,c4] [c3,e3,g3]@2".slow(2).late(.1), cat( 'Baker man', 'is baking bread', 'Baker man', 'is baking bread', 'Sagabona', 'kunjani wena', 'Sagabona', 'kunjani wena', 'The night train, is coming', 'got to keep on running', 'The night train, is coming', 'got to keep on running', ).speak("en zu en".slow(12), "<0 2 3 4 5 6>".slow(2)), ).slow(4);
356export const bossa = `const scales = sequence('C minor', ['D locrian', 'G phrygian'], 'Bb2 minor', ['C locrian','F phrygian']).slow(4) 357stack( 358 "<Cm7 [Dm7b5 G7b9] Bbm7 [Cm7b5 F7b9]>".fast(2).struct("x ~ x@3 x ~ x ~ ~ ~ x ~ x@3".late(1/8)).early(1/8).slow(2).voicings('lefthand'), 359 "[~ [0 ~]] 0 [~ [4 ~]] 4".sub(7).restart(scales).scale(scales).early(.25) 360).note().piano().slow(2)`;
362export const swimmingWithSoundfonts = `// Koji Kondo - Swimming (Super Mario World) 363stack( 364 n( 365 "~", 366 "~", 367 "~", 368 "A5 [F5@2 C5] [D5@2 F5] F5", 369 "[C5@2 F5] [F5@2 C6] A5 G5", 370 "A5 [F5@2 C5] [D5@2 F5] F5", 371 "[C5@2 F5] [Bb5 A5 G5] F5@2", 372 "A5 [F5@2 C5] [D5@2 F5] F5", 373 "[C5@2 F5] [F5@2 C6] A5 G5", 374 "A5 [F5@2 C5] [D5@2 F5] F5", 375 "[C5@2 F5] [Bb5 A5 G5] F5@2", 376 "A5 [F5@2 C5] A5 F5", 377 "Ab5 [F5@2 Ab5] G5@2", 378 "A5 [F5@2 C5] A5 F5", 379 "Ab5 [F5@2 C5] C6@2", 380 "A5 [F5@2 C5] [D5@2 F5] F5", 381 "[C5@2 F5] [Bb5 A5 G5] F5@2" 382 ).s('Sitar: Ethnic'), 383 n( 384 "[F4,Bb4,D5] [[D4,G4,Bb4]@2 [Bb3,D4,F4]] [[G3,C4,E4]@2 [[Ab3,F4] [A3,Gb4]]] [Bb3,E4,G4]", 385 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, Bb3, Db3] [F3, Bb3, Db3]]", 386 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 387 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 388 "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", 389 "[~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 390 "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", 391 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 392 "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", 393 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 394 "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", 395 "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", 396 "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", 397 "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", 398 "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", 399 "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", 400 "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]" 401 ).s('Kalimba: Ethnic'), 402 n( 403 "[G3 G3 C3 E3]", 404 "[F2 D2 G2 C2]", 405 "[F2 D2 G2 C2]", 406 "[F2 A2 Bb2 B2]", 407 "[A2 Ab2 G2 C2]", 408 "[F2 A2 Bb2 B2]", 409 "[G2 C2 F2 F2]", 410 "[F2 A2 Bb2 B2]", 411 "[A2 Ab2 G2 C2]", 412 "[F2 A2 Bb2 B2]", 413 "[G2 C2 F2 F2]", 414 "[Bb2 Bb2 A2 A2]", 415 "[Ab2 Ab2 G2 [C2 D2 E2]]", 416 "[Bb2 Bb2 A2 A2]", 417 "[Ab2 Ab2 G2 [C2 D2 E2]]", 418 "[F2 A2 Bb2 B2]", 419 "[G2 C2 F2 F2]" 420 ).s('Acoustic Bass: Bass') 421 ).slow(51) 422 `; 423 424export const bossaRandom = `const chords = "<Am7 Am7 Dm7 E7>" 425const roots = chords.rootNotes(2) 426 427stack( 428 chords.voicings('lefthand').struct( 429 \` x@2 ~ x ~ ~ ~ x | 430 x? ~ ~ x@3 ~ x | 431 x? ~ ~ x ~ x@3\`), 432 roots.struct("x [~ x?0.2] x [~ x?] | x!4 | x@2 ~ ~ ~ x x x").transpose("0 7") 433).slow(2).pianoroll().note().piano()`;
range ['F4', 'A5']