randy's Recent Posts

Sumu is an additive instrument that I've had in the works for a long time. Now that it's nearing completion and heading towards a public beta soon I'm going to break with the way I normally do things and put some detailed info out ahead of its release.

Sumu preview

Sumu is another semi-modular instrument. It shares the general appearance of its patcher-in-the-center design with Aalto, Kaivo and Virta. As you can see, it's on the more complex end of the spectrum like Kaivo. Everything is visible at once and there are no tabs or menu pages to navigate, which suits the way I like to program a synthesizer tweaking a little something here, a little something there.

In the same way that Kaivo brought two different and compatible kinds of synthesis together, combining granular synthesis with physical modeling, Sumu combines advanced additive synthesis with FM synthesis.

What's most different about Sumu compared to my other synths is that the signals in the patcher are not just one channel of data, but 64—one for each partial in a sound! By keeping all these channels of data independent and still using the same patching interface, Sumu offers a very usable entry point into additive synthesis, and a range of musical possibilities that have only been approachable with high-end or academic tools or just coding everything yourself... until now.

Sumu oscillators

Each of Sumu's oscillators is the simplest possible kind of FM:a single carrier+modulator pair. And the modulator can produce a variable amount of noise, which like the modulation ratio and depth can be controlled individually per oscillator. In a single voice there are 64 such pairs. Obviously a lot of sounds are possible with this setup—in fact, with the right parameters varying appropriately we can reproduce any musical sound very faithfully with this kind of oscillator bank.

Sumu partials

There are a few ways of generating all of those control channels without the kind of painful per-partial editing that some of the first digital synths used. The first is the PARTIALS module up top, where you can see a diagram of all the 64 partials over time. This is like a sonogram style of diagram where x is time, y is pitch, and thickness of each like is amplitude. There is also an additional axis for noisiness at each partial.

A separate application will use the open-source Loris work by Kelly Fitz and Lippold Haken to analyze sounds and create partial maps.

Sumu envelopes

Another way of generating control data is with the ENVELOPES module. It’s a normal envelope generator more or less—except that it generates 64 separate envelopes, one for each partial. Generally you would trigger them all at the same time, but each does have its own trigger so they can be separate. Using the “hi scale” parameter the high envelopes will be quicker than the low ones, making a very natural kind of lowpass contour to the sound.

Sumu pulses

Finally on the top row there’s the PULSES module. This combines an LFO and a randomness generator into one module. The intensity and other parameters of the pulses can be different for every partial. So this makes modulations that can be focused on a certain frequency range, but you don’t have to mess around editing partials one by one. You could also, for example, use the pulses to trigger the envelopes all at different times.

The PULSES module was inspired by my walks in a small canyon near my house, and listening to the very finely detailed and spatially spread sounds of water running in a small creek. Each drop contributes something to the sounds and the interplay between the parts and the whole is endlessly intriguing. 

To make a water drop sound, two envelopes are needed at the same time: a rise in pitch and an exponential decay in amplitude. So PULSES lets you put out two such envelopes in sync. Then of course we generalize for a wider range of functions, so we can find out, what if the drops were quantized, or had different shapes over time? A voice turning into a running river is the kind of scene that additive synthesis can paint very sensitively. The PULSES module is designed to help create sounds like this. 

Sumu space

The SPACE module lets us position each partial in the sound independently. Coming back to the creek idea, we can hear that certain pitch ranges happen in certain locations around us due to the water speed and the resonances of different cavities. This all paints a lively acoustic scene. By positioning many little drops independently, while allowing some variation, we can approximate this kind of liveliness.

This module centers around two kinds of data, a set of positions for each partial known as home, and a vector field: a direction [x, y, z] defined at each point in a 3-dimensional space. There will be a set of both the home and the field patterns to choose from. By offering these choices, and a small set of parameters controlling the motion of the partials, such as speed, the homing tendency, and the strength of the vector field, we can quickly create a wide variety of different sonic spaces without the tedium of editing each partial independently. 

The RESONATORS module is very simple and inspired by the section of the Polymoog synthesizer with the same name. It’s simply three state-variable filters in parallel, with limited bandwidth and a bit of distortion for that “warm” sound. In Sumu, a synth we could otherwise describe as “very digital,” it’s nice to have a built-in way of adding a different flavor. 

