Showing posts with label M4L. Show all posts
Showing posts with label M4L. Show all posts

Saturday, 4 June 2022

Outreach - What I try to do for education...

Yep, I do other things! This blog is only part of my outreach activities...

Synthesizerwriter at the Suffolk Show 2022 (The badge is deliberate - the 2020 and 2021 shows didn't happen for some reason...)

For the last day of May, and the first day of June, 2022 (that's the 31st of May and the 1st of June, just to be sure...), I was at the Suffolk Show, on the 'Innovation Martlesham' technology innovation stand (huge thanks to BT (the telco, not Brian Transeau)), trying to inspire young minds to take up a career in technology. My aim was to get kids to think about sound in a different way, and so I had a ‘3D Sound Box’ interactive exhibit, where you put your hands into a box, moved a controller around, and put some headphones on (with other people listening in on other headphones (parents, siblings, etc.)). As you moved the controller, the sound changed in subtle and complex ways, and the reaction was uniformly amazing - eyes opened wide, smiles appeared on faces, and parents ended up dragging the kids away some time later. ‘Cool!’ was the standard comment.

People totally comprehended that when you moved the controller so that it pointed in a particular direction, you get a particular sound, and that you could blend from one sound to another by moving the controller to another position. Several people said that they were expecting just a few sounds and a simple mix between them, and they were not expecting a complex morphing from one sound to another...

Behind the scenes, a DJ Tech Tools MIDI Fighter 3D provided the position controller, with two additional infra-red position sensors providing Left-Right and Backwards/Forwards control. The position vectors were fed into Ableton Live, where a custom MaxForLive script changed the rather strange outputs into more understandable controls suitable for controlling parameters (The MIDI Fighter 3D is designed for finger drumming!). These parameters were then used to control the positioning of the four source units in the convolution triangle in Phobos from Spitfire Audio (and BT, (Brian this time!)!) (I use a lot of stuff from Spitfire Audio!). Ableton was sending a C3 drone note to Phobos, and it was set up to produce very different sounds for each of the extreme positions, with Ableton also adding a controlled low pass filter on one axis. The output of Phobos was then tweaked further, ending up in the Envelop Spatial audio plug-in, and the final audio was delivered to stereo headphones using binaural processing. The convolution synthesis in Phobos was a key part of making this different to ‘four sounds in space that you mix between’ - which is what was apparently expected. (A couple of people wanted the standard ’sound rotating around your head’ binaural demo, so I had a Live Set for that as well!)

The MIDI Fighter 3D

The DJ Tech Tools MIDI Fighter 3D MIDI Controller

The MIDI Fighter 3D is a finger drumming MIDI controller that has 16 expensive, high quality, 'arcade-console' style buttons/switches that are designed for long life and consistent operation in punishing situations - several millions of pushes (5 million+ in this case). Elektron have similar switches on their gear where the buttons are going to be 'mashed' a lot in normal use. In contrast, ordinary 'click' switches are small, very low cost, and are made of a metal dome that collapses when you press it, and have a life of a few tens of thousands of clicks for the cheapest, with over a hundred thousand clicks for the more expensive versions. 

(The rubbery buttons that you find on a lot of gear are called membrane switches, and here the flexible bit deforms when you press it, which pushes a piece of conductive plastic (containing lots of carbon, so it looks black) onto a printed circuit board, and so makes a connection. These are very low cost, are easy to light up with LEDs, and are easy to replace (you just replace the sheet of flexible stuff and all those little blobs of conductive plastic), which is a good thing because they can wear out with a lot of use, and they don't like dust or ash or powders, and they are not very consistent in operation - you know how some of them can deform is strange ways, and sometimes get stuck? As for computer keyboard switches, then that's a whole topic all to itself!)

But this isn't a blog on switches! What the MIDI Fighter 3D also has, and the reason for the '3D' part of the name, is a 3D accelerometer which can detect movement on 3 axes: x, y and z. There are several modes of operation, but the one I used was the 'Edge Tilt' mode.In this mode, if you tilt the MIDI Fighter 3D, then it outputs MIDI Continuous Controller / Control Change (CC) messages that indicate how much it has been tilted relative to each of the four bottom edges. 

Rotation on the right hand edge...

So for the right hand edge, CC0 (zero) outputs a value of 0 (zero) when the MIDI Fighter 3D is horizontal (on a table, for example), and 127 when rotated clockwise by 90 degrees, so it is vertical.

Rotation on the left hand edge...

The left hand edge is similar, except that this time it is CC2, and it is anti-clockwise rotation that outputs a value of 0 (zero) when horizontal, and 127 when vertical. There is a small 'dead zone' (settable in the Utility software (Mac and Windows) that lets you set a range where small tilts from the horizontal do not output CC messages. 

For finger drumming applications, where you place the MIDI Fighter 3D on a surface and tap the buttons, then tilting the box along one of the edges feel very natural, and the box has rounded rubber feet that make this very easy to accomplish. But if you pick up the MIDI Fighter 3D, then you can tilt it in any direction, and so having the edges as the reference points doesn't make much sense. Also, you can tilt it either way because there isn't any surface getting in the way. There isn't a 'free space' mode, although there is a mode where you can also detect rotation, but that requires you to press a button each time you want to know what the orientation of the MIDI Fighter 3D is... 

So, I wrote a little utility, in MaxForLive, that takes the CC messages, and processes them so that when you hold it in your hands instead of being on a surface, then it combines the 4 controller messages (CC0, 1, 2, and 3) so that they are combined into just a pair of messages where you can go from vertical, through horizontal and back to vertical again with a single continuous clock-wise (or anti-clockwise) movement, and the result is a 'Composite' controller message that goes from o to 127 (with a small 'dead zone' as it goes through horizontal). This works for left and right, as well as forward and backwards, so you get two composite controllers.

A Composite CC made up of CC0 and CC2 (or 1 and 3)

The 'inverse' composite controllers are also output from the Utility, so you get pairs of CC messages that go from 0-127, and 127-0, simultaneously, depending on how much you have tilted the MIDI Fighter 3D away from the horizontal. Not only does this feel 'right' when you hold it in your hands, but it allows you to control two different parameters as if the MIDI Fighter 3D was a cross-fader - but one that works in two dimensions instead of just one. 

The MIDIccTWEAK Utility written in MaxForLive...

The MaxForLive Utility, MIDIccTWEAK, will work with any source of CC messages, and provides offset and gain control, plus inversion for the basic CC messages, then the paired 'composite' controllers, and finally paired 'composite' controllers using the 'other' pairing - for this application, it uses position sensors at 90 degrees to each other, instead of being on opposite sides of the MIDI Fighter 3D. That's 12 mappable outputs from the four CC sources. 

What can the MIDIccTWEAK Utility do?

The MIDIccTWEAK Utility can be downloaded from MaxForLive.com...

Inside the M4L code...

A couple of interesting things came up whilst programming MIDIccTWEAK, although neither of them are clever or unusual, which is usually when I include more details. Nope, in this case it was an interesting option and a potential trap for the unwary. Here's a fragment of the M4L code:

Part of the M4L 'code' for MIDIccTWEAK...

Now, most of this is perfectly ordinary: a MIDI In (...and an Out to provide a 'Thru' to the next MIDI device in the chain...), a MIDI Parse object to decode the MIDI messages, and a Route object to extract just the MIDI CCs that we are interested in. But note those 'change' objects - this was me testing out an idea to try to ensure that the MIDI bandwidth consumed by Controllers was minimised. The 'change' object filters out any repetitions of the same number, and so this code was imported from a prototype M4L device where I was monitoring several MIDI Controller hardware devices to see what their outputs looked like... 

I was expecting to see some repetitions of the same controller value in the Controller Messages, and yes, I know that the alternative name for Continuous Controller messages is 'Control Change' messages, but I was still curious to see what actually happened. It turns out that everything that I looked at sent streams of messages of changes to MIDI Control values, and even when the faders, rotary controls, levers, and other physical controls where moved very slowly, then repetitions were still filtered out just about all of the time. In the past, I have seen at least one Mod Wheel where careful positioning of the wheel would produce continuous messages with two slightly different values, but not recently. I have talked about this before in this blog, but it is always interesting to see just what the difference in values (the 'delta') is in reality. Theoretically, it should be one, but this uses lots of MIDI bandwidth, and rapid changes of controller value are going to create long streams of controller messages that will just clog things up. So a more sensible approach would be to send controller messages at fixed intervals of time, so that there is lots of detail for slow movements, and less detail for fast movements. I suspect there is a 'rule of thumb' set of values for timing, but I have never done deep enough research into this. let me know if you want me to revisit MIDI Controllers and look at this aspect of them. 

What ought to be useful about the 'route' object is the final output, where any messages that don't match a CC number are dumped - an 'else' or 'other' or 'default' output (it depends on which programming languages you are familiar with!). But I haven't ever needed a 'Controllers you haven't selected' detector. I suppose you could use it to look for unusual activity from controller numbers that shouldn't be outputting anything, but it just seems to be something that should have a use, but I haven't stumbled across it yet.

More interesting, and not restricted to only this M4L object, is a potential trap for then unwary. Look at the right most input and output - at the top, you have the number box for selecting which controller the 'route' object should be matching, and underneath, you have the 'Other' output, for when no Controller number message matches the specified numbers. Whoa! 

A potential trap for the unwary...

Actually, those number boxes, which control the matches that appear at the outputs, are offset by one horizontally - to the left (because of the input on the top of the 'route' object). The second input determines what comes out of the first output of the 'route' object, and so on across the object. Lots of MaxForLive object are like this, when you look for it, and it is one of the things that you need to watch out for, especially when you extend object boxes very wide, as here (or wider!), so that you can keep all of the parallel output paths nest and tidy. If the left hand edge is off-screen, and you only look at the right hand edge, then the number box looks like it ought to be controlling the output underneath it - so the implied connection inside the yellow circle is not correct!

The MIDIccTWEAK Utility can be downloaded from MaxForLive.com...

Multiple controls

Inside the '3D Sound Box' used in the interactive exhibit, there are additional infra-red position sensors that are used to detect side-side movement (used to control left-right panning), and vertical (up/down) movement (used to control the overall tone of the audio), so there are at least four separate independent ways that you can control things just by picking up the MIDI Fighter 3D and moving it around inside the box.

The 3D Sound Box...

You can just see the MIDI Fighter 3D resting on the raised floor of the 3D Sound Box in the photo above. 

Sound Generation

There was quite a lot of sound design behind the sounds that were produced. I wanted something subtle, sophisticated and very controllable, and I definitely didn't want to have a 'sound going round your head'-type of binaural demonstration, because those have always felt gimmicky and not very real world - I can't recall a real musical performance where position was that important or centre stage, with the exception of Tim Souster's 0dB concert at the Royal Northern College of Music in Manchester, in the late 1970s (and I was there!), where there was a lot of performing 'in the round'...

Instead, I chose a drone sound, and mapped the MIDI Fighter and the up/down sensor to changing the timbre of that sound. I used the Spitfire Audio / BT 'Phobos' polyconvolution synthesis virtual instrument to generate the sounds, inside Ableton Live. Four Source Units provided the inputs to three convolution synthesizers, with the controllers moving the four sources around in the convolution triangle. I also added a filter control so that anti-clockwise rotation changed the cut-off frequency of a low-pass filter (a cliche, I know, but it was very popular!), and added in some percussive sounds when the controller was tilted all the way backwards. All in all, there were lots of different timbres and smooth blends between them as you moved the MIDI Fighter 3D around inside the box.

I added a little bit of reverb to provide additional spatialisation, and then passed the various audio outputs into the headphones via Envelop binaural plug-ins. I used a Studiospares HAR-60 six channel headphone amplifier to drive six pairs of headphones - and Studiospares gave me an amazing deal for buying Mackie closed-back headphones in bulk!

People rapidly got how it worked! There's something about moving your hands making a sound change that activates a kinetic spatial memory thingy inside your head, and when the changes are complex and involving, then you get lost inside the soundscape. In a world where people don't seem to listen hard to music any longer, it was amazing to see people concentrating on what they were hearing. one pair of headphones was used by the 'driver', whilst the other headphones allowed other people (parents, friends, etc.) to listen in. In many cases, passive listening resulted in them wanting to 'have a go' as well!

Talking to parents, they were expecting 120 bpm, 4/4 EDM, and were totally surprised that someone would instead demonstrate something which was subtle, deep, sophisticated and sounded high quality - I explained that the core of the sound came from one of the top sample library companies in the world… So the sound design that I did worked very nicely. Kids (and their parents) loved the exhibit - one family said that it was the best thing they had seen (heard!) all day! 

Outreach

The success of an interactive exhibit like this is about reaction at the time, and then about follow ups. In the two days, I got huge numbers of smiles ('This is the first time I've seen a smile like that for ages!' was one parent's comment...) and a universal 'Cool!' reaction from just about everyone, especially young kids. I have been invited to schools to do more demos, asked by a local media group if I would be interesting in a collaboration, and the local university is also interested in talking to me more about this type of interaction and how to programme it. 

So, my grateful thanks to Spitfire Audio and BT for Phobos, because it was a key part of a very successful exhibit that may well have influenced more than 100 young minds into thinking about sound in a different way. Also thanks to Ableton for Live, and especially MaxForLive, a toolkit that I use all the time! Thanks to the amazing guys at DJ Tech Tools for their MIDI Fighter 3D controller. Thanks to Studiospares for a beautifully thought-out headphone amplifier. And finally, thanks to Envelop for making spatial audio so accessible in Ableton Live! Oh, and thanks again to BT (the telco) and Innovation Martlesham for making this all possible!

---

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

Synthesizerwriter's Store (New 'Modular thinking' designs now available!)

Buy me a coffeeBuy me a coffee (Encourage me to write more posts like this one!)... or...

Buy Me a Coffee at ko-fi.com (Encourage me via a different route entirely...)

Or just tell someone else that there's this amazing blog about hi-tech music...


Sunday, 7 March 2021

Emulating Turning a Circuit On and Off...

On the Discord channel of the Music Hackspace, @MeLlamanHokage asked about simulating power failure in a circuit using Max. I replied:

For audio circuitry then you would need to implement things like: a low-pass filter with a falling cut-off frequency, an increasing noise floor, rising (or falling) gain, falling clipping levels (eventually to zero volts), rising intermodulation distortion, a changing dc offset...

(Here's a sneak peak of what was in my head - scroll down for more details):


And so I idly wondered if it would be possible to do this in Max - actually MaxForLive, because I realised that this might be a perfect addition to the Synthesizerwriter M4L Tape (etc.) Suite. In much the same way as you record release 'tails' or 'triggers' on a piano, so that you capture the sound made when a key is released and returns to its 'resting' position, then I realised that an M4L emulation of a circuit turning off (and on again) could be used to add in the sound of Guitar Effects Pedals being switched in and out of circuit, or having their power removed. 

This was hugely reinforced when Christian Henson @chensonmusic (of Pianobook and Spitfire Audio fame) did a performance using just a piano sample loop and his pedal board with 23-ish pedals in a recent YouTube video (there are three Moog pedals off to the right of the screenshot, btw):

https://www.youtube.com/watch?v=yF6VKqpC-nA

Imagine @chensonmusic Christian Henson's head and arm hovering over a massed array of guitar pedal goodness...
Christian Henson @chensonmusic 'plays' his pedal-board...

That's two nudges in the same direction, so I stopped dithering, and started coding...

Now I know that the Effect/Bypass switches in guitar effect pedals are designed to not introduce any glitches or noise into the audio stream, and I know that they don't turn the power on and off to the pedal (well, not usually)! But not all of them will function perfectly, and power supplies do fail! I have had several synths, groove boxes and drum machines that made interesting sounds as you turned them off, and I would venture that this may be an obscure and under-utilised area of sampling. See the 'Reminder...' section near the end of this blog post for more thoughts on this...

Are the sounds made by foot-switches on guitar pedals part of a performance? That's an interesting question... So how can I make it easier for everyone to explore this aspect as well?

Free Samples...

Whilst there may be little actual sonic effect on audio signals from a modern foot-switch, there's also the very characteristic sound that guitar pedal foot-switches make in the real world: definitely something to sample and use as a drum sound. (I notice that the BBC overdubbed the sound of a gun being cocked to replace the sound of a seat belt clicking in a recent 'edgy' trail...) So I did some sampling of switches from a variety of sources*, and this turned into an editing session, and you can get the results here for free:


These samples were created by me, and are released into the public domain with a CC0 licence. There are the sounds of foot-switches, and lots more. 'Footswitch14' and 'Footswitch Toggle 14' are what I think of as the classic guitar pedal foot-switch sound, but you may have your own preference...

As always, let me know if you want more of this type of content.

*Sources: Eventide H9 Dark, EHX Oceans 12, EHX SuperEgo+, Poly Digit, Donner DT-1, MIDI Fighter Twister, Rebel Technology OWL, and some other obscure stuff...

ON Off Emulation

But back to the main topic! I hasten to say that my original reply wasn't based on having already seen something that emulated a circuit being turned on and off. Instead it was me quickly thinking about what happens when you remove power from a circuit. So now that Christian Henson had inspired me to  actually design something, I jotted down some more concrete ideas about what 'turning something on and off' actually meant, as well as what sorts of things would happen to the circuits.

The first thing I thought about was a state diagram. At first sight, this is obvious. There are only two states: On and Off. Duh! (And there's the trap, sprung...)

But, with a little more analytical thinking, it is slightly more complex than this. There are actually four states: Off, Turning On, On, and Turning Off. The 'Turning On' and 'Turning Off' states normally happen so quickly that we don't notice them, but the longer they are, the more you notice them. One example where I've done this type of thing before was in a few MaxForLive devices that I programmed where the volume can be set to rise or fall slowly. The 'generic' version is called '3rd Hand' because it almost gives you a third (and very steady) hand to control rising or falling volume...

http://blog.synthesizerwriter.com/2018/07/slow-fades-in-live-performance.html - 3rd Hand

What was really interesting was that when I included an automatic volume control in a device: https://maxforlive.com/library/device/5258/instsineatmosphere then the only feedback comment that I received was that it didn't make any sound, which was exactly what happened with an earlier 'Generator' device where you had to click on a button to get a sound, so since then I have not included this feature in many devices. Please let me know if you would like it to be included!

But back to 'states'...

This '4 states' approach is very useful for live performance where you want something to evolve slowly: like an audio drone that gradually evolves over minutes, or tens of minutes, or longer. If you've ever gone to a 'Drone' performance by William Basinski (there are other audio drone specialists) then you will know the power of a slow rising, changing sound. I saw/heard him when he performed at Ableton Loop 2017...there's something about live performance!

In a drone performance, then there's a lot of slow evolution of sounds, timbres, volume... (the 'Turning On' and 'Turning Off' states) and very little time when the soundscape is static ('the 'On' or 'Off' states). To revisit the old saying about music typically being made up of 'sound and silence', then a better recipe might be that music is effective when it contains interesting/evolving/changing sounds seasoned with  sprinkles of silence.

In this case, the change was all about what happens when circuits get turned on or off. And so I jotted down as my first proper approximations:

- Mains breakthrough from PSU

- Clicks, Crackle and Crunches

- Noise (Rising then falling?)

- Clipping of audio

- Loss of high frequencies in audio

And then I programmed a custom 'synthesizer' in MaxForLive, that used a 4-state slow On and Off generator to drive 5 sections producing each of the 5 features that I had noted. I'm sure there are more things happening, but this was a first attempt, and I'd never seen anything like this before... Now when I say 'I programmed' then that can make it sound like something trivial and rapid, but that isn't quite how the process works... Anyway, some hours later...

OnOff Emulation mr 0v01


There are five processing sections, plus a sixth 'control etc.' section on the right hand side. The layout is much the same as the Ironic Distortion and the Ferrous Modulation M4L devices:

Ironic Distortion - blog post.                   Ironic Distortion - M4L.com

Ferrous Modulation - blog post.              Ferrous Modulation - M4L.com

Each section has a 'Mix' slider, which sets the level of the output of that section, with a big 'Mute' button.


But because this device is all about controlling the 'Turning On' and 'Turning Off' states, then there are extra controls in each section which are devoted to setting how time affects each section. The big grey bar is the current On/Off stare: 100 (all of the bar is grey) is On, whilst 0 (all of the bar is black) is Off. The movement of the bar (up or down) shows how things change during the 'Turning On' or 'Turning Off' states. To the right of the bar are four rotary controls, plus an 8-button switch selector.  The screenshot above is for the I (Impulse) section, and so each starts with that letter. So I-On is the time for the bar to move from Off to On (the 'Turning On' time), whilst I-Off is the time for the bar to move from On to Off (the 'Turning Off' time). 

The 8 position switch in the middle controls how the bar moves. L is for Linear, and so the bar just moves steadily from top to bottom (a straight line graph). S is for Sine, so the bar slows down as it gets to On. Z is Sine-squared, so the slow-down is sharper. P is for Power, so the bar slows down as it gets to Off. Q is for Power-squared, so the slow-down is more abrupt. B is for Bipolar, so the bar slows down as it gets to On and Off. D is for Bipolar-squared, so the slow-down is more abrupt. Finally, the light purple S that is linked to the two rotary controls on the right is for 'Smooth' (or Log) and this provides two additional controls that let you change the time of a logarithmic slow-down as the bar gets near to  the On or the Off. 


The best thing to do is to listen to the effect that the controls have! It is a bit like the Flutter waveforms in Ferrous Modulation: sine sounds boring, whilst the narrow spikes sound jerky... You may find that the Smooth setting gives good control, but remember that the S, Z, P and B positions don't have the slow-down at one extreme, and so have a very different effect. If you find yourself over-using the Smooth setting, then deliberately choose one of the more abrupt options. 

Separate controls are provided for each sections because the final sound works best when each of the sections has different timing! If you have the same timing for all of the sections than it will sound boring... One of the settings that I like is to have the Clip section happen last, so that you last thing you hear is the distorted audio...

The Sections

From the left hand side, the sections are in two parts. The first two sections process the incoming audio signal: 

Freq. 

This section just applies a low-pass filter to the audio input, and lowers the cut-off frequency as the bar moves from On to Off.  (Or raises it as the bar moves from Off to On). This emulates that way that some audio circuitry loses high frequencies as the power supply is reduced.

Clip.

This section has optional Compression and Filtering, but the main effect is to apply clipping to the audio input, where the clip limits reduce with the bar, so there is no Clipping when the device state is On, but more and more clipping as the state approaches Off. Note that the volume drops to zero when the state is Off... so you don't hear the effect of extreme clipping when the limits are zero! 

The next three sections are generators, and so do not process the incoming audio:

Noise

White noise filtered to give it various colours. The 'Gain' control and the mixer slider are effectively the same control...

Impulse

Crackles, pops, crunches, and other 'Impulse'-type sounds are generated in this section. Because the source is random noise, then these will not repeat - every time a new and different sound will be produced. 

Mains

This is slightly strange - it introduces the sound of mains hum, which is weird if the power supply has been removed. But, curiously, as with many sound effects, nonsensical often seems to work. It seems that having mains hum fade in and out implies something happening with the power - a bit like the way that sparks always seem to jump out of control panels on spaceships and submarines in the movies whenever there's an explosion or a collision. 

None of these sections is particularly complicated. Each does just one generation or processing function. Feel free to look into the code to see how each works - there's no magic used. 

The Big Button

One the far right hand side is the Control section. This has the big 'On/Off' button, text that shows the current state (1 of 4 possible states), and a generous set of memories for your own creations - just shift-click to store, click to recall. 

Reminder...

It is probably worth noting that although this might appear to be just a generator of On/Off sounds, it is also a processor - the Freq and Clip sections process audio, so if you don't input anything then they won't produce any output. The ideal setup is to have a sound that you want as the basis of the final result, and then use OnOff Emulation as a way of 'bracketing' it with an On and Off emulation.

This is slightly different to what the Release Trigger or Release Tail samples are doing in a piano sample - they deliberately do not include the piano note itself. (You press down on a key, and then release it, so you get the sound made by the key itself and the associated 'action' mechanics, but you don't do this with a string vibrating. ) OnOff Emulation processes any audio that is sent to it, and then layers the mains, impulse and noise sections on top of it. 

And this set me thinking... What about a release trigger/tail generator? I've never seen a dedicated one, because all of the release triggers/tails that I've ever used have been just samples that are part of the sample set of a sampled piano... The only exception that I can think of is for Harpsichord-type sounds on a DX7 (or other FM synths,  etc.), where the sound of the jack hitting the string when the note is released, is synthesized separately using an envelope where the attack and decay are short, the sustain level is zero, and the release rises to the final/initial level to give an envelope that only affects the release segment of the note. Oh, and acoustic guitar sounds, where string buzz is also synthesized this way... There's probably more now that I'm thinking about it this topic...

So a release trigger/tail generator would have different sections, and actually might have some aspects in common with a 'Riser' synthesizer, although they don't seem to be as 'in vogue' as they were a few years ago. I remember suggesting that a custom riser could be made by processing a 'reverb'ed section of a track in an Ableton Loop Studio Session back in 2015, and got a tumbleweed reaction from the room, and the 'Name' Producer then made one using filtered noise and everyone else nodded their heads. I have always swum against the tide, by the way...

I have added this task to my 'ever-expanding' (as Loopop says on YouTube) list of 'things to do'.  Don't hold your breath, though: it's a long list and I'm very busy. 

And Finally...

I haven't really seen a device like this before. Well, actually, that's not exactly right, because I have - this is just a synthesizer, but not your common variety. This is a purpose-built 'custom' synthesizer made to produce just one type of sound.  What I haven't seen before is a synthesizer that is dedicated to making the sound of a circuit being turned on or off. But now I have. And so do you, now! I think it shows the power of Max that you can use it to make arbitrary sounds and sounds that haven't been made before (or maybe sounds that I think might not have been made before...).

My grateful thanks to @MeLlamanHokage for the original question about turning circuits on and off, and to Christian Henson for using a pedal board as a performance instrument at exactly the right moment to get me to turn speculation into reality. Thank you, sirs!

---

Getting ONOff Emulation

You can get OnOff Emulation here:

    https://maxforlive.com/library/device/7074/onoff-emulation

And yes, I realise that it should be called AUDonOFFemulation if I was to use my own naming scheme, but that just reads crazy!

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

And no, I haven't had a chance to test it in Live 11 yet... To much to do, so little time...

Modular Equivalents

In terms of basic modular equivalents, then implementing OnOff Emulation is a mixer plus a VCF plus a Clipper plus a noise source, an envelope follower and a State-Variable Filter, plus a trigger and 10 AR envelopes. Nothing is complex, but there's quite a lot of separate bits to deal with, which can be tricky on a modular... 

Overall, I reckon that OnOff Emulation would require an ME of about 20. Alternatively, you could just take any modular patch and see what happens when you power it down and up. (Caution: Turn your amplifier volume down, and use a limiter on the input. Increase the volume slowly and carefully - with caution. Not recommended with headphones! Do not turn modulars on and off repeatedly and quickly!) 

---

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

Buy me a coffeeBuy me a coffee (Encourage me to write more posts like this one!)


Synthesizerwriter's Store
 (New 'Modular thinking' designs now available!)

 



 













Friday, 10 July 2020

16 steps is not Old School...

The Liverpool Empire theatre - a classic rock venue in the North of England (which is kind of in the middle of the UK, curiously...). The 1970s. An impressionable teenager goes to see Tangerine Dream. Dry ice, mist curtains. LOUD! Edgar Froese does a guitar solo and maybe, almost maybe, acknowledges the headbanging crowd of long-haired, bejeaned youths. The lasers are turned on the mirrorball and the audience gets the full 'spoke effect'! Oh, and there's a lot of 8-bit sequences. Yep, that was me. It was a very different world to the one we inhabit now.

Different? Well, we have 16-step sequencers now, and so it gives me great pleasure to announce the release of MIDIdifferentTWO16, which doubles the number of steps, shuffles and skips, turning the 'Old School' 8-ness into 21st Century 16-ness. Oh, and we now have DAWs, and putting a sequencer inside a DAW is allowed. Oh yes, is it allowed! Dit dit dit dit boom tizz dit dit boom tizz dit dit... (Did you know that Zang Tumb Tumb came much earlier, as well as later, as ZTT...)

16 steps to heaven...

There's a hidden difference in this dual step sequencer from version 0.07 of the 8 bit original. It now has two rotary controls to set the lengths of the sequences. The previous version used up/down nudge buttons and looked cool. I loved it (or I lived it, as my iPhone auto-corrects it to). But then I realised (sinking stomach) that it was tricky to map what Ableton call a 'control voltage' to the Step Length, because I had used the live.tab object to implement the nudginess. Rotary controls are sometimes better!

8 steps to heaven..
And yes, I do know that Ableton's MaxForLive developer guidelines do say that devices should not be wide! But my Probably sequencer is way wider than either of these...

The Advert


Hopefully, by now, this style is starting to take on a life of its own. I've made quite a lot of versions of this infographic up to now, and there are more on the way...

Getting MIDIdifferentTWO16

You can get MIDIdifferentTWO16 here:

     https://maxforlive.com/library/device/6443/mididifferenttwo16

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 implementing MIDIdifferentTWO16 is just two step sequencers, giving an ME of 2 if you can find 16-step sequencers, or 4 if you can only find (or afford) 8-step. It all depends on how GAS affects you, I suppose. The ability to control step values and skips may vary with the specific sequencer, but if implemented, then it is just more patch cables. As I said for the 8-step version: perhaps MEs should also include some sort of measure for the number of patch cables that are required?

---

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


Synthesizerwriter's StoreSynthesizerwriter's Store
 (New 'Modular thinking' designs now available!)









 

Wednesday, 8 July 2020

Note Count Processor in Max For Live for Ableton Live

After I described the 'Triple Transposing Delay' with three different ways of connecting the delays together, as 'experimental', people seemed to like that, so my latest release is 'extremely experimental'!

Although it isn't a reliable guide, I've not seen anything like MIDIoneOF before, although, of course, you could do some of it using clip envelopes. In fact, I reckon that you can do almost anything by using clip envelopes, and I'm sure that those people who produce YouTube videos with apparently click-attracting titles like: 'Powerful Advanced Generative Techniques For Ableton Live', in huge white block capitals will be busy making yet more of those videos as I type, although they don't seem to use clip envelopes... When I did release a YouTube video on using Clip Envelopes, it got a wonderful review (Thanks, Darwin!) and over a hundred views, so maybe I should make some more...

MIDIoneOF


MIDIoneOF is the first of a series, because people seem to like it when there is more than one of something, and actually that's part of where the name comes from. I wanted to called it 'n of m' because it is based on permutations and modulo arithmetic, but mathematical notation like 'n of m' isn't very good for naming Max For Live plug-ins, and 'Nofm' sounds like onomatopoeia for eating food, rather than a cool M4L device. So 'One of' got the most votes, and may well be followed by 'Two of' when I have time to finish it. (I have no idea what the third might be called...) Me? Busy? I've been doing several major projects over the last few months (the TR-505 was just one of them) and I can't talk about some of them, but they might even see the light of day at some time. Over the years, I've become rather used to doing stuff that never has the media spotlight turned onto it, and I'd probably be surprised now if a glimmer of limelight ever appeared on any of my stuff. But hey, It means that sometimes I can hint abut something rare and unusual!

(*) MIDIoneOF counts notes as they arrive at the input, and then processes those notes in various ways. The main process is muting: you can set notes to be muted depending on two criteria: the note count length (from 2 to 16 notes), and the 'Mute Pattern' which you can set in the 16 light purple boxes (although you can only set ones which are within the note count length!).

The Mute buttons mute the note if they are grey, but let the note through if they are light purple, by the way.... 

So if the note count is set to 7 notes, then you can set mutes for note counts between 1 and 7 notes. There are 'Speedup' buttons to set all the mutes on ('AllOn') or off ('AllOff'), as well as a random selection.

The muting affects the notes as they pass through the device, and all of the timing is derived from those notes... Despite appearances, the mute buttons are only indirectly connected to the timing transport of Ableton Live - and if you don't quantise your notes, then there's no real connection at all. So what may look like a simplistic rhythmic accenting utility isn't quite that at all... It may look like a step sequencer, but the steps are the notes, not the transport timing. It's kind of a step sequencer turned inside out...

This is probably a good time to revisit the start of a previous paragraph (*). When I say: 'as they arrive', I mean that if you have a clip with 8 notes in it, then MIDIoneOF will get those 8 notes, and will process them in the order in which they arrive. So if the note count length is set to 7, then the first 7 notes will be processed (and muted or not, depending on the settings of the numbered buttons in the Mute Pattern. The eighth note will then be processed as the first note of the second set of 7 notes, and MIDIoneOF will continue processing in groups of 7 notes, until you stop Ableton Live.

The clip (or live playing) can include single staccato notes, legato notes, or chords, although there are limits to the speed and quantity of notes which it can deal with! Remember that I did say: 'Extremely experimental!'. Note also that this behaviour isn't what you probably associate with a step sequencer, but as I said, this isn't...

The second bit of processing is the 'AutoRandom' button, which saves you from the effort of clickng on the Mute buttons. You set a number (between 2 and 16 - a motif in this series) and after that number of multiples of note counts (so every n x 7 notes in the example I have used so far), the Mute buttons will be randomised. Properly random, and not one of those 'tailored randoms to make random more suited to human beings', so you can have everything muted, nothing muted, and these can repeat several times. Real random is like that, although in a lot of modern software it has been 'tailored' to suit people's expectation - the classic example is iTunes, where the Shuffle function does not play the same track twice, even though a random selection might play it twice, or even thrice, or even... It seems that people report it as a problem if a random shuffle plays the same thing twice... So you set the number of multiples of the note count length, and click on the 'AutoRandom' button, and off it goes. Setting the multiple to 4, 8 or 16 sounds kind of musical, because too much exposure to popular music seems to have convinced many people that everything happens every 4, 8 or 16 bars at 120 bpm in 4/4 time. Since the example so far has been every 7 notes, then try 7 as the multiple and you will find that it might feel slightly early.

The second processing is MIDI velocity. Since the note count and Mute Pattern know which number each note is, then we can do interesting things to the velocity value of the notes. The clue is the 'Rise/Fall' button, and this has an Offset rotary control on the left side, and a Scaling rotary control on the right hand side. Rise increases the velocity value as the note count increases, whilst Fall decreases the velocity value as the note count increases. This means that, as with lots of stuff that I do, velocity matters! You should try MIDIoneOF with an Instrument that is velocity sensitive... The important thing to remember is that the velocity processing happens depending on the note count length, so with the 7 note example and a Fall button setting, then the first note will have the largest velocity value, then the velocity will drop over the next 6 notes to the 7th note, which will be the quietest (lowest MIDI velocity value), and finally, the 8th note will then be loud again, after which it will drop for th next 6 notes, and so on. The 7 note cycle will repeat until you change it.

Note that all of the processing happens based on just the notes themselves. MIDIoneOF takes all of its timing from thosee notes, not from the bars and beats within Live. So if your clip has notes in a complex rhythm, then MIDIoneOF will process the notes in that same complex rhythm. As I said, you can feed your own playing through MIDIoneOF if you wish... And I'm not going to mention Olafur Arnalds here...

The final processing is Probability, which is independent of the note count length! One thing that I have realised is that 100% is not enough, and I'm looking at this to see if there is anything I can do, but adding in extra notes is quite tricky in real time...

There's also the slightly red '!' "All Notes/Sounds Off" button in case you need to stop errant hanging notes. This may well signpost this as an 'experimental' device regardless of how I tag it in MaxForLive.com...

And that's the MIDIoneOF device. Hopefully you haven't seen anything quite like it before... because I much prefer not to repeat things that other people have already done. There have been a lot of Max For Live devices recently which are just people re-making a device which is already on Max For Live. I think that time is too short to waste it re-coding something which is already available!

Inside

I won't bore you with a counter, and I won't bother explaining why the count is from 2 to 16 and not 1 to 16 (1 is the obvious minimum, but it is really boring using a count of one!). Instead, this is probably a good place to do another in the occasional series of 'Things that Max doesn't have a pre-made object for...'

In this case, it's those 'Mute Buttons' that are the source of the problem. To mute the MIDI note when any of the mute buttons are highlighted requires what I call a 'wide' OR function - a 16-input OR gate. This isn't standard in Max...which is not hugely surprising... Now I know that you can use Boolean logic to transform the gate, but as far as I can see,  this doesn't really do anything other than mean that a different 'wide' gate and extra inversions are needed. So what did I do? I made a 16-input OR gate using a tree hierarchy of 2-input OR gates. Yep, I resorted to 'brute force and ignorance' to save time and effort. Sorry.


Two things are probably notable in this sub-patcher. First, there's the left-most input, which sets all of the outputs to zero. I've had all sorts of 'difficult to track down' problems caused by the gswitch object when there's no input on one of the two inputs (This would be a 'floating input' if this was hardware, which it isn't...), and so this ensures that that won't happen. Second, there's my standard 'use a blink to make both inputs trigger the output' approach, which enables the ORs to ripple downwards from either side. I'm sure there's a better way to do this whole 'Wide OR' functionality, but I have't had a flash of inspiration yet... It works well enough for my purposes.

Links

YouTube video on using Clip Envelopes - Features Clip Envelopes - in a video!
All Things Modular - Inspired by Modular - Darwin's blog has some interesting posts in it! Including this one where it refers to the above video on clip envelopes.

Getting MIDIoneOF

You can get MIDIoneOF here:

     https://maxforlive.com/library/device/6436/midioneof

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... and pictures may not always be the current version... but Schrodinger's cat's status is permanently uncertain...

Modular Equivalents

In terms of basic modular equivalents, then implementing MIDIoneOF in a modular synth is just a step sequencer (or a ring counter in old parlance) driven by gates or triggers instead of a clock, some toggle switches for selecting the steps, and some velocity processing in a CV utility. About 5 modules by my count, giving an ME of 5. I hope that this blog post makes more people think about pulling out that patch cable from the clock input of the step sequencer and connecting it to a gate instead of an LFO or a Clock Generator. Modulars synths have cliches too! 

---

If you find my writing helpful, informative or entertaining, then please consider visiting these links:


Synthesizerwriter's StoreSynthesizerwriter's Store (New 'Modular thinking' designs now available!)




















   


Thursday, 25 June 2020

Triple Flexible Routing Probabilistic Transposing Delay in Max For Live for Ableton Live

Sometimes, a MaxForLive device is right on the edge of not working, and normally I put it to one side for 'further investigation'. But every so often, an 'almost working' device is so cool that it goes along a different route: an experimental device with warnings. MIDIdelA3 is just such a device...

For a while now, I have been exploring the edge of the musical map that has 'Probability' on it, off to one side of a region called 'Generative'. But it wasn't until I combined probability with a much older topic, echoes, that things started to get really interesting. One of my very early echo effects was called 'Missing Echo', because it didn't put an echo on every note, and updating the concept with probability, as well as moving the delay into the MIDI domain, started to produce some useful results.

People have been playing around with echo and delay effects for a long, long time. One of the current 'leading lights' is Olafur Arnalds, an Icelandic multi-instrumentalist who has been using custom 'smart delay' software in live performance, and who recently collaborated with Spitfire Audio to release 'Stratus', a toolkit of software and a linked sample library that uses complex delays to augment live performance.

MIDIdelA3


MIDIdelA3 isn't complex, and it isn't anywhere near the functionality of Stratus, but it hovers at the edge of what my 2008 Macbook Pro can reliably accomplish in MaxForLive. It might be generously described as being 'far from perfect', and isn't really suitable for 'mission critical' use, but it is a fascinating glimpse into what is possible with MaxForLive. It has three identical processing sections, each with a delay, a transposer, a probability control, a velocity scaler and a loop switch. You can connect the three sections together in three different ways: in series, in parallel, and in a mix of serial and parallel. There are 20 memories, and a large rotary control that lets you select from those memories, so once you have set up the memories, then it can be used as a 'single control' device if you wish.

Setting up the memories sounds easy, but there's more to it than meets the eye. Having three different topological connections between the three sections is quite hard to get your head around, and the probability control has more effect that you might think, because when a note has an 80% chance of passing through a section, then that drops when it goes through a second section with 80% probability, and if it goes through a third section, then another 80% probability means that you aren't going to hear that triply-delayed note very often. Then there's the velocity scaling, which reduces the velocity of notes, and which is particularly important when you loop a section, because it keeps things stable, or almost does. Yep, this is one of those delays that can run away with itself...

Inside

I haven't used the MIDI Delay that Ableton include as one of the MaxForLive demos because it is too much like 'a maze of twisty little passages, all different'... Instead I have coded it myself using a different approach, and this probably explains why it 'almost' works - my programming is not very advanced, I'm afraid. But it does get close enough to being usable to be worth revealing, because I'm sure that there are better programmers out there who can improve on the concept...and like all of my software on MaxForLive.com, it is free and unencumbered by rights licensing restrictions.

The way that you are supposed to do operations on time-critical events is to time-stamp them as they arrive, and then work your way through a time-based list, so that they are dealt with in strict time order. If you look inside the Ableton MIDI Delay example MaxForLive code then that is exactly what you will find - and there's quite a lot of code in there...

I chose to do it using the much simpler 'cheat's' way. I used two 'pipe' objects, one for the MIDI Note Number values, and the other for the MIDI Velocity values. Normally, when time-stamping a pair of values like Note Number and Velocity, you would group them together as a single event, and give that pair of values a time-stamp. When using two separate pipe objects, then the Note Number becomes one event in a time-delay, whilst the Velocity becomes a different event in a different time-delay. You can probably see why this isn't a perfect solution! But, for 'quick and dirty', it kind of works, and it requires very little coding!

So for the three processing sections (Time Delay, Transpose, Probability, Velocity Scaling, and Looping) there are six pipe objects, arranged in pairs (Note Number, Velocity). These three sections are connected together using a set of 24 switches that do all of the routing for the three different ways that the three sections can be connected (serial, parallel, and a mix). The three connection diagrams look a little bit like the FM 'Algorithm' diagrams that the Yamaha DX7 had on its top panel, and they kind of show the same sort of routing, but nothing more than that.

Using it

Depending on the way that the three processing sections are connected, the basic explanation goes like this:


Connection 1 - the serial (top diagram) connection sends the MIDI messages through section 1 (and outputs delayed notes), then section 2 (and outputs delayed notes), then section 3 (and outputs delayed notes).


Connection 2 - the mix of serial and parallel connections (middle diagram) sends the MIDI messages through section1 and outputs delayed notes), and then through section 2 and 3 at the same time (in parallel) (and outputs delayed notes from both sections).


Connection 3 - the parallel (lower diagram) connection sends the MIDI messages through sections 1, 2 and 3 at the same time (and outputs delayed notes from all 3 sections.)

Each section has a separate Loop button, and the Velocity Scaling rotary control acts like the 'Feedback' control in an ordinary audio delay or echo effect. If the Velocity Scaling is set too high, then the processor will quickly become overwhelmed with too much data, and will stop working. This may cause strange noises, which may be loud! Please use the Loop buttons with care. If the device does become overwhelmed, then the 'All' button can be used to turn off any of the Loop buttons.

The Loop buttons can be turned on whilst the device is operating. So you can set up the controls, and then turn on looping for just one of the sections - this is very effective for creating rhythmic 'motifs' and other repeating sounds. The recommendation is that you normally have all of the Loop buttons set to Off, and turn one (or more) on to get a repeated motif for a short time, and then to turn the Loop button off again. This will keep the device stable.

If you have a transpose control set to anything other than the middle 'zero' setting, then using the Loop buttons will quickly cause very low or high MIDI notes to be produced - because the transposition accumulates for each repeat. If you set it for an octave, then after only a few repeats the notes will be at the limit of the MIDI range. Please use the Loop buttons with care when using the Transpose rotary controls.

The Time, Probability and Velocity Scaling rotary controls are not linear - half way round is not half the effect. This is deliberate, and is intended to provide the most control where it is needed. For example, the Velocity Scaling you will use most will be at around 70 or 80%. 100% may cause the effect to be overwhelmed, and is not recommended. Less than 60% will tend to produce only a small number of repeats (echoes).

Note that the Probability rotary control prevents notes from passing through a section. This applies to repeated echoes, so the Probability rotary control and Velocity Scaling rotary control will both reduce the number of repeats (echoes), and will help to prevent the device from being overwhelmed.

To store settings that you like in a preset 'memory', shift-click on the relevant grey square in the lower left hand corner. To recall a 'memory' preset, just click on the relevant square (it will change to white), or use the 'Preset' rotary control. If you use the 'Save' icon on the upper right of the device, then you can save your settings in a file inside Ableton Live, ready for use next time.

MIDIdelA3 is a sophisticated MIDI delay unit. It is capable of some interesting effects, including some that are not normally found in echo or delays that process audio signals (digital or analog). Please be aware that too many notes played at once, or high settings of Probability or Velocity Scaling may cause the processor to become overwhelmed, so take care. The red '!' round button is a placeholder for a future method of stopping the processing from becoming overwhelmed.

MIDIdelA3 sometimes behaves strangely with some instruments, and you may experience 'held' or 'stuck' notes. I am still trying to find out why this happens... For your first testing, please use a percussive sound that decays to nothing relatively quickly, rather than a sound that sustains.

Remember that this is an experimental MaxForLive device, and it is not perfect. Some of the links below may provide more robust, similar and more advanced versions of the effects that MIDIdelA3 produces, and should be researched if you want to explore this type of MIDI delay further.

Update

Since version 0.03 was published, I have spent a lot of time trying to find out why sustained notes caused so much trouble to this plug-in. Here's what I found...

The development of this MaxForLive plug-in started out as an experiment to see what it was like to have delay, transpose, and probability in a single device. Somewhere in there, the idea of putting feedback around it came up, and so I added the velocity scaling in an attempt to ensure that it would be stable. Adding feedback revealed some interesting things that I hadn't noticed up until that point: first, my bright idea to scale the velocity each time a note went round the delay loop, so that it would stop the device from running away, worked, but it didn't do quite what I thought it would. (My assumption (never assume anything!) had been that when the velocity value got scaled down to 1, then eventually a subsequent repeat would have the value zero, which is a note off, and that this would then stop the audio neatly. What actually happened was that it got down to a velocity value of 1, and then sat there, repeating over and over again.

This sort of situation often happens in programming, and there's a great temptation to just fix that aspect. Yep, that's what I did. I added extra code so that when the Note On MIDI message happened, the next note would have a velocity value of zero,  (which is the same as a Note Off MIDI message (, and hoped that everything would be fine. the problem with is is that the Note Off message is still in the pipe objects somewhere, and so you get two Note Off messages. And we know that Note Off messages are ignored...

There's a trap here. This is no longer a delay. It has become a Note Off message generator - and those Note Off messages just go round and round and round the feedback loop. And here's where I made the big mistake. I added more code to fix the problem that I had just created. I detected when a velocity value of 1 or less occurred, and then killed that whole message, so that Note On message never got turned into a Note Off message.

What I didn't test was what happened when a note was played that was shorter than the delay time. When I did test this in detail, I discovered that I got hanging notes because the Note Off messages were missing! And why were they missing? Because I was killing Note Off messages! The difficulty here is that Note On and Note Off messages should always be in pairs, and if you start to remove Note Off messages, then you have too many Note On messages and you get hanging notes. Worse still, I was turning Note Ons into Note Offs, so I had no way of keeping track of pairs of On and Off messages. There's no difference between a Note Off message and a Note Off message that used to be a Note On, except that one of these should be followed by a Note Off, and the other should not be!

If I removed all of the Max code that messed around with turning On messages into Off messages, then everything was fine when the Loop was turned off, but as soon as I turned the Loop on, then I got messages going round and round the feedback loop, eventually getting the velocity scaled down to zero, and then the Ons became Offs... For one moment, I did consider putting in a switch connected to the Loop button, so that when Looping was off, I didn't mess about with the Note Ons, but when looping was on, I did mess about. Then I realised that this would probably create a device that created hanging notes only when Loop was on...

At this point, I realised that I was trapped inside the loop of 'You have created unwanted behaviour by fixing unwanted behaviour...'.

A little bit of SWOT analysis told me that the expected behaviour of an echo with feedback was that it would go wrong if there was too much feedback. Unexpected behaviour was that an echo would cause hanging notes. Unexpected behaviour is bad, and so I ditched it. I took out all of the additional Max code that tried to remove the 'runaway' effect when you turned up the feedback too far. And this is version 0.04.

Oh, and I also fixed a few bugs in the horrendously complicated switching - you know those three diagrams that show the three ways of connecting the three processing sections together? Well, surprise surprise, there were bugs in there! For a single, relatively simple device, it is quite impressive that I could get so many things so wrong... 

I think version 0.04 should have less hanging notes...   

Other MIDI processing devices may exist...  

One thing that I have now noticed in other MIDI processing devices is that some of them only operate on the MIDI Note On messages, and so you have to pre-define the length of the notes that are produced. This way of doing MIDI processing had never occurred to me! It avoids any requirement for the processing of Note Off messages, and this should simplify the coding task, I think. If I ever get the time, then MIDIdelA3F may one day get released!                       

Links

Stratus, from Spitifre Audio, is probably the leading edge of current 'smart delay' technology, and combines it with a sophisticated sample library.
Midihub, from blokas.io, is a very nice MIDI event processor, patchbay and interface. (Yes, I know it should be MIDIhub, but they never asked me.)
BomeBox, from Bome Software, is a sophisticated MIDI processing, mapping and patching interface that can link a computer and MIDI devices over 5-pin DIN, USB, Ethernet and Wifi, and is also a MIDI host.

Getting MIDIdelA3

You can get MIDIdelA3 here:

     https://maxforlive.com/library/device/6400/mididela3mr

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... and pictures may not always be the current version... but Schrodinger's cat's status is permanently uncertain...

Modular Equivalents

In terms of basic modular equivalents, then implementing MIDIdelA3 can be approached from two different directions. A purist will use MIDI processing utilities to delay, transpose, probability-ise, and velocity scale the MIDI information, then connect it to a modular sound generation chain. A pragmatist will use three delays plus some additional processing and work in the analogue domain. Purists will require 3 or maybe 6 MIDI processing utility modules and may need to write some code for some solutions, giving an ME of 3 or 6. Pragmatists will require about three sets of 4 modules (voltage processor for transpose and velocity scaling, delays for the delay, utility for the probability, and a switch for the loop button), giving an ME of 12.

---

If you find my writing helpful, informative or entertaining, then please consider visiting these links:


Synthesizerwriter's StoreSynthesizerwriter's Store