Friday 21 February 2020

128 oscillators in a Max For Live plug-in...

Every so often, I produce a sound generator. When I was a kid it was neon relaxation oscillators or cascaded unijunction oscillators, but these days they tend to be implemented in Max For Live. Since BankOSC, I've been exploring some ideas to see if I could come up with another simple but powerful user interface to Max's 'ioscbank~' object, and I'm going to share the result with you now.

INSTframeOSCmr


INSTframeOSCmr builds on INSTbankOSC, but quadruples the number of oscillators, has two independent sound generating channels, and as with many of my generators, there is is a ring modulator in the output stage. There are now 64 oscillators in the oscillator banks, and a simpler user interface -BankOSC was cool, but it wasn't straight-forward. FrameOSC has two channels (A and B), each of which contains two 'Frames'. The frames contain frequency and amplitude lists for the 64 oscillators, and you can control the rate at which the frames are loaded into the oscillator banks - as well as how long it takes for the oscillators to adapt to the new parameter lists. But unlike BankOSC, where the frequency lists were fixed to MIDI notes, the frequency range in FrameOSC can be varied - so you can have each of the pairs of 64 oscillators playing frequencies over a range of a few hertz, to a few thousand hertz, and you can tune all the oscillators with an offset rotary control. This means that you can make a lot of very rich, thick, swarmy textural sounds which can nicely cover the spectrum from ethereal to scary.

Oh, and the oscillators are in stereo, so there's actually 256 oscillators in total...

The two numbers in orange between the frequency and amplitude grids are NOT related to the horizontal indexing of the 64 oscillators - this space was just a convenient place to put the 'Span' limits of the vertical frequency axis (anywhere else gets in the way of other UI elements). The left number is the lowest frequency set by the frequency grid and the 'Span' rotary control. The right hand number is the highest frequency set by the frequency grid and the 'Span' vertical control. It all makes sense once you are used to the way the grids and the span control work!

When you first see FrameOSC, you will notice the two pairs of frames: channels A and B. Each pair of fames has an underlying left-to-right scrolling cursor that shows the position of the LFO as it scans across the frames. The rate of the LFO is controlled by the 'Rate' rotary control, and the border of the left frame of the A pair will light up in white as the cursor scans across from left to right. When it gets to the right hand edge of the left frame, then the right frame will get a white border and the cursor will then scan across that. When the cursor reaches the right hand edge then it jumps back to the left and repeats. So, at a glance, you can see which frame is current active, which one will be active next, and how long it is going to be before the cursor reaches the edge and triggers the change. Remember that the cursor scanning across from left to right is just a metaphor for the LFO timing - it does not mean that the oscillators at that position are affected by the cursor.


When the border jumps from one frame to another, the frequency and amplitude parameter lists are loaded into the oscillators. The 'Smooth' rotary control sets how long it takes for the parameter changes to happen. The range is from more or less immediately, through to multiple tens of seconds. If you set the LFO rate to be fast, and have a long smooth time, then you won't hear much happening, because the oscillators can't track the changes, but if you reduce the smooth time, then you will gradually hear the changes happening with more and more effect, until at very short smooth times, the oscillators will change from one set of parameters to another very quickly. Fo slower LFO rates, then the smooth control has much the same effect - if it is set too long then the changes occur very slowly (or maybe never reach the limits, whilst faster smooth times will give more abrupt changes.

The frames contain editable lists of frequency and amplitude for the 64 oscillators - you just click and drag in the rectangles. For the Frequency list, vertical is frequency, which for the amplitude grid, vertical is amplitude. Left to Right is the 64 oscillators. There are two rotary controls in each frame: 'Span' adjusts the frequency span of the frequency list, whilst 'Tune' adjusts the pitch up and down - just an offset control, really. At the far right hand side, there are volume controls for the A an B pairs of frames, plus a third volume control for the ring modulator (RM).


To encourage experimentation, and to avoid too much of a 'preset' mind-set, I have deliberately not included memories in INSTframeOCmr - think of it as being like a modular synthesizer that forces you to unlearn any reliance you may have developed for the instant recall of sounds. I await the first modded versions with memories added!

Notes

If you don't have any parameters set in the frequency and amplitude grids, then you aren't going to get very interesting output sounds. Zero Hertz at zero amplitude is not very useful. 

The LFO isn't quite what you might expect - it actually runs 16 times faster than the actual rate of crossing the frames, but this is so that it can drive the cursor. There is also a large amount of latency in the way it responds to slow rate settings - you may find that it appears to have stopped. You can press the 'Reset' button to reset the LFO cycle if this happens.

Ring modulators accentuate the difference between two sounds, so if you set very similar sounds in the A and B pairs of frames, then the RM output may not be interesting.

Remember that left to right is selecting oscillators in the grids, whilst vertical is frequency or amplitude. These are not waveforms or spectra.

If you like a set of parameters, use the 'Save' icon in the top right hand corner of the device in Ableton Live to save it as a 'preset', so that you can get it back later on!

INSTframeOSCmr does not respond to MIDI notes. It produces an output all the time, and this is not pitchable or triggerable using a keyboard. The frequencies are not on a scale, or a temperament - they are just raw frequencies.

Adding echo, delay or reverb after INSTframeOSCmr will thicken the output even more.

Remember that the cursor scanning across from left to right is just a metaphor for the LFO timing - it does not mean that the oscillators at that position are affected by the cursor. I'm repeating this because this was the second thing that people said in the beta testing.

Yes, you can make it sound like Louis and Bebe Barron's soundtrack to the movie: 'Forbidden Planet'.  (This is the first thing that people said in the beta testing.) But you can do lots more than that. (Oh, and the reason is sounds like 'Forbidden Planet' is because recording lots of manually tuned oscillators tends to produce a distinctive sound...) And yes, that is a young Frank Drebin played by Leslie Neilsen, or is it the other way round, or something else entirely?

As always, INSTframeOSCmr is free!

Updated version


Version 0.2 is now available. I have added extra guides to how the frequency grids work, plus the new 'Detune' rotary control, and a 'Max For Live' 'What is happening inside the patch' detail for the 'Vexpr' object in a new blog post.

Getting INSTframeOSCmr

You can get INSTframeOSCmr here:

     https://maxforlive.com/library/device/6012/instframeoscmr

Here are the instructions for what to do with the .amxd file that you download from MaxforLive.com:

     https://synthesizerwriter.blogspot.co.uk/2017/12/where-do-i-put-downloaded-amxd.html

(In Live 10, you can also just double-click on the .amxd file, but this puts the device in the same folder as all of the factory devices...)

Oh, yes, and sometimes last-minute fixes do get added, which is why sometimes a blog post is behind the version number of MaxForLive.com...

Modular Equivalents

In terms of basic modular equivalents, then INSTframeOSCmr would require two LFOs, and 256 VCOs, a lot of stored parameters (blocks of 16?) to do the frame loads, a mixer and a Ring Modulator, giving a total of well over 260 ME, which is the biggest count so far, I think. You might want to use some specialist additive oscillators instead of brute-force VCOs!

If you find my writing helpful, informative or entertaining, then please consider visiting this link:





         

No comments:

Post a Comment