Mobius Synchronization

January 2011


Contents

1Introduction
2Concepts
2.1    Start Point and End Point
2.2    Related Sizes
2.3    Cycles and Subcycles Review
3Loop Sync
3.1    Empty Loop Action = Record
3.2    Empty Loop Action = Copy
3.3    Empty Loop Action = Copy Timing
3.4    Other Ways To Copy Loops
4Track Sync
4.1    Selecting Empty Tracks
4.2    Empty Track Action = Copy
4.3    Empty Track Action = Copy Timing
4.4    Track Copy Function
4.5    Track Copy Timing Function
4.6    Track Sync Mode
4.7    Changing the Track Sync Master Track
5Host Sync
5.1    Synchronizing Stop
5.2    Recommended Track Configurations
6MIDI Slave Sync
6.1    Configuring MIDI Devices for Slave Sync
6.2    Setting the Sync Mode
6.3    Recommended Track Configurations
6.4    MIDI Record Pulsed
7MIDI Master Sync
7.1    Configuring MIDI Devices for Master Sync
7.2    Sync Mode = Out
7.3    Sync Mode = Out Manual
7.4    Recommended Track Configurations
7.5    Controlling The Tempo
7.6    Adjusting The Tempo
7.7    Controlling Plugin Host Tempo
7.8    Mute and Pause during MIDI Master Sync
8Drift, Dealign and Realign
8.1    The External Loop
8.2    Drift Correction
8.2.1        Drift Resync Frames
8.2.2        Drift Correction and Track Sync
8.3    Realign
8.3.1        Realign with Track Sync
8.3.2        Realign with Host Sync and MIDI Slave Sync
8.3.3        Realign with MIDI Master Sync
8.3.3.1            Out Sync Realign Mode = Retrigger Loop
8.3.3.2            Out Sync Realign Mode = Send MIDI Start
8.3.4        Realign Alternatives - MIDI Start and Mute MIDI Start
8.3.5        Realign Alternatives - Sync Start Point

1 Introduction

Unless you plan to record only one loop into one track, you will eventually be faced with the problem of synchronization. At a high level, synchronization is the recording multiple loops and tracks that will play with a consistent rhythm without drifting apart. If you like to record "ambient" loops you may not want synchronization at all, and that's fine. But most users will eventually need some form of synchronization.

There are several types of synchronization available:

Before we describe the synchronization techniques in detail it is important to understand a few concepts: Start Point, Related Sizes, Cycles, and Subcycles

2 Concepts

2.1 Start Point and End Point

You can think of the Start Point as simply the beginning of a loop. The loop normally plays from the start point to the end and then repeats. We also use the confusing term End Point. You can almost always think of the start point and the end point as being the same thing. It is that moment in time after the last sample of the loop has played and before we have gone back to playing the first sample in the loop.

If you get deeper into Mobius scripting you will find that there are actually some subtle differences between start point and end point, but you do not need to be concerned about that to understand synchronization.

2.2 Related Sizes

When we say that two loops have a related size it means that their sizes have an exact mathematical relationship that will allow them to play together consistently forever. In the simplest case two loops may be exactly the same size. But if one loop is exactly twice as long as another the sizes are still related and they will play consistently. The smaller loop will play twice each time the larger loop plays and this pattern will continue forever.

In mathematical terms, loops with related sizes have a common factor. There is some fraction of the loop that can be multiplied to equal the size of all of the related loops. For example, assume we have three loops, one is 2 seconds long, one is 4 seconds long, and one is 8 seconds long. Although the loops are not the same size, they will play together consistently because they share a common factor of 2 seconds. When the 8 second loop plays once the 4 second loop will have played exactly twice and the 2 second loop will have played exactly 4 times. This pattern will repeat consistently forever.

Now assume we have a loop that is 2 seconds long and one that is 3 seconds long. These loops also have a related size, the common factor is 1 second. What is interesting about this relationship is that when the 3 second loop is finished playing for the first time the 2 second loop will have repeated once and will be in the middle. The next time the 3 second loop plays it will sound different because the 2 second loop is starting from a different location. When the 3 second loop finishes playing a second time, the 2 second loop will be at its start point again. This pattern will continue consistently forever.

The set of loops in the first example (2, 4, and 8 seconds) were all even multiples of the common factor of 2 seconds. Each time the longest loop plays the combination will sound the same.

The set of loops in the second example (1, and 3 seconds) were not even multiples of the common factor of 1 second. The second time the 3 second loop plays it will not sound the same as the first time it played because the two loops are out of phase. If you have a set of loops that are not all even multiples of the common factor it may take many plays of the longest loop before they are all once again in phase. This can be used to create interesting polyrhythms. You can also create a set of loops that when played together result in complex evolving patterns that continue to change over a long period of time. You can also create a bunch of unlistenable noise.

2.3 Cycles and Subcycles Review

When you record a loop for the first time it will have one cycle. You add cycles to a loop by using functions such as Multiply and Insert. The easiest way to add cycles is by using the Instant Multiply 2 function, each time you use this function the loop is copied and appended to the end of itself, and the number of cycles is doubled. The cycle count is the number of times the original loop has been multiplied.

For example, record a loop about 2 seconds long, then execute the Instant Multiply 2 function. The loop will now be 4 seconds long and contain 2 cycles. From the listener's perspective nothing has changed, they continue to hear the original loop repeating over and over. But structurally the loop has changed, it now contains two copies of the original loop. One use for this technique is to record a short loop representing a measure or two of a rhythmic pattern. Then multiply this loop by 4 or 8 to create a longer loop with several repetitions of the pattern. Finally use the Overdub function to record a long bass line over the repeating rhythm pattern.

A subcycle is simply a division of a cycle. It is defined by the Subcycles preset parameter which defaults to 4. When a loop is first recorded it will have one cycle and 4 subcycles which you can see as white tick marks under the loop meter. The number of cycles in a loop will stay the same until you change the loop length with functions like Multiply. But you can change the number of subcycles at any time just by changing the Subcycles parameter. Changing the number of subcycles does not modify the loop in any way, it simply changes the number of tick marks under the loop meter.

Often the number of subcycles is chosen so that they represent "beats" in the time signature of the loop. For example if you record a loop representing two measures of music in 4/4 time, then set Subcycles to 8, each subcycle will be the same length as one quarter note. Subcycles can also represent larger units of music. If you record a loop containing an entire 12-bar blues chord progression, then set the Subcycles parameter to 12, each subcycle will represent one measure of music.

Cycles and subcycles are important for quantization. You can make functions execute exactly on a cycle or subcycle boundary which is useful for rhythmic effects and also for track synchronization.

3 Loop Sync

The simplest form of synchronization is to create several loops in one track whose sizes are either the same, or multiples of a common factor. For example the first loop may represent 2 "bars" of music, the second loop 4 bars, and the third 8 bars. Though the loops aren't the same size, they are all multiples of a bar so you can switch among them without changing the perceived tempo.

When you switch from one loop to another, there are many automated actions that can be taken when the switch occurs. If the next loop is empty, by default the track simply halts and sits in Reset mode waiting for you to do something. You can now use the Record function and attempt to record another loop that is rhythmically related to the first loop, but without some fancy footwork there will always be a little delay from when the switch happens till you get around to pressing the Record button. This disrupts the rhythm and is usually noticeable to the audience.

To maintain a consistent rhythm, you need the recording of the next loop to begin immediately and automatically after the switch happens. Luckily there are several ways to do that which we'll discuss later.

Another problem synchronizing loops is controlling when the loop switch happens. By default, the switch happens immediately so you need to be careful to press the MIDI footswitch (or whatever trigger device you are using) at exactly the right time. If you have good footswitch technique this may work for you but many people find it easier to have Mobius automatically switch loops when the loop reaches an interesting synchronization point. This is called switch quantization.

Switch quantization is controlled by the Switch Quantize preset parameter which may have these values:

For a thorough discussion of switch quantization see Loop Switching . For the purpose of creating new synchronized loops the most common values are Loop and Cycle.

When Switch Quantize is set to Loop, the switch will be delayed until the current loop plays to the end and wraps back around to it's End Point. All you need to do is execute the loop switch function any time before the end of the loop and Mobius will enter Switch Quantize mode. At the exact moment the loop reaches the end point, Mobius will automatically perform the loop switch.

If you have used one of the Multiply functions to create a loop with more than one cycle, you may wish to set Loop Quantize to Cycle instead. Mobius will wait until the end of the current cycle and then switch. If the loop has only one cycle, then this will behave the same as setting Switch Quantize to Loop.

Now that we know how to switch loops at exactly the right time, we'll discuss what happens after the switch. As mentioned earlier, if you switch to an empty loop the default behavior is for Mobius to just sit there in Reset mode waiting for you to do something. If you keep playing your instrument you can give the audience something to listen to for awhile and then use the Record function when you're ready to record the next loop. This can work fine if your timing is very good, but recording synchronized loops is easier if you set the Empty Loop Action parameter located under the Synchronization tab of the Preset window.

3.1 Empty Loop Action = Record

When Empty Loop Action is set to Record, the Record function will begin automatically whenever you switch to an empty loop. This can help you maintain a consistent rhythm, you won't have to fill for a few bars before you manually start recording the new loop, recording begins immediately after the switch. The only thing you need to remember to do is press the Record button when you are done recording.

If you have a good sense of time, you can create several loops using this technique that are very close to the same size. But it is almost impossible for humans to make loops exactly the same size, they will always be off by a few milliseconds or more. Depending on the style of music you perform, this may not be noticeable. But if you want the most accurate timing possible, you will need to use some form of loop copy described in the next two sections.

3.2 Empty Loop Action = Copy

When Empty Loop Action is set to Copy and you switch to an empty loop, the current loop will be instantly copied to the next loop. This is called a Sound Copy. From the listener's perspective, they won't know the copy happened, they will still be hearing the original loop.

You may now begin changing the copied loop using Overdub, Multiply or any other function. When you are finished modifying the copied loop you can use the same technique to create another loop, or you may switch back to the original loop.

When you first switch to a copied loop, you will be placed in a mode defined by the Sound Copy Mode preset parameter. The possible values are:

The default value is Multiply.

When Sound Copy Mode is set to Play the copied loop will simply start playing. When set to any of the other values, it behaves as if that function were automatically executed immediately after the copy. You must then remember to execute that function again to cancel that mode. For example, when Sound Copy Mode is set to Multiply you will immediately begin multiplying the copied loop. You must press the button for the Multiply function when you are finished multiplying.

Some people find it convenient to assign the Play function to a button. Play is like a universal mode canceling function, if you are in any recording mode (Record, Multiply, Insert etc.) pressing Play will cancel that mode and return you to Play mode. So after you have performed a loop copy you don't need to think about Sound Copy Mode and execute the corresponding function to end the mode, just use Play and it will cancel whatever mode you are in.

3.3 Empty Loop Action = Copy Timing

When Empty Loop Action is set to Copy Timing and you switch to an empty loop, a new clear loop will be instantly created that is exactly the same size as the previous loop. This is called a Time Copy. Review the Reset, Empty, Clear, and Silent section of the Getting Started manual if you are not sure about the difference between "empty" and "clear". A clear loop has a size and it can be played and modified, it just starts out with no audio content.

In addition to copying the size, time copy will also copy the number of cycles.

When you first switch to a time copied loop, you will be placed in a mode defined by the Time Copy Mode preset parameter. The possible values are:

The default value is Insert.

This parameter has the same possible values as Sound Copy Mode described in the Empty Loop Action = Copy section. You can select Multiply but this is less useful here because there is no audio content to repeat so it behaves almost the same as Insert. The main reason to use Multiply here is if the source loop had several cycles and you wanted to immediately use "remultiply" to remove some of the cycles from the end. See Resizing Loops for more information on using the Multiply function to make the loop smaller.

3.4 Other Ways To Copy Loops

While setting the Empty Loop Action parameter is a convenient way to create synchronized loops, there are a few more ways to accomplish the same thing. When you set the Switch Quantize parameter and use one of the loop switching functions, you will see "Switch Quantize" displayed as the mode in the user interface. Older users of the EDP sometimes refer to this as the "lame duck period".

While you are in Switch Quantize mode you may trigger other functions that will "stack" and be executed immediately after the loop switch. Some stacked functions behave normally, Reverse for example is just delayed until after the switch, then you will immediately change direction. A few functions however have special meaning when they are used during Switch Quantize mode:

Note that the Sound Copy or Time Copy will always happen, even if the next loop is not empty. If Overdub is used you will always end up in Overdub mode. If the Multiply or Stutter is used the ending mode will be determined by the Sound Copy Mode parameter. If Insert is used the ending mode will be determined by the Time Copy Mode parameter.

NOTE: This is behavior carried over from the EDP. It is likely to be replaced in a later release with a more flexible way to specify how functions stacked during Switch Quantize mode behave.

4 Track Sync

Track synchronization is the process of creating of loops in different tracks whose sizes are either the same, or multiples of a common factor. Because tracks play at the same time you must always use some form of loop copy or record quantization so that the sizes are exactly related. If you try to manually record tracks without quantization they will always be a few milliseconds too long or too short and will eventually drift apart if you let them play long enough.

There are two approaches for creating synchronized tracks. First you can use the Empty Track Action parameter to do a Sound Copy or Time Copy from a loop in one track to an empty loop in a different track. This behaves like Empty Loop Action does when switching between loops in the same track, but it takes effect when you select tracks that have empty loops.

The second way to create synchronized loops is by setting the Track Sync Mode parameter. This will cause the beginning and ending of a recording to be quantized to some exact division of the loop playing in the "master track". These two approaches are discussed in more detail below.

4.1 Selecting Empty Tracks

We first need to clarify what "empty track" means. Tracks contain some number of loops, but only one of these loops can be selected for playing or recording. An empty track is one whose selected loop is empty. The track may contain other loops that are not empty, but if the selected loop is empty, then the track is considered to be empty.

To use the Empty Track Action parameter you must select an empty track. This can be done in several ways:

If you are familiar with Mobius scripting note that the for statement does not select tracks. This means you can use the for statement to manage tracks without activating the Empty Track Action.

It is important to note that selecting a track will never be quantized, it always happens immediately. Quantization is important when you switch loops since you will be changing what is heard, but when you select tracks, you continue to hear what is playing in the other tracks so it doesn't matter as much when the change happens.

4.2 Empty Track Action = Copy

When Empty Track Action is set to Copy and you select an empty track, the current loop in the current track will be instantly copied to the empty loop in the next track. This is a Sound Copy which means that all of the audio content will be copied. This is a relatively unusual option to use for track synchronization since it will change what you hear. To the audience it will sound like the loop you are copying from suddenly became twice as loud since you are now playing two copies the same loop.

This mode is usually used only in scripts where in addition to the sound copy you can immediately take other actions like muting the source track, changing the playback rate or direction, or altering the copy with a function like Shuffle. The overall volume level may still increase, but the resulting sound will be more interesting than simply making it louder.

When you first switch to a copied loop, you will be placed in a mode defined by the Sound Copy Mode preset parameter. The possible values are:

The default value is Multiply.

See Empty Loop Action = Copy for more information on using Sound Copy Mode

4.3 Empty Track Action = Copy Timing

When Empty Track Action is set to Copy Timing and you switch to an empty track, a new clear loop will be instantly created that is exactly the same size as the source loop and will have the same number of cycles. Review the Reset, Empty, Clear, and Silent section of the Getting Started manual if you're not about of the difference between "empty" and "clear". A clear loop has a size and it can be played and modified, it just starts out with no audio content.

This is the most common value to use with the Empty Track Action parameter because it will not immediately change what is being heard. The new clear loop will begin playing but the audience will not hear any change until you begin modifying the new loop.

When you first switch to a copied loop, you will be placed in a mode defined by the Time Copy Mode preset parameter. The possible values are:

The default value is Insert. The most common alternative is Overdub.

See Empty Loop Action = Copy Timing for more information on using Time Copy Mode

4.4 Track Copy Function

Another way to accomplish a sound copy from one track to another is to execute the Track Copy function. This will copy the sound the loop playing in the track to the left of the active track into the active track. The contents of the active loop in the active track will be lost and replaced with the copy. If the active track is track number 1, then the copy is taken from the highest numbered track.

The effect is similar to Empty Track Action = Copy except the track doesn't have to be empty.

4.5 Track Copy Timing Function

Another way to accomplish a time copy from one track to another is to execute the Track Copy Timing function. This will timing from the loop playing in the track to the left of the active track into the active track. The contents of the active loop in the active track will be lost and replaced with the copy. If the active track is track number 1, then the copy is taken from the highest numbered track.

The effect is similar to Empty Track Action = Copy Timing except the track doesn't have to be empty.

4.6 Track Sync Mode

