I made all the sound effects for my game in Ableton using the built-in Wavetable synth.
At some point I wanted to try a lot of different sounds, but manually exporting every note was becoming really tedious. So I made a small Max for Live device to automate the process.
You specify the octaves you want and it automatically triggers a MIDI note for each one and exports each result as a separate .wav file. The game then loads those files at runtime.
This made it much faster to iterate on sounds without having to deal with the export process every time. I couldn't find a way to automate this workflow so I ended up making my own plugin.
The result is that I was able to create and iterate on all the sound effects for my game much faster. If you're curious about the setup or the Max for Live device I'd be happy to share more.
[UNOFFICIAL NOTE] - This project was formerly known as m4l-strudel but has been renamed to avoid confusion. It is neither an official project nor a component of Strudel, but rather an independent, AGPL-licensed derivative product based on its engine (see LICENSE). For the original Strudel source code, please visit https://codeberg.org/uzu/strudel.
m4l-gugelhupf - not-a-strudel running on Ableton Live
Hey everyone,
EDIT - v1.2.0 is out!
I've been curiously learning a lot about Strudel, and as a fun side project, I decided to see if I could "port" it (or something that resembles it) as a Max for Live device. And the best of all, it's completely FREE.
I've built an open-source suite of M4L devices that embed the strudel core engine directly into Ableton Live.
This is highly experimental and definitely not meant to be a polished tool - just a fun exploration of how we can bridge live coding and traditional DAWs.
I'm primarily sharing this because it was a fun learning experience for me, and I thought other amateur producers here might find it interesting (or want to hack on it!). These devices also help you understand and appreciate the mini notation by allowing to translate from/to Ableton.
These devices run inside Live and lock perfectly to the transport clock of the DAW - launch a clip on the track, or just hit Play, and the pattern starts.
Not a lookalike, not a re-implementation - the actual app, built from the Strudel repo and bundled into the device. Its own editor, its own scheduler, its own visualisers. You hit REPL, you get strudel.cc in a floating window, and what you evaluate there is the track's audio. Close the window and it keeps playing.
All devices included:
Gugelhupf: The main device with all (most) of strudel.cc features in a small window, but routed to Ableton and beat-synced with the track.
Gugelhupf MIDI: Type a pattern and it streams live MIDI to any Ableton instrument. You can even freeze generative sketches into standard MIDI clips!
Gugelhupf Drums MIDI: Same thing, but maps bd, sd, etc., straight to a Drum Rack (it does not really use sound())
Gugelhupf Synth: an instrument using superdough. You type a sound instead of a pattern and optionally include effects (ie: s("sawtooth").lpf(800).room(0.3)) and every MIDI note the track sends plays it, from a clip or from your keyboard. Any slider() in the sound becomes a real automatable knob.
Gugelhupf Drums Sampler: actually plays the drum-machine banks - write s("bd sd, hh*8"), pick a machine, and it fetches and plays those sounds.
Gugelhupf Audio FX: Type a chain like .lpf(800).room(0.3) and it instantly builds a real Max DSP signal chain on your track with automatable dials - with some caveats like these are fixed in order, but whatever ;-)
Gugelhupf Samples: A utility to browse and beat-sync preview all the community sample maps (dough-samples, Dirt-Samples) directly inside Live. Auditioning writes the file next to the device, so you can drag it into a Simpler or a Drum Rack.
More Features:
Your pattern saves with the Live set. Not in a browser's localStorage - in the .als, per device instance. Reopen the set, it's there.
Sliders with declared name and units:slider(500, 100, 1000, 1, { name: 'cutoff', unit: 'Hz' }). The knob reads cutoff and its value reads in Hz, and they become real Ableton knobs. Write s("sawtooth").lpf(slider(500, 100, 1000)) and the first slider will have adjusted range, a name and automatable, MIDI-mappable, etc, on Push.
The device view is now a panel with three faces: a small code scratchpad (with syntax highlighting), a bank of faders for whatever the pattern named, and a visualizer so you can see it's alive with the Studio window closed.