Skip to content

Releases: tidalcycles/strudel

v1.1.0 Bananensplit

03 Jun 03:39
ab10863
Compare
Choose a tag to compare

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:

strudel11.mp4

Let's write up some of the highlights:

New DSP Features

Stereo Supersaw

with spread, unison, and detune parameters

note("d f a a# a d3").fast(2)
.s("supersaw").spread(".8").detune(.3).unison("2 7")

Analog "ladder" filter type

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')

stereo distortion effect

note("{g g a# g g4}%8".add("{0 7 12 0}%8")).lpf(500)
.s("supersaw").dist("4:.2")

Editor Features

inline viz

The editor now supports multiple visuals within the code, using the _ prefix for viz functions:

Screenshot 2024-06-01 at 01 23 51
  • ._pianoroll(): inline pianoroll
  • ._punchcard(): inline punchcard
  • ._scope(): inline scope
  • ._pitchwheel(): inline pitchwheel

For more info, check out the new Visual Feedback Page

label notation

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

Clock sync between multiple instances

timing has received a major overhaul, and is now much more accurate on all browsers. Additionally, you can now sync timing across multiple windows.
Screenshot 2024-06-02 at 11 24 40 PM

Better sample upload support

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

experimental tidal syntax

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.

breaking changes

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!

superdough features

editor / ui features

language features

sampler

If you have nodejs installed on your system, you can now use @strudel/sampler to serve samples from disk to the REPL or flok.

docs

Read more

v1.0.0 Geburtstagskuchen

22 Jan 22:22
Compare
Choose a tag to compare

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)

v1-teaser.mp4

A lot has happened since then, and also since the last release 16 weeks ago.

Let me write up some of the highlights:

Breaking Change

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!

  • make 0.5hz cps the default by @yaxu in #931

New Domain

Strudel is now available under strudel.cc. The old domain still works but you might not get the most recent version.

  • replace strudel.tidalcycles.org with strudel.cc by @felixroos in #768

Strudel on Mastodon

Strudel now has a mastodon presence: https://social.toplap.org/@strudel

New Audio Engine Features

superdough, the audio engine of strudel has gotten some new features:

Slider Controls

The new slider function inlines a draggable slider element into the code, bridging the gap between code and GUI.

Improved MIDI integration

Pattern params can now be controlled with cc messages + you can now send a MIDI clock to sync your DAW with strudel.

hydra

hydra, the live coding video synth can now be used directly inside the strudel REPL.

Vanilla 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:

Doc Changes

Plenty of things have been added to the docs, including a showcase of what people have been done with strudel.

Other Features

There is a lot more:

Other Fixes

Read more

Kuchengabel

22 Jan 21:58
Compare
Choose a tag to compare
Kuchengabel Pre-release
Pre-release

This is another maintenance release preparing for 1.0.0

