Skip to content

Instantly share code, notes, and snippets.

@slinkp
Created March 5, 2026 17:28
Show Gist options
  • Select an option

  • Save slinkp/cc2565a1d943e0d5920b527e56834a9e to your computer and use it in GitHub Desktop.

Select an option

Save slinkp/cc2565a1d943e0d5920b527e56834a9e to your computer and use it in GitHub Desktop.
livecode nudel jam at recurse 3/5/2026
// "nudel 2026-03-05 17:26" @by pastagang
//pane 1
setcpm(130/4)
$:sound("<[bd bd [bd 0 0 bd] [0 0 bd 0]]>")
.bank("TR909")
.gain(0.7)
$:sound("0 cp [0 cp] 0").bank("RolandTR909")
.pan(1)
.gain(0.3)
$:sound("hh*16").undegrade().bank("RolandTR909")
.gain(0.1)
//pane 2
$:sound(`<
[~ sd ~ [sd ~ sd ~]]
[ ~ sd ~ sd]
[~ sd ~ [sd ~ sd ~]]
[~ [ht ht ~ ~] [mt mt ~ ~] [~ ~ lt lt]]
[~]
[ ~ sd ~ sd]
>`)
.bank("tr707")
.pan(sine.slow(0.9)) // autopan is fun
.room(1).roomfade(0.09) // PHIL COLLINS REVERB
.gain(0.18)
//pane 3
$:n("0 1 [4 3] 2 0 2 [~ 3] 4").sound("jazz").lpf(tri.range(1000, 10000).slow(4)).hpf(tri.range(5000, 10000).slow(3))
.gain(0)
$: s("supersaw").seg(16).lpf(tri.range(1000, 5000).slow(4)).often(x=>x.sub(note(12)))
.gain(0.9)
$: n(`<
[~ 0] 2 2 [0] [~ 2]
[~ 0] 1 [0 1 2 3] [~ 1]
[~ 0] 3 3 [0 3] [~ 3]
[~ 0] [2 2] [0 2] [~ 2]
>*4`).scale("C2:mixolydian")
.pan(0.2)
.sound("square").gain(0.2)
//pane 4
$:n(`<
[~ ~ ~ ~]
[~ ~ ~ ~]
[-4 -8 -16 -32]
>`)
.scale("C:major").sound("crow")
.pan(sine.slow(4))
.gain(0.14)
.delay(1).dt(2/3)
.room(0.3)
//pane 5
$: s("<space:1 space:2> - - space:1 - -").room(1).roomsize(5).decay(.5)
.gain(0.2)
//pane 6
$: n("<0 2 4>").scale("C:major").sound("sax")
.gain(0.1)
// Maybe we don't need this anymore
// - We don't allow exporting to strudel anymore
// - We aren't really keeping compatibility with flok anymore either
function spag(name){return'https://spag.cc/'+name}
function listToArray(stringList){if(Array.isArray(stringList)){return stringList.map(listToArray).flat()}
return stringList.replaceAll(' ',',').split(',').map((v)=>v.trim()).filter((v)=>v)}
async function spagda(nameList){const names=listToArray(nameList);if(names.length===0){return}
const map={};for(const name of names){map[name]=spag(name)}
window.samples(map)}
async function speechda(wordList='',locale='en-GB',gender='f',){if(wordList.includes(':')){const[localeArg,wordsArg]=wordList.split(':');if(localeArg.includes('-')){locale=localeArg}else{gender=localeArg}
wordList=wordsArg}
const words=listToArray(wordList);if(words.length===0){return}
const samplesObject={}
for(const word of words){samplesObject[word]='/fuck_off_ay_eye_music.wav'}
window.samples(samplesObject)}
async function hubda(orgList,repoList='samples'){const orgs=listToArray(orgList);const orgRepos=[];const orgChoices=[];for(const org of orgs){if(org.includes('/')){const[orgName,repoName]=org.split('/');orgRepos.push({org:orgName,repo:repoName})}else{orgChoices.push(org)}}
const repoChoices=listToArray(repoList);for(const orgChoice of orgChoices){for(const repoChoice of repoChoices){orgRepos.push({org:orgChoice,repo:repoChoice})}}
const addresses=orgRepos.map(({org,repo})=>'github:'+org+'/'+repo);for(const address of addresses){window.samples(address)}}
if(!window.samples){window.samples=function(){}}
hubda('mot4i','garden')
hubda('todepond', 'dirt-samples')
hubda('eddyflux','crate')
hubda('yaxu','clean-breaks')
hubda('todepond','spicule')
window.speechda=speechda;window.spagda=spagda;window.spag=spag;window.hubda=hubda;window.hyperda=hyperda
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment