Showing posts with label Performance utility. Show all posts
Showing posts with label Performance utility. Show all posts

Sunday, 12 May 2019

Frozen Echoes - a sneak peak inside my M4L development pipeline...

I'm going to break my usual routine this time. Instead of a finished MaxForLive device, I'm posting an early prototype so that you get to see something before I have smoothed any rough edges.

For a long time, I've been fascinated by syncopation, and so the '3' and '5' buttons in Ableton Live's Ping Pong Delay have always been my defaults. Whilst working on my re-inagining of that device, I realised that the extended 'Freeze' buttons that I had added could also be pushed further - into territory that my AUDhexECHO partly covers, but with a different, more rhythmic, more performance-oriented slant. The result is a 'Plus' version of AUDpiPOde, but there's a lot of extras in that 'Plus'! (I also removed the input filtering, but I think the additions make up for that!)

AUDpiPOdePLUS

Here's the basic device: AUDpiPOde split into two separate channels, and without the common time and feedback controls - so just an echo effect.


The left half of each to the channel panels is just taken from AUDpiPOde, and in this mode, you get two different delay times for each channel, so the ping-pong echoes just bounce back and forth in stereo, as you would expect - but because the time delays are different, the timing is more... interesting.

The two buttons marked 'Free' mean that the two channels are separate. If you click on the one above the 'ms' time setting in the Right channel then it changes to 'Anti', which indicates that the two time delays work in opposition. So the time delay for one channel goes up as the other channel goes down.


So 1750 ms in the Left channel equates to 2250 ms in the Right channel, and notice that the time delay adjuster is greyed out in the Right channel - using the 'Anti' button just makes syncopated echoes easier to set up for 120 ppm (at the moment), but it is a good starting point for the next stage.

The panel on the far right contains common controls, including 7 'performance' controls. The largest three are just common versions of the three 'Freeze' buttons: Freeze (Ping), Freeze (Ping and Pong) and Freeze (Pong), where 'Ping' is a 'same channel' echo, and 'Pong' is an 'other channel' echo. The Dry/Wet rotary control controls the mix between the straight-through audio and the processed audio, and the 'MakeUp' slider/indicator is only active when 'freezing' is happening. The final four buttons are connected to the 'freeze' loop processing...

The right half of each of the channel panels contains two processors: a limiter; and a frequency shifter. These two audio processing effects are not inside the feedback loop that is associated with the 'Feedback' rotary control. Instead they are inside what I will call the 'freeze' loop - because this echo effect breaks two of the 'rules' that people often apply to echo units:

1. 100% feedback will cause the delay to oscillate, which is generally considered to be bad.
2. Don't put any audio processing in the feedback loop, because it will affect the feedback and might cause it to exceed 100%, in which case the first rule applies.

Luckily, inside the 'freeze' loop, things are slightly different, and this design has 100% feedback plus audio processing, and it is much harder to get it to oscillate than you might expect. In fact, the freeze loop is specifically designed to avoid the usual runaway feedback, although nothing is perfect! When the 'freeze' mode is selected, the input is switched from the audio input to the output of the freeze loop processing, so the delay is looped around itself, and only outputs audio signals. The Dry/Wet balance control shifts the all 'Wet' when 'freeze' mode is active, so that only the frozen audio is output.

One of the major changes between the plain and the 'Plus' versions of AUDpiPOde is hidden away in the Max code, and it is the audio switching. The Plus version fades in and out smoothly between audio signals, whereas the plain version just switches immediately. The freeze mode only works when the transitions in and out are as smooth as possible, and the fades help to minimise them. This design does to use cross-fades - I'm still trying to get my head around a way to do this, and it remains one of those 'one day I will figure it out' aspects of my programming.

And so to 'freeze' mode:


The selected button is 'P' , which is 'Freeze Pong', so the output goes round each delay in series, and with the 'Anti' time delay setting, this means that the audio will be delayed by 1000 ms, then 3000 ms, the 1000 ms, etc. The frozen output is thus 4 seconds (4000 ms) long in total, and so it repeats every 4 seconds. And because it is frozen, it can repeat indefinitely - although if you activate the Limiter or Frequency Shifters then this isn't true! (because they alter the audio) And when you want to stop the repeats of the frozen echoes, then you just click the 'P' button again and the Dry/Wet control will return to the previous setting, smoothly restoring the echo effect as before the freeze was activated.