So I have this interface you see above, and a sound engine, and I'm working feverishly to marry the two. To enable all of the animations and the new pop-up menu, I wrote a whole new software layer that provides a completely GPU-based UI kit and interfaces directly with the VST3 library. Because it's been such a long process this time, I'm going to "build in public" more than I am used to doing, and have a public beta period. My plan is for this to start in December. (Yes, of 2021, smarty pants.) Meanwhile I hope this information gives you interested folks something to whet your appetites, and even a basis for starting to think about what kinds of patches you might want to make.

the links expire after 7 days. here's a new one!
https://discord.gg/p5XXD9D3

ok! https://discord.gg/p5XXD9D3

I'm sending out a newsletter soon with more info, as soon as I can finish this sub-project (Utu) I'm working on. If you're interested in learning more about that in the meantime, there's more info on the Discord.

https://discord.gg/peZN5V4D

yes!

Aaltoverb, our tweakable reverb for sound design and live performance, has been updated to version 2.0.

Aaltoverb now supports both Intel-compatible and Apple Silicon (M1) processors natively. In addition, it brings several new features, including:

  • MIDI Learn for all parameters.
  • LFOs for all main parameters.
  • Patch storage and new example patches.

Aaltoverb 2.0 is available now as a free update.

Oh I see. I'll try to figure out some reasonable parameters for the upgrade discount but I'm not sure exactly what those will be.

There will be a discounted upgrade price for Aalto (1) owners. Or if you bought Aalto very recently, Aalto 2 will be free.

Aalto has been out for over ten years with only free upgrades...

here you go:
https://discord.gg/RPCJBzEf

When Sumu is beta I'll start working also on the other updates, starting with Aalto. I'll feel way behind if they're not out before the end of this year. But honestly there's only one of me and I've managed to get way behind my plans on Sumu already, so take this with a grain of salt.

All the major updates will move from VST2 to VST3 as well. Aaltoverb is VST3 + AU right now.

When you put Aalto presets into the “Aalto/MIDI Programs” folder you can load them by sending a MIDI Program Change message to Aalto. As installed there are a few example presets “test1”–“test4”. They will be assigned numbers in alphabetical order so Program Change 1: Test1, 2: test2 and so on. This should work in every host because the host does nothing but send the MIDI message.

Here you go!
https://discord.gg/g8e8Quxy

I got your emails also. I'll copy my response here for reference:

Hi Davide,

I never was able to use the VST2 format to store the patch bay data because I could not find a good way to do this. VST just stores values for single parameters like dials and this does not map well to a patch input, that can have any number of outputs. Bidule only accesses Aalto through the VST2 API and so can not access the patch bay.

I am somewhat in touch with the Bidule folks now. I will see if there’s a way for more complete automation of the patch bay using VST3 or another format that Bidule supports.

Thanks for the report. I just tried to reproduce, finally with success, I think. I could not get this to happen until I changed the display resolution for the external monitor to a higher one. With the laptop at "default for display" and the external monitor at "More Space" (max resolution) I get weird behavior like you describe.

I'll look for a fix ASAP!

Thanks for the encouragement! It is truly helpful.

You can sign up to the beta Discord if you like:
https://discord.gg/KFwJa5Dp
(link good for 7 days)

It's possible to compile utu (Sumu analysis tool) from the instructions in the github repo, however, it's only usable from the command line right now.

There's nothing you need to do. On any Apple Silicon Mac, just install the plugin and the system will use the Rosetta 2 emulator to run it.

the current versions work in Apple Silicon under emulation. After inatalling, can you find the plugins under Audio Units? If not, restarting may be needed.

If restart does not work, try clearing your Audio Units cache:
https://madronalabs.com/topics/8791-how-to-clear-your-audio-unit-cache

version 1.8.3
April 23, 2019
link: Soundplane 1.8.3.dmg, 6MB

release notes:

To install this version: move the "Soundplane" application to your Applications folder, then move the directory "ZonePresets" to ~/Music/Madrona Labs/Soundplane.

When you launch the Soundplane application, the menu at the top of the "Zones" page should contain three presets: chromatic, rows in fourths and rows in octaves, followed by a list of all the JSON files in the ZonePresets folder. If the JSON files do not appear, the ZonePresets directory is probably not in the right place.