The most flexible way to create synchronized tracks is to use the Track Sync Mode parameter. When this is enabled, the Record function will be quantized so that it aligns with divisions of a loop playing in another track. Unlike using Empty Track Action the new loop may be smaller or larger than the other loop. But because the loops will both be multiples of a common factor (such as a beat), they will play in sync.

Track Sync Mode is found under the Synchronization tab of the preset window. It may have these values:

The default is Off. To experiment with track sync, start by setting this to Loop. Also make sure that Empty Track Action is set to None.

Next record a loop in the master track. Any track can be the master track, it is simply the first one you record a loop into. The word Track Master will be displayed in the Sync Status area near the center of the Mobius window. The loop playing in the master track is called the master loop. Make the loop at least a few seconds long so you can experiment with Track Sync Mode values.

Now select an empty loop in another track. Wait until the master loop is near its midpoint and press Record. You should see the word Synchronize displayed as the mode in the Mobius window. This means that Mobius is waiting until the master loop reaches an interesting synchronization point before beginning the recording. In this case we have set Track Sync Mode to Loop so Mobius will begin recording exactly when the master loop reaches its start point.

Wait for the recording to start, then press the Record button again. You will see the words Record Stop with a white triangle pointing to the right underneath the loop meter. This is an event marker that indicates when something will happen as the loop advances.

Graphic

Normally event markers have a triangle pointing up at the exact location within the loop where the event will happen. When the triangle is on the right edge of the loop meter pointing to the right it means that the event will happen at an unknown time in the future, in this case when the master track reaches its start point. When that happens the recording stops, the event marker is removed, and the new loop enters Play mode. The new loop will have the same number of cycles as the master loop.

By setting Track Sync Mode to Cycle or Subcycle you can create loops that are not an exact multiple of the master loop length. Recording will begin and end whenever the master loop reaches a cycle or subcycle boundary. If the master loop only has one cycle, the Cycle sync mode will behave the same as the Loop sync mode.

To experiment with this set Track Sync Mode to Subcycle and set the Subcycles parameter to 4. Record a master loop that represents one measure of music in 4/4 time. Now each subcycle will represent one quarter note "beat" in the master loop. Select an empty loop in another track, wait until the master loop is almost at its start point and press Record. The new track will enter Synchronize mode for a moment then begin recording when the master loop reaches its start point which is also the start of the first subcycle. Let the recording proceed for 6 beats then press Record again slightly after the beginning of the 6th beat. A Record Stop event will appear and the recording will be rounded up to the end of the 6th beat. The resulting loop will be two beats longer than the master loop but its size is still a multiple of the same beat length. It will go in an out of phase with the master loop but will always stay in sync. This can be used to create interesting polyrhythms.

When you record a synced loop, we try to keep the same cycle length as the master loop. If Track Sync Mode is set to Loop or Cycle the cycle length in the synced track will always be the same as the cycle length in the master track. Every time the master track reaches a cycle boundary, the cycle count in the synced loop is increased. This is another way to create loops with several cycles.

When Track Sync Mode is set to Subcycle we may not be able to maintain the same cycle length. If the number of subcycles you record is an even multiple of the Subcycles parameter then we can keep the same cycle length. For example if the Subcycles parameter is 4 and you record 12 subcycles of the master loop, the synced loop will have 3 cycles since 12 divides evenly by 4. But if you had recorded 10 subcycles or any other number that can't be divided evenly by 4 we cannot maintain the same cycle length. In these cases the synced loop will have only one cycle.

4.7 Changing the Track Sync Master Track

Normally once a track becomes the track sync master it will continue to be the master for the entire performance. In some special cases though you may want to make a different track the master. This can be accomplished in two ways: using the Sync Master Track function or the Reset function.

The Sync Master Track function will make the currently selected track the new track sync master. This is the most flexible way to select a sync master track.

If you use the Reset function to reset the current track sync master, Mobius will automatically select a new sync master. It will select the first track to the right of the old master track that has a non-empty loop.

5 Host Sync

Host Sync can be used to record Mobius loops that are in sync with something being played by the plugin host application. Typically this is used when you want the host to play pre-recorded background tracks or drum patterns that are then combined with Mobius loops created in real-time. This option is only available when Mobius is running as a plugin in a host that supports the concept of a "transport". Transports usually have buttons like "start", "stop", and "pause", they have a place where you can enter a tempo and a time signature, and while they are running they count off beats and bars. All hosts do this differently.

NOTE: Mobius currently does not support host sync in the Audio Units plugin, host sync is only available in the VST plugin. This will be fixed soon.

When the host transport is running, it will notify the plugins whenever a the start of a beat or bar is reached. Mobius calls these notifications "pulses". If the transport is not running, Mobius will not be receiving any pulses and it will not be able to record loops. You may need to manually click a "start" button to get the transport started.

To use host sync, locate the Sync Mode preset parameter and set it to either Host Beat or Host Bar. When Host Beat is selected the Record function will be quantized so that it starts exactly on a beat pulse from the plugin host. When Host Bar is selected, recording is quantized to a bar pulse from the host.

This is a bit like using Track Sync Mode set to Cycle or Subcycle. You can record loops that are exact multiples of the host bar length, or you can loops with an odd number of beats so that the loop goes in and out of phase with the host. Most people use Host Bar.

The procedure for creating a host synced loop is usually this:

  1. Create an audio or MIDI track in the host application
  2. Start the host transport, the host track begins to play
  3. In Mobius, use the Record function, recording will be quantized to the next beat or bar of the host transport
  4. After the desired amount of loop has been recorded, use the Record function again, the end of the recording if rounded up to the next host beat or bar

There are several important points here. First because the start and ending of the recording are being quantized, you need press the button ahead of the beat/bar. If you press the record button right when you hear the beat/bar in the backing track, you may actually be a little bit past the beat/bar which means that recording will be delayed until the next beat/bar. This may take some practice. Always press early, if you try to land right on the beat it will often be late.

Another important point is that the track in the host application will be playing and is normally audible before you ever get around to doing anything with Mobius. Occasionally though you may want the host track and the Mobius loop recording to start at exactly the same time. To do that you have to "arm" Mobius for recording before you start the host's transport. With the transport in the "stop" state, select the loop you want to record and execute the Record function, Mobius will enter Synchronize mode waiting for a pulse from the host. When you are ready click the "start" button in the host transport, the host tracks will begin playing, Mobius will receive a beat/bar pulse and will begin recording.

Once Mobius loops have been created it will constantly monitor the pulses coming from the host application to check for drift. If we notice that the Mobius loop has drifted away from the host pulses we will make an instant adjustment to the playback position to bring it back into alignment. For example, if a host synced loop was recorded with 4 bar pulses, every time we receive 4 pulses we check the Mobius loop position and expect it to be at its start point. If instead the loop is a little before or after the start point this may indicate that drift has occurred. If this keeps getting worse we make a drift correction. Usually this is not a problem for host sync unless the host is doing a bad job sending beat/bar pulses. What can cause problems though is changing the host transport tempo after the Mobius loop has been recorded. We will start seeing beat/bar pulses come in at a different rate, they will never match the loop playback position and we will keep jumping around trying to bring the Mobius loop back in sync with the transport. This can be done on purpose to achieve a "glitchy" effect but it is usually not what you want. Once you have recorded host synced loops in Mobius you should never change the host transport tempo.

See the section Drift Correction for more information on how we compensate for drift.

5.1 Synchronizing Stop

It is important to note that Mobius does not respond when you stop the host transport. It will continue merrily along playing loops while the host tracks become silent. This will be addressed in a future release, but until then if you want to stop the host tracks and the Mobius loops at the same time you will need to use one of the following techniques.

The easiest thing may be to simply arrange your performance so that you don't have to stop both the host and Mobius tracks at the same time. First do a Global Reset or Global Pause in Mobius to make it silent, then let the host backing tracks play a little, maybe with a fade out, then stop the host transport. Or stop the host transport first and let the Mobius loops play a little longer, maybe using feedback or a fade script to let the loops decay gradually.

If it is important that you silence the host tracks and the Mobius tracks at exactly the same time, one of these techniques must be used.

Unfortunately, none of these are very easy to set up. In the first case you would select a MIDI message like NOTE 32 and program the host so that it stops the transport when it receives this note, then in Mobius bind this note to the Global Pause function. The problem with this approach is that most hosts will not pass MIDI messages to the plugins if they use them for their own control. The host might pass NOTE 33 but it knows that NOTE 32 is used to stop its own transport and assumes that the plugins will not be interested in the note.

