Those present at the St Giles Cathedral, Edinburgh performance by Mieko Kanno of my hyperboles 2 (“until the cherries burst in the orchard”) on 20/5/16 were very patient. I told the audience that this violin plus computer piece would last 52 minutes but after the performance Dario Sanfilippo, who did the lights, told me it was more like 62 minutes. That’s about 20% longer. I can’t say I noticed because all I see on the iPAD performance interface used to control the electronics is the current bar number. Perhaps because this was the first time we’ve performed the long version I didn’t quite yet have a feel for the ‘natural’ duration—or maybe I was just spaced out: it is meditative by design, after all.
The performance is driven by a MIDI file played using the [seq] object in MaxMSP. Knowing from experience and reputation the unreliability of the timing accuracy of the [metro] and [tempo] objects, I suspected them of being the cause of timing variance, though I never would have expected such extremes. A couple of days after the performance I ran the piece in demo mode and it lasted 58 minutes. The usual trick of putting the Max scheduler into overdrive and even into the audio interrupt thread made no difference.
What did make a difference though is driving the sequencer with a phasor~ so that it runs at signal rate. You see, the problem with a control-rate metronome like [metro] or [tempo] is that any timing error is cumulative—you never get back what you’ve lost (or give back what you gained).
If you want control over the [seq] object once it’s started running you’ve got to start it with a -1 message then drive it with a tick message. In order to play back at the MIDI file’s stored tempo you must send 48 ticks per second (not beat). Now that has to happen at control rate, which is why it seems logical to do it with [metro] or [tempo]. But driving [seq] with a phasor~ at signal rate—yet converting to control rate via the [edge~] object just before sending the tick—means that even if the control rate scheduler starts to lag, then at least the signal sent by the phasor~ won’t, so any error is in the form of jitter rather than being cumulative.