/* tunes.mjs - Copyright (C) 2022 Strudel contributors - see This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ export const swimming = `// Koji Kondo - Swimming (Super Mario World) stack( seq( "~", "~", "~", "A5 [F5@2 C5] [D5@2 F5] F5", "[C5@2 F5] [F5@2 C6] A5 G5", "A5 [F5@2 C5] [D5@2 F5] F5", "[C5@2 F5] [Bb5 A5 G5] F5@2", "A5 [F5@2 C5] [D5@2 F5] F5", "[C5@2 F5] [F5@2 C6] A5 G5", "A5 [F5@2 C5] [D5@2 F5] F5", "[C5@2 F5] [Bb5 A5 G5] F5@2", "A5 [F5@2 C5] A5 F5", "Ab5 [F5@2 Ab5] G5@2", "A5 [F5@2 C5] A5 F5", "Ab5 [F5@2 C5] C6@2", "A5 [F5@2 C5] [D5@2 F5] F5", "[C5@2 F5] [Bb5 A5 G5] F5@2" ).color('#FFEBB5'), seq( "[F4,Bb4,D5] [[D4,G4,Bb4]@2 [Bb3,D4,F4]] [[G3,C4,E4]@2 [[Ab3,F4] [A3,Gb4]]] [Bb3,E4,G4]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, Bb3, Db3] [F3, Bb3, Db3]]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", "[~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [A3, C4, E4] [A3, C4, E4]] [~ [Ab3, C4, Eb4] [Ab3, C4, Eb4]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [G3, C4, E4] [G3, C4, E4]]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]", "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", "[~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [Bb3, D3, F4] [Bb3, D3, F4]] [~ [A3, C4, F4] [A3, C4, F4]] [~ [A3, C4, F4] [A3, C4, F4]]", "[~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [Ab3, B3, F4] [Ab3, B3, F4]] [~ [G3, Bb3, F4] [G3, Bb3, F4]] [~ [G3, Bb3, E4] [G3, Bb3, E4]]", "[~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, A3, C3] [F3, A3, C3]] [~ [F3, Bb3, D3] [F3, Bb3, D3]] [~ [F3, B3, D3] [F3, B3, D3]]", "[~ [F3, Bb3, D4] [F3, Bb3, D4]] [~ [F3, Bb3, C4] [F3, Bb3, C4]] [~ [F3, A3, C4] [F3, A3, C4]] [~ [F3, A3, C4] [F3, A3, C4]]" ).color('#54C571'), seq( "[G3 G3 C3 E3]", "[F2 D2 G2 C2]", "[F2 D2 G2 C2]", "[F2 A2 Bb2 B2]", "[A2 Ab2 G2 C2]", "[F2 A2 Bb2 B2]", "[G2 C2 F2 F2]", "[F2 A2 Bb2 B2]", "[A2 Ab2 G2 C2]", "[F2 A2 Bb2 B2]", "[G2 C2 F2 F2]", "[Bb2 Bb2 A2 A2]", "[Ab2 Ab2 G2 [C2 D2 E2]]", "[Bb2 Bb2 A2 A2]", "[Ab2 Ab2 G2 [C2 D2 E2]]", "[F2 A2 Bb2 B2]", "[G2 C2 F2 F2]" ).color('#0077C9') ).note().slow(51) //.pianoroll({fold:1}) `; export const giantSteps = `// John Coltrane - Giant Steps setVoicingRange('lefthand', ['E3', 'G4']); stack( // melody seq( "[F#5 D5] [B4 G4] Bb4 [B4 A4]", "[D5 Bb4] [G4 Eb4] F#4 [G4 F4]", "Bb4 [B4 A4] D5 [D#5 C#5]", "F#5 [G5 F5] Bb5 [F#5 F#5]", ).color('#F8E71C'), // chords seq( "[B^7 D7] [G^7 Bb7] Eb^7 [Am7 D7]", "[G^7 Bb7] [Eb^7 F#7] B^7 [Fm7 Bb7]", "Eb^7 [Am7 D7] G^7 [C#m7 F#7]", "B^7 [Fm7 Bb7] Eb^7 [C#m7 F#7]" ).voicings('lefthand').color('#7ED321'), // bass seq( "[B2 D2] [G2 Bb2] [Eb2 Bb3] [A2 D2]", "[G2 Bb2] [Eb2 F#2] [B2 F#2] [F2 Bb2]", "[Eb2 Bb2] [A2 D2] [G2 D2] [C#2 F#2]", "[B2 F#2] [F2 Bb2] [Eb2 Bb3] [C#2 F#2]" ).color('#00B8D4') ).slow(20).note() //.pianoroll({fold:1})`; export const zeldasRescue = `// Koji Kondo - Princess Zelda's Rescue stack( // melody \`[B3@2 D4] [A3@2 [G3 A3]] [B3@2 D4] [A3] [B3@2 D4] [A4@2 G4] [D4@2 [C4 B3]] [A3] [B3@2 D4] [A3@2 [G3 A3]] [B3@2 D4] [A3] [B3@2 D4] [A4@2 G4] D5@2 [D5@2 [C5 B4]] [[C5 B4] G4@2] [C5@2 [B4 A4]] [[B4 A4] E4@2] [D5@2 [C5 B4]] [[C5 B4] G4 C5] [G5] [~ ~ B3]\` .color('#9C7C38'), // bass \`[[C2 G2] E3@2] [[C2 G2] F#3@2] [[C2 G2] E3@2] [[C2 G2] F#3@2] [[B1 D3] G3@2] [[Bb1 Db3] G3@2] [[A1 C3] G3@2] [[D2 C3] F#3@2] [[C2 G2] E3@2] [[C2 G2] F#3@2] [[C2 G2] E3@2] [[C2 G2] F#3@2] [[B1 D3] G3@2] [[Bb1 Db3] G3@2] [[A1 C3] G3@2] [[D2 C3] F#3@2] [[F2 C3] E3@2] [[E2 B2] D3@2] [[D2 A2] C3@2] [[C2 G2] B2@2] [[F2 C3] E3@2] [[E2 B2] D3@2] [[Eb2 Bb2] Db3@2] [[D2 A2] C3 [F3,G2]]\` .color('#4C4646') ).transpose(12).slow(48) .superimpose(x=>x.add(0.06)) // add slightly detuned voice .note() .gain(.1) .s('triangle') .room(1) //.pianoroll({fold:1})`; export const caverave = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const keys = x => x.s('sawtooth').cutoff(1200).gain(.5) .attack(0).decay(.16).sustain(.3).release(.1); const drums = stack( s("bd*2").mask("/8").gain(.8), s("~ ").mask("/4").gain(.5), s("[~ hh]*2").delay(.3).delayfeedback(.5).delaytime(.125).gain(.4) ); const thru = (x) => x.transpose("<0 1>/8").transpose(-1); const synths = stack( "/2" .scale(timeCat([3,'C minor'],[1,'C melodic minor']) .slow(8)).struct("[~ x]*2") .layer( x=>x.scaleTranspose(0).early(0), x=>x.scaleTranspose(2).early(1/8), x=>x.scaleTranspose(7).early(1/4), x=>x.scaleTranspose(8).early(3/8) ).apply(thru).note().apply(keys).mask("<~ x>/16") .color('darkseagreen'), note("/2".apply(thru)) .struct("[x [~ x] <[~ [~ x]]!3 [x x]>@2]/2".fast(2)) .s('sawtooth').attack(0.001).decay(0.2).sustain(1).cutoff(500) .color('brown'), "/2".struct("~ [x@0.2 ~]".fast(2)) .voicings('lefthand') .apply(thru).every(2, early(1/8)).note().apply(keys).sustain(0) .delay(.4).delaytime(.12) .mask("/8".early(1/4)) ) stack( drums.fast(2).color('tomato'), synths ).slow(2) //.pianoroll({fold:1})`; export const sampleDrums = `samples({ bd: 'bd/BT0A0D0.wav', sn: 'sn/ST0T0S3.wav', hh: 'hh/000_hh3closedhh.wav' }, 'https://loophole-letters.vercel.app/samples/tidal/') stack( "".color('#F5A623'), "hh*4".color('#673AB7'), "~ ".color('#4CAF50') ).s() .pianoroll({fold:1}) `; export const barryHarris = `// adapted from a Barry Harris excercise "0,2,[7 6]" .add("<0 1 2 3 4 5 7 8>") .scale('C bebop major') .transpose("<0 1 2 1>/8") .slow(2) .note().piano() .color('#00B8D4') `; export const blippyRhodes = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ bd: 'samples/tidal/bd/BT0A0D0.wav', sn: 'samples/tidal/sn/ST0T0S3.wav', hh: 'samples/tidal/hh/000_hh3closedhh.wav', rhodes: { E1: 'samples/rhodes/MK2Md2000.mp3', E2: 'samples/rhodes/MK2Md2012.mp3', E3: 'samples/rhodes/MK2Md2024.mp3', E4: 'samples/rhodes/MK2Md2036.mp3', E5: 'samples/rhodes/MK2Md2048.mp3', E6: 'samples/rhodes/MK2Md2060.mp3', E7: 'samples/rhodes/MK2Md2072.mp3' } }, 'https://loophole-letters.vercel.app/') const scales = cat('C major', 'C mixolydian', 'F lydian', ['F minor', cat('Db major','Db mixolydian')]) stack( s(" ").color('#00B8D4'), "]>" .scale(scales) .struct("x*8") .scaleTranspose("0 [-5,-2] -7 [-9,-2]") .legato(.3) .slow(2) .note() .s('rhodes') .clip(1) .room(.5) .delay(.3) .delayfeedback(.4) .delaytime(1/12).gain(.5).color('#7ED321'), "" .legato("<1@3 [.3 1]>") .slow(2).superimpose(x=>x.add(.02)) .note().gain(.3) .s('sawtooth').cutoff(600).color('#F8E71C'), ).fast(3/2) //.pianoroll({fold:1})`; export const wavyKalimba = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ 'kalimba': { c5:'https://freesound.org/data/previews/536/536549_11935698-lq.mp3' } }) const scales = cat('C major', 'C mixolydian', 'F lydian', ['F minor', 'Db major']) stack( "[0 2 4 6 9 2 0 -2]*3" .add("<0 2>/4") .scale(scales) .struct("x*8") .velocity("<.8 .3 .6>*8") .slow(2), "" .scale(scales) .scaleTranspose("[0 <2 4>]*2") .struct("x*4") .velocity("<.8 .5>*4") .velocity(0.8) .slow(2) ) .legato("<.4 .8 1 1.2 1.4 1.6 1.8 2>/8") .fast(1) .note() .clip(1) .s('kalimba') .delay(.2) `; export const festivalOfFingers = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const chords = ""; stack( chords.voicings('lefthand').struct("x(3,8,-1)").velocity(.5).off(1/7,x=>x.transpose(12).velocity(.2)), chords.rootNotes(2).struct("x(4,8,-2)"), chords.rootNotes(4) .scale(cat('C minor','F dorian','G dorian','F# mixolydian')) .struct("x(3,8,-2)".fast(2)) .scaleTranspose("0 4 0 6".early(".125 .5")).layer(scaleTranspose("0,<2 [4,6] [5,7]>/4")) ).slow(2) .velocity(sine.struct("x*8").add(3/5).mul(2/5).fast(8)) .note().piano()`; // iter, echo, echoWith export const undergroundPlumber = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos, inspired by Friendship - Let's not talk about it (1979) :) samples({ bd: 'bd/BT0A0D0.wav', sn: 'sn/ST0T0S3.wav', hh: 'hh/000_hh3closedhh.wav', cp: 'cp/HANDCLP0.wav', }, 'https://loophole-letters.vercel.app/samples/tidal/') const h = x=>x.transpose("<0@2 5 0 7 5 0 -5>/2") stack( s("< sn> hh").fast(2).gain(.7), "[c2 a1 bb1 ~] ~" .echo(2, 1/16, 1) .legato(.4) .slow(2) .layer(h) .note().s('square') .cutoff(400).decay(.12).sustain(0) , "[g2,[c3 eb3]]".iter(4) .echoWith(4, 1/8, (x,n)=>x.transpose(n*12).velocity(Math.pow(.4,n))) .legato(.1) .layer(h).note() ) .fast(2/3) .pianoroll({})`; export const bridgeIsOver = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos, bassline by BDP - The Bridge Is Over samples({mad:'https://freesound.org/data/previews/22/22274_109943-lq.mp3'}) stack( stack( "c3*2 [[c3@1.4 bb2] ab2] gb2*2 <[[gb2@1.4 ab2] bb2] gb2>".legato(".5 1".fast(2)).velocity(.8), "0 ~".scale('c4 whole tone') .euclidLegato(3,8).slow(2).mask("x ~") .stutWith(8, 1/16, (x,n)=>x.scaleTranspose(n).velocity(Math.pow(.7,n))) .scaleTranspose("<0 1 2 3 4 3 2 1>") .fast(2) .velocity(.7) .legato(.5) .stut(3, .5, 1/8) ).transpose(-1).note().piano(), s("mad").slow(2) ).cpm(78).slow(4) .pianoroll() `; export const goodTimes = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const scale = cat('C3 dorian','Bb2 major').slow(4); stack( "2*4".add(12).scale(scale) .off(1/8, scaleTranspose("2")).fast(2) .scaleTranspose("<0 1 2 1>").hush(), "<0 1 2 3>(3,8,2)" .scale(scale) .off(1/4, scaleTranspose("2,4")), "<0 4>(5,8,-1)".scale(scale).transpose(-12) ) .velocity(".6 .7".fast(4)) .legato("2") .scaleTranspose("<0>".slow(4)) .transpose(5) .note().piano() .velocity(.8) .slow(2) .pianoroll({maxMidi:100,minMidi:20})`; /* // new style notation: export const goodTimes = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const scale = cat('C3 dorian','Bb2 major').slow(4); stack( n("2*4").add(12) .off(1/8, add("2")).fast(2) .add("<0 1 2 1>").hush(), n("<0 1 2 3>(3,8,2)") .off(1/4, add("2,4")), n("<0 4>(5,8,-1)").sub(7) ) .scale(scale) .gain(".6 .7".fast(4)) .legato(2) .add(note(5)) .piano() .mul(gain(.8)) .slow(2) .pianoroll({maxMidi:100,minMidi:20})`; */ export const echoPiano = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos "<0 2 [4 6](3,4,2) 3*2>" .scale('D minor') .color('salmon') .off(1/4, x=>x.scaleTranspose(2).color('green')) .off(1/2, x=>x.scaleTranspose(6).color('steelblue')) .legato(.5) .echo(4, 1/8, .5) .note().piano() .pianoroll()`; export const sml1 = `// Hirokazu Tanaka - World 1-1 stack( // melody \`< [e5 ~] [[d5@2 c5] [~@2 e5]] ~ [~ [c5@2 d5]] [e5 e5] [d5 c5] [e5 f5] [g5 a5] [~ c5] [c5 d5] [e5 [c5@2 c5]] [~ c5] [f5 e5] [c5 d5] [~ g6] [g6 ~] [e5 ~] [[d5@2 c5] [~@2 e5]] ~ [~ [c5@2 d5]] [e5 e5] [d5 c5] [a5 g5] [c6 [e5@2 d5]] [~ c5] [c5 d5] [e5 [c5@2 c5]] [~ c5] [f5 e5] [c5 d5] [~ [g6@2 ~] ~@2] [g5 ~] [~ a5] [b5 c6] [b5@2 ~@2 g5] ~ [f5 ~] [[g5@2 f5] ~] [[e5 ~] [f5 ~]] [[f#5 ~] [g5 ~]] [~ a5] [b5 c6] [b5@2 ~@2 g5] ~ [eb6 d6] [~ c6] ~!2 >\` .legato(.95), // sub melody \`< [~ g4]!2 [~ ab4]!2 [~ a4]!2 [~ bb4]!2 [~ a4]!2 [~ g4]!2 [d4 e4] [f4 gb4] ~!2 [~ g4]!2 [~ ab4]!2 [~ a4]!2 [~ bb4]!2 [~ a4]!2 [~ g4]!2 [d4 e4] [f4 gb4] ~!2 [~ c5]!4 [~ a4]!2 [[c4 ~] [d4 ~]] [[eb4 ~] [e4 ~]] [~ c5]!4 [~ eb5]!2 [g4*2 [f4 ~]] [[e4 ~] [d4 ~]] >\`, // bass \`< c3!7 a3 f3!2 e3!2 ~!4 c3!7 a3 f3!2 e3!2 ~!4 f3!2 e3!2 d3!2 ~!2 f3!2 e3!2 ab3!2 ~!2 >\` .legato(.5) ).fast(2).note()`; export const randomBells = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ bell: { c6: 'https://freesound.org/data/previews/411/411089_5121236-lq.mp3' }, bass: { d2: 'https://freesound.org/data/previews/608/608286_13074022-lq.mp3' } }) stack( // bells "0".euclidLegato(3,8) .echo(3, 1/16, .5) .add(rand.range(0,12)) .velocity(rand.range(.5,1)) .legato(rand.range(.4,3)) .scale(cat('D minor pentatonic')).note() .s('bell').gain(.6).delay(.2).delaytime(1/3).delayfeedback(.8), // bass "".euclidLegatoRot(6,8,4).note().s('bass').clip(1).gain(.8) ) .slow(6) .pianoroll({minMidi:20,maxMidi:120,background:'transparent'}) `; export const waa2 = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos n( "a4 [a3 c3] a3 c3" .sub("<7 12 5 12>".slow(2)) .off(1/4,x=>x.add(7)) .off(1/8,x=>x.add(12)) ) .slow(2) .legato(sine.range(0.3, 2).slow(28)) .s("sawtooth square".fast(2)) .cutoff(cosine.range(500,4000).slow(16)) .gain(.5) .room(.5) `; export const hyperpop = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos const lfo = cosine.slow(15); const lfo2 = sine.slow(16); const filter1 = x=>x.cutoff(lfo2.range(300,3000)); const filter2 = x=>x.hcutoff(lfo.range(1000,6000)).cutoff(4000) const scales = cat('D3 major', 'G3 major').slow(8) samples({ bd: '344/344757_1676145-lq.mp3', sn: '387/387186_7255534-lq.mp3', hh: '561/561241_12517458-lq.mp3', hh2:'44/44944_236326-lq.mp3', hh3: '44/44944_236326-lq.mp3', }, 'https://freesound.org/data/previews/') stack( "-7 0 -7 7".struct("x(5,8,1)").fast(2).sub(7) .scale(scales) .note() .s("sawtooth,square") .gain(.3).attack(0.01).decay(0.1).sustain(.5) .apply(filter1), "~@3 [<2 3>,<4 5>]" .echo(4,1/16,.7) .scale(scales) .note() .s('square').gain(.7) .attack(0.01).decay(0.1).sustain(0) .apply(filter1), "6 4 2".add(14) .superimpose(sub("5")) .fast(1).euclidLegato(3,8) .mask("<1 0@7>") .fast(2) .echo(32, 1/8, .8) .scale(scales) .note() .s("sawtooth") .gain(sine.range(.1,.4).slow(8)) .attack(.001).decay(.2).sustain(0) .apply(filter2) ).stack( stack( "bd <~@7 [~ bd]>".fast(2), "~ sn", "[~ hh3]*2" ).s().fast(2).gain(.7) ).slow(2) // strudel disable-highlighting`; export const festivalOfFingers3 = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos "[-7*3],0,2,6,[8 7]" .echoWith(4,1/4, (x,n)=>x .add(n*7) .velocity(1/(n+1)) .legato(1/(n+1))) .velocity(perlin.range(.5,.9).slow(8)) .stack("[22 25]*3" .legato(sine.range(.5,2).slow(8)) .velocity(sine.range(.4,.8).slow(5)) .echo(4,1/12,.5)) .scale(cat('D dorian','G mixolydian','C dorian','F mixolydian')) .legato(1) .slow(2) .note().piano() //.pianoroll({maxMidi:160})`; export const meltingsubmarine = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos await samples('github:tidalcycles/Dirt-Samples/master/') stack( s("bd:5,[~ ],hh27(3,4,1)") // drums .speed(perlin.range(.7,.9)) // random sample speed variation //.hush() ,"" // bassline .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps .add(perlin.range(0,.5)) // random pitch variation .superimpose(add(.05)) // add second, slightly detuned voice .note() // wrap in "note" .decay(.15).sustain(0) // make each note of equal length .s('sawtooth') // waveform .gain(.4) // turn down .cutoff(sine.slow(7).range(300,5000)) // automate cutoff //.hush() ,">".voicings('lefthand') // chords .superimpose(x=>x.add(.04)) // add second, slightly detuned voice .add(perlin.range(0,.5)) // random pitch variation .note() // wrap in "note" .s('sawtooth') // waveform .gain(.16) // turn down .cutoff(500) // fixed cutoff .attack(1) // slowly fade in //.hush() ,"a4 c5 ".struct("x(5,8,-1)") .superimpose(x=>x.add(.04)) // add second, slightly detuned voice .add(perlin.range(0,.5)) // random pitch variation .note() // wrap in "note" .decay(.1).sustain(0) // make notes short .s('triangle') // waveform .degradeBy(perlin.range(0,.5)) // randomly controlled random removal :) .echoWith(4,.125,(x,n)=>x.gain(.15*1/(n+1))) // echo notes //.hush() ) .slow(3/2)`; export const outroMusic = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], perc: ['perc/002_perc2.wav'], }, 'github:tidalcycles/Dirt-Samples/master/'); "C^7 Am7 Dm7 G7".slow(2).voicings('lefthand') .stack("0@6 [<1 2> <2 0> 1]@2".scale('C5 major')) .note().slow(4) .s('0040_FluidR3_GM_sf2_file') .color('steelblue') .stack( "<-7 ~@2 [~@2 -7] -9 ~@2 [~@2 -9] -10!2 ~ [~@2 -10] -5 ~ [-3 -2 -10]@2>*2".scale('C3 major') .note().s('sawtooth').color('brown') ) .attack(0.05).decay(.1).sustain(.7) .cutoff(perlin.range(800,2000)) .gain(.3) .stack( s(" sd,hh*3,~@5 ") .speed(perlin.range(.9,1.1)) .n(3).color('gray') ).slow(3/2) //.pianoroll({autorange:1,vertical:1,fold:0}) `; export const bassFuge = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ flbass: ['00_c2_finger_long_neck.wav','01_c2_finger_short_neck.wav','02_c2_finger_long_bridge.wav','03_c2_finger_short_bridge.wav','04_c2_pick_long.wav','05_c2_pick_short.wav','06_c2_palm_mute.wav'] }, 'github:cleary/samples-flbass/main/') samples({ bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], }, 'github:tidalcycles/Dirt-Samples/master/'); note("<8(3,8) <7 7*2> [4 5@3] 8>".sub(1) // sub 1 -> 1-indexed .layer( x=>x, x=>x.add(7).color('steelblue') .off(1/8,x=>x.add("2,4").off(1/8,x=>x.add(5).echo(4,.125,.5))) .slow(2), ).scale('A1 minor')) .s("flbass").n(0) .gain(.3) .cutoff(sine.slow(7).range(200,4000)) .resonance(10) //.hcutoff(400) .clip(1) .stack(s("bd:1*2,~ sd:0,[~ hh:0]*2")) .pianoroll({vertical:1})`; export const chop = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ p: 'https://cdn.freesound.org/previews/648/648433_11943129-lq.mp3' }) s("p") .loopAt(32) .chop(128) .jux(rev) .shape(.4) .decay(.1) .sustain(.6) `; export const delay = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos stack( s("bd ") .delay("<0 .5>") .delaytime(".16 | .33") .delayfeedback(".6 | .8") ).sometimes(x=>x.speed("-1"))`; export const orbit = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos stack( s("bd ") .delay(.5) .delaytime(.33) .delayfeedback(.6), s("hh*2") .delay(.8) .delaytime(.08) .delayfeedback(.7) .orbit(2) ).sometimes(x=>x.speed("-1"))`; export const belldub = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({ bell: {b4:'https://cdn.freesound.org/previews/339/339809_5121236-lq.mp3'}}) // "Hand Bells, B, Single.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org stack( // bass note("[0 ~] [2 [0 2]] [4 4*2] [[4 ~] [2 ~] 0@2]".scale('g1 dorian').superimpose(x=>x.add(.02))) .s('sawtooth').cutoff(200).resonance(20).gain(.15).shape(.6).release(.05), // perc s("[~ hh]*4").room("0 0.5".fast(2)).end(perlin.range(0.02,1)), s("mt lt ht").struct("x(3,8)").fast(2).gain(.5).room(.5).sometimes(x=>x.speed(".5")), s("misc:2").speed(1).delay(.5).delaytime(1/3).gain(.4), // chords note("[~ Gm7] ~ [~ Dm7] ~".voicings('lefthand').superimpose(x=>x.add(.1))) .s('sawtooth').gain(.5) .cutoff(perlin.range(400,3000).slow(8)) .decay(perlin.range(0.05,.2)).sustain(0) .delay(.9).room(1), // blips note( "0 5 4 2".iter(4) .off(1/3, add(7)) .scale('g4 dorian') ).s('square').cutoff(2000).decay(.03).sustain(0) .degradeBy(.2) .orbit(2).delay(.2).delaytime(".33 | .6 | .166 | .25") .room(1).gain(.5).mask("<0 1>/8"), // bell note(rand.range(0,12).struct("x(5,8,-1)").scale('g2 minor pentatonic')).s('bell').begin(.05) .delay(.2).degradeBy(.4).gain(.4) .mask("<1 0>/8") ).slow(5)`; export const dinofunk = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos samples({bass:'https://cdn.freesound.org/previews/614/614637_2434927-hq.mp3', dino:{b4:'https://cdn.freesound.org/previews/316/316403_5123851-hq.mp3'}}) setVoicingRange('lefthand', ['c3','a4']) stack( s('bass').loopAt(8).clip(1), s("bd*2, ~ sd,hh*4"), note("Abm7".voicings('lefthand').struct("x(3,8,1)".slow(2))), "0 1 2 3".scale('ab4 minor pentatonic') .superimpose(x=>x.add(.1)) .sometimes(x=>x.add(12)) .note().s('sawtooth') .cutoff(sine.range(400,2000).slow(16)).gain(.8) .decay(perlin.range(.05,.2)).sustain(0) .delay(sine.range(0,.5).slow(32)) .degradeBy(.4).room(1), note("").s('dino').delay(.8).slow(8).room(.5) )`; export const sampleDemo = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos stack( // percussion s("[woodblock:1 woodblock:2*2] snare_rim:0,gong/8,brakedrum:1(3,8),~@3 cowbell:3") .sometimes(x=>x.speed(2)), // melody note("<0 4 1 3 2>".off(".25 | .125",add(2)).scale('D3 hirajoshi')) .s("clavisynth").gain(.2).delay(.25).jux(rev) .degradeBy(sine.range(0,.5).slow(32)), // bass note("<0@3 <2(3,8) 3(3,8)>>".scale('D1 hirajoshi')) .s('psaltery_pluck').gain(.6).clip(1) .release(.1).room(.5) )`; export const holyflute = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos "c3 eb3(3,8) c4/2 g3*2" .superimpose( x=>x.slow(2).add(12), x=>x.slow(4).sub(5) ).add("<0 1>/16") .note().s('ocarina_vib').clip(1) .release(.1).room(1).gain(.2) .color("salmon | orange | darkseagreen") .pianoroll({fold:0,autorange:0,vertical:0,cycles:12,smear:0,minMidi:40}) `; export const flatrave = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos stack( s("bd*2,~ [cp,sd]").bank('RolandTR909'), s("hh:1*4").sometimes(fast("2")) .rarely(x=>x.speed(".5").delay(.5)) .end(perlin.range(0.02,.05).slow(8)) .bank('RolandTR909').room(.5) .gain("0.4,0.4(5,8,-1)"), note("<0 2 5 3>".scale('G1 minor')).struct("x(5,8,-1)") .s('sawtooth').decay(.1).sustain(0), note(",Bb3,D3").struct("~ x*2").s('square').clip(1) .cutoff(sine.range(500,4000).slow(16)).resonance(10) .decay(sine.slow(15).range(.05,.2)).sustain(0) .room(.5).gain(.3).delay(.2).mask("<0 1@3>/8"), "0 5 3 2".sometimes(slow(2)).off(1/8,add(5)).scale('G4 minor').note() .decay(.05).sustain(0).delay(.2).degradeBy(.5).mask("<0 1>/16") )`; export const amensister = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos await samples('github:tidalcycles/Dirt-Samples/master') stack( // amen n("0 1 2 3 4 5 6 7") .sometimes(x=>x.ply(2)) .rarely(x=>x.speed("2 | -2")) .sometimesBy(.4, x=>x.delay(".5")) .s("amencutup") .slow(2) .room(.5) , // bass sine.add(saw.slow(4)).range(0,7).segment(8) .superimpose(x=>x.add(.1)) .scale('G0 minor').note() .s("sawtooth").decay(.1).sustain(0) .gain(.4).cutoff(perlin.range(300,3000).slow(8)).resonance(10) .degradeBy("0 0.1 .5 .1") .rarely(add(note("12"))) , // chord note("Bb3,D4".superimpose(x=>x.add(.2))) .s('sawtooth').cutoff(1000).struct("<~@3 [~ x]>") .decay(.05).sustain(.0).delay(.8).delaytime(.125).room(.8) , // alien s("breath").room(1).shape(.6).chop(16).rev().mask("") , n("0 1").s("east").delay(.5).degradeBy(.8).speed(rand.range(.5,1.5)) ).reset("")`; export const juxUndTollerei = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos note("c3 eb3 g3 bb3").palindrome() .s('sawtooth') .jux(x=>x.rev().color('green').s('sawtooth')) .off(1/4, x=>x.add(note("<7 12>/2")).slow(2).late(.005).s('triangle')) //.delay(.5) .fast(1).cutoff(sine.range(200,2000).slow(8)) .decay(.05).sustain(0) .room(.6) .delay(.5).delaytime(.1).delayfeedback(.4) .pianoroll()`; export const csoundDemo = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos await loadCsound\` instr CoolSynth iduration = p3 ifreq = p4 igain = p5 ioct = octcps(ifreq) kpwm = oscili(.05, 8) asig = vco2(igain, ifreq, 4, .5 + kpwm) asig += vco2(igain, ifreq * 2) idepth = 2 acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) ; filter envelope asig = zdf_2pole(asig, cpsoct(ioct + acut + 2), 0.5) iattack = .01 isustain = .5 idecay = .1 irelease = .1 asig *= linsegr:a(0, iattack, 1, idecay, isustain, iduration, isustain, irelease, 0) out(asig, asig) endin\` "<0 2 [4 6](3,4,2) 3*2>" .off(1/4, add(2)) .off(1/2, add(6)) .scale('D minor') .note() //.pianoroll() .csound('CoolSynth')`; export const loungeSponge = ` // licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // by Felix Roos // livecode.orc by Steven Yi await loadOrc('github:kunstmusik/csound-live-code/master/livecode.orc') stack( note("/2".voicings('lefthand')) .cutoff(sine.range(500,2000).round().slow(16)) .euclidLegato(3,8).csound('FM1') , note("/2").ply(8).csound('Bass').gain("1 4 1 4") , note("0 7 [4 3] 2".fast(2/3).off(".25 .125",add("<2 4 -3 -1>")) .slow(2).scale('A4 minor')) .legato(.25).csound('SynHarp') , s("bd*2,[~ hh]*2,~ cp").bank('RolandTR909') )`; export const arpoon = `// licensed with CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // "Arpoon" by Felix Roos await samples('github:tidalcycles/Dirt-Samples/master') "< C7 F^7 [Fm7 E7b9]>".voicings('lefthand') .arp("[0,3] 2 [1,3] 2".fast(3).lastOf(4, fast(2))).legato(2) .add(perlin.range(0,0.2)).sub("<0 -12>/8") .note().cutoff(perlin.range(500,4000)).resonance(12) .gain("<.5 .8>*16") .decay(.16).sustain(0.5) .delay(.2) .room(.5).pan(sine.range(.3,.6)) .s('piano').clip(1) .stack("<!2 F2 [F2 E2]>".add.out("0 -5".fast(2)).add("0,.12").note().s('sawtooth').clip(1).cutoff(300)) .slow(4) .stack(s("bd*4, [~ [hh hh? hh?]]*2,~ [sd ~ [sd:2? bd?]]").bank('RolandTR909').gain(.5).slow(2)) `;