The problem with hosts not passing MIDI messages can be avoided if you have a MIDI controller that is capable of sending different MIDI messages for the same button. Program the device to send one message like NOTE 32 to stop the host transport and NOTE 33 to do a Global Pause in Mobius. As long as the note numbers are different, the host will pass the ones it doesn't use to the plugins. Unfortunately not many inexpensive MIDI controllers can send multiple notes from the same button. It may be possible however to simply press two buttons at nearly the same time. Either the host or Mobius may stop a few milliseconds before the other, but it may not be noticeable.

The final option is the most complex but also the most flexible. Here, you bind a MIDI message to run a Mobius script. The script first does a GlobalPause to silence Mobius, then it uses the MidiOut script function to send a MIDI message to the MIDI device configured in the Plugin Output Devices panel of the MIDI Control window. The device selected must be a "loopback" device such as MIDI Yoke (available only on Windows). The plugin host then opens this same MIDI loopback device to receive its control messages. To the host it looks like Mobius is just another footswitch sending MIDI messages. Program the Mobius script so that it sends the MIDI message the host will recognize to stop the transport. Now by pressing one switch on the MIDI controller, both Mobius and the Host will stop at the same time. Note though that you don't have to just stop the host transport, the script can make the host do anything that is controllable with MIDI messages such as gradually decreasing the levels of the host tracks for a fade out effect.

See the Controlling Plugin Host Tempo section for more information on using loopback devices.

5.2 Recommended Track Configurations

There are two recommended track configurations for Host Sync. The simplest is to have all tracks set Sync Mode to Host Beat or Host Bar. Tracks will all follow sync pulses from the host.

The second configuration is to have one track use Host Beat or Host bar and record that first so that it becomes the Track Sync master track. Then have all other tracks use presets with Sync Mode set to Off and Track Sync Mode set to something other than Off. Then you will have only one track that needs to follow the host and the others will sync to that track.

Note that sync modes Host Beat and Host Bar always have priority over Track Sync Mode. You must set Sync Mode to Off if you want to use Track Sync and Host Sync at the same time.

The differences between the two approaches are subtle. We recommend that new users use the first approach and have all tracks use Host Sync. There is rarely any jitter in host sync pulses so you can record multiple tracks with an exact size relationship.

Since each track can have a different preset, it is possible for tracks to use a combination of Host Sync, MIDI Master Sync and MIDI Slave Sync. We are aware of no practical reason to do this, unless you know exactly why you are doing this it is strongly not recommended.

6 MIDI Slave Sync

MIDI Slave Sync can be used to create loops that stay in sync with another device that generates MIDI "beat clocks". Usually this will be a hardware drum machine or sequencer but it could also be another software applications that send MIDI clocks. In this manual we will refer to this as a "drum machine" though it can be any hardware or software that generates MIDI beat clocks.

When using MIDI Slave Sync, Mobius receives a stream of MIDI clock messages and identifies which clocks represent "beats" and "bars". When you record loops, the start and end of the recording will be quantized to either a beat or bar boundary. This is similar to using Host Sync except the beats and bars are defined by an external hardware device or another application. This type of synchronization is usually not as accurate as Host Sync so you may experience Drift Correction more often.

MIDI Slave Sync is almost never used if you are running Mobius as a plugin. In that case it is usually better to use Host Sync instead.

NOTE: MIDI "beat clock" is not the same thing as "MIDI Time Code". Mobius does not support MIDI Time Code, it only recognizes the simple beat clock messages: Start, Stop, Continue, and Clock.

6.1 Configuring MIDI Devices for Slave Sync

To use MIDI Slave Sync you will need to arrange to have MIDI beat clock messages from the drum machine routed into Mobius. If you are running Mobius standalone there is only one way to do this. Open the MIDI Devices configuration window and select the MIDI device connected to the drum machine in the panel labeled Input Devices on the left side. You can select more than one device in this panel, but only one of them should be connected to something that sends MIDI beat clock.

As mentioned earlier it is almost never necessary to use MIDI Slave Sync when running Mobius as a plugin. Instead you usually use Host Sync mode and let the host control the tempo. There are however a few cases where you may need to use MIDI Slave Sync with the plugin:

In these cases you can get MIDI beat clock into Mobius in two ways:

For normal Mobius control, we always recommend the first approach, letting the host open the MIDI device. This prevents conflicts that can happen when Mobius and the host attempt to open the same devices. Unfortunately this usually does not work very well for MIDI Slave Sync. Hosts usually add a significant amount of timing jitter to MIDI clock messages. This can make it difficult for Mobius to correctly calculate the size of synchronized loops which will cause them to drift out of sync more rapidly.

If you seem to be doing Drift Correction too often you may need to take the second approach and have Mobius open its own private connection to a MIDI device. This will result in a smoother stream of clock pulses and more accurate loop lengths. To do this open the MIDI Devices configuration window and select the MIDI device connected to the drum machine in the panel labeled Plugin Input Devices on the right side.

The problem with letting Mobius open a private MIDI device when running as a plugin is that the host often tries to open the same device. Sometimes this is unavoidable, the host will simply open every available device and not let you choose which ones you actually need. Sometimes there will be a preferences window where you can select the devices to open. If at all possible, try to make the host open MIDI devices that are different than the devices Mobius uses. If Mobius and the host try to open the same device there can be conflicts that in some cases can lead to crashes, usually when you delete the Mobius plugin.

Whether this will work or not depends on your host and the MIDI device drivers. You will simply have to try it to see if it works. If you are unable to specify exactly which MIDI devices the host will open and you have crashes deleting the Mobius plugin then you will probably need to use a different host. If this happens please contact us so we can see if there is something we can do to make Mobius behave better in that host.

6.2 Setting the Sync Mode

After configuring a MIDI device from which we can receive beat clock messages, locate the Sync Mode preset parameter and set it to either MIDI Beat or MIDI Bar. When either mode is selected the Record function will be quantized and executed exactly on the MIDI clock at the start of the next beat or bar.

Determining when the next MIDI beat occurs is relatively easy. The MIDI specification says that there will be 24 Clock messages in every beat, so Mobius simply counts clocks. Every time 24 clocks are received, Mobius generates a beat pulse for synchronization. Note that for this to work it is important that the device that is generating clocks also sends a MIDI Start message when it has begun playing. Mobius will see the Start message and reset the clock counter so the beats in the drum machine and the beat pulses inside Mobius will be aligned. If Start is not sent Mobius can't tell if a clock is at the beginning, middle, or end of a beat. It will generate beat pulses at the correct tempo but the timing of the beats may not align with the drum machine.

Determining when the next MIDI bar occurs is more complicated because MIDI does not have a way to say what the time signature is or where bars are located. Instead you define the length of a MIDI bar using one of two Mobius parameters: Record Beats/Bar and Subcycles. If Record Beats/Bar is set to value other than zero that will be the number of beats in one bar. Otherwise the value of the Subcycles parameter has the number of beats in a bar. It is recommended that you set the Record Beats/Bar parameter so that you can use Subcycles for quantization that is not dependent on the size of a bar. For example you may set Record Beats/Bar to 4 if you are using 4/4 time but you can have Subcycles set to 8 so the smallest quantization unit is an eighth note.

Each time Mobius generates a beat pulse, it increments another counter that counts the beats in the bar. When this counter reaches the value of Record Beats/Bar Mobius generates a bar pulse for synchronization.

The procedure for creating a MIDI synced loop is usually this:

  1. Start Mobius and have it open a MIDI device for input
  2. Set Mobius sync mode to MIDI Bar
  3. Connect a drum machine to the MIDI device that Mobius is watching
  4. Start the drum machine, it sends a MIDI Start message and then begins sending Clock messages
  5. The tempo, beat, and bar counters should be visible in the Mobius window
  6. Execute the Record function, the recording will be quantized and start on the next MIDI bar
  7. After the desired amount of loop has been recorded, execute the Record function again, the end of the recording if rounded up to the next MIDI bar

Like Host Sync you need to remember to press the Record button ahead of the beat/bar where you want recording to begin. If you try to press the record button right when you hear the beat/bar in the drum machine, you may actually be a little bit late which means that recording will be delayed until the next beat/bar. Always press early.

