strudel

Web-based environment for live coding algorithmic patterns, incorporating a faithful port of TidalCycles to JavaScript

AGPL-3.0 License

Downloads
1.5K
Stars
649
Committers
47

Bot releases are visible (Hide)

strudel - v1.1.0 Bananensplit Latest Release

Published by felixroos 5 months ago

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:

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:

  • ._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

internals

fixes

New Contributors

A huge thanks to all contributors!!!

Packages

Full Changelog: https://github.com/tidalcycles/strudel/compare/v1.0.0...v1.1.0

strudel - v1.0.0 Geburtstagskuchen

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:

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!

New Domain

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

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

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.9.0...v1.0.0

strudel - Kuchengabel

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:

strudel - Kuchenboden

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:

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.9.0...v.0.10.0

strudel - Bananenbrot

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:

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:

https://github.com/tidalcycles/strudel/assets/12023032/652e7042-f296-496b-95cd-b2a4987fe238

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:

UI Changes

Other New Features

Articles

Other Fixes & Enhancements

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.8.0...v0.9.0

A big thanks to all the contributors!

strudel - Himbeermuffin

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:

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():

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.

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: https://github.com/tidalcycles/strudel/compare/v0.7.0...v0.8.0

strudel - Zuckerguss

Published by felixroos over 1 year ago

Package Versions

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.6.0...v0.7.0

strudel - Zimtschnecke

Published by felixroos over 1 year ago

Package Versions

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.5.0...v0.6.0

strudel - Wirbel

Published by felixroos almost 2 years ago

Package Versions

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.4.0...v0.5.0

strudel - Brandung

Published by felixroos almost 2 years ago

What's Changed

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.3.0...v0.4.0

strudel - Donauwelle

Published by felixroos almost 2 years ago

Package Versions

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.4...v0.3.0

strudel - Gischt

Published by felixroos about 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.3...v0.0.4

strudel - Maelstrom

Published by yaxu over 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/v0.0.2...v0.0.3

strudel - Stürmisch

Published by felixroos over 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/compare/[email protected]/[email protected]

strudel - Schwindlig

Published by yaxu over 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/tidalcycles/strudel/commits/2a0d8c3f77ff7b34e82602e2d02400707f367316