strudel cheatsheet
todo
- find more fun instruments and modifiers
- build a song out with played through examples of a bunch of effects
instrument names
auto-pull from docs
or list some favs
synths
auto-pull from docs
or list some favs
effects with brief explainer
1.transpose(2) //scales up/down
1//speed values in the negative result in reversed sounds (samples mainly?)
2$: s("bd!4").bank("RolandTR808").gain(.75).speed(-8)
3
4$: n("<0 - 1!2>, <3 - 4!2>")
5 .s("sawtooth")
6 .scale("G2:minor")
7 .fast(2)
8 .speed(1)
9 .gain(.6)
10 .transpose(-7)
11 .fm(2)
12 .ply(8)
13
14$: s("crow -")
15.speed(-1)
1//young buck - get buck beat/tuba
2setcpm(80/4)
3
4$: s("bd - - bd cp - bd - - - bd - cp bd - -")
5.bank("RolandTR909")
6
7.early(.02)
8.gain(.5)
9.room(.25)
10
11$: note("b1 - - b1 - - c2 - b1 - d2 - d2 c#2 c2 - ")
12.s("gm_tuba")
13.gain(1.25)
14.crush(4.5)
15.delay(.15)
16.sometimesBy(.1,n=>n.jux(rev))
spagda / hubda - if using strudel you may need to import this to use those functions which are natively part of nudel
1function 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)} 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} if(locale.includes('/')){const[localeArg,genderArg]=locale.split('/');locale=localeArg;gender=genderArg} const words=listToArray(wordList);if(words.length===0){return} samples('shabda/speech/'+locale+'/'+gender+':'+words.join(','))} async function hubda(orgList,repoList=''){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){samples(address)}} window.speechda=speechda;window.spagda=spagda;window.spag=spag;window.hubda=hubda
changelog
[[2025-03-26]] began to write up instument/effect detail [[2025-04-18]] updates as i prep for posting