Also like Host Sync the drum machine will be playing and is normally audible before you ever get around to doing anything with Mobius. If you want the drum machine and the Mobius loop recording to start at exactly the same time you have to "arm" Mobius for recording before starting the drum machine. To do this press Record in Mobius before starting the drum machine. Mobius will enter Synchronize mode waiting for a sync pulse. Then start the drum machine.

Once Mobius loops have been created it will constantly monitor the MIDI clocks to check for drift. If we notice that the Mobius loop is drifted away from the MIDI clocks we will make an instant adjustment to the playback position to bring it back into alignment. For example, if a MIDI synced loop was recorded over 96 MIDI clocks, every time we receive 96 clocks we check the Mobius loop position and expect it to be at its start point. If instead the loop is a little before or after the start point this may indicate that drift has occurred. If this keeps getting worse we make the drift adjustment. This is frequently a problem with MIDI sync because there can be considerable jitter in MIDI clocks that make accurate timing of the start and end of the recording difficult. Even if the clocks were just slightly early or late, this can result in the loop being too short or too long which will cause noticeable drift after several repetitions.

Once MIDI synced loops have been recorded it is important that you do not change the tempo of the MIDI clocks. Mobius will start seeing clocks come in at a different rate, they will never match the loop playback position and we will keep jumping around trying to bring the Mobius loop back in sync with the transport. This can be done on purpose to achieve a "glitchy" effect but it is usually not what you want. Once you have recorded MIDI synced loops in Mobius you should never change the tempo of the MIDI clocks. See the section Drift Correction for more information on how we compensate for drift.

Since Mobius does not respond to the MIDI Stop message, it can be difficult getting the drum machine and Mobius to stop at exactly the same time. The simplest thing is to just do a Global Pause in Mobius to silence it, let the drum machine continue for a few bars then stop it. See the Synchronizing Stop section for some other ways to stop Mobius, this was written for Host Sync but the techniques can be used with MIDI sync as well.

6.3 Recommended Track Configurations

There are two recommended track configurations for MIDI Slave Sync. The simplest is to have all tracks set Sync Mode to MIDI Beat or MIDI Bar. Tracks will all follow the MIDI clocks and not each other.

The second configuration is to have one track use MIDI Beat or MIDI bar and record that first so that it becomes the Track Sync master track. Then have all other tracks use presets with Sync Mode set to Off and Track Sync Mode set to something other than Off. Then you will have only one track that needs to follow MIDI clocks and the others will sync to that track.

Note that sync modes MIDI Beat and MIDI Bar always have priority over Track Sync Mode. You must set Sync Mode to Off if you want to use Track Sync and MIDI Slave Sync at the same time.

The differences between the two approaches are subtle. We recommend that new users use the first approach and have all tracks use MIDI Slave Sync. Because MIDI clocks are subject to more jitter than other modes, the second approach can result in tracks that play together more reliably over time since only one of them will be syncing to the MIDI clock and all the others will have an exact size relationship with the slave track.

Since each track can have a different preset, it is possible for tracks to use a combination of Host Sync, MIDI Master Sync and MIDI Slave Sync. We are aware of no practical reason to do this, unless you know exactly why you are doing this it is strongly not recommended.

6.4 MIDI Record Pulsed

In the Global Parameters window under the Advanced tab there is an obscure parameter named MIDI Record Pulsed. This parameter controls how we calculate the optimal loop length when ending a MIDI synced recording. It is off by default.

MIDI clocks are prone to jitter which means that they may not be received by Mobius at an exact tempo, they are often slightly early or late. The amount of jitter isn't usually very much, maybe no more than a few milliseconds, but this can be enough to cause the loop length to be slightly shorter or longer than the loop being played by the drum machine and over time this will cause them to drift apart.

Normally a MIDI synced recording starts immediately when a MIDI clock is received that represents the start of a beat or bar. To reduce the effects of jitter Mobius then "smoothes" the clocks to calculate a precise average tempo as loop is recorded. When you then end the recording, Mobius rounds the recording up to the next beat or bar, but it uses this average tempo to guess at where the clock that ends the recording should be which may be different than the time the clock is actually received by Mobius. This usually results in a Mobius loop length that is closer to the length of the drum machine loop because the effect of jitter on the final clock is eliminated.

If you think that Mobius is doing drift correction too often, you can try disabling this smoothing by checking the MIDI Record Pulsed parameter. When this is on, we simply wait for a MIDI clock to end the recording and don't try to guess at where it should be. If you find that this creates better loops please let us know.

7 MIDI Master Sync

Most people that synchronize Mobius with external devices use MIDI Master Sync for one important reason: you get to control the tempo from Mobius, rather than trying to follow a previously set tempo. For example, when using Host Sync or MIDI Slave Sync, you need to start playing a pre-recorded sequence, drum pattern, or click track so you can hear the tempo to follow. Then you record Mobius loops in sync with that tempo. When you use MIDI Master Sync you start by freely recording a loop in Mobius in whatever tempo you feel like at that moment. As soon as the loop is recorded, Mobius starts sending out MIDI "beat clocks" that drum machines, sequencers, or other devices can lock onto and begin playing backing tracks in sync with the Mobius loop. You make the other devices follow your loop tempo rather than the other way around. In the looping community this is commonly called "first loop capability".

If you prefer to have backing tracks that are audible before you start creating loops, you can still use MIDI Master Sync to set the tempo. Start by recording a silent Mobius loop just to set the tempo of the MIDI clocks. Then after the slave device starts playing, select a different Mobius track and use Track Sync to record loops that are in sync with the original silent loop.

Note that the MIDI messages that Mobius will send for master synchronization are the "beat clock" messages: Start, Stop, Continue, and Clock. This is not the same thing as "MIDI Time Code". If you have a device or application that requires MIDI Time Code for slave sync, you will not be able to use it with Mobius.

7.1 Configuring MIDI Devices for Master Sync

To use MIDI Master Sync you will need to select a MIDI output device. Open the MIDI Devices configuration window. If you are running Mobius standalone select a device in the Output Device panel, if you are running Mobius as a plugin select a device in the Plugin Output Device panel. You may only select one device in each panel.

If you are running Mobius as a plugin this is one of those rare circumstances where you must create a private connection directly to a MIDI device rather than sending MIDI through the plugin host application. While it is possible for a VST or Audio Unit plugin to send MIDI messages to the host and then have the host pass those to a MIDI device, Mobius does not do this. Mobius can only send MIDI beat clock messages directly to a MIDI device. This is because plugin hosts almost always introduce timing jitter to the MIDI messages sent by plugins. This isn't always bad for MIDI messages like notes or continuous controllers, but it is bad for MIDI clocks.

If you select a Plugin Output Device in Mobius, look at the MIDI configuration in your host application and try to make the host not select the same device. There are occasionally problems with certain combinations of hosts and MIDI device drivers that can cause a crash when you delete the Mobius plugin. What happens is that the host opens a connection to a MIDI device and assumes that it has complete control over the device. Then when the Mobius plugin is inserted, Mobius opens another connection to the same device. When you delete the Mobius plugin, Mobius thinks it is in control of the device and closes the connection. With some MIDI device drivers, this makes the original MIDI connection opened by the host invalid and if the host attempts to use it, it may crash.

7.2 Sync Mode = Out

To select MIDI Master Sync, locate the Sync Mode parameter and set it to Out. If you intend to use more than one track then you normally will also set Track Sync Mode to something other than Off. See Track Sync for more information on Track Sync Mode.

The first track you record a loop into will become the MIDI Sync Master track. A tempo will be calculated based on the loop length and a few parameters, a MIDI Start message will be sent to the configured MIDI output device followed by a stream of MIDI Clock messages at the calculated tempo. If you have a drum machine or sequencer configured to listen to the same MIDI device it should begin playing.

When the MIDI Sync Master track is selected, the word Master or less often MIDI Master will be displayed in the Sync Status component near the center of the Mobius window. Master means that the track is functioning as both the MIDI Sync Master track and the Track Sync Master track. This is usually what happens. If you see the words MIDI Master it means that track is functioning only as the MIDI Sync Master track and some other track is the Track Sync Master. Above the Sync Status component you will see the word Tempo followed by the tempo of the master loop, rounded to an integer.

Once you have recorded the master loop you must be careful about changing it. It is permissible to change the master loop, or even record a different loop in the master track, but this may change the cycle length of the loop which may in turn change the tempo of the generated MIDI clocks. See the Adjusting The Tempo section for more information.

A common technique to ensure that the tempo remains consistent is to first record a silent loop in the master track and let it run forever. Then use Track Sync to record audible content in other tracks synced to the master track.

