1--- 2title: 'Release Notes v1.1.0' 3description: '' 4date: '2024-06-02' 5tags: ['meta'] 6author: froos 7--- 8 9These are the release notes for Strudel 1.1.0 aka "Bananensplit". 10 11The last release was over 19 weeks ago, so a lot of things have happened! 12 13First, here's a little demo, teasing some of the new features: 14 15import { Youtube } from '@src/components/Youtube'; 16 17<Youtube client:only="react" id="2Qu5lMHruio" /> 18 19Let's write up some of the highlights: 20 21## New DSP Features 22 23### Stereo Supersaw 24 25with spread, unison, and detune parameters 26 27```plaintext 28note("d f a a# a d3").fast(2) 29.s("supersaw").spread(".8").detune(.3).unison("2 7") 30``` 31 32### Analog "ladder" filter type 33 34works great for acid basslines and vibey tones 35 36```plaintext 37note("{d d d a a# d3 f4}%16".sub(12)).gain(1).s("sawtooth") 38.lpf(200).lpenv(slider(1.36,0,8)).lpq(7).distort("1.5:.7")` 39.ftype('ladder') 40``` 41 42### stereo distortion effect 43 44```plaintext 45note("{g g a# g g4}%8".add("{0 7 12 0}%8")).lpf(500) 46.s("supersaw").dist("4:.2") 47``` 48 49## Editor Features 50 51### inline viz 52 53The editor now supports multiple visuals within the code, using the `_` prefix for viz functions: 54 55<img 56 width="595" 57 alt="Screenshot 2024-06-01 at 01 23 51" 58 src="https://codeberg.org/uzu/strudel/assets/12023032/978fee85-e533-4da6-a245-d20d0083f57e" 59/> 60 61- `._pianoroll()`: inline pianoroll 62- `._punchcard()`: inline punchcard 63- `._scope()`: inline scope 64- `._pitchwheel()`: inline pitchwheel 65 66For more info, check out the new [Visual Feedback Page](https://strudel.cc/learn/visual-feedback/) 67 68### label notation 69 70This new notation simplifies writing patterns at the top level: 71 72```plaintext 73d1: s("bd*4") 74d2: s("[- hh]*4") 75``` 76 77This is equivalent to: 78 79```plaintext 80stack( 81 s("bd*4"), 82 s("[- hh]*4") 83) 84``` 85 86The labels you choose are arbitrary, the above `d1` and `d2` are a typical thing you'd write in tidal, for example `d1 $ s "bd*4"`. 87If the same label is used multiple times, the last one wins: 88 89```plaintext 90d1: s("bd*4") 91d1: s("[- hh]*4") // <-- only this plays 92``` 93 94There is a special label anonymous label `$`, which can appear multiple times without overriding itself: 95 96```plaintext 97// both of these will play: 98$: s("bd*4") 99$: s("[- hh]*4") 100``` 101 102You can mute a pattern by prefixing `_`: 103 104```plaintext 105_$: s("bd*4") // <-- this one is muted 106$: s("[- hh]*4") 107``` 108 109To run a transformation on all patterns, you can use `all`: 110 111```plaintext 112$: s("bd*4") 113$: s("[- hh]*4") 114all(x=>x.room(.5)) 115``` 116 117This notation is now the recommended way to [play patterns in parallel](https://strudel.cc/workshop/first-notes/#playing-multiple-patterns) 118 119### Clock sync between multiple instances 120 121timing has received a major overhaul, and is now much more accurate on all browsers. Additionally, you can now sync timing across multiple windows. 122 123 124### Better sample upload support 125 126you can now upload large amounts of samples much faster across all browsers including on IOS devices. supported filetypes now include: ogg flac mp3 wav aac m4a 127 128### experimental tidal syntax 129 130The new `tidal` function allows you to write strudel patterns in tidal syntax: 131 132```plaintext 133await initTidal() 134 135tidal` 136d1 $ s "bd*4" 137 138d2 $ s "[- hh]*4" 139` 140``` 141 142As we're looking to improve compatibility with tidal, we're happy to hear feedback. 143 144## breaking changes 145 146This release comes with a bunch of breaking changes. If you find your patterns to sound different, check out the PRs below for guidance on how to update them. Most of these changes shouldn't affect a lot of patterns. 147In case of doubt, add the line `// @version 1.0` to your old pattern. 148If you're having problems, please let us know! 149 150- remove legacy legato + duration implementations by @felixroos in https://codeberg.org/uzu/strudel/pull/965 151- Velocity in value by @felixroos in https://codeberg.org/uzu/strudel/pull/974 152- use ireal as default voicing dict by @felixroos https://codeberg.org/uzu/strudel/pull/967 153- Color in hap value by @felixroos https://codeberg.org/uzu/strudel/pull/1007 154- rename trig -> reset, trigzero -> restart by @felixroos https://codeberg.org/uzu/strudel/pull/1010 155- remove dangerous arithmetic feature by @felixroos https://codeberg.org/uzu/strudel/pull/1030 156- change fanchor to 0 by @daslyfe https://codeberg.org/uzu/strudel/pull/1107 157 158## superdough features 159 160- replace shape with distort in learn doc by @daslyfe https://codeberg.org/uzu/strudel/pull/982 161- Worklet Improvents / fixes by @daslyfe https://codeberg.org/uzu/strudel/pull/963 162- supersaw oscillator by @daslyfe https://codeberg.org/uzu/strudel/pull/978 163- Add analog-style ladder filter by @daslyfe https://codeberg.org/uzu/strudel/pull/1103 164- Calculate phaser modulation phase based on time by @daslyfe https://codeberg.org/uzu/strudel/pull/1110 165- rollback phaser by @daslyfe https://codeberg.org/uzu/strudel/pull/1113 166 167## editor / ui features 168 169- 'Enable Bracket Matching' option in Codemirror by @eefano https://codeberg.org/uzu/strudel/pull/956 170- REPL sync between windows by @daslyfe https://codeberg.org/uzu/strudel/pull/900 171- inline viz / widgets package by @felixroos https://codeberg.org/uzu/strudel/pull/989 172- Inline punchcard + spiral by @felixroos https://codeberg.org/uzu/strudel/pull/1008 173- More fonts by @felixroos https://codeberg.org/uzu/strudel/pull/1023 174- better theme integration for visuals + various fixes by @felixroos https://codeberg.org/uzu/strudel/pull/1024 175- add setting for sync flag by @felixroos https://codeberg.org/uzu/strudel/pull/1025 176- add closeBrackets setting by @felixroos https://codeberg.org/uzu/strudel/pull/1031 177- add font file types to offline cache by @felixroos https://codeberg.org/uzu/strudel/pull/1032 178- pitchwheel visual by @felixroos https://codeberg.org/uzu/strudel/pull/1041 179- repl: set document.title from @title by @kasparsj https://codeberg.org/uzu/strudel/pull/1090 180- Samples tab improvements by @daslyfe https://codeberg.org/uzu/strudel/pull/1102 181 182## language features 183 184- pickOut(), pickRestart(), pickReset() by @eefano https://codeberg.org/uzu/strudel/pull/950 185- Auto await samples by @felixroos https://codeberg.org/uzu/strudel/pull/955 186- feat: can now invert euclid pulses with negative numbers by @felixroos https://codeberg.org/uzu/strudel/pull/959 187- Nested controls by @felixroos https://codeberg.org/uzu/strudel/pull/973 188- alias - for ~ by @yaxu https://codeberg.org/uzu/strudel/pull/981 189- Beat-oriented functionality by @yaxu https://codeberg.org/uzu/strudel/pull/976 190- Labeled statements by @felixroos https://codeberg.org/uzu/strudel/pull/991 191- accidentals in scale degrees by @eefano https://codeberg.org/uzu/strudel/pull/1000 192- Feature: tactus marking by @yaxu https://codeberg.org/uzu/strudel/pull/1021 193- Tactus tidy by @yaxu https://codeberg.org/uzu/strudel/pull/1027 194- Wax, wane, taper and taperlist by @yaxu https://codeberg.org/uzu/strudel/pull/1042 195- transpose: support all combinations of numbers and strings for notes and intervals by @felixroos https://codeberg.org/uzu/strudel/pull/1048 196- anonymous patterns + muting by @felixroos https://codeberg.org/uzu/strudel/pull/1059 197- add swing + swingBy by @felixroos https://codeberg.org/uzu/strudel/pull/1038 198- Stepwise functions from Tidal by @yaxu https://codeberg.org/uzu/strudel/pull/1060 199- Tactus tweaks - fixes for maintaining tactus and highlight locations by @yaxu https://codeberg.org/uzu/strudel/pull/1065 200- Fix stepjoin by @yaxu https://codeberg.org/uzu/strudel/pull/1067 201- More tactus tidying by @yaxu https://codeberg.org/uzu/strudel/pull/1071 202- Tactus calculation toggle and breaking change to tactus calculation in fast/slow/hurry by @yaxu https://codeberg.org/uzu/strudel/pull/1081 203- hs2js package / tidal parser by @felixroos https://codeberg.org/uzu/strudel/pull/870 204- Add the mousex and mousey signal by @Enelg52 https://codeberg.org/uzu/strudel/pull/1112 205- can now access strudelMirror from repl by @felixroos https://codeberg.org/uzu/strudel/pull/1117 206 207## sampler 208 209If you have nodejs installed on your system, you can now use [@strudel/sampler](https://www.npmjs.com/package/@strudel/sampler) to serve samples from disk to the REPL or flok. 210 211- local sample server cli by @felixroos https://codeberg.org/uzu/strudel/pull/1033 212- Fix sampler paths by @felixroos https://codeberg.org/uzu/strudel/pull/1034 213- Fix sampler windows by @felixroos https://codeberg.org/uzu/strudel/pull/1108 214- fix sampler on windows by @geikha https://codeberg.org/uzu/strudel/pull/1109 215 216## docs 217 218- V1 release notes by @felixroos https://codeberg.org/uzu/strudel/pull/935 219- Minor documentation error: Update first-sounds.mdx by @mhetrick https://codeberg.org/uzu/strudel/pull/941 220- Update synths.mdx by @andresgottlieb https://codeberg.org/uzu/strudel/pull/984 221- using strudel in your project guide + cleanup examples by @felixroos https://codeberg.org/uzu/strudel/pull/1006 222- Document signals by @ilesinge https://codeberg.org/uzu/strudel/pull/1015 223- improve tutorial + custom samples doc by @felixroos https://codeberg.org/uzu/strudel/pull/1053 224- fix cr typo on first-sounds.mdx by @cleary https://codeberg.org/uzu/strudel/pull/1068 225- fix first sounds typo by @cleary https://codeberg.org/uzu/strudel/pull/1069 226- add `<...>` to first-sounds.mdx recap by @cleary https://codeberg.org/uzu/strudel/pull/1070 227- add nesting to `off` example variation in pattern-effects.mdx by @cleary https://codeberg.org/uzu/strudel/pull/1075 228- fix translation issue in first-effects.mdx by @cleary https://codeberg.org/uzu/strudel/pull/1072 229- add signals to recap in first-effects.mdx by @cleary https://codeberg.org/uzu/strudel/pull/1073 230- fix docs on alignment.mdx by @diegodorado https://codeberg.org/uzu/strudel/pull/1076 231- fix little dub tune example by @lukad https://codeberg.org/uzu/strudel/pull/1104 232- clarify `off` in pattern-effects.mdx by @cleary https://codeberg.org/uzu/strudel/pull/1074 233- Fixes drawPianoroll import in codemirror example by @giohappy https://codeberg.org/uzu/strudel/pull/1116 234- Migrate tutorial fanchor by @felixroos https://codeberg.org/uzu/strudel/pull/1122 235 236## internals 237 238- remove cjs builds by @felixroos https://codeberg.org/uzu/strudel/pull/945 239- controls refactoring: simplify exports by @felixroos https://codeberg.org/uzu/strudel/pull/962 240- move canvas related helpers from core to new draw package by @felixroos https://codeberg.org/uzu/strudel/pull/971 241- remove canvas, externalize samples, delete junk by @felixroos https://codeberg.org/uzu/strudel/pull/1003 242- Improve performance of ! (replicate) by @yaxu https://codeberg.org/uzu/strudel/pull/1084 243- Benchmarks by @yaxu https://codeberg.org/uzu/strudel/pull/1079 244 245## fixes 246 247- fix midi issue on firefox and added quote error by @Enelg52 https://codeberg.org/uzu/strudel/pull/936 248- fix: pianoroll sorting by @felixroos https://codeberg.org/uzu/strudel/pull/938 249- account for cps in midi time duration by @daslyfe https://codeberg.org/uzu/strudel/pull/954 250- fix script importable packages (web + repl) by @felixroos https://codeberg.org/uzu/strudel/pull/957 251- fix: reset global fx on pattern change by @felixroos https://codeberg.org/uzu/strudel/pull/960 252- add debounce to logger by @felixroos https://codeberg.org/uzu/strudel/pull/968 253- fix for transpose(): preserve hap value object structure by @eefano https://codeberg.org/uzu/strudel/pull/966 254- fix: clear hydra on reset by @felixroos https://codeberg.org/uzu/strudel/pull/983 255- little fix for withVal by @eefano https://codeberg.org/uzu/strudel/pull/980 256- fix: share now shares what's visible instead of active by @felixroos https://codeberg.org/uzu/strudel/pull/985 257- Fix pure mini highlight by @yaxu https://codeberg.org/uzu/strudel/pull/994 258- fix: await injectPatternMethods by @felixroos https://codeberg.org/uzu/strudel/pull/1012 259- update undocumented script by @felixroos https://codeberg.org/uzu/strudel/pull/1013 260- eliminate chromium clock jitter by @felixroos https://codeberg.org/uzu/strudel/pull/1004 261- Repl sync fixes by @daslyfe https://codeberg.org/uzu/strudel/pull/1014 262- hotfix for 1017 by @daslyfe https://codeberg.org/uzu/strudel/pull/1020 263- fix cyclist fizzling out by @felixroos https://codeberg.org/uzu/strudel/pull/1046 264- Midi Time hotfix for scheduler updates by @daslyfe https://codeberg.org/uzu/strudel/pull/1047 265- fix: do not reset cc input values on each eval by @felixroos https://codeberg.org/uzu/strudel/pull/1054 266- Fix wchooseCycles not picking the whole pattern by @ilesinge https://codeberg.org/uzu/strudel/pull/1061 267- fix OSC timing for recent scheduler updates by @daslyfe https://codeberg.org/uzu/strudel/pull/1062 268- clarify license by @yaxu https://codeberg.org/uzu/strudel/pull/1064 269- fix failing format test by @daslyfe https://codeberg.org/uzu/strudel/pull/1077 270- fix: url parsing with extra params by @felixroos https://codeberg.org/uzu/strudel/pull/1083 271- fix: csound + dough timing by @felixroos https://codeberg.org/uzu/strudel/pull/1086 272- fix: missing events due to premature worklet cleanup by @felixroos https://codeberg.org/uzu/strudel/pull/1089 273- Use sessionStorage for viewingPatternData and activePattern by @kasparsj https://codeberg.org/uzu/strudel/pull/1091 274- osc: couple of fixes by @kasparsj https://codeberg.org/uzu/strudel/pull/1093 275- web package fixes by @felixroos https://codeberg.org/uzu/strudel/pull/1044 276- Fix audio worklets by @daslyfe https://codeberg.org/uzu/strudel/pull/1114 277- fix: use full repl in web package by @felixroos https://codeberg.org/uzu/strudel/pull/1119 278- [BUG FIX] Audio worklets sometimes dont load by @daslyfe https://codeberg.org/uzu/strudel/pull/1121 279 280## New Contributors 281 282- @mhetrick made their first contribution https://codeberg.org/uzu/strudel/pull/941 283- @eefano made their first contribution https://codeberg.org/uzu/strudel/pull/956 284- @Enelg52 made their first contribution https://codeberg.org/uzu/strudel/pull/936 285- @andresgottlieb made their first contribution https://codeberg.org/uzu/strudel/pull/984 286- @cleary made their first contribution https://codeberg.org/uzu/strudel/pull/1068 287- @diegodorado made their first contribution https://codeberg.org/uzu/strudel/pull/1076 288- @lukad made their first contribution https://codeberg.org/uzu/strudel/pull/1104 289- @giohappy made their first contribution https://codeberg.org/uzu/strudel/pull/1116 290 291A huge thanks to all contributors!!! 292 293## Packages 294 295- @strudel/codemirror@1.1.0 296- @strudel/core@1.1.0 297- @strudel/csound@1.1.0 298- @strudel/draw@1.1.0 299- @strudel/embed@1.1.0 300- hs2js@0.1.0 301- @strudel/hydra@1.1.0 302- @strudel/midi@1.1.0 303- @strudel/mini@1.1.0 304- @strudel/osc@1.1.0 305- @strudel/repl@1.1.0 306- @strudel/sampler@0.1.0 307- @strudel/serial@1.1.0 308- @strudel/soundfonts@1.1.0 309- superdough@1.1.0 310- @strudel/tidal@0.1.0 311- @strudel/tonal@1.1.0 312- @strudel/transpiler@1.1.0 313- @strudel/web@1.1.0 314- @strudel/webaudio@1.1.0 315- @strudel/xen@1.1.0 316 317**Full Changelog**: https://codeberg.org/uzu/strudel/compare/v1.0.0...v1.1.0