The format of the zone .json files is human-readable and relatively self-explaining. Take a look to see how to make your own zone maps.

The Soundplane Max/MSP examples require the CNMAT Max externals to run. These can be found at http://cnmat.berkeley.edu/downloads .

The Soundplane application is open-source, available under a permissive license. For source code and more technical information see http://github.com/madronalabs.

changes:

1.8.3:

  • fixed issue with excessive CPU use / repainting since 1.8.0

1.8.0:

  • cmake build rewritten for compatibility with new madronalib and soundplanelib.
  • fixed graphics incompatibilities with OS X Mojave
  • fixed controller Zone outputs and reduced redundant data output

1.7.0:

  • fixed possible crash starting for the first time with Kyma connected
  • "destination port" menu now allows connecting to other hosts on the local network
  • added wait on startup to resolve ports on other hosts
  • added clear all notes when switching OSC destinations and on shutdown
  • added test pattern mode
  • allow running app hidden / in background without added latency
  • fix redundant calibrate on startup
  • fix a stuck notes issue
  • add quick recovery after unplug / replug instrument

1.6:

  • improved isochronous USB driver: lower latency, allows restart after pausing app
  • fixed an issue selecting cleanest carriers after "select carriers"
  • fixed possible crashes on startup/shutdown
  • now distributing as signed .dmg

1.5:

  • new touch tracker algorithm:
    • consumes much less CPU
    • improved latency
    • improved pressure sensitivity
    • improved pressure uniformity
    • improved position accuracy
    • allows better tracking into corners
    • lengthy normalization step no longer required
    • fixed hanging touches
  • fix Kyma connection
  • improve selection of lowest-noise carrier set
  • fix a possible crash when switching zone presets
  • fixed a window-related crash on shutdown
  • fixed latency issue when in background for an extended time

1.4:

  • fixed a problem with MIDI output preventing slide between rows
  • tweaked pre-touch filtering for lower noise
  • (dev) new cmake-based build system
  • (dev) experimental Linux build
  • (dev) added HelloSoundplane command line app for low-level testing

1.3:

  • MPE MIDI support. Requires Aalto 1.7 / Kaivo 1.2.
  • Implemented note splits to multiple ports over OSC.
  • Improved stability and sensitivity of MIDI velocity
  • changed "z max" control to more intuitive "z scale."
  • fix crash with uninitialized driver on shutdown
  • allow 1-500Hz MIDI data rate
  • fix bug where pressure wasn't getting set w/o a MIDI connection
  • send quantized pitch bend on MIDI note off
  • fix touch tracker issues including zone-switch bug
  • fix to allow MIDI note 0
  • fix for double note off problem
  • fixes for MIDI glissando

1.2.5:

  • [1.2.5.1] Fixed a crash on startup if no preferences folder was present.
  • Kyma listener off by default to fix collisions on port 3124. Use 'kyma' toggle on Expert page to turn on.
  • fixed automatic connection to selected OSC service on startup.
  • restored some values from 1.1.2 to improve touch tracking.
  • add automatic saving of window dimensions. This is saved in /Application Support/SoundplaneViewState.txt.
  • fixed a problem resolving OSC services
  • fixed wrong MIDI note offsets in default Zone setups

1.2.4:

  • rendering fixes for Retina display
  • make touches easier to get into top and bottom rows
  • code signing application
  • turned Kyma polling over MIDI OFF by default
  • fixed some state issues on startup that required reselecting zone to refresh
  • clamp zone outputs to [0, 1] as documented
  • fix touch rotate bug
  • fix OSC browser
  • made normalizing easier and mre accurate
  • sending out x, y, and z from zones via MIDI.

1.1.2:

  • more complete fix to the note-off problem
  • restored the note lock feature for new zones.
  • fixed an odd font-related bug

1.1:

  • PLEASE NOTE: moved support files to ~/Music/Madrona Labs.
  • fixed a problem where the wrong note value was sent on note-off
  • fixed a potential crash sending MIDI if a MIDI device was not set
  • made benign errors less alarming

