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)`; 38 39/* export const tetrisWithFunctions = `stack(seq( 40 'e5', seq('b4', 'c5'), 'd5', seq('c5', 'b4'), 41 'a4', seq('a4', 'c5'), 'e5', seq('d5', 'c5'), 42 'b4', seq(r, 'c5'), 'd5', 'e5', 43 'c5', 'a4', 'a4', r, 44 seq(r, 'd5'), seq(r, 'f5'), 'a5', seq('g5', 'f5'), 45 'e5', seq(r, 'c5'), 'e5', seq('d5', 'c5'), 46 'b4', seq('b4', 'c5'), 'd5', 'e5', 47 'c5', 'a4', 'a4', r), 48 seq( 49 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', 50 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 51 'g#2', 'g#3', 'g#2', 'g#3', 'e2', 'e3', 'e2', 'e3', 52 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'b1', 'c2', 53 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', 54 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', 55 'b1', 'b2', 'b1', 'b2', 'e2', 'e3', 'e2', 'e3', 56 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', 57 ) 58).slow(16)`; */ 59 60/* export const tetris = `stack( 61 seq( 62 "e5 [b4 c5] d5 [c5 b4]", 63 "a4 [a4 c5] e5 [d5 c5]", 64 "b4 [~ c5] d5 e5", 65 "c5 a4 a4 ~", 66 "[~ d5] [~ f5] a5 [g5 f5]", 67 "e5 [~ c5] e5 [d5 c5]", 68 "b4 [b4 c5] d5 e5", 69 "c5 a4 a4 ~" 70 ), 71 seq( 72 "e2 e3 e2 e3 e2 e3 e2 e3", 73 "a2 a3 a2 a3 a2 a3 a2 a3", 74 "g#2 g#3 g#2 g#3 e2 e3 e2 e3", 75 "a2 a3 a2 a3 a2 a3 b1 c2", 76 "d2 d3 d2 d3 d2 d3 d2 d3", 77 "c2 c3 c2 c3 c2 c3 c2 c3", 78 "b1 b2 b1 b2 e2 e3 e2 e3", 79 "a1 a2 a1 a2 a1 a2 a1 a2", 80 ) 81).slow(16)`; 82 */ 83 84export const whirlyStrudel = `seq(e4, [b2, b3], c4) 85.every(4, fast(2)) 86.every(3, slow(1.5)) 87.fast(cat(1.25, 1, 1.5)) 88.every(2, _ => seq(e4, r, e3, d4, r))`; 89 90export const transposedChordsHacked = `stack( 91 "c2 eb2 g2", 92 "Cm7".voicings('lefthand').slow(2) 93).transpose( 94 "<1 2 3 2>".slow(2) 95).transpose(5)`; 96// range ['g2','c4'] 97 98export const scaleTranspose = `"f2,f3,c4,ab4" 99.scale(seq('F minor', 'F harmonic minor').slow(4)) 100.scaleTranspose("<0 -1 -2 -3>") 101.transpose("0 1".slow(16))`; 102 103export const struct = `stack( 104 "c2 g2 a2 [e2@2 eb2] d2 a2 g2 [d2 ~ db2]", 105 "[C^7 A7] [Dm7 G7]".struct("[x@2 x] [~@2 x] [~ x@2]@2 [x ~@2] ~ [~@2 x@4]@2") 106 .voicings('lefthand') 107).slow(4)`; 108// range ['G3','A4'] 109 110export const magicSofa = `stack( 111 "<C^7 F^7 ~> <Dm7 G7 A7 ~>" 112 .every(2, fast(2)) 113 .voicings('lefthand'), 114 "<c2 f2 g2> <d2 g2 a2 e2>" 115).transpose("<0 2 3 4>")`; 116// below doesn't work anymore due to constructor cleanup 117// ).slow(1).transpose.cat(0, 2, 3, 4)`; 118 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)`; 130 131export const technoDrums = `stack( 132 "c1*2".tone(new MembraneSynth().toDestination()), 133 "~ x".tone(new NoiseSynth().toDestination()), 134 "[~ c4]*2".tone(new MetalSynth().set({envelope:{decay:0.06,sustain:0}}).chain(new Gain(0.5),getDestination())) 135)`; 136 137/* 138export const caverave = `const delay = new FeedbackDelay(1/8, .4).chain(vol(0.5), out()); 139const kick = new MembraneSynth().chain(vol(.8), out()); 140const snare = new NoiseSynth().chain(vol(.8), out()); 141const hihat = new MetalSynth().set(adsr(0, .08, 0, .1)).chain(vol(.3).connect(delay),out()); 142const bass = new Synth().set({ ...osc('sawtooth'), ...adsr(0, .1, .4) }).chain(lowpass(900), vol(.5), out()); 143const keys = new PolySynth().set({ ...osc('sawtooth'), ...adsr(0, .5, .2, .7) }).chain(lowpass(1200), vol(.5), out()); 144 145const drums = stack( 146 "c1*2".tone(kick).mask("<x@7 ~>/8"), 147 "~ <x!7 [x@3 x]>".tone(snare).mask("<x@7 ~>/4"), 148 "[~ c4]*2".tone(hihat) 149); 150 151const thru = (x) => x.transpose("<0 1>/8").transpose(-1); 152const synths = stack( 153 "<eb4 d4 c4 b3>/2".scale(timeCat([3,'C minor'],[1,'C melodic minor']).slow(8)).struct("[~ x]*2") 154 .layer( 155 scaleTranspose(0).early(0), 156 scaleTranspose(2).early(1/8), 157 scaleTranspose(7).early(1/4), 158 scaleTranspose(8).early(3/8) 159 ).apply(thru).tone(keys).mask("<~ x>/16"), 160 "<C2 Bb1 Ab1 [G1 [G2 G1]]>/2".struct("[x [~ x] <[~ [~ x]]!3 [x x]>@2]/2".fast(2)).apply(thru).tone(bass), 161 "<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)) 162) 163stack( 164 drums.fast(2), 165 synths 166).slow(2)`; */ 167 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`; 185 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()`; 212 213// range ['E3', 'G4'] 214 215// TODO: 216/* 217export const xylophoneCalling = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ 218// by Felix Roos 219const t = x => x.scaleTranspose("<0 2 4 3>/4").transpose(-2) 220const s = x => x.scale(cat('C3 minor pentatonic','G3 minor pentatonic').slow(4)) 221const delay = new FeedbackDelay(1/8, .6).chain(vol(0.1), out()); 222const chorus = new Chorus(1,2.5,0.5).start(); 223stack( 224 // melody 225 "<<10 7> <8 3>>/4".struct("x*3").apply(s) 226 .scaleTranspose("<0 3 2> <1 4 3>") 227 .superimpose(scaleTranspose(2).early(1/8)) 228 .apply(t).tone(polysynth().set({ 229 ...osc('triangle4'), 230 ...adsr(0,.08,0) 231 }).chain(vol(0.2).connect(delay),chorus,out())).mask("<~@3 x>/16".early(1/8)), 232 // pad 233 "[1,3]/4".scale('G3 minor pentatonic').apply(t).tone(polysynth().set({ 234 ...osc('square2'), 235 ...adsr(0.1,.4,0.8) 236 }).chain(vol(0.2),chorus,out())).mask("<~ x>/32"), 237 // xylophone 238 "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({ 239 ...osc('sawtooth4'), 240 ...adsr(0,.1,0) 241 }).chain(vol(0.4).connect(delay),out())).mask("<x@3 ~>/16".early(1/8)), 242 // bass 243 "c2 [c2 ~]*2".scale('C hirajoshi').apply(t).tone(synth({ 244 ...osc('sawtooth6'), 245 ...adsr(0,.03,.4,.1) 246 }).chain(vol(0.4),out())), 247 // kick 248 "<c1!3 [c1 ~]*2>*2".tone(membrane().chain(vol(0.8),out())), 249 // snare 250 "~ <c3!7 [c3 c3*2]>".tone(noise().chain(vol(0.8),out())), 251 // hihat 252 "c3*4".transpose("[-24 0]*2").tone(metal(adsr(0,.02)).chain(vol(0.5).connect(delay),out())) 253).slow(1) 254// strudel disable-highlighting`; 255*/ 256 257// TODO: 258/* 259export const sowhatelse = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ 260// by Felix Roos 261// mixer 262const mix = (key) => vol({ 263 chords: .2, 264 lead: 0.8, 265 bass: .4, 266 snare: .95, 267 kick: .9, 268 hihat: .35, 269}[key]||0); 270const delay = new FeedbackDelay(1/6, .3).chain(vol(.7), out()); 271const delay2 = new FeedbackDelay(1/6, .2).chain(vol(.15), out()); 272const chorus = new Chorus(1,2.5,0.5).start(); 273// instruments 274const instr = (instrument) => ({ 275 organ: polysynth().set({...osc('sawtooth4'), ...adsr(.01,.2,0)}).chain(mix('chords').connect(delay),out()), 276 lead: polysynth().set({...osc('triangle4'),...adsr(0.01,.05,0)}).chain(mix('lead').connect(delay2), out()), 277 bass: polysynth().set({...osc('sawtooth8'),...adsr(.02,.05,.3,.2)}).chain(mix('bass'),lowpass(3000), out()), 278 pad: polysynth().set({...osc('square2'),...adsr(0.1,.4,0.8)}).chain(vol(0.15),chorus,out()), 279 hihat: metal(adsr(0, .02, 0)).chain(mix('hihat'), out()), 280 snare: noise(adsr(0, .15, 0.01)).chain(mix('snare'), lowpass(5000), out()), 281 kick: membrane().chain(mix('kick'), out()) 282}[instrument]); 283// harmony 284const t = transpose("<0 0 1 0>/8"); 285const sowhat = scaleTranspose("0,3,6,9,11"); 286// track 287stack( 288 "[<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"), 289 "<<e3 [~@2 a3]> <[d3 ~] [c3 f3] g3>>".scale('D dorian').apply(sowhat).apply(t).tone(instr('organ')).mask("<x x x ~>/8"), 290 "<[d2 [d2 ~]*3]!3 <a1*2 c2*3 [a1 e2]>>".apply(t).tone(instr('bass')), 291 "c1*6".tone(instr('hihat')), 292 "~ c3".tone(instr('snare')), 293 "<[c1@5 c1] <c1 [[c1@2 c1] ~] [c1 ~ c1] [c1!2 ~ c1!3]>>".tone(instr('kick')), 294 "[2,4]/4".scale('D dorian').apply(t).tone(instr('pad')).mask("<x x x ~>/8") 295).fast(6/8) 296// strudel disable-highlighting`; 297*/ 298 299// TODO: rework tune to use freq 300/* 301export const jemblung = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ 302// by Felix Roos 303const delay = new FeedbackDelay(1/8, .6).chain(vol(0.15), out()); 304const snare = noise({type:'white',...adsr(0,0.2,0)}).chain(lowpass(5000),vol(1.8),out()); 305const s = polysynth().set({...osc('sawtooth4'),...adsr(0.01,.2,.6,0.2)}).chain(vol(.23).connect(delay),out()); 306stack( 307 stack( 308 "0 1 4 [3!2 5]".layer( 309 // chords 310 x=>x.add("0,3").duration("0.05!3 0.02"), 311 // bass 312 x=>x.add("-8").struct("x*8").duration(0.1) 313 ), 314 // melody 315 "12 11*3 12 ~".duration(0.005) 316 ) 317 .add("<0 1>") 318 .tune("jemblung2") 319 //.mul(22/5).round().xen("22edo") 320 //.mul(12/5).round().xen("12edo") 321 .tone(s), 322 // kick 323 "[c2 ~]*2".duration(0.05).tone(membrane().chain(out())), 324 // snare 325 "[~ c1]*2".early(0.001).tone(snare), 326 // hihat 327 "c2*8".tone(noise().chain(highpass(6000),vol(0.5).connect(delay),out())), 328).slow(3)`; 329*/ 330 331/* 332// TODO: does not work on linux (at least for me..) 333export const speakerman = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ 334// by Felix Roos 335backgroundImage('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.ytimg.com%2Fvi%2FXR0rKqW3VwY%2Fmaxresdefault.jpg&f=1&nofb=1', 336{ className:'darken', style:'background-size:cover'}) 337stack( 338 "[g3,bb3,d4] [f3,a3,c4] [c3,e3,g3]@2".slow(2).late(.1), 339 cat( 340 'Baker man', 341 'is baking bread', 342 'Baker man', 343 'is baking bread', 344 'Sagabona', 345 'kunjani wena', 346 'Sagabona', 347 'kunjani wena', 348 'The night train, is coming', 349 'got to keep on running', 350 'The night train, is coming', 351 'got to keep on running', 352 ).speak("en zu en".slow(12), "<0 2 3 4 5 6>".slow(2)), 353).slow(4)`; 354*/ 355 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)`; 361 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()`; 434 435// range ['F4', 'A5']