This release marks the move to @strudel/* package names, more info here:

  • rename @strudel.cycles/* packages to @strudel/* by @felixroos in #917

Kuchenboden

22 Jan 21:58
Compare
Choose a tag to compare
Kuchenboden Pre-release
Pre-release

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:

What's Changed

Read more

Bananenbrot

17 Sep 11:35
Compare
Choose a tag to compare

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:

Improved Synth Engine

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:

strudel-envelopes.mov

Related PRs:

Desktop App Improvements

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:

Visuals

  • 2 new FFT based vizualisations have now landed: scope and fscope (featured in the video at the top).
  • pianoroll has new options, see PR

Related PRs:

Voicings

There is now a new way to play chord voicings + a huge selection of chord voicings available. Find out more in these PRs:

Adaptive Highlighting

Thanks to @mindofmatthew , the highlighting will adapt to edits instantly! Related PRs:

  • More work on highlight IDs by @mindofmatthew in #636
  • Adaptive Highlighting by @felixroos in #634

UI Changes

Other New Features

Articles

Other Fixes & Enhancements

New Contributors

Full Changelog: v0.8.0...v0.9.0

A big thanks to all the contributors!

Himbeermuffin

30 Jun 06:26
Compare
Choose a tag to compare

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:

Desktop App

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!

Spiral Visualization

Also still undocumented, but you can now visualize patterns as a spiral via .spiral():

strudel-disk.mov

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.

More settings

In the settings tab, you can now toggle:

  • line numbers
  • auto-complete
  • line wrapping

Thanks to roipoussiere!

More

Scroll down to see the full list of Changes!

A big thanks to all the contributors!

Package Versions

  • @strudel.cycles/core: 0.8.2
  • @strudel.cycles/mini: 0.8.2
  • @strudel.cycles/transpiler: 0.8.2
  • @strudel.cycles/webaudio: 0.8.2
  • @strudel.cycles/soundfonts: 0.8.2
  • @strudel.cycles/react: 0.8.0
  • @strudel.cycles/midi: 0.8.0
  • @strudel.cycles/osc: 0.8.0
  • @strudel.cycles/csound: 0.8.0
  • @strudel.cycles/serial: 0.8.0
  • @strudel.cycles/tonal: 0.8.2
  • @strudel.cycles/xen: 0.8.0
  • @strudel/codemirror: 0.8.4
  • @strudel/web: 0.8.3

What's Changed

New Contributors

Full Changelog: v0.7.0...v0.8.0

Zuckerguss

23 Mar 10:51
d351cb9
Compare
Choose a tag to compare

Package Versions

  • @strudel.cycles/core@0.7.2
  • @strudel.cycles/transpiler@0.7.1
  • @strudel.cycles/mini@0.7.2
  • @strudel.cycles/tonal@0.7.1
  • @strudel.cycles/xen@0.7.1
  • @strudel.cycles/tone@0.7.1
  • @strudel.cycles/webaudio@0.7.1
  • @strudel.cycles/react@0.7.1
  • @strudel.cycles/osc@0.7.1
  • @strudel.cycles/serial@0.7.1
  • @strudel.cycles/midi@0.7.1
  • @strudel.cycles/csound@0.7.1

What's Changed

New Contributors

Full Changelog: v0.6.0...v0.7.0

Zimtschnecke

01 Feb 22:18
Compare
Choose a tag to compare

Package Versions

  • @strudel.cycles/core@0.6.8
  • @strudel.cycles/eval@0.6.2
  • @strudel.cycles/transpiler@0.6.0
  • @strudel.cycles/mini@0.6.0
  • @strudel.cycles/tonal@0.6.0
  • @strudel.cycles/tone@0.6.0
  • @strudel.cycles/xen@0.6.0
  • @strudel.cycles/webaudio@0.6.1
  • @strudel.cycles/react@0.6.0
  • @strudel.cycles/osc@0.6.0
  • @strudel.cycles/midi@0.6.0
  • @strudel.cycles/webdirt@0.6.0
  • @strudel.cycles/serial@0.6.0
  • @strudel.cycles/soundfonts@0.6.0
  • @strudel.cycles/csound@0.6.0

What's Changed

New Contributors

Full Changelog: v0.5.0...v0.6.0

Wirbel

13 Dec 21:51
Compare
Choose a tag to compare

Package Versions

  • @strudel.cycles/core@0.5.0
  • @strudel.cycles/osc@0.4.0
  • @strudel.cycles/serial@0.3.0
  • @strudel.cycles/csound@0.5.1
  • @strudel.cycles/eval@0.5.0
  • @strudel.cycles/midi@0.5.0
  • @strudel.cycles/mini@0.5.0
  • @strudel.cycles/react@0.5.0
  • @strudel.cycles/soundfonts@0.5.0
  • @strudel.cycles/tonal@0.5.0
  • @strudel.cycles/tone@0.5.0
  • @strudel.cycles/transpiler@0.5.0
  • @strudel.cycles/webaudio@0.5.0
  • @strudel.cycles/webdirt@0.5.0
  • @strudel.cycles/xen@0.5.0

What's Changed

New Contributors

Full Changelog: v0.4.0...v0.5.0

Brandung

13 Nov 20:05
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.3.0...v0.4.0