So the performance process goes like this:
1. Set up the echo timings in 'Anti', so that the echoes stay in sync (or alternatively, you could just abandon sync!)
2. Click on one of the three 'Freeze' buttons.
3. Let the frozen echoes repeat...
4. Click on the highlighted 'Freeze' button to return to echo mode.

Things to fix

There's quite a lot of extra text needed here to describe the operation of the Limiter and Frequency Shifter effects. The timings in the time delay selection tabs aren't in the right order! I need to fix this. Also, there's that cross-fade that has so far defeated me! (Which means that the frozen echo loop is not quite perfect...) Finally, I'm wondering if I should put filtering inside the 'freeze' loop, which might be quite interesting...

Anyway. Enjoy!

Getting AUDpiPOdePLUS 0v03

You can download AUDpiPOdePLUS 0v03 for free from MaxForLive.com.

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 the blog post is behind the version number of MaxForLive.com...

Modular Equivalents

In terms of basic modular equivalents, then AUDpiPOdePLUS would require two delays, two limiters, two frequency shifters, some utility switches, and two mixers, giving a total of about 9 ME.





Sunday, 26 November 2017

dFreez_mr - M4L live performance utility

Sometimes, inspiration hits you at interesting times. There I was, in Studio 4 at the Funkhaus at Loop 2017, giving the second of three Open Space Lightning Presentations (one per day), when I realised that sFreez_mr was missing a vital set of functionality. sFreez_mr is an M4L Audio Effect that provides 4 parallel loop audio players whose output is slowly mixed between using a 4-phase LFO. I made it to produce complex mixes for background atmospheres and special effects - so put four wind and rain loops into it, and you can generate non-repeating 'atmosphere' tracks for installations, stage and theatre usage.

What I realised mid-presentation was that every time I used sFreez_mr, I would raise the channel fader for the track it was in at the start, and lower the fader in that channel at the end. My headset mic was going direct to the PA mixer, and so I didn't have that signal to duck the channel volume inside Ableton Live. What I needed was an automatic volume fade in and out control...

dFreez_mr


dFreez_mr is the result of taking that idea and working on it for a few days. It it often happens that what seems to be a simple idea is more complex to implement, and this was definitely one of those cases. I quickly realised that I needed to have four different states:
1. Off. Zero volume.
2. Fading up. Volume goes from zero to maximum at a defined rate, using a non-linear curve.
3. On, Maximum volume.
4. Fading down. Volume goes rom maximum to zero at a defined rate, using a non-linear curve.

I also realised that I wanted a minimum of controls, whilst also providing lots of feedback to the user. I ended up with a single button, which 'starts' the fading upwards from the 'Off' state to the 'On' state, and which then 'stops' the audio by fading downwards from the 'On' state to the 'Off' state. I added two controls for setting the times to fade up and down (twist the dial to set the Seconds and Minutes), and some indicators to show the progress in the fade process, and finally, a state indicator, which says which state is currently active.

In practice, you load up four samples into the players in the 'Off' state, then when you are ready to go, you press the 'Start' button.

You wait whilst it goes through state 2 and eventually gets to state 3: fully 'On'. It then stays in this state until you do something. In dFreez_mr, this is where you would wait for the 'Load' lights to go 'bright' (showing it is safe to change the sample in the player because the volume is zero at that point) and you swap samples...

When you want to stop the audio, then in state 3, you press the 'Stop' button, wait through state 4, and it eventually gets to state 1 ('Off') again.

Now, if you've ever been to a 'Drone' music concert, then this is more or less what happens during one of those performances, so there may be ways of using dFreez_mr for more than just background atmosphere effects.

MaxForLive.com

As usual, you can get dFreez_mr from MaxForLive.com. Like many of my ideas, at this stage, it is not perfect, not production ready. In fact, it is quite some way from being properly finished, needs some tidying up inside, parameters naming, etc, and so it is free. I hope you enjoy using it.