7.3 Sync Mode = Out Manual

Setting Sync Mode to Out Manual behaves the same as setting it to Out except for one important difference: the MIDI Start message is not sent immediately after recording the master loop. Instead Mobius will calculate the tempo and start sending a stream of MIDI Clock messages only. Then when you are ready to have the slave devices start playing you must manually use the MIDI Start or Mute MIDI Start functions to cause the Start event to be sent.

The MIDI Start function will wait for the start point of the master loop, then send a MIDI Start message. There is no way to control the quantization, it will always happen at the master loop's start point.

The Mute MIDI Start function will immediately mute the master loop as if the Mute function had been used, wait for the start point, send a MIDI Start message, and finally unmute the loop.

There is another relatively obscure way to perform MIDI Start that was copied from the EDP. If you are already in Mute mode and you use the Multiply function, the Multiply function will be converted to the Mute MIDI Start function. For this to work Multiply must be added to the Mute Cancel Functions global parameter.

7.4 Recommended Track Configurations

For normal MIDI Master Sync looping, set the Sync Mode in all the presets you will be using to Out or Out Manual and set the Track Sync Mode parameter to something other than Off.

Only one track can be the sync master, it will be the first one that is recorded and is normally never changed. Since the other tracks cannot be the sync master, they will ignore Sync Mode and instead use Track Sync Mode to synchronize with the master track.

Since each track can have a different preset, it is possible for tracks to use a combination of Host Sync, MIDI Master Sync and MIDI Slave Sync. We are aware of no practical reason to do this, unless you know exactly why you are doing this it is strongly not recommended.

7.5 Controlling The Tempo

When a MIDI Sync Master loop has been recorded, the tempo of the generated MIDI clocks is calculated in three steps. First the base tempo is calculated with this formula:


   beatsPerMinute = 60 / ((cycleFrames / beatsPerBar) / sampleRate)

Or broken up for clarity:


   framesPerBeat = cycleFrames / beatsPerBar

   secondsPerBeat = framesPerBeat / sampleRate

   beatsPerMinute = 60 / secondsPerBeat

The cycleFrames term has the number of frames (pairs of stereo samples) in one cycle of the loop. This is usually the same as the number of frames in the entire loop since new loops usually have only one cycle.

The beatsPerbar term will be the value of the Record Beats/Bar preset parameter if it is greater than zero, otherwise it will be value of the Subcycles parameter. It is recommended that you set Record Beats/Bar so that you can use Subcycles for quantization without affecting the MIDI clock tempo. For example a common value for Record Beats/Bar is 4 but you might want Subcycles set to 16 for fine grained quantization.

The cycle is assumed to be one bar long so cycleFrames divided by beatsPerBar results in framesPerBeat. The sampleRate term is the sample rate of the audio device, currently this will always be 44100 (the CD sample rate). framesPerBeat divided by sampleRate results in secondsPerBeat. Finally dividing 60 by secondsPerBeat results in the base tempo expressed in the most common unit of Beats Per Minute (BPM).

Next we factor in rate shift. A rate shift is a non-destructive temporary effect that can be applied to a loop to make it sound like it is playing faster or slower than normal. It can be accomplished in several ways, see the Rate Shifting section for more information. When the MIDI Sync Master loop is being rate shifted you can also apply a matching change to the tempo of the generated MIDI clocks. This is controlled by the Speed Sync Adjust preset parameter.

When Speed Sync Adjust is None the MIDI clock tempo is not affected by rate shift. When the parameter is Change Tempo the MIDI clock tempo will be adjusted to match the master loop playback rate. The amount of rate shift is represented as a floating point number. 1.0 means "normal speed", 0.5 means "half speed" and 2.0 means "double speed". The base tempo calculated above is simply multiplied by the rate shift modifier. For example if the calculated base tempo was 120 and the master loop is in half speed, 120 times .5 is 60 so the rate adjusted tempo would be 60 BPM.

This tempo formula can result in very small or very large tempos which are usually undesirable. To keep the tempo within a usable range, we make a final adjustment to the tempo using two preset parameters: Minimum Tempo and Maximum Tempo.

First the tempo is divided by 2 until it reaches a value that is less than or equal to the value of the Maximum Tempo parameter. For example if the tempo was 450 and the Maximum Tempo parameter was 200, the adjusted tempo would be 112.5 (450 / 2 = 225 / 2 = 112.5).

Next the tempo is multiplied by 2 until it reaches a value that is greater than or equal to the value of the Minimum Tempo parameter. For example if the tempo was 20 and the Minimum Tempo was 60, the adjusted tempo will be 80 (20 * 2 = 40 * 2 = 80).

Note that it is possible for the Minimum Tempo and Maximum Tempo parameters to be in conflict if the values are not far apart. In this case the Minimum Tempo wins. For example assume Maximum Tempo is 200, Minimum Tempo is 150, and the base tempo is 450. We first make the Maximum Tempo adjustment which divides it down to 112.5. Since this is below Minimum Tempo it gets multiplied back up to 225. You will never have tempos that are below Minimum Tempo but you may have tempos that are above Maximum Tempo if the tempo range isn't large enough.

7.6 Adjusting The Tempo

Once you have recorded a MIDI Sync Master track there are several actions you can make that may disrupt the tempo of the MIDI clocks being generated. These include:

In these cases, a set of preset parameters controls what will happen to the tempo of the generated MIDI clocks:

These parameters have the same possible values. None means that the current tempo is not changed, and Change Tempo means that the tempo will be recalculated so that it matches the new characteristics of the loop.

Of these Speed Sync Adjust is the most important. A common looping technique is to change the playback rate of a loop so that it either an octave higher or lower and thereby either half as long or twice as long. These changes can be made while keeping the master sync tempo at a consistent rate and the drum machine pattern still "fits" with the loop. For example if a drum pattern plays once when the loop is at normal speed, it will play twice if the loop is at half speed. But the rhythm of the drum pattern is still usually compatible with the rhythm of the loop even though the drum machine is now twice as fast. To accomplish this effect set Speed Sync Adjust to None.

If you rate shift the master loop at intervals other than an octave, the resulting length of the loop will no longer fit within the drum machine pattern evenly. This can be used to create interesting polyrhythms. If you set Speed Sync adjust to Change Tempo then the drum machine tempo will follow the loop tempo. One use for this technique is to gradually reduce the speed of both the master loop and the drum pattern until they practically halt as a way to end a performance.

The Resize Sync Adjust and Switch Sync Adjust parameters are used less often. If you are creating strictly synchronized loops using quantization and time copy, the loops and layers will tend be the same size, or a multiple of a common factor. Even if these parameters are set to Change Tempo the new tempo will usually end up being the same as the old tempo.

7.7 Controlling Plugin Host Tempo

When Mobius is running as a plugin you can sometimes use MIDI Master Sync to set the tempo used by the plugin host transport. For this to work the host needs to support slaving its transport to MIDI beat clocks, not all hosts support this.

You will need to use a MIDI Loopback device. On Windows the one we recommend is MIDI Yoke available at www.midiox.com . On Mac, you can use a built-in OS X feature called the MIDI IAC Driver. A tutorial on setting up this driver can be found here .

Configure Mobius as usual for MIDI master sync and select the loopback device in the Plugin Output Devices panel of the Audio Devices configuration window.

You will then need to configure the plugin host so that it can receives MIDI clocks from the same loopback device. This will be different in every host, if it isn't obvious post a message to the Mobius forums.

Now record the initial loop in Mobius. MIDI clocks will be generated and if things are connected properly the host should lock onto the tempo and display it in its transport.

This technique is known to work in Ableton Live.

7.8 Mute and Pause during MIDI Master Sync

NOTE: The behavior described in this section was developed for a problem one Mobius user was having with a slave device. It is unfortunately rather complicated and not as flexible as it should be. This is likely to change in a future release.

When you use the Mute or Pause functions in the MIDI sync master loop, the external device being synchronized may also be made to stop and then resume when the master loop is unmuted. This behavior is controlled by a combination of the Mute Mode and Mute Sync Mode parameters.

The Mute Mode parameter may have these values:

If Mute Mode is set to Pause the Mute function will behave exactly the same as the Pause function. The loop will freeze when then Mute/Pause function is executed, then resume from its previous location when Mute/Pause is executed again.

If Mute Mode is set to Start the loop will continue playing silently while it is in Mute mode, then when leaving Mute mode the loop will be retriggered from the beginning.

