Web-based environment for live coding algorithmic patterns, incorporating a faithful port of TidalCycles to JavaScript
AGPL-3.0 License
Bot releases are visible (Hide)
These are the release notes for Strudel 1.1.0 aka "Bananensplit".
The last release was over 19 weeks ago, so a lot of things have happened!
First, here's a little demo, teasing some of the new features:
https://github.com/tidalcycles/strudel/assets/12023032/843e1acd-a882-495d-ac78-5cbdbea28592
Let's write up some of the highlights:
with spread, unison, and detune parameters
note("d f a a# a d3").fast(2)
.s("supersaw").spread(".8").detune(.3).unison("2 7")
works great for acid basslines and vibey tones
note("{d d d a a# d3 f4}%16".sub(12)).gain(1).s("sawtooth")
.lpf(200).lpenv(slider(1.36,0,8)).lpq(7).distort("1.5:.7")`
.ftype('ladder')
note("{g g a# g g4}%8".add("{0 7 12 0}%8")).lpf(500)
.s("supersaw").dist("4:.2")
The editor now supports multiple visuals within the code, using the _
prefix for viz functions:
._pianoroll()
: inline pianoroll._punchcard()
: inline punchcard._scope()
: inline scope._pitchwheel()
: inline pitchwheelFor more info, check out the new Visual Feedback Page
This new notation simplifies writing patterns at the top level:
d1: s("bd*4")
d2: s("[- hh]*4")
This is equivalent to:
stack(
s("bd*4"),
s("[- hh]*4")
)
The 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"
.
If the same label is used multiple times, the last one wins:
d1: s("bd*4")
d1: s("[- hh]*4") // <-- only this plays
There is a special label anonymous label $
, which can appear multiple times without overriding itself:
// both of these will play:
$: s("bd*4")
$: s("[- hh]*4")
You can mute a pattern by prefixing _
:
_$: s("bd*4") // <-- this one is muted
$: s("[- hh]*4")
To run a transformation on all patterns, you can use all
:
$: s("bd*4")
$: s("[- hh]*4")
all(x=>x.room(.5))
This notation is now the recommended way to play patterns in parallel
timing has received a major overhaul, and is now much more accurate on all browsers. Additionally, you can now sync timing across multiple windows.
you 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
The new tidal
function allows you to write strudel patterns in tidal syntax:
await initTidal()
tidal`
d1 $ s "bd*4"
d2 $ s "[- hh]*4"
`
As we're looking to improve compatibility with tidal, we're happy to hear feedback.
This 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.
In case of doubt, add the line // @version 1.0
to your old pattern.
If you're having problems, please let us know!
If you have nodejs installed on your system, you can now use @strudel/sampler to serve samples from disk to the REPL or flok.
<...>
to first-sounds.mdx recap by @cleary in https://github.com/tidalcycles/strudel/pull/1070
off
example variation in pattern-effects.mdx by @cleary in https://github.com/tidalcycles/strudel/pull/1075
off
in pattern-effects.mdx by @cleary in https://github.com/tidalcycles/strudel/pull/1074
A huge thanks to all contributors!!!
Full Changelog: https://github.com/tidalcycles/strudel/compare/v1.0.0...v1.1.0
Published by felixroos 9 months ago
These are the release notes for Strudel 1.0.0 aka "Geburtstagskuchen"
This release marks the 2 year anniversary of the project, the first commit was on the 22nd January 2022 by Alex McLean.
If you generally need a heads up on what happened to Strudel in the last year, read the 2023 recap (you might need to hard refresh your browser to see it)
https://github.com/tidalcycles/strudel/assets/12023032/f4745acb-451c-4f5b-9c4e-7b965a45038a
A lot has happened since then, and also since the last release 16 weeks ago.
Let me write up some of the highlights:
This version changes the default cps value from 1 to 0.5 to give patterns a little bit more time by default.
If you find your existing patterns to be suddenly half the speed, just add a setcps(1)
to the top and it should sound as it did before!
Strudel is now available under strudel.cc. The old domain still works but you might not get the most recent version.
Strudel now has a mastodon presence: https://social.toplap.org/@strudel
superdough, the audio engine of strudel has gotten some new features:
The new slider
function inlines a draggable slider element into the code, bridging the gap between code and GUI.
Pattern params can now be controlled with cc messages + you can now send a MIDI clock to sync your DAW with strudel.
hydra, the live coding video synth can now be used directly inside the strudel REPL.
The codemirror editor and the repl abstraction have been refactored from react to vanilla JS!
This should give some performance improvements and less dependency / maintenance burden:
Plenty of things have been added to the docs, including a showcase of what people have been done with strudel.
There is a lot more:
pick
now accepts lookup tables, with alternate cycle squeezing behaviour as new inhabit
function by @yaxu in https://github.com/tidalcycles/strudel/pull/918
pick
now accepts lookup tables, with alternate cycle squeezing behaviour as new inhabit
function" by @yaxu in https://github.com/tidalcycles/strudel/pull/920
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.9.0...v1.0.0
Published by felixroos 9 months ago
This is another maintenance release preparing for 1.0.0
This release marks the move to @strudel/* package names, more info here:
Published by felixroos 9 months ago
This is a maintenance release, preparing for 1.0.0 ..
When 1.0.0 will be released, I will duplicate the changelog and structure it properly, introducing new features etc...
For transparency reasons, I will still drop the changelog from 0.9.0 to 0.10.0 here:
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.9.0...v.0.10.0
Published by felixroos about 1 year ago
These are the release notes for Strudel 0.9.0 aka "Bananenbrot"!
The last release was over 11 weeks ago, so a lot of things have happened!
Let me write up some of the highlights:
The synth engine has gotten a lot of love + a name: superdough encapsulates the web audio based synth / sampler / fx engine into a reusable package, which is already used by Topos.
Main new features include:
https://github.com/tidalcycles/strudel/assets/12023032/652e7042-f296-496b-95cd-b2a4987fe238
Related PRs:
Thanks to @daslyfe and @vasilymilovidov , the desktop app now has its own rust based MIDI and OSC integrations,
which do not depend on browser APIs!
You can see superdough, superdirt via OSC + hardware synths via MIDI all together playing in harmony in this awesome video. These are the related PRs:
Related PRs:
There is now a new way to play chord voicings + a huge selection of chord voicings available. Find out more in these PRs:
Thanks to @mindofmatthew , the highlighting will adapt to edits instantly! Related PRs:
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.8.0...v0.9.0
A big thanks to all the contributors!
Published by felixroos over 1 year ago
These are the release notes for Strudel 0.8.0 aka "Himbeermuffin"!
Go to Tidal Club Forum for this Release
Let me write up some of the highlights:
Besides the REPL (https://strudel.tidalcycles.org/), Strudel is now also distributed as a Desktop App via https://tauri.app/! Thanks to vasilymilovidov!
edit: the desktop app performance on linux is currently not that great.. the web REPL runs much smoother (using firefox or chromium)
The desktop App has the same features as the webapp, with the additional ability to load samples from disk. It is currently not documented yet, but you can do something like
await samples('~/music/xxx')
s("my_sound")
You have to start with ~/music/
, followed by an arbitrary folder path that is expected to be present in the systems audio directory.
When you first run it, the app will create a strudel.json file in that directory to map out the available samples.
I would be very happy to collect some feedback on how it works across different platforms & systems!
Also still undocumented, but you can now visualize patterns as a spiral via .spiral()
:
https://github.com/tidalcycles/strudel/assets/12023032/05bc2dba-b304-4298-9465-a1a6fafe5ded
This is especially nice because strudel is not only the name of a dessert but also the german word for vortex! The spiral is very fitting to visualize cycles because you can align cycles vertically, while surfing along an infinite twisted timeline.
In the settings tab, you can now toggle:
Thanks to roipoussiere!
Scroll down to see the full list of Changes!
A big thanks to all the contributors!
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.7.0...v0.8.0
Published by felixroos over 1 year ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.6.0...v0.7.0
Published by felixroos over 1 year ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.5.0...v0.6.0
Published by felixroos almost 2 years ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.4.0...v0.5.0
Published by felixroos almost 2 years ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.3.0...v0.4.0
Published by felixroos almost 2 years ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.4...v0.3.0
Published by felixroos about 2 years ago
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.3...v0.0.4
Published by yaxu over 2 years ago
chop()
by @yaxu in https://github.com/tidalcycles/strudel/pull/50
rand
, and add brand
, irand
and choose
by @yaxu in https://github.com/tidalcycles/strudel/pull/70
perlin
noise, rangex
, and palindrome
by @yaxu in https://github.com/tidalcycles/strudel/pull/73
striate()
by @yaxu in https://github.com/tidalcycles/strudel/pull/76
.brak()
, .inside()
and .outside()
by @yaxu in https://github.com/tidalcycles/strudel/pull/112
Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.2...v0.0.3
Published by felixroos over 2 years ago
chop()
by @yaxu in https://github.com/tidalcycles/strudel/pull/50
rand
, and add brand
, irand
and choose
by @yaxu in https://github.com/tidalcycles/strudel/pull/70
perlin
noise, rangex
, and palindrome
by @yaxu in https://github.com/tidalcycles/strudel/pull/73
striate()
by @yaxu in https://github.com/tidalcycles/strudel/pull/76
.brak()
, .inside()
and .outside()
by @yaxu in https://github.com/tidalcycles/strudel/pull/112
Full Changelog: https://github.com/tidalcycles/strudel/compare/[email protected]/[email protected]
Published by yaxu over 2 years ago
when
WIP by @yaxu in https://github.com/tidalcycles/strudel/pull/10
Full Changelog: https://github.com/tidalcycles/strudel/commits/2a0d8c3f77ff7b34e82602e2d02400707f367316