Saturday, 24 December 2011
This post has a bit to do with the music virtual instrument plug-in I am now using, but the term Round-Robin has a direct software coding application, so I decided to post it up, just like I did on the rest of my blogs
In the course of reading the manuals of EastWest virtual instruments plug-ins, I keep coming across the term "round-robin".
What Round-Robin Means
At first it seemed to be a recording technique, or some kind of microphone set-up. I searched google.com for "round-robin mic techniques", and found nothing. Closest results relevant to audio processing was a a "round-robin" setting in protools configuration that allows Protools to be configured to read/write audio data from an array of hard-disks to ensure stability of glitch-less recording.
After I watched the videos from Youtube (from the previous blog entry), they used the term to describe the way samples are triggered.
Here's what I found on Answers.com:
and from wikipedia.org:
The original meaning is to describe the signing of a petition in a way that signatures are passed around in a circle to make it impossible to know was which signature belongs to whom.
In sports terms, it is the matching of every contestant against every other contestant.
In programming terms, it is the simplest scheduling algorithm that for every time a resource is needed for a task, the round-robin algorithm selects which supplier to pull a certain resource from, out of a list of resource suppliers. This ensures that every resource provider is used the same number of times over a given period. This means that if there are 4 resource providers, each will be taxed equally over a period of time.
As I am re-phrasing this definition, I am imagining 4 missile barrels triggered by software, controlling which barrel to fire each time. If there is a need to continuously fire off 50 missiles, we could use the round-robin method to assign which barrel to fire each missile off.
An extreme case of imbalanced load assignment would be to fire all 50 rounds from tube 1. That would leave the other 3 tubes totally idle. Therefore an example of round-robin style assignment would be to fire off tubes in the sequence of tube numbers 1, 2, 3, 4, 1, 2, 3, 4, etc... There could be a more complex assignment based on random values, like 1, 4, 2, 3, 2, 4, 1, 3, etc... It could even be based on rules. If each tube takes a slightly different time to reload, our algorithm would have to query which tube is available and loaded, then assign that tube to be the next to fire.
The aim is to balance the load on each of the resource provider (this is called load-balancing). Therefore at the end of a fixed duration, the number of times each resource (or tube) is being used, would be about the same. (This duration could be at the end of the hour, or at the end of 50 rounds of firing, or at the end of a day, etc).
I think the sports and programming terminology for round-robin is quite similar. It ensures every request (or sportsman) is matched with every other resource (or opponents, in sports) in the same number of times of events that calls for the resource (or matches, in sports).
So how does that apply to the virtual instrument plugin situation?
Round Robin in EastWest's "Play" Engine
It seems that EastWest is employing this round robin kind of task-versus-resource assignment to allocate which samples to trigger when you issue a MIDI note event (ie, when you hit a key on the MIDI controller).
This is one of the EastWest videos showing the Fab Four virtual instruments library and its instruments in great detail. This is part 2 of 3.
Watch the video at 2mins 27secs, when round-robin is mentioned. It is used to trigger the samples from alternate takes of the same note to play, when you repeatedly play on the same note on the virtual instrument.
At 1min 09secs, the hi-hats from the drumkit when played, will automatically trigger off left- and right-handed sampled hi-hat hits to play when you play that midi note repeatedly.
That is one of the many supported features of the EastWest play engine. Its really simple and intuitive, but yet it has all the features you'll ever need from a virtual instrument.