/* 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 let melody = note( "[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]", ) stack( // melody melody.color('#F8E71C'), // chords chord( "[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]" ).dict('lefthand') .anchor(melody).mode('duck') .voicing().color('#7ED321'), // bass note( "[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) .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]\`, // 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]]\` ).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 = `// "Caverave" // @license 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 synths = stack( "/2" .scale("/2") .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) ).note().apply(keys).mask("<~ x>/16") .color('darkseagreen'), note("/2") .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'), chord("/2") .struct("~ [x@0.2 ~]".fast(2)) .dict('lefthand').voicing() .every(2, early(1/8)) .apply(keys).sustain(0) .delay(.4).delaytime(.12) .mask("/8".early(1/4)) ).add(note("<-1 0>/8")) 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 = `// "Blippy Rhodes" // @license 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/') stack( s(" ").color('#00B8D4'), "]>" .scale("]>") .struct("x*8") .scaleTranspose("0 [-5,-2] -7 [-9,-2]") .slow(2) .note() .clip(.3) .s('rhodes') .room(.5) .delay(.3) .delayfeedback(.4) .delaytime(1/12).gain(.5).color('#7ED321'), "/2" .add("0,.02") .note().gain(.3) .clip("<1@3 [.3 1]>/2") .cutoff(600) .lpa(.2).lpenv(-4) .s('sawtooth').color('#F8E71C'), ).fast(3/2) //.pianoroll({fold:1})`; export const wavyKalimba = `// "Wavy kalimba" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos setcps(1) samples({ 'kalimba': { c5:'https://cdn.freesound.org/previews/536/536549_11935698-lq.mp3' } }) const scales = "" 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) ) .fast(1) .note() .clip("<.4 .8 1 1.2 1.4 1.6 1.8 2>/8") .s('kalimba') .delay(.2)`; export const festivalOfFingers = `// "Festival of fingers" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos const chords = ""; stack( chord(chords).dict('lefthand').voicing() .struct("x(3,8,-1)") .gain(.5).off(1/7,x=>x.add(note(12)).mul(gain(.2))), chords.rootNotes(2).struct("x(4,8,-2)").note(), 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")) .note() ).slow(2) .mul(gain(sine.struct("x*8").add(3/5).mul(2/5).fast(8))) .piano()`; // iter, echo, echoWith export const undergroundPlumber = `// "Underground plumber" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos // @details 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) .slow(2) .note().s('square') .layer(h) .clip(.4) .cutoff(400).decay(.12).sustain(0) , "[g2,[c3 eb3]]".iter(4) .echoWith(4, 1/8, (x,n)=>x.transpose(n*12).gain(Math.pow(.4,n))) .note().layer(h) .clip(.1) ) .fast(2/3) .pianoroll()`; /* export const bridgeIsOver = `// "Bridge is over" // @license 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( note("c3*2 [[c3@1.4 bb2] ab2] gb2*2 <[[gb2@1.4 ab2] bb2] gb2>") .gain(.8).clip("[.5 1]*2"), n("<0 1 2 3 4 3 2 1>") .clip(.5) .echoWith(8, 1/32, (x,i)=>x.add(n(i)).velocity(Math.pow(.7,i))) .scale('c4 whole tone') .echo(3, 1/8, .5) ).piano(), s("mad").slow(2) ).cpm(78).slow(4) .pianoroll() `; */ export const goodTimes = `// "Good times" // @license 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)) .scale(scale) .fast(2) .add("<0 1 2 1>").hush(), "<0 1 2 3>(3,8,2)".off(1/4, add("2,4")) .n().scale(scale), n("<0 4>(5,8,-1)").scale(scale).sub(note(12)) ) .gain(".6 .7".fast(4)) .add(note(4)) .piano() .clip(2) .mul(gain(.8)) .slow(2) .pianoroll()`; export const echoPiano = `// "Echo piano" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos n("<0 2 [4 6](3,4,2) 3*2>").color('salmon') .off(1/4, x=>x.add(n(2)).color('green')) .off(1/2, x=>x.add(n(6)).color('steelblue')) .scale('D minor') .echo(4, 1/8, .5) .clip(.5) .piano() .pianoroll()`; export const sml1 = `// Hirokazu Tanaka - World 1-1 stack( // melody note(\`< [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 >\`) .clip(.95), // sub melody note(\`< [~ 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 note(\`< 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 >\`) .clip(.5) ).fast(2)`; export const randomBells = `// "Random bells" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos samples({ bell: { c6: 'https://cdn.freesound.org/previews/411/411089_5121236-lq.mp3' }, bass: { d2: 'https://cdn.freesound.org/previews/608/608286_13074022-lq.mp3' } }) stack( // bells n("0").euclidLegato(3,8) .echo(3, 1/16, .5) .add(n(rand.range(0,12))) .scale("D:minor:pentatonic") .velocity(rand.range(.5,1)) .s('bell').gain(.6).delay(.2).delaytime(1/3).delayfeedback(.8), // bass note("").euclidLegatoRot(6,8,4).s('bass').clip(1).gain(.8) ) .slow(6) .pianoroll({vertical:1})`; export const waa2 = `// "Waa2" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos note( "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) .clip(sine.range(0.3, 2).slow(28)) .s("sawtooth square".fast(2)) .cutoff(cosine.range(500,4000).slow(16)) .gain(.5) .room(.5) .lpa(.125).lpenv(-2).v("8:.125").fanchor(.25)`; export const festivalOfFingers3 = `// "Festival of fingers 3" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos setcps(1) n("[-7*3],0,2,6,[8 7]") .echoWith( 4, // echo 4 times 1/4, // 1/4s between echos (x,i)=>x .add(n(i*7)) // add octaves .gain(1/(i+1)) // reduce gain .clip(1/(i+1)) ) .mul(gain(perlin.range(.5,.9).slow(8))) .stack(n("[22 25]*3") .clip(sine.range(.5,2).slow(8)) .gain(sine.range(.4,.8).slow(5)) .echo(4,1/12,.5)) .scale("") .slow(2).piano() //.pianoroll({maxMidi:160})`; export const meltingsubmarine = `// "Melting submarine" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos samples('github:tidalcycles/dirt-samples') 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 .lpa(.1).lpenv(-2) //.hush() ,chord(">") .dict('lefthand').voicing() // chords .add(note("0,.04")) // add second, slightly detuned voice .add(note(perlin.range(0,.5))) // random pitch variation .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 = `// "Outro music" // @license 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'); chord("*2").dict('lefthand').anchor("G4").voicing() .stack(n("0@6 [<1 2> <2 0> 1]@2").scale('C5 major')) .slow(4) .s("gm_epiano1:1") .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 = `// "Bass fuge" // @license 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'); setcps(1) "<8(3,8) <7 7*2> [4 5@3] 8>".sub(1) // sub 1 -> 1-indexed .layer( x=>x, x=>x.add(7) .off(1/8,x=>x.add("2,4").off(1/8,x=>x.add(5).echo(4,.125,.5))) .slow(2), ).n().scale('A1 minor') .s("flbass").n(0) .mul(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 = `// "Chop" // @license 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 = `// "Delay" // @license 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 = `// "Orbit" // @license 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 = `// "Belldub" // @license 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 chord("[~ Gm7] ~ [~ Dm7] ~") .dict('lefthand').voicing() .add(note("0,.1")) .s('sawtooth').gain(.8) .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 = `// "Dinofunk" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos setcps(1) 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"), chord("Abm7") .mode("below:G4") .dict('lefthand') .voicing() .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 = `// "Sample demo" // @license 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 = `// "Holy flute" // @license 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 = `// "Flatrave" // @license 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) .lpa(.1).lpenv(-4).lpf(800).lpq(8), 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 = `// "Amensister" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos samples('github:tidalcycles/dirt-samples') 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") .gain(.4).decay(.1).sustain(0) .lpa(.1).lpenv(-4).lpq(10) .cutoff(perlin.range(300,3000).slow(8)) .degradeBy("0 0.1 .5 .1") .rarely(add(note("12"))) , // chord note("Bb3,D4".superimpose(x=>x.add(.2))) .s('sawtooth').lpf(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 = `// "Jux und tollerei" // @license 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')) .lpf(sine.range(200,2000).slow(8)) .lpa(.2).lpenv(-2) .decay(.05).sustain(0) .room(.6) .delay(.5).delaytime(.1).delayfeedback(.4) .pianoroll()`; export const csoundDemo = `// "CSound demo" // @license 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 = `// "Lounge sponge" // @license 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( chord("/2").dict('lefthand').voicing() .cutoff(sine.range(500,2000).round().slow(16)) .euclidLegato(3,8).csound('FM1') , note("/2").ply(8).csound('Bass').gain("1 4 1 4") , n("0 7 [4 3] 2".fast(2/3).off(".25 .125", add("<2 4 -3 -1>")) .slow(2).scale('A4 minor')) .clip(.25).csound('SynHarp') , s("bd*2,[~ hh]*2,~ cp").bank('RolandTR909') )`; export const arpoon = `// "Arpoon" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos samples('github:tidalcycles/dirt-samples') n("[0,3] 2 [1,3] 2".fast(3).lastOf(4, fast(2))).clip(2) .offset("<<1 2> 2 1 1>") .chord("< C7 F^7 [Fm7 E7b9]>") .dict('lefthand').voicing() .add(perlin.range(0,0.2).add("<-12 0>/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') .stack( "<!2 F2 F2>" .add.out("0 -5".fast(2)) .add("0,.12").note() .s('sawtooth').cutoff(180) .lpa(.1).lpenv(2) ) .slow(4) .stack(s("bd*4, [~ [hh hh? hh?]]*2,~ [sd ~ [sd:2? bd?]]").bank('RolandTR909').gain(.5).slow(2)) `;