1.0a2:

  • two new kinds of zones: z (pressure only) and a toggle switch.
  • fixed an error where inactive touches were continuously sending their data
  • shortened some JSON zone names (just remove "controller_" to fix your presets)
  • updated Max/MSP examples
  • moved matrix message into t3d OSC bundle with touches
  • restored some debug printing in the in-app console
  • added error info for JSON parsing
  • fixed possible bug with zone parsing
  • clarified the T3D format in docs
  • fixed an error reading calibration files
  • fix view issues for Retina display

1.0a1:
-new Zone features allow mapping notes and controllers to key grid
-changed t3d format for wider OSC compatibility
-OpenGL accelerated graphics
-fixed graphics for Retina display
-fixed a bug where SoundplaneController was initialized twice
-fixed OpenGL errors on quit
-fixed a possible crash in adjustPeak()
-fixed note release when quantized
-new raw matrix output

Very glad to hear it. Enjoy!

Sounds like you fixed the patch? If so I'll leave it at that—if not let me know.

I'm sorry to hear it's not registering for you. I've heard this happens with some Windows systems but can't duplicate on mine. Do you get the demo noise every time you launch Aalto, or just sometimes?

Can you check to see if the license file Aalto.txt is there and contains your license key? It should be in C:/AppData/Roaming/Madrona Labs/Licenses.

Hi New Aalto user, I can definitely check oiut your patch if you send it to me. You can post it here or email to support@madronalabs.com.

Also please tell me what kind of computer CPU / OS you are using.

Another idea is to reduce the signal vector / process buffer size in your DAW and hear if that helps. But most things in a sequencer patch like you describe should be at full audio rate anyway.

It sounds like you are selecting a patch via a MIDI Program Change message. By putting patches in the ".../Madrona Labs/Kaivo/MIDI Programs" folder you make an alphabetical list of patches that the plugin switches to when it gets that message. So: a.mlpreset for Program 1, b for 2 and so on. It doesn't have to be "a" and "b", whatever the patches are in the in alphabetical order will be loaded.

So, Kaivo is getting a Program Change. Maybe you are in Ableton and have a Program Change message set for the clip? More info here: https://help.ableton.com/hc/en-us/articles/209070489-Sending-Program-Change-messages-from-Live

We don't have an email notification feature here. Maybe we should—will look into it.

Thanks for the info re: resolutions. I hope this helps someone! I'm not sure why other JUCE-based plugins do not have the same issue. I will look into it in case there's a quick fix. Mostly I'm focused on version 2 going forward.

A smaller delay would be very useful! The difficulty is that the pitch shifter is in the loop, and pitch shifting in real time can't be done instantly. I tried a lot of things to get the pitch shifting time down but as you do it starts to sound worse. So I probably had it at 20ms at one point then needed to go up to 50.

I could imagine maybe a mode where the non-shifted input is delayed instead if you do want a quick delay time. In other words the shifter would be smoothly removed from the loop somehow.

Hi, that is a good question. Without looking at the code: I'm 90% sure that the preset was simply made before the delay time changed to a minimum of 50ms. So it will clip to 50 ms in reality. Of course, we could measure this and verify.

I'm just about to release an update for Aaltoverb that will address this problem. It makes version 2 into a separate plugin—like most plugin makers seem to do this. Incredibly, I've never released a major version update before Aaltoverb 2, so thanks for your understanding.

I'll add more explanation when I officially release, probably on Monday. But it should be obvious and meanwhile here are the links:

Mac: http://madronalabs.com/media/aaltoverb/Aaltoverb2.0.2.pkg
Windows: http://madronalabs.com/media/aaltoverb/AaltoverbInstaller2.0.2.exe

Aaltoverb 1 is still available here:
Mac: http://madronalabs.com/media/aaltoverb/Aaltoverb1.1.0.pkg
Windows: http://madronalabs.com/media/aaltoverb/AaltoverbInstaller1.0.0.exe

Really neat! The first clip sounds almost synthetic because of the perfect timing. I think I can hear the stronger servos in action. These new pieces are exciting and I hope I get to hear longer ones when you make them. For what it's worth, it feels like complete music I would either work or bliss out to and I don't think it needs anything but the guitar.

I have been playing Egberto Gismonti and some related ECM-universe records I have on my morning "radio" show. Sundays at 10am at twitch.tv.joenszfamilyradio if you want to tune in!

Understandable! Not that we need you all pacified, mind.