If Mute Mode is set to Continue the loop will continue playing silently while it is in Mute mode, then when leaving Mute mode it will simply resume playing from its current location.

If Mute Mode is set to Continue in the MIDI Sync Master loop we will continue to send MIDI Clock messages to the slave device so that it can remain in sync with the silent loop.

If Mute Mode is set to Start or Pause in the MIDI sync master loop, we may try to stop the slave device as well as silencing the Mobius loop. How this happens is determined by the Mute Sync Mode parameter which may have these values.

When set to Send Stop/Start continue clocks, entering Mute or Pause mode will cause a MIDI Stop message to be sent to the slave device. MIDI Clock events will continue to be sent so the slave device can continue tracking the clock tempo. When exiting Pause mode a MIDI Continue message is sent to the slave device. When exiting Mute mode a MIDI Start message is sent to the slave device. This is the Mute Sync Mode you normally use when the slave device recognizes the MIDI Start, Stop, and Continue messages. It allows the slave device to keep receiving MIDI Clock messages while it is stopped so it can track changes to the clock tempo. When the slave device is finally resumed it will already know the desired tempo.

Send Stop/Start stop clocks is the same except that it also stops sending Clock messages while in Mute and Pause modes. This may be necessary if you have a device that gets confused if it keeps receiving Clock messages after a Stop. This is rare. If you think you have a device that requires this option please let us know so we can mention it in the documentation.

Stop clocks is used when the slave device does not understand the MIDI Stop message. Here we simply stop sending Clock messages when in Mute or Pause mode. This is also relatively rare. It may be of use with tempo sensitive effects like a panner or tremolo. Such devices don't have the concepts of start and stop, they simply lock onto a clock tempo.

When Mute Sync Mode is set to Continue clocks then we do not send a MIDI Stop when entering Mute or Pause modes and we continue sending Clock messages. The Mobius loop will become silent, but the slave device will continue playing normally.

When we exit Mute mode we will always send a MIDI Start message when Mute Mode is set to Start. When we exit Pause mode we will always send a MIDI Continue message. These messages are always sent even if the slave device does not recognize them. If the MIDI Clock events had been turned off they will be resumed.

8 Drift, Dealign and Realign

When a synchronized loop is created using Host Sync, MIDI Slave Sync, or MIDI Master Sync there is the possibility that the Mobius loop may drift out of alignment with the host, drum machine, or even the internal timer used to generate MIDI master clocks. Drift is something that is not supposed to happen. In an ideal world there would be no drift but unfortunately differences in the speed of clocks running in different hardware devices, MIDI lag and jitter, and stress on the CPU can all result in timing errors that cause drift.

Drift is usually very small, but over time as a loop plays the drift may accumulate until it becomes audible. Loops may start to sound slightly out of phase, and rhythm patterns may start to sound sloppy. Mobius is constantly monitoring the amount of drift and when it reaches a certain threshold it will make a correction to bring the loops back into alignment. This process is described in more detail in the Drift Correction section. Note that drift only happens when synchronizing with something outside of Mobius. Tracks within Mobius will never drift relative to each other.

Dealign is a deliberate action by the user that causes a Mobius loop to go out of alignment with other loops either inside or outside Mobius. There are many ways to cause a dealign, among them:

Once a loop has been knocked out of alignment, it will remain that way until the user does something to change the alignment. Alignment is never corrected automatically like drift. To bring the loop back into proper alignment you must use the Realign or Mute Realign functions. This is described further in the Realign section.

8.1 The External Loop

Since Mobius can synchronize in several ways, it becomes difficult to talk about drift and realign without using word salad like "the plugin host or the drum machine or the master MIDI clock". This just gets worse as new synchronization types are added. To make this easier to talk about, Mobius uses a concept called the external loop that gives us a simple way to think about all synchronization types.

The external loop represents anything outside of Mobius that we want to synchronize with. The external loop has a size and it plays from beginning to end at a fixed speed. When it reaches the end it wraps back to the beginning and repeats forever. Unlike a Mobius loop the size of the external loop is not measured in frames or samples, it is measured in pulses.

A pulse is a message sent to Mobius at a regular interval from the thing we want to synchronize with. When you use Host Sync a pulse is a beat event sent by the plugin host to all of the plugins when the host transport is running. When you use MIDI Slave Sync a pulse is a MIDI Clock message generated by a drum machine or other device. When you use MIDI Master Sync a pulse is a notification from an internal timer that is used to send MIDI Clock messages to another device. Mobius doesn't care what the pulse actually is, it simply needs to receive them at a consistent tempo.

When you begin recording a synchronized loop using Host Sync or MIDI Slave Sync we delay the start of the recording until the next pulse is received. Then we start counting the number of pulses that are received while the loop is recording. When you end the recording, we round the loop up to the next pulse. We now have created two things: a Mobius audio loop with a size in frames and an external loop with a size in pulses. The Mobius loop size will be close to an exact multiple of the distance between pulses.

When you record a synchronized loop using MIDI Master Sync we don't wait for pulses since there aren't any until after the loop is recorded. Recording starts and ends immediately. Once the recording has finished we then calculate a tempo for the MIDI clocks using the algorithm from Controlling The Tempo. We can then calculate the number of MIDI clocks that will be sent each time the new loop plays, this is the number of pulses in the external loop.

At this point we have an external loop with some number of pulses. The Mobius loop begins playing, and we continue to receive pulses from the sync source. We keep a counter that is incremented when each pulse is received. When this counter is equal to the number of pulses in the external loop, the counter is set back to zero and we begin counting up again. For example, using MIDI Slave Sync we record a Mobius loop that is 96 MIDI clock pulses long. When the loop has finished recording, we start the external loop pulse counter from zero and add one each time a MIDI clock is received. When this counter reaches 96 we are at the end of the external loop and set the counter back to zero.

When the external loop pulse counter wraps back to zero, this is called the external loop start point. This is an important moment in time that is used for both drift correction and the Realign function.

8.2 Drift Correction

NOTE: It is not necessary to fully understand this section in order to make effective use of synchronization. Drift correction normally just works and you don't need to worry about it. But if you are curious about what the mysterious Drift Resync Frames does, read on.

Once a synchronized Mobius loop has been recorded, we create the external loop and begin counting sync pulses. The Mobius loop plays and may be modified. Whenever the Mobius loop or the external loop reach their start points, we check for drift.

The algorithm for calculating drift is complicated but at a high level we compare the current position in the Mobius loop with the ideal position calculated from the pulses that have been counted in the external loop. The result is the number of frames of drift. If the drift frames are positive it means that Mobius loop is ahead of the external loop, if the drift frames are negative it means the Mobius loop is behind the external loop.

When the amount of positive or negative drift exceeds a certain threshold a drift correction is made. A drift correction is an immediate jump in the Mobius loop playback position to bring it back into alignment with the external loop. This is usually not noticeable but with some loops it may be heard as a soft "bump". This happens more often with MIDI Slave Sync because jitter in the MIDI clock stream can result in greater drift. It rarely happens with Host Sync. Surprisingly it can happen with MIDI Master Sync even though Mobius is in control over the clocks. This is because sync pulses are generated by timer provided by the operating system that is not synchronized with the audio stream being processed by the audio interface hardware. The amount of drift is usually very small, but over time it can be audible.

8.2.1 Drift Resync Frames

A small amount of drift is normal and tends to balance out over time. For example, on one pass of the loop we may be 100 frames ahead of the external loop, on the next 200 behind, then 80 ahead, then 127 behind. As long as the drift does not steadily increase in either direction the drift is normal and does not need to be corrected. The threshold at which drift correction occurs is defined by the global parameter Drift Resync Frames.

The default value for Drift Resync Frames is 2048. Like a lot of strange looking numbers in Mobius the reason this is 2048 instead of 2000 or 2500 is because 2048 is an exact power of two. It is not necessary that this number be a power of two, 2500 would work just fine but programmers have this weird affection for powers of two. Just humor them.

There is rarely any need to change the default value of Drift Resync Frames, the one exception would be if you were using MIDI Slave Sync with an extremely jittery MIDI clock. If you feel that drift correction is happening too often, you can try increasing this number by 1000 until it stops happening. What is "too often"? A Mobius loop should be able to play at least a few times before drift correction. If you hear a drift correction bump every time the loop reaches the start point, then try raising the Drift Resync Frames. Please contact us if you have to do this, it may indicate a problem with Mobius or something unusual about your system.

It might be tempting to set Drift Resync Frames to a very small value thinking that you will get "tighter" synchronization. This is absolutely not recommended. A small amount of drift is perfectly normal, if you set the parameter too low you may end up doing a drift correction on every pass of the loop. The only reason this can be set lower than 2048 at all is to simulate extreme conditions for testing.

If you set the Drift Resync Frames parameter to a large value, greater than 10000, you may begin hearing gradual changes to the loop. If you are syncing with a drum machine or something with an strong rhythm, the Mobius loop may start to feel like it "drags" or "rushes" compared to the background rhythm. If you are recording non-rhythmic loops then drift not even be noticeable.

8.2.2 Drift Correction and Track Sync

If you are using simple Track Sync and the master track did not use Host Sync, MIDI Slave Sync, or MIDI Master Sync then there will never be any drift correction. Tracks will always play in perfect sync forever.

If the master track did use any of the other sync modes, then tracks synced with the master track may need drift correction. The rule is: whenever a track has a drift correction applied, all of the other tracks that were synced to that track will also have the same amount of drift correction applied.

For example, assume that track 1 had Sync Mode set to MIDI Bar and all the other tracks had Sync Mode set to Off but they had Track Sync Mode set to Loop. Track 1 is recorded and synced with the MIDI clock pulses coming from a drum machine. Tracks 2 and 3 are recorded with Track Sync Mode so they are exactly the same size as track 1. Sometime later we decide that track 1 has drifted too far away from the MIDI clock pulses, and we to correct track 1 by moving the playback position 3028 frames backward because it was rushing.

Next we look for all tracks that were recorded using Track Sync Mode when track 1 was the master track, we find tracks 2 and 3. Those two tracks will also have their playback position adjusted 3028 frames backward so that they continue to be in exact alignment with their master track 1.

Though it is unusual, it is possible to have more than one set of tracks that follow a different master track. For example track 1 started as the track sync master when tracks 2 and 3 were recorded. Then track 4 became the track sync master when tracks 5 and 6 were recorded. A drift correction to track 1 will affect tracks 2 and 3 but not 4, 5, and 6.

8.3 Realign

As we mentioned before earlier, Dealign is a deliberate action by the user that causes the Mobius loop to go out of alignment with the external loop. Some of the ways to cause a dealign are:

Once a loop has been knocked out of alignment, it will remain that way until the user does something to change the alignment. Alignment is never corrected automatically like drift. To bring the loop back into proper alignment you must use the Realign or Mute Realign functions.

The only difference between the two realign functions is that Mute Realign will first perform an immediate unquantized Mute function, then do the realign. From the listeners perspective the loop that is out of alignment will suddenly stop, while the external loop (drum machine, host track, etc.) will continue playing. Then when the realignment point arrives the Mobius loop will be brought out of Mute mode and start playing aligned with the external loop.

In all but one case described below what happens during a realign is that the playback position of the Mobius loop is moved so that it matches the current location of the external loop. Typically realign is delayed until either the Mobius loop or the external loop reach their start points. This gives the listener some sense of closure from one of the loops before they are abruptly brought back into alignment. The timing of the realign can however be controlled in some cases with the Realign Time preset parameter which may have these values.

NOTE: We here at the labs are not happy with the behavior of Realign Time. We feel it is overly complex, inconsistent, and difficult to explain. It will be described below so that those that are interested can understand what it does but this is likely to change in a future release. For most users it is recommended that you leave it set to the default value of Loop.

8.3.1 Realign with Track Sync

For loops that were created with Track Sync the Realign Time parameter specifies the location in the master track where the realign will occur. This is inconsistent with the other sync modes where Realign Time specifies locations in the slave loop.

When Realign Time is set to Immediate the realignment happens immediately.

When Realign Time is Subcycle, Cycle, or Loop the realign is delayed until the master track reaches those quantization points. You will see an event marker named "Realign" appear under the Loop Meter to indicate that the realign is pending.

When Realign Time is set to External Loop it behaves the same as setting it to Loop. The realign is delayed until the master track reaches its start point.

8.3.2 Realign with Host Sync and MIDI Slave Sync

For loops created by slaving to sync pulses, realign always happens exactly when a sync pulse is received. When Realign Time is set to Immediate the realign is delayed until the next sync pulse.

When Realign Time is Subcycle, Cycle, or Loop we perform the realign on the next sync pulse after the slave loop has passed one of these quantization points. For MIDI Slave Sync this should be fairly close to the quantization point since we receive a lot of MIDI clocks pulses.

For Host Sync with Sync Mode set to Host Bar the external loop will have a relatively small number of pulses, just one for each bar. If you have Realign Time set to Subcycle, many subcycles may be passed before we receive a sync pulse. So Subcycle may end up behaving the same as Cycle or Loop when using Host Bar sync.

When Realign Time is set to External Loop the realign is delayed until we receive the pulse that represents the external loop start point. This is a common option when using host or MIDI slave sync because there is typically a drum pattern or sequence playing, and it makes the Mobius loop realign exactly when the master pattern reaches the down beat of the first measure.

8.3.3 Realign with MIDI Master Sync

Loops that are the MIDI sync master can perform a realign in one of two ways determined by the Out Sync Realign Mode parameter. The parameter may have these values.

Retrigger Loop is the default. It will cause the playback position of the Mobius loop to be adjusted to bring it into alignment with the external loop. This is how realign works in all other sync modes.

8.3.3.1 Out Sync Realign Mode = Retrigger Loop

Loops that are the MIDI sync master are still in effect "slaves" to an internal timer that controls the generation of the MIDI clocks. Realign is always delayed until a pulse is received from this timer. When Realign Time is Immediate the realign happens on the next pulse which is will be very soon after the realign function is executed.

When Realign Time is Subcycle, Cycle, or Loop we perform the realign on the next sync pulse after the slave loop has passed one of these quantization points. Because we receive a lot of closely spaced timer pulses, the realign should happen very soon after these quantization points.

When Realign Time is set to External Loop the realign is delayed until we receive the pulse that represents the external loop start point. This is a common option when using MIDI master sync because there is typically a drum pattern playing, and it makes the Mobius loop realign exactly when the drum pattern reaches the down beat of the first measure.

8.3.3.2 Out Sync Realign Mode = Send MIDI Start

This is a special realign mode that is only available when using MIDI Master Sync. Rather than making adjustments to the Mobius loop to bring it into sync with the external loop, we will tell the external loop to restart itself to bring it into alignment with the Mobius loop.

What happens is that a MIDI Start message will be sent exactly when the Mobius loop reaches its start point. This should cause the drum machine or sequencer to restart its pattern at the same time. The Mobius loop and the external loop will then be both aligned at their start points.

Note that when using this special mode, the realign only happens when the Mobius loop reaches its start point. This means that the Realign Time parameter is ignored.

This option is essentially the same as using the MIDI Start or Mute MIDI Start functions as described in the Realign Alternatives section.

8.3.4 Realign Alternatives - MIDI Start and Mute MIDI Start

For loops that are the MIDI Sync Master there are two additional functions that can be used to bring the Mobius loop and the external loop back into alignment. These can be used instead of the Realign and Mute Realign functions.

The MIDI Start function will be automatically quantized to the Mobius loop start point, then it will send a MIDI Start message to the drum machine, sequencer or other device being slaved to Mobius. This should cause the slave device to restart its pattern. The Mobius loop and the external loop will now be both aligned at their start points and begin playing in alignment.

The Mute MIDI Start function behaves the same way, but first it does an unquantized Mute function to silence the Mobius loop, then when the start point is reached it unmutes the Mobius loop at the same time as it sends the MIDI Start message.

The effect is essentially the same as Out Sync Realign Mode = Send MIDI Start. You might prefer this though if you are using Sync Mode = Out Manual because you won't need to reserve another footswitch for the Realign function. Since you will already have a footswitch assigned to the MIDI Start function to get the slave loop started at the very beginning of the performance, you can use the same footswitch to realign the slave loop later.

8.3.5 Realign Alternatives - Sync Start Point

The Sync Start Point will make the Mobius loop start point match the external loop start point. When the function is executed it schedules a pending Start Point function and waits for the external loop start point. When the pulse representing the external loop start point is received, it executes the Start Point function.

This is arguably not a "realign" since we're not changing the positions of either the Mobius loop or the external loop. Rather we are saying that we want to make the current dealignment permanent. Once Sync Start Point is done, a Realign function will restore the Mobius loop and the external loop to the positions they had after the Sync Start Point, this may be different than the alignment the loops had when they were first recorded.