Tuesday, 26 November 2019

Redundant MIDI Note On Messages Used to Set the Probability of a Drum Event

The Ableton Live piano roll display for MIDI Events is interesting, in many ways. As someone who has been using hardware sequencers since the 1970s (ARP's model 1601 Sequencer, for example, or the Roland...,), and software sequencers since the 1980s (The UMI-2B/4M on the BBC B, for example... http://www.muzines.co.uk/articles/umi-4m-midi-composition-system/3975 from September 1988, or Dr.T's on the Atari...), then I have seen and used a lot of ways of representing and controlling musical data. Ableton's piano roll is quick and easy for some tasks, but I have always liked a list-based view for adding things like program changes, or tweaking the order of 'simultaneous' events that are serialised by MIDI transmission.
(Picture from Reverb.com, where you may be lucky enough to find and purchase classic devices like this one!)

However, most seriously of all, it has always been my exposure to Intelligent Music's RealTime sequencer that has had the most profound effect on me (with John Hollis's Trackman just behind it...). RealTime was arguably one of the first sequencers that showed the road away from tape recorder emulations and towards modern DAWs (When I reviewed it, I didn't return it: I bought it! http://www.muzines.co.uk/articles/realtime-intelligent-sequencer/5624 ). And one of the killer features for me was the randomisation control - a little toggle box with a random pattern inside it that turned boring hi-hat lines into much more interesting decoration, and which sounded much less like a robot playing. Some things get under your skin and into your head, and you may have noticed that many of my MaxForLive devices (and more) have a significant bias towards using probability as a control source.


Which is where Ableton's piano roll comes in. Power users probably already know about the 'select a note, press the '0' (zero) button' shortcut that disables or enables notes (it is in the pop-up menu for the piano roll), but I've always wanted a Modifier key version (Shift-Zero, or Control-Zero, or something else, that doesn't disable a note, but sets the probability of it happening. Having 'greyed out' disabled notes is okay, but I would like more!


Now, it is possible to make a MIDI Effect Rack that extracts a single MIDI note and uses MIDI velocity processing or the Arpeggiator to provide control over the probability of a note, but it is pretty awkward, and not very elegant. All of which sounds like a cue for a simple, neat MaxForLive MIDI Effect that lets you control the probability of notes happening.


MIDIprobD4 does exactly that - for four notes simultaneously (It is a 'quad' or four-channel device...). The D indicates that its primary intended use is for drum sounds - you put it just in front of the Drum Rack. I use it to make hi-hats less robotic, to make snares unpredictable... You get the idea. If I'm bored, then I assign all four channels to kick, snare, closed and open hi-hat, and fill the Clip piano Roll with drum notes, and it produces oodles of random drum patterns. In a world currently overflowing with Black Friday deals (and what are the from/to dates for that?) then the deal is my standard one - it is FREE and will remain so (unless something extraordinary happens!).

Redundant MIDI Note Offs

MIDI has some interesting back alleys. In the classic reference specification, Complete_MIDI_96-1-3.pdf', on Page 10. In the 'Note-Off' section, it says that a Note On message with a zero velocity is roughly equivalent to a Note Off message.

( For more MIDI documentation, please visit: https://www.midi.org/specifications ) 

Now for any MIDI device that is velocity sensitive, a velocity value of 1 (one up from zero) is going to tend to be quite low in volume - maybe only fractionally just above no sound at all. The opposite value, 127, is maximum volume, of course, and so in many cases, zero and 1 sound pretty similar - one is totally quiet, the other is as quiet as it can be without not playing at all. There's one other interesting feature of drums - they are almost always velocity-sensitive. Further, on page A-4 in the 'Assignment of Note On/Off Commands' section, it says that 'Since there is no harm or negative side effect in sending redundant Note Off messages then this is the recommended practice' when talking about ensuring that Note Ons and Note Offs are always paired together, eventually.

The 'Velocity of zero is a Note Off' feature and the 'Redundant Note Offs are ok' feature are the mechanisms that I exploited to control the probability of MIDI note events in MIDIprobD4. Yes, I could have produced a complex device that keeps track of Note On messages and waits for the corresponding Note Off messages, and controls the probability of a note happening by removing the complete pair of messages, but it is far easier to just change the velocity of a Note On message to zero - which changes it to a Note Off, and redundant Note Offs are ok. So the MIDI processing is vry simple - just a multiplier for the velocity value of zero or 1. With a multiplier of 1, then the velocity of the note is unchanged: 1 x any value from 1 to 127 is the value. But with a multiplier of zero, then any value from 1 to 127 is changed to zero, which is the equivalent of a Note Off message, and it is okay to send redundant Note Off messages!



The Max code is shown above. This is inside a patcher that handles the velocity, and so outside this is more code that separates the MIDI messages into Note Number and Velocity streams, and so this is just the velocity stream processing. The yellow number box is a buffer so that the time it takes for the 'Random' object to generate a random number doesn't affect the processing time of this patcher - the previous value is available immediately from the number box. The output of the '<=' object is either zero or 1, and this drives the multiplier. The Probability control is a 0-100 rotary percentage control. I have to confess that whilst this approach follows the MIDI Specification, the actual device isn't perfect (but then, many of my devices have quirks...) and so sometimes it shows a note with a high probability that doesn't actually make any sound. I have spent quite a while trying to find out what the problem is, but haven't been able to discover the cause. Perhaps a reader of this blog may be able to enlighten me?


Anyway, MIDIprobD4 has simple controls. From left to right the first rotary control in each of the four channels is the MIDI note selector (0-127, although most drum notes are typically going to be 36-60ish), then some memory slots/squares (shift-click to save, click to recall), then an indicator blinker to show that a note event has been received, then the rotary Probability Percentage control, and finally a second indicator blinker to show that an note event has been transmitted to the output. Minimalistic, although I'm sure it could be made even smaller...

And that's it. Put MIDIprobD4 just before your Drum Rack and you have control over the probability of four of the drum sounds. Enjoy!

Links from this blog post:

UMI-2B/4M on the BBC B (from muzines.co.uk)
ARP model 1601 Sequencer from Reverb.com
RealTime sequencer review (from muzines.co.uk)
MIDI Documentation

And a special mention for a wonderful repository of music magazines from what now seems to have been a 'golden age':

Mu:zines - an amazing resource!

Getting MIDIprobD4

You can get MIDIprobD4 here:

     https://maxforlive.com/library/device/5844/midiprobd4

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 MIDIprobD4 would probably require four Random Noise Generators plus a quad MIDI Utility module to do the velocity multiplying, giving a total of about 5 ME (without all the stored memories, of course).

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




Thursday, 31 October 2019

Sound Synthesis Role Models 1 - Daphne Oram

All through my life, I have been inspired by many people who also had an interest in sound synthesis. Here is the first of an occasional series:

Daphne Oram (1925-2003)
Picture by Clusternote - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=61052771
One of the first British composers to create sounds electronically full-time, and a founder member of the BBC Radiophonic Workshop, where she worked from 1958-59. She did pioneering work on creating sounds by drawing with ink on 35 mm film stock, a technique known as 'Oramics'. With many people assuming that the earliest mechanical music reproduction was the music box or even the vinyl record, it is interesting to see that there are alternative techniques that have been used to produce music for a long time... 

Oramics and other opto-electronic devices like the Optigan use light to control the current that flows in an electrical circuit, and if the light varies, so does the current. If the light varies fast enough, then the current represents an sound - just like the varying current that an amplifier sends to a loudspeaker. 

When I was younger, I used to play around with opto-electronics a lot. The ORP12 was a common device (and you can still get them!) - it is a 'light dependent resistor (LDR), meaning that the resistance changes when light falls on it. The active substance is cadmium sulphide, and it comes in a small button package made of clear plastic - it looks exactly like one of those hobby or craft 'potting' projects where you put things inside clear resin.  The resistance of the ORP12 reduced as light fell onto the active 'window' at the end, and so you could use it to make all sorts of useful gadgets: from alarms that sounded when a light beam was broken, to things that could detect a square moving on a TV screen (Yes, the 'gun' accessories from video game consoles used to have an LDR at the end of a tube, and it detected the flashing light from the white square on the (probably a CRT) TV screen.) That was always one of the things about the ORP12 that surprised people - it responded quickly to light falling on it - you could modulate light at hundreds of Hertz (cycles per second). Other LDRs had even better frequency responses.




Picture by Kevan Davis - Flickr: Oramics Machine, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=17150394
In these digital times, it is interesting how electro-mechanical and opto-electronic devices have gradually vanished - and so the concept of putting something between a light and a photo-detector to vary the amount of light that falls onto the detector is probably unfamiliar to lots of people. 



By tpholland - Flickr: Oramics: waveform slides, CC BY 2.0, https://commons.wikimedia.org/w/index.php?curid=24611604

But this is how the sound was stored on movie film - alongside the picture, a wavy line looking very much like a modified audio waveform was used to generate the sound that you heard in the cinema. The idea of drawing in ink on film to make sounds flows from seeing film with an 'optical soundtrack' and understanding how it works. 


By Oramics Machine details 2.jpg: linearclassifierderived work: clusternote - This file was derived from: Oramics Machine - details 2.jpg:, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=32980388
By Iainf 09:33, 12 July 2006 (UTC) - Own work, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=941554
Nowadays, movie sound is stored in a virtual 'container' that holds digital bits of data that represent the pictures and the sounds, and there's nothing much to look at, and certainly no easy way to draw the data bits... 

(All images via commons.wikimedia.org - Captions contain attribution information.)

Daphne Oram is the first of my role models because she made music from pictures!

Daphne Oram - Wikipediahttps://en.wikipedia.org › wiki › Daphne_Oram
Daphne Oram Collection | Goldsmiths, University of Londonhttps://www.gold.ac.uk › ems › oram Daphne Oram | British Music Collectionhttps://britishmusiccollection.org.uk › composer › daphne-oram
Daphne Oram on BBC4 - BOILER ROOMhttps://boilerroom.tv › recording › daphne-oram-bbc4
Culture - The woman who could 'draw' music - BBCwww.bbc.com › story › 20170522-daphne-oram-pioneered-electronic-music


Sunday, 27 October 2019

Different every time - changing parameters with M4L in Ableton Live

I've always worked according to the principle of 'Never the same thing twice'. Whilst most important for things like drums, I try to apply it to most sounds - although I also like flams, which kind of goes completely against the principle! Maybe 'Be inconsistent' is a better way of putting it? (Just to be consistent, I have added in the updates made to MIDIdifferentONE version 0.02 into this blog...)

In Ableton Live, there's an obvious way to control the parameters that are one major way of changing sounds on the fly: the 'Clip Envelopes'. The name is slightly misleading, because clip envelopes are just a way to draw parameter values onto the piano roll. Anyway, the clip envelopes are normally hidden by default, and you need to click on the 'E' inside a round button to open up the overlay in the piano roll pane. Selecting a device and a parameter from the two pop-up menus then lets you draw lines and curves either with a rather blocky pencil tool ('Steps') or with a 'lines and breakpoints' ('Ramps') tool. I prefer the 'lines and breakpoints' approach...



One of the 'classic' parameters that is controlled this way is filter cutoff (with an appropriate level of resonance) and I have spent quite a lot of time zooming out from a clip, setting the cutoff frequency for a bar, then clicking to get a new point and dragging it up and leftwards to get a new parameter level for the next bar, and so on. It requires quite a lot of clicking, but once it is complete, then editing each of the levels is quite quick to adjust. However, if you want to change the timing, for instance, to a change every other bar (or an arbitrary length), then it can require more clicks. There's also another non-obvious thing to consider that requires more clicks - you need to have the parameter set before the fist note on in the bar. This is why the orange clip envelope line is shown in the diagram as changing just before the first note in the next bar - if you don't do this then you hear the note start and then the filter cutoff change, which sounds like a mistake.

What this means is that you start off zoomed out, setting the parameter levels for each bar (or other interval), and then you need to zoom in to each of the ends of the bars where the parameter changes, the nudge the parameter change a little bit earlier in time. Then you zoom back out again. For me, there's a point where repeated mouse clicking gets a bit tedious, and I've never found any keyboard shortcuts for some parts of the clip envelope editing. So setting up several clip envelopes for a few parameters, and then changing the timing, starts to exceed my trigger level, and I stop and go looking for alternatives.

LFOs are the obvious alternative, and I've explored all sorts of variations of Slow Oscillators, including quite a lot of my own MaxForLive devices. The trouble with LFOs is intrinsic: they want to change, slowly; whilst for parameter changes I'm really looking for sudden changes followed by long steady fixed values. Lots of LFOs come with various 'Random' or 'S&H' (Sample and Hold') outputs that do give the stepped change, but then the values aren't under my direct control. Okay, so S&H on a filter cutoff can sound cool, especially a quarter note intervals (of which more later), but when you are controlling a build then you want to be able to set the parameter value for each bar. So LFOs are 'almost' the solution, but what would the ideal look like?

My ideal would have a LFO like 'Rate' control, followed by some way of controlling the parameter setting for each time period - from quarter bars up to every 8 bars or so. Which kind of sounds a bit like a weird step sequencer... but one that that enables each bar (or other interval) to have different parameters!

MIDIdifferentONE


MIDIdifferentONE is a deliberately 'different' step sequencer for parameter values that works a bit like an LFO, except that it is always synced to the sequence timing, and it is optimised for setting parameter values and then replaying them at various rates. Best of all, it always changes the parameter value just before the end of the bar, so you don't get the note followed by the parameter change!

It turns out that the requirement for something to happen 'just before' something else is one of those programming tasks that keeps cropping up again and again in electronic music, and I've struggled many times with getting it to work correctly. So this time, I was determined to spend some time solving the problem, and then some time showing how I came up with my solution. As always with these things, there's probably a much better, cleverer, shorter and neater way to do it, but I will leave that to other programmers!

LFO timing and step sequencer design is all standard 'home territory' for MaxForLive, but the requirements for the timing of the parameter change are more interesting - we need the parameter to change 'just before' the end of the bar (or some other interval). 'Just before' might be loosely defined as something like 'after the last beat, and as late before the end of the bar as we can manage without the parameter change happening in the next bar'. I decided to simplify 'as late as' to mean ' the last 16th note tick before the end of the bar, which is probably going to work with most situations - although if you put very short notes right at the very end of a bar then MIDIdifferentONE might start to change the parameter to the value for the next bar as your last note of the bar plays...


For 16th note quantisation, Live's transport outputs bars as numbers, beats as the numbers 1 to 4, and 'ticks' as the numbers 0, 120, 240 an 360. If you don't quantise the timing, then you get tick numbers like 205.74 and the processing is more complex. For MIDIdiffrentONE, making sure that the parameter changed before the end of the bar was the most important thing, so I kept things simple and applied quantisation, but only to the timing for these parameter changes! So MIDIdifferentONE will not affect the quantisation of any other timing in your music.

The definition of 'after the last beat and when the last tick happens' translates to beat=4 and tick=360, so all that is needed is a bit of Boolean logic in MaxForLive... Now the easiest way to do this kind of goes against the 'visual programming' metaphor that MaxForLive uses, and uses the 'if' object and requires some typing! Suddenly MaxForLive is going a little bit 'programmer'y! What you type in the Max object is something like 'If ($i1=4 and $i2=360) then 1 else 0', which means that when input 1 is equal to 4 (beats) and input 2 is equal to 360 (ticks) then output a '1', otherwise output a '0' (zero). Yep, that's a traditional text programming 'if statement' inside a MaxForLive object. Some of you may need to sit down at this point...

That covers how to make something happen at the end of every bar - whenever the beat=4 and tick=360. Other times like every other bar or every quarter bar just require slightly different 'if' statements and additional processing. I hid the end result inside a patcher box to keep things neat and tidy:


So you can see the 'metro' object that provides timing from the master clock source, a 'transport' object that outputs bars, beats and 'ticks' into those three number boxes, and then the 'before_mr' object that contains all of those hidden-away 'if' statements. The 'switch' object selects the desired timing, and after a special 'counter' object, you can see the top of the 'step sequencer' object.

Inside the 'before_mr' patcher? I'm not one to hide stuff away, so here goes:


If you look across the lower part of the patch, then you should find the 'every bar' output, (fourth from the left) and above that a blink object, some tidying up, and then an object with 'if $i1==4 && $12==360 then 1 else 0' inside it. This is the 'just before the end of the bar' requirement turned into an 'if statement' using MaxForLive terminology - so '&&' means 'AND', and '==' means 'is equal to'. You might like to try and work out how the other outputs are generated as well.

There's a trap with this 'just before' approach, and it happens in the very first step. As always, you should consider the 'edge effects', and this is one case where I didn't think enough about the initial step. The 'before_mr' patcher outputs a 'bang' event just before the end of the set time period: from every 8th bar to every quarter beat. So what happens in the first step? If we take the middle case of 'every bar' then the 'bang' event will not happen until just before the end of that first bar. This means that until that happens the counter is in the 'reset' case, which is a count of zero, so the step sequencer stays on whatever step it was before we started Live's transport running. Only when it gets to just before the end of the bar will a bang event occur, and the counter will increment, and step 1 will begin - almost a whole bar late! What actually need to happen is that the counter needs to be set to step 1 at the beginning of the bar, not just before the end. This can be achieved by using a 'timepoint 1 1 0' object, which produces a bang event when Live's transport starts running, and if this resets the counter, then step 1 starts correctly. This means that the first step is slightly less than a bar long in this case...

That's what is happening inside, now let's look at outside.

Using MIDIdifferentONE



The plug-in has has three sections, and from left to right, these control the setup, the step sequencer, and the value output and mapping. On the left hand side, the top shows the beat indicator and count, where the blinker can also be clicked on to reset the sequencer. Underneath that, the pop-up menu allows selection of the step sequencer rate: from every 8th bar, down to every quarter note (slow to fast, with the fast setting being the 'classic' S&H filter modulation effect). The cluster of thirteen buttons are used to fill the step sequencer, and the 'Random' button generates a different pattern each time. The 'Scramble' button jumbles the sequence of the values, and below it is an 'Undo' button that will restore the last edit you made - it isn't very sophisticated and there's only one level at the moment.

The middle section is the step sequencer. Every fourth step is highlighted in white instead of light purple, and the bar at the top can be used to set the length and looping points. The default is 16 steps from 1 to 16, but you can vary it to anything to 2 steps from 1 to 2, to 16 steps from 1 to 6, and back to 2 steps from 15 to 16. When you stop Live, then the step sequencer area can be edited 'live' using the mouse - just hover the mouse near the top of one of the step 'circles' in the middle 'step' section,  and that value will be displayed. Click and you can change the value of the step. If you move the mouse across the step sequencer area then you can 'draw' in the values very quickly. - the background of each step will go grab as the mouse selects that step...

So the workflow for setting the controlled parameter is now very simple: Stop Live playing, and then you can set the step values as you want with the mouse and they will be saved. Note: If you select one of the preset patterns, then you will lose your edits!

The right hand side shows the output value for each step, as well as a vertical bar indicator. The 'Normal'/'Invert' switch inverts the value, so high values become low and vice-verse. The 'Offset' and 'Depth' controls allow the value to be adjusted to suit the target parameter. Finally, the 'Unmap' button undoes any pre-existing mapping of the value to a parameter inside Live, and the 'Map' button allows you to mp the value to any available parameter inside Live.


Here is the 'classic' LFO S&H filter mod setting, except that it repeats, the steps can be edited, and it can be slowed down to as slow as once every 8 bars. This example is set for every other bar, and so the end effect sounds like a different setting (or different preset) every 2 bars. And switching to quarter beat cliche is just a single pop-up menu selection, whereas you would need to edit the timing of every value in a clip envelope.


Here's the output remapped to an instance of Analog inside Live, where the controlled parameter is the octave for Oscillator 1. The Offset control is set so that the centre position is no stave transposition, whilst the depth is set so that the oscillator goes up and down by one octave. LFO modulation of the octave control with an 'S&H' type of waveform would not give you any way to edit the waveform, but MIDIdifferentONE lets you set when the octave transposition happens.


Something that you may not have tried before is to change the filter type. Doing this every half beat is quite extreme, and the sound of a filter jumping from his-pass to band-pass to low-pass quickly is unusual. Remember that unlike an LFO doing Random or S&H waveforms, you can edit every step of the sequencer, so you can get exactly the results you want for each step.

ONE?

After a long run of 'hex' MaxForLive plug-ins, you might not be surprised by the 'ONE' suffix to the name of this device. I can neither confirm nor deny the future existence of any multi-channel versions of this utility...

Getting MIDIdifferentONE

You can get MIDIdifferentONE on  https://www.maxforlive.com/library/device/5805/mididifferentone-mr

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 MIDIdifferentONE 0v01 would probably require an LFO plus a step sequencer, and a Utility module to do the scaling, giving a total of about 3 ME (without all the stored patterns, of course).

And here's a link to click on if you find my writing informative:

Monday, 16 September 2019

How I Create Electronic Music - the Tee-shirt!

I have too many tee-shirts. Many years attending various hi-tech music events, plus more than 25 years of anime conventions, has left me with a huge choice - and a full wardrobe! But there's always room for another tee-shirt, especially when I don't have one that carries the 'statement' that I want to make...

Bands

When I first started going to concerts back in the 1970s (Camel, then Tangerine Dream at the Liverpool Empire), it was easy. You had already bought the vinyl album, so you bought the tour programme and the tee-shirt at the concert. Nowadays merchandising is more sophisticated, and available all the time, online:

https://www.merchbar.com/rock-alternative/nine-inch-nails/nine-inch-nails-t-shirt-classic-logo-nine-inch-nails-t-shirt


In these days of pirating and grey market, finding a source of 'non-fake' merchandise is important, because otherwise your money isn't going to the band, so choose your source with care!

Many concerts, and hence I have lots of tee-shirts from touring bands of the last 50 years...

Brands

Then you move to brands, and once again there are now ways to get branded tee-shirts online:



Yep, I have one or two 'branded' tee-shirts from synthesizer manufacturers (plus a tour jacket from Opcode) and various other hi-tech music companies... As before, you can buy 'generic' tee-shorts with all sorts of brand names printed on them, but buying direct from the brand itself ensures that you are supporting them, and not someone else with no connection...

Original


Then I decided that I wanted to make a 'statement', and so I started getting tee-shirts that 'said
something interesting and different':



This combines neat graphics with a relevant message, and I always like to support cottage industries. Genki Gear turn up at lots of anime conventions, and have a lot of very nice tee-shirts - thoroughly recommended! And this time, you are going straight to the designers!

Viral


Sometimes the message is part of a viral community. Adam Neely is a YouTube vlogger who covers lots of current music topics from a very informed viewpoint, and is just generally an interesting musician. Not unexpectedly, he has an on-line store that sells: a tee-shirt:



Now this is a message that gets closer to what I'm looking for, and of course I bought one from Adma's store on Teespring.com. Having a classic jazz ornamentation on display says a lot, and it only really means something to people who can 'read' it, understand what it means, understand who it is a reference to, understand who you watch on YouTube, and it kind of makes you part of a viral community of people who watch Adam Neely's videos on YouTube. 'Do-be-do-be doo be dooooo...', as it says. For everyone else, it just says: 'Music', which is okay too. But two messages in one tee-shirt is just uber-cool!

My Tee-shirt!


And finally, we get to what I was looking for all this time, but never found, and so I made it myself. A tee-shirt that sends the message that I make electronic musisc, and says how I do it. I did consider using a screen-shot of a DAW, or a plug-in (one that I've written, for example!), but in the end, these were just branding for someone else, and not me and what I do. So the end result is direct and to the point:



If you are reading this blog, then you probably make electronic music, and you may well have been searching for something that 'says what you do'. Well, you can now get a tee-shirt that says what you do, for everyone to see!

Following from the online selling theme that underlies this whole post, then there's an online store for Synthesizerwriter as well:


There's one hopefully unusual aspect to this tee-shirt online selling page, which isn't immediately obvious. Notice that there are two colour options for the tee-shirt material itself: black and white, but I only produced one graphic for the printing, and that is in white. So if you select the white tee-shirt, then what you get is a white tee-shirt with white printing on it. This leaves you free to colour the tee-shirt material in any way that you like (dye it, tie-dye it, just let it get very grimy or dirty...) and the message will gradually appear... The preview that you get on the web-site kind of warns you that you don't get a white tee-shirt with black printing, of course!

Getting the 'This is how I create...' tee-shirt

Just visit this web-site. No obligation. Enjoy!

Modular Equivalents

For the first time in a long while, there isn't any easy way to implement this in a modular synth, so this gets my first 'infinite' score: this will require Infinite ME.




Tuesday, 3 September 2019

Frequency-to-Colour display in MaxForLive for Ableton Live

It all started with an enquiry on Facebook. Kovacic Matej asked about how to display 'human chakras, colors and their frequencies' in Ableton Live. After some discussion about spectrum analyser plug-ins, a link to a web-site was given and the thread went quiet...

As part of my occasional 'fix a random query on an Ableton forum' series, I have created a MaxForLive plug-in for Ableton Live called AUDcolours that allows the generic mapping of frequency to colour. To make the specific example in the thread easier, plus for musical use, there are two presets: one is the 'human chairs' that was given in the Facebook thread; the other is the musical notes  for one octave - CDEFGABC. There are seven (of course!) additional preset memories for your own mappings.

AUDcolours


There are quite a lot of controls to enable generic mapping of frequency to colour. Each of the eight vertical bars on the left side of the AUDcolours plug-in has a frequency control, Q or resonance control, an audio thru/mute switch (X) and a colour swatch. Each vertical bar can be tuned to any frequency from 10 Hz to 10 kHz, and the width can be set using the Q (resonance) control - low values give wide responses, whilst high values give narrow responses. A medium setting is probably best for initial testing. In the screenshot above, the meter is showing that a frequency of about 261 Hz is being input, and the bar's background has lit up with Red (as set by the swatch UI object). The audio thru/mute switch allows you to listen to one or more specific bars when the X is lit up with bright purple. The swatch is a user interface device that lets you set the colour of the vertical bar.

On the right hand side of AUDcolours are common controls. The vertical group of squares are the usual MaxForLive preset memory slots. Red means empty, White is the current selected preset memory, and Grey means that there are values stored inside the preset memory slot. Underneath the memory slots are the two fixed presets: Chakras and CDEFGABC. On the far right hand side there is a Wet/Dry mix control for the audio, then the Threshold rotary control that determines how loud the input needs to be to lit the vertical bar up with colour (Start high and reduce until you get the triggering just working. Too low will trigger more than one bar!). There are also common controls that can show or hide the rotary controls, the audio level meters, or the colour swatches. Finally, in the lower right hand corner, there is a common control for the audio thru/mute toggle controls (X) - this turns all the Xs on or off at once. If you set Wet/Dry to fully clockwise (100%) then you will hear only the bars which have an X lit up.

Getting AUDcolours

You can get AUDcolours on https://www.maxforlive.com/library/device/5686/audcolours

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 AUDcolours 0v01 would probably require eight band-pass filters, with eight Utility/Logic modules to do the threshold detection, and eight colour panels to give the colour outputs to give the same sort of functionality, plus a voltage source panel to give the common control over threshold, giving a total of about 25 ME.

And here's a link to click on if you find my writing informative:



Saturday, 27 July 2019

Several M4L variations on Random for controlling parameters in Ableton Live

I am my own worst enemy. I find it difficult to resist making comments on some Facebook posts, and I find it hard to not create MaxForLive devices when there isn't one available as part of the comment.

Which is where MIDIrandomA comes from. Andxre Andre posted in the 'Max For Live Users' group that it seemed like:

'...the max for live essentials LFO... feels like it always gets to the same values a lot'.  

 And I commented:

Random’ is a difficult topic. People have a number of expectations that do not necessarily match to a true random source. There have been published papers describing the differences between a true random source and what people perceive/expect. People seem to expect no repeated/similar values, no small differences between successive values, and no repeated similar sequences, and more... Some ‘random’ sources are actually processed so that they fit better with expectations - Apple’s iTunes playlist generation and shuffle, for example. 

And I kind of committed myself to making a less random 'random generator'...


MIDIrandomA




MIDIrandomA is the result. It isn't perfect (the repeated sequences' bit isn't included yet...), but it does provide 'constrained' random values that can have the sort of characteristics that Andxre Andre is looking for. As always with my rapid development devices, there's probably a lot that can be improved, so feel free to let me know what you think.

MIDIrandomA is a random 'control voltage'/number/value source. It has three different types of random noise, instead of the more usual single source, and so provides comprehensive control for exacting requirements.

Type A has four rotary controls, and provides detailed control over the gain, the quantisation, the smoothing (logarithmic accumulation), and the thinning (non-linear amplification).

Type B is the classical 'Random Walk' and only provides control over the maximum size of the step between one output and the next.

Type C is the opposite of B - no repeated adjacent values are allowed, and the delta size (difference between successive output values) is the minimum that is allowed.

The generation of random number values (0-127) can be triggered by a free-running LFO (Rate, =Not Synced=), or one of several MIDI note or velocity triggers, which work from notes on a piano-roll Clip in the same track.

The output can be mapped to any co-operating control in Ableton Live.

Getting MIDIrandomA 0v01

You can get MIDIrandomA on https://www.maxforlive.com/library/device/5604/midirandoma

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 MIDIrandomA 0v01 would probably require three different npise/random generators, plus some post-processing (non-linear amplifier, filter/accumulator, not sure about the repeated value removal...) to give the same sort of functionality, plus a little bit of switching to do the 'Type' selection and the sync options, giving a total of about  10 ME.

Update


There's now a three output version of this, called MIDIrandomABCmr02. You can learn more about it here:

http://blog.synthesizerwriter.com/2020/04/three-mappable-outputs-of-controllable.html

And here's a link to click on if you find my writing informative:


Thursday, 25 July 2019

Notes on troubleshooting video graphics cards on a Mac Pro 5,1

So there I was, working on something other than this blog, using an old Operating System (macOS Mavericks, because I needed to use an old utility), when suddenly my monitor went blank. Now this normally happens when I've not been active enough and the screen-saver (my own, written in Quartz Composer) kicks in. So, as usual, I just pressed the space bar and waited for the screen to re-appear. But it still looked like this:


The screen didn't re-appear.

So I pressed the space bar again. Nothing. The screen looked like this:



And then my monitor started reporting that my Mac Pro wasn't outputting video... I got a sinking feeling in my stomach...

After swapping the miniDisplayPort to HDMI cable, and outputting my laptop screen to the monitor, I had established that it wasn't the cable, or the monitor. Which reminds me:

The Synthesizerwriter Trouble-shooting Guide

1. Sometimes things just fail. It isn't malice, and it isn't deliberate, and anthropomorphising computers and musical devices is almost always a bad idea.

2. Check the power before anything else - this should be your zeroth task - before doing anything else. I always remember the ARP Odyssey Service Manual, where the section (9?) called 'Power Supply Considerations' had a line drawing of a bewildered technician with an opened-up (and very quiet) synthesiser on a bench, and way off to one side was a mains connector not plugged into a mains power socket. Trying to get a sound out of a synthesiser that isn't connected to power can be very difficult...

Note that the 'Check the power' also applies in reverse - if you are working on anywhere near mains voltages (like in the power supply), then you should not have the device plugged in. In fact some people go so far as to put electrical tape over the socket. One other thing related to safety when working with mains voltages is often forgotten -

'Always make sure that you can see the plug that isn't in the socket'. 

If you can't see the socket, then you don't know if the plug is in the socket, and you might be about to electrocute yourself. If you can see the socket, but you can't see the plug, then someone else may have plugged the device into another socket, and again, you are about to electrocute yourself. Only if you can see the device, the cable, the plug and the socket are you probably safe - although experienced engineers will also keep checking the the plug is actually connected to the device they are working on!

In the case of a monitor, check that it is powered up, particularly if it has very light-touch switches. In the past, I had a monitor that suffered from the Samsung Capacitor problem (more analysis), and so was prone to suddenly losing power (and here the display!), so this was my automatic first assumption - but see 4 below...

3. Check the cables first. There are many failure modes for cables these days. The casters on many 'home office' chairs can do nasty things to the insides of cables and not leave very obvious signs of the damage until you look really closely. Pulling on cables in various ways can stress the wires inside, and it doesn't matter how accidental the trip was, or how much you enjoyed it. Pulled cables can also affect sockets, and there's the famous 'wiggle' test for those.

4. Check with a known good source. So if a mains power socket isn't working, then check it with a mobile phone charger and see if your mobile phone charges. (A table lamp, a hairdryer, and many other pieces of electrical equipment can also be mis-used as a piece of test equipment...) If there's nothing appearing on a screen, then find another source - hence using the miniDisplayPort on my MacBook Pro laptop and seeing if the monitor displayed the mouse pointer as I moved it around. For amplifiers then a microphone can be a good source of sound, but remember the golden rule of amplifiers: 'Always start with the volume turned all the way down, and turn it up slowly, ready to quickly turn it back to off if necessary'. On a monitor, then pressing one of the 'setup' buttons will display the RDTN UI (Ridiculously Difficult To Navigate') and so confirm that the monitor is at least capable of displaying something. There again, on many monitors the 'Power' LED is so bright that many people cover it with Blu-Tak (or similar slightly sticky stuff) and then press their nail into it to create a tiny hole that lets only some light out - which creates an interesting problem when it gets pushed down and the hole goes away, leaving no visible LED.

5. Try turning it off and back on again. This works rather more often than you might imagine!

In my case, the monitor was connected to mains power, the LED mostly covered with Blu-Tack was just about visible, the cable was good, and the laptop and RDTN UI both showed things on the screen. But from the Mac Pro 5,1, all I got was the well-known piece of art often titled: 'Black Cat In A Coal Cellar'.

6. Google: 'Sudden <symptom> from <device>' and see what it says. In my case, 'Sudden loss of video from Mac Pro 5,1' quickly got me to a Mac Graphics Card Specialist retailer, where a few minutes of pop-up chat (usually in the lower left or lower right corner of the web-page) quickly confirmed my worst fears. 'Yep, sounds like video card failure. We've had quite a few of those recently.' Using web-site chat is a good approach to this type of diagnosis, because they don't hear you gasp when you realise that things are about to get deadly serious and potentially expensive, and secondly, you can't hear if they make whoops of delight and wild celebration when they realise that you are about to spend lots of money with them (or another retailer - I am not going to mention the really cynical method of mis-using a helpful chat person on an expensive site when you are planning to eventually buy it from a cheaper source that has naff customer service.

7. Write down what you do and what you find out as you go. Putting it off until later is never a good idea because human beings (and any other sentient organisms reading this blog) often have amazingly  unreliable memories. Of course, you could always write a blog post about what happened...

Back to the main story...


So the monitor was powered up, the cable was ok, the monitor displayed the screen from my laptop, turning it off and on again made no difference, and an external expert had confirmed the diagnosis. When I used to be a service engineer, this would be referred to with words like 'The Monitor Display appears to be Sub-Optimal'.

Now the Mac in question is a Mac Pro, of 2012 vintage, a '5,1' 'Twelve Core', and one of the last first generation towers before the second generation 'Cylindrical' Mac Pros appeared. Just recently, the topology has returned to the tower format with the third generation, which has been, imho, unkindly labelled as 'The Cheesegrater' by some commentators. All of the first generation Mac Pros came with a Radeon 5770 video graphics card as the default output option, although there were various other more-powerful cards available. In my case, it was a 5770 card whose GPU was now pushing up daisies somewhere on a different plane.

At moment like this, there perhaps ought to be a step number 8...

8. 'Optimise your options'. By which I mean that instead of just replacing the faulty part, you look to see if there are any alternatives and maybe engage in some future proofing rather than just maintenance. Your insurance may affect hat you do, of course. In the case of video graphics card, then a card from 2012 is very likely to have been superseded, and that means that the sources are going to be second hand, used cards, not new ones. There's a word that almost always describes what happens when you start to look at alternatives in these circumstances, and that word is often 'complicated'.

This is where an 'escalation sequence' comes in. You start at the simplest solution, and work up to more complex solutions, noting down the advantages, disadvantages, consequences and cost of each. In most cases, it goes something like:

a. Repair the broken part,
b. Replace with a used part,
c. Replace with a new part,
d. Replace with a better alternative part
e. Forget the part and replace the whole system with a new, better alternative

Sometimes the order isn't quite like this when you consider all the pros, cons, consequences and costs - and weighting them can be very awkward to decide (Applying weights to pros and cons, etc., sounds like Risk Analysis, and that is definitely a topic for a different blog!). Solution C is often the easiest logistically, and solution A can often be slow and expensive. Don't forget that replacing with an alternative can also require additional setup, changes and other side effects, so the 'Consequences' column can be very important.

In my case, repair didn't seem to be worthwhile, given the cost of second hand 5770 video graphics cards. New 5770 cards don't exist, so that removed solution C, and solution D would be good for when I need to upgrade to the Mohave version of macOS, but I'm still waiting for Ableton Live to be 'officially compatible'... This left solution B, and it looked like my best option was to gradually move forwards and wait until things forced me to Mohave. So I found a specialist 'Mac video graphics card supplier' that sold 5770s and did the usual on-line checking: they had more than 10 in stock, and there were plenty of FAQs and Installation information on their web-site. It also turned out that this supplier was a good potential source for solution D in the future, because I am sure that I will eventually need to go to Mohave (and beyond), and the Radeon RX 580 looks like a good contender, if a little pricey - and there were quite a lot of 'consequences' to consider s well.

I'm not going to distract you with some of the interesting 'consequences' aspects of changing video graphics cards, because they are so dependent on your hardware and operating system, but I would stress that filling in a escalation table in detail can be very useful when making a decision and planning your route forwards. In my case, the video card failing left me stuck in a very old OS, and without a video card, then your computer is quite tricky to use. Installing drivers, for example, for a replacement card is not easy when you don't have a display!

2020 Follow-Up

So, in early 2020, I got the black screen again. This time, changing the video card didn't fix it. The Mac Pro 5,1 seems to be officially dead. Anyone want it or the 5770 cards? Try making me an offer!

Links

For new purchases, then I always go for AppleCare. It has dug me out of bad places so many times now that it is an essential purchase component for me.

For generic Mac stuff, then I have been using Mac Upgrades for many years. They are knowledgable and helpful. (The URL comes up as '2nd Chance PC Ltd ' in some browsers, so don't panic!)

For specialist (and used) video graphics cards, then Mac Store UK have access to customised cards from experts like MacVidCards.com, but remember that I'm not a video professional and have only bought one card from them.

As always, suss out your sources carefully before parting with money!


Here's a link to a simple 'Escalation Table' spreadsheet...

And here's a link to click on if you find my writing informative: