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

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:


It didn't.

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!

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:


  









Sunday, 7 July 2019

Programming some new presets for Sprike...

Every so often, I program some sounds for a synthesiser that I am totally unfamiliar with. It provides a break from revoicing new synths when I first get them (yes, I really do that!), and it is a good way to learn about user interfaces, how to present things so that they are easy-to-use, what needs to be in a user manual, and to learn about new and unusual synthesisers.

You can see a previous example of this activity here, from when I did some sounds for the Amazing Noises Pulsor synthesiser (a MaxForLive plug-in for Ableton Live), and I also wrote my own 'alternative' manual for it.

Sprike



In contrast, and as a break from all of the MaxForLive and Ableton Live stuff, this time I chose Cognitone's Sprike, a free additive virtual analogue synth plug-in that is derived and extended from Tunefish4 (and 3...) and which is available in VST format for 64-bit Windows, and VST and AU formats for 64-bit macOS. Linux isn't directly supported, but there is some compilation information for the earlier Tunefish4 project on github. Cognitone's flagship product is arguably the 'intelligent assistant' called Synfire, which is kind of 'one layer up' above a DAW - it allows sophisticated control over the composition or 'prototyping' of music via smart editing of harmony. Powerful and deep, it is a million mile away from the auto-accompaniment fake sheet and chord utilities that I remember from the recently MIDIfied 1980s and 90s.

Sprike looks like many other VSTs. The User Interface (UI) is divided up into the sort of panels that a real piece of hardware would have, has a global section at top-left, and a virtual keyboard along the lower edge. Quite a lot of the panels can be disabled, and they go dark blue when this happens. The right hand side has the modulation 'matrix' (8 sources, 29 destinations, and 8 modulation depth controls), plus an interesting effects 'stack', which allows up to 10 of the available effects to be placed in series (a great idea that I wish was more widely adopted in plug-ins).


Sprite uses an additive generator as its main sound source (it also does various flavours of noise!). There are quite a lot of controls, and these use additive synthesis to fill a wavetable, and then that wavetable is what produces the sound output from the generator. Trying to provide an intuitive and minimal-number-of-controls interface for additive synthesis is not easy, and Sprike's solution is pretty good - there are not that many controls, and the graphic underneath shows the spectrum on top, and the waveform underneath. A little bit of experimentation should rapidly get you up and running and making sounds, although getting fully to grips with the generator may take some time.  The two rows of buttons are for the amount of detune for what sounds like two wavetable players, and the octave switching. When I was programming Sprike, I left the octave buttons in the default '0' position, rather than produce 'bass' sounds by just transposing down by a couple of octaves...

There are four filters, and they seem to be connected in series, although you can switch them in and out (but not via the modulation matrix!). There are 2 LFOs, and 2 ADSR envelope generators, and finally seven effects: Flanger, Reverb, Delay, EQ, Chorus, Vowel Formant Filters, and Distortion. Basically, you get more panels than you would expect in a basic additive synth, and so the description of 'additive virtual analog' is a much better description - you get 'subtractive-synth'-style filtering and envelopes instead of the 'envelope per harmonic' controls that traditional additive synths give you.

For something which is free, and which Cognition describe as an experiment in writing small and efficient machine code, then I hesitate to criticise Sprike in any way, because my assembler skills stopped with the 56000 DSP from Motorola many years ago (and the 6502/8080 before that). However, whilst programming a few presets, I did find a few things that are useful pointers to things that anyone who makes a synthesiser plug-in should consider...

First, there isn't much in the way of user documentation (that I could find - I would love to be wrong!). There is a brief Tunefish user manual on github, and some additional material on the tunafish-synth.com web-site, but you do need to do a lot of iterative exploring of some of the controls to get a feel for what they do.

Secondly, the additive generator doesn't make it very obvious what the programming model is. There are controls that mention parameters like 'Harmonics', 'Drive' and Spread', but you may need to spend some time to learn how to exploit them to get the sort of raw generator sound you want. having said this, I am still impressed with the small number of controls. I have a Kawai K5 additive synth, and this has the aforementioned 'traditional' 'envelope per harmonic' approach, which is a huge number of controls!

Thirdly, the volume control defeated me. There is a global volume control at the top left, but towards the lower right corner there is another 'Volume' control which is associated with the 'Pan' control, and so my assumption was that this was the main output volume control for a preset. But it doesn't seem to work like this, and I'm not sure if it is connected to the global volume control. Anyway, it doesn't really stop you from programming sounds, it just means that sometimes you need to be aware that you may need to tweak the volume control - and tweaking synth controls is not exactly an unknown of unusual activity!



Finally, the modulation values aren't exactly intuitive. If you choose an LFO as the modulation source  (look at LFO 1 in the screenshot above) and then set it to modulate the 'Scale' control in the generator, then full modulation seems to happen when the mod matrix control is set to 70. Whilst useful for ova-modulating controls, it took me a while to figure it out, and I dislike 'magic' numbers in user interfaces - of course, having programmed MIDI editors for the Kawai K5, then I'm very familiar with 'special' 'secret' numbers, because the Kawai MIDI implementation uses them!

Presets


In the end, I produced 128 new presets for Sprike, and a quick search of the Interweb gave me the impression that there are not very many easily available, so I'm making mine available for free (as usual). There's a reasonably wide range of sounds, albeit without any octave switching (so you can decide which sounds you want to be 'bass' sounds!) and a strong bias towards synthetic and away from imitative. Use at you own risk (some of the effects stacks seem to overload sometimes...), but hopefully 'enjoy!'



Sprite has a simple drop-down menu for selecting presets, plus 'Prev' and 'Next' buttons, plus copying and pasting facilities, so it is obviously intended to be programmed! The presets themselves are just plain text files (which may not be as straight-forward as you imagine for some Operating Systems) with parameter names followed semi-colons then the value per line.


Getting the presets


You can get the Sprike presets from here, for free (it is a 143 Kbytes zip file). Unzip the file and put the files into a folder called 'bank1' (or higher, as you wish) in the appropriate 'Presets/Sprike' folder inside your OS's filing system - as shown above for a Mac...


Buy me a coffeeBuy me a coffee