Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Installation Getting Started Exploring Techniques Synchronization Reference Using Scripting Using OSC to control Mobius
Contents
1 2 3 3.1 3.2 4 5 5.1 6 7 7.1 8 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 10 11 Introduction Documentation Installation Windows Installation OS X Installation Running Standalone Mobius Audio Device Configuration Audio Device Recommendations The First Loop MIDI Device Configuration MIDI Device Recommendations Other Control Options Mobius Plugin Recommended Hosts Plugin Insertion Plugin Pins Dual Window Mode Plugin MIDI Devices Plugin Parameters VST Patches Bypass Audio Input Monitoring Plugin Audio Devices and Latency Compensation Tuning Latency Next Steps
1 Introduction
Welcome and thank you for your interest in Mobius, the world's most powerful livelooping software! If you already know what Mobius does, you may skip ahead to the Documentation section.
If you're still wondering what the heck is this looping thing is all about, Mobius essentially lets you to make live audio recordings and play them back in an endless loop. While a loop is playing you may add to it and modify it in many ways. One of the most common uses for a looper is to record background parts for "one man band" solo performers but this is just scratching the surface of what Mobius can do. If you would like more information on the history and evolution of looping techniques the Loopers Delight web site is the best place to explore and learn. Mobius was inspired by many hardware and software loopers of the past and present, but most of its core features can be traced to the Gibson Echoplex Digital Pro (EDP) with Loop IV software. Though not technically an emulator, if you are familiar with the EDP you should feel at home. From a foundation of EDP features, Mobius adds multiple tracks, chromatic pitch and speed shifting, instant loop editing, scripting, and much more. Be warned that Mobius is a complex program with an enormous number of options. Many people say that it is "too complicated", the user interface is "ugly", and the documentation is "boring". All of these are true. If you are looking for a DL-4 emulator with photo realistic knobs you can just plug in and play then look elsewhere. If you are looking for a new musical instrument you can customize to work the way you want it to, then you've come to the right place. Just be prepared to do some reading and ask a lot of questions. If you decide to take the plunge, we strongly recommend you join the Mobius Support Forums . This is where most Mobius discussion happens. Mobius free because it is people like you that have helped make Mobius what is today. All we ask is that you report bugs and help diagnose them. You are also encouraged to send feature requests. We can't guarantee that we'll implement every request but just knowing what people want to do helps us make design decisions that may make those things possible in the future. Thank you for helping us make Mobius better, we hope you enjoy it!
2 Documentation
Because Mobius is a complex application, the documentation has been broken up into several parts to make it easier to digest. The documentation is installed with the product and is also available on the web at the Mobius Document Index . If you are new to Mobius, please read at least the Getting Started With Mobius manual before you begin. Then at least skim Exploring Mobius to become familiar with some of the more advanced features. The other manuals go into more depth on techniques and options, you won't need to read these right away but you should return to them once you become more comfortable with the basics.
Getting Started With Mobius - Introduces fundamental Mobius concepts and the user interface Exploring Mobius - Explains more advanced concepts, control options, and customization Mobius Techniques - Tutorials on some of the commonly used looping functions and techniques
Mobius Synchronization - Explains how to synchronize Mobius with other devices and applications Mobius Reference - A complete reference of all functions, parameters, and internal variables Mobius Scripting - Explains how to write Mobius scripts
3 Installation
Read the sections Windows Installation or OS X Installation for the installation steps specific to your operating system. If you are upgrading a previous installation, usually you just install the new version over the previous version. All of your previous device setups, bindings, and other configuration will be preserved. While you can have more than one version of Mobius installed, this is not recommended. When Mobius runs, it reads configuration files from a directory that is shared by all installations on the machine. If you try to run Mobius binaries from an old version with newer configuration files, Mobius may not work properly. If you try to run new Mobius binaries with older configuration files, the files may be automatically upgraded and will no longer work with the binaries from the older version. The one exception to this rule is that you are allowed to run a 1.x version of Mobius and a 2.x version at the same time.
All of your custom configuration settings are stored in the installation directory in two files: mobius.xml and ui.xml. Unlike other applications, customizations are not stored in the Documents and Settings directory for your user account. This means that if you delete the installation directory you will lose your customizations. If you wish to reinstall or upgrade, do not run the uninstaller or delete the current installation directory. Just install into the same directory that was used by the previous installation. All of your customizations will be preserved.
3.2 OS X Installation
Mobius is supported on OS X 10.5 or later on Intel machines. The older version 1.42 is a universal binary that will run on 10.4 PPC machines but this is no longer maintained and is not recommended for new users. Mobius is distributed as standard installation package. Once it is downloaded, opening it will launch the OS X Installer which will guide you through the installation steps. Four folders will be created:
/Applications/Mobius 2 - The standalone application and example files /Library/Audio/Plug-Ins/Components/Mobius 2.component - The Audio Unit plugin /Library/Audio/Plug-Ins/VST/Mobius 2.vst - The VST plugin /Library/Application Support/Mobius 2 - The folder containing configuration files
The configuration folder contains mobius.xml, ui.xml, and host.xml. This is also commonly used for user written scripts. NOTE: If you are upgrading from an earlier Mobius release, you will have two application folders. /Applications/Mobius normally contains the version 1 installation and /Applications/Mobius 2 contains the version 2 installation. You can use both versions at the same time. This will allow you to experiment with the new features in 2.0 but still return to the previous release if you encounter problems. To install a later release of Mobius version 2, you simply run the installer again and it will replace the files in the application folder and the two plugin folders. It will not replace the configuration folder so all of your previous configuration will be preserved. It is possible to have both Mobius version 1 and Mobius version 2 installed at the same time. It is however not recommended that you have more than one minor version installed. For example you may have both version 1.45 and 2.0 installed, but not 1.42 and 1.45 or 2.0 and 2.1. Each major release of Mobius stores configuration information in a shared location, /Library/Application Support/Mobius for version 1 and /Library/Application Support/Mobius 2 for version 2. Different minor versions may change these shared configuration files so once you upgrade to 1.45 you will not be able to go back to 1.42. If you are upgrading to a minor release number, it is a good idea to make backup copies of the Application Support files in case you need to downgrade.
Even if you intend to use Mobius as a VST or Audio Units plugin, it is recommended that you start using it as a standalone application. Plugin host applications add a another layer of complexity to the setup process, when you are just getting started it can be difficult to tell whether a problem is caused by Mobius or the host application. There are also some user interface customizations that can only be performed in the standalone Mobius window. Once standalone Mobius has been configured and is working properly, you can advance to using the plugin. The Mobius Plugin section discusses this in more detail. To run standalone Mobius you must configure audio devices, this is described in the Audio Device Configuration section. Most people will also want to configure one or more MIDI devices such as footswitches or control surfaces. This is described in the MIDI Device Configuration section. On Windows, you run Mobius by selecting the Mobius item with the blue orb icon from the start menu, or by running mobius.exe from the command line. On OS X, you run Mobius by clicking the application icon from the Mobius 2 folder inside the Applications folder. After running Mobius you should be greeted with a window that looks similar to this:
If you use OS X, you will see two selection panels, one labeled Input Device and one labeled Output Device. Normally you select the same device for both input and output but this is not required. On OS X you are always using a Core Audio device driver which will usually have low latency.
OS X Audio Device Configuration Window If you use Windows, life is a bit more complicated. There are three selection panels, one labeled ASIO Devices, one labeled Input Device and one labeled Output Device. You should always select an ASIO device if one is available as these have the lowest latency. An ASIO device will provide both inputs and outputs so you only need to make one selection.
PC Audio Device Configuration Window If you do not have any ASIO devices on Windows, you may select an MME device. You must select one device from the Input Device panel and one device from the Output Device panel. If you have more than one audio device, normally you will select the same one for both input and output. MME devices tend to have very high latency, they are fine for exploring Mobius features but are not recommended for serious use. At the bottom of the dialog you will see a set of fields with labels Suggested Latency Milliseconds, Override Input Latency Frames, and Override Output Latency Frames. Leave all of these fields empty. Do not press the Calibrate Latency button. Once Mobius is configured and working properly, read the Tuning Latency section for more information about optimizing latency for your system. Once you have selected an audio device click the Ok button to close the window.
If your interface has channels on both the front and back, it may be unclear which ones are 1 and 2. If you've tried sending a signal through all of the devices inputs and you still see nothing flickering in the Mobius window, post a message on the forum and we will try to help. If you see that lovely audio meter flicker, click the button labeled Record at the top of the Mobius window. You should see some numbers in the center of the window changing. Play something on your instrument, then click the Record button again. What you recorded should start playing back in an endless loop. If you don't hear anything, make sure you have speakers or headphones connected to the first pair of output channels on your audio device. If you have a device with multiple channels try connecting speakers to all of the other channels. If you still don't hear anything, post a message on the forum. If you hear your first loop playing, congratulations! If you hear some "clicks" or "pops" while the loop is playing there are two common explanations. The first is that the instrument level is too high and you are having digital "clipping". Try lowering the instrument level and try again. Clicks can also happen when the default latency setting for your audio device is too low. Read the Tuning Latency section to learn how to raise the latency. NOTE: One common error when setting up a software looper is having the audio output of the looper feed back into the input. For example, it is common to have several sound sources connected to a mixer, then have the mixer output connected to the input of the audio device. If the output of the audio device is also connected to the mixer, you can have feedback. When Mobius is overdubbing, anything that is currently playing may then be included in the overdub (with a slight delay). The loop will become increasingly louder and sound "metallic". If the output of the audio device is connected directly to the speakers this should not be a problem. If you are using a mixer, you will have to find a way to exclude the channel containing the audio device output from the "bus" being sent to the audio device input. If you are familiar with Mackie mixers, Mute Alt 3-4 combined with Control Room Source buttons can accomplish this nicely.
MIDI Device Configuration Window To configure MIDI devices open the Configuration menu and select the MIDI Devices item. There are two columns of device selection panels, the panels on the left select devices to be used when Mobius runs as a standalone application, the panels on the right select devices to be used when Mobius runs as a plugin. If you have MIDI devices that connect directly to the computer using a USB cable, the names you see should be similar to the name of the device like "Korg nanoKontrol". If you have MIDI devices that connect with MIDI cables to an external MIDI interface, the names you see will be usually be numbered port names like "Some Device Port 1", "Some Device Port 2", etc. When using MIDI interfaces make sure you select the same port that your MIDI device is connected to. When selecting devices it is important to select only the ones that you really need. You can select as many input devices as you want, but if Mobius will only be receiving commands from one of them it will waste time looking at messages from the others. If you run Mobius as a plugin, it is very important that you only select devices that are not also being opened by the host application. If both Mobius and the host try to use the same device this can cause problems like commands being performed twice, and in some cases even crashes. Selecting MIDI devices for the Mobius plugin is rare, you usually let the host manage the MIDI devices and have it route MIDI into and out of the plugin. This is discussed in more detail in the Mobius Plugin section. Input Devices are selected if you want to receive MIDI commands to control Mobius. When you run Mobius standalone you almost always select at least one input device. When you run Mobius as a plugin you almost never select an input device. Instead you let the plugin host manage the MIDI devices and you let the host route MIDI into and out of Mobius. Output Devices are selected if you want Mobius to send messages to another hardware device or plugin. The most common use for this is to send MIDI clock pulses to a drum machine or sequencer. Using scripts it is also possible to send any MIDI message to another device to do things like changing patches or triggering samples. If you are running Mobius as a plugin, selecting an output device is common in one special case: sending MIDI sync pulses through a "loopback" device to control the tempo of the host application. This is discussed in more detail in the Mobius Plugin section. If you are not intending to send MIDI pulses to another device or to the host application, you normally will not select an output device. Through Devices are selected if you want to send a copy of the MIDI message received from the input devices to other devices. This is relatively uncommon, but you might want to use this if the footswitch can send commands to both Mobius and something else, and you don't have a MIDI splitter. All MIDI messages received by the input devices are simply sent immediately to all the through devices.
send MIDI commands to a drum machine or other device that can only be connected with MIDI cables. If all of the devices you want to use can connect directly to the computer with USB cables, then you do not need a MIDI interface. If you do need a MIDI interface, there many relatively inexpensive ones available. Unlike audio interfaces, MIDI interfaces are not very complicated and almost anything from a reputable brand will work fine. The simplest interfaces will little more than a cable with a pair of MIDI in/out connectors on one side, a USB connector on the other and a "lump" in the middle. Larger interfaces will support more than one input and output port. If you only need to use the MIDI interface with Mobius a simple "1 by 1" interface is enough. Popular brands include M-Audio, E-MU, and MOTU. Before you by a MIDI interface though, check to see if your audio interface also includes one. Many audio interfaces also include a 1x1 MIDI interface. Probably the most asked question regarding MIDI devices is "what's the best MIDI footswitch"? Unfortunately there isn't a very large selection of MIDI footswitches and most are rather expensive. By far the most popular MIDI footswitch used with Mobius is the Behringer FCB-1010. In many ways it is the ideal footswitch: it sends note on and off messages, it has "banks" so you can assign up to 100 Mobius commands to switches, and it has two integrated expression pedals to control track level and feedback, and at $150 USD it is among the least expensive footswitches available. The problem many people have with it is that it is large. It takes up a lot of floor space and dragging it to gigs can be inconvenient. There are smaller footswitches available but most of them cost several times more. If you are new to MIDI and are unsure of what would be best for you post a message to the forum and we'll try to help. When you look for footswitches there are two important things to consider: does it support "momentary" switches and does it support "banks". A momentary switch is one that sends a MIDI message when you press it and also when you release it. Some switches will send note messages (Note On when pressed Note Off when released) and some will send continuous control messages (CC greater than zero when pressed and CC zero when released), both of these types can be used with Mobius. While you can do basic looping without momentary switches, if you want to use some of the more advanced features like "sustain functions" or "long press behavior" you will need momentary switches. Many of the cheapest footswitches were designed for keyboard players to select patches and they only send MIDI program change messages. Switches that only send program changes are not momentary. The concept of "banks" is common but manufacturers call it by different names. A bank is basically a set of MIDI messages assigned to each switch and different banks can cause the switches to send different MIDI messages. For example bank 0 of the popular FCB-1010 might send MIDI note numbers 0 through 9, bank 1 would send note numbers 10 through 11, etc. Banks are important because there are literally hundreds of things in Mobius that could be assigned to a MIDI message. With footswitches that don't have banks, you will be limited to a small number of things you can control with your feet. Footswitches that support banks typically have a set of "up" and "down" switches to scroll through the banks. The FCB-1010 has 10 banks of 10 switches allowing you to send 100 different Mobius commands. There are other footswitches that work great with Mobius and are relatively small such as the GORDIUS Little Giant and the Rocktron All Access. Unfortunately they are several times more expensive than the FCB-1010, but if money is less important than size, definitely check those out.
A control surface is typically a device that tries to emulate a mixer track strip, usually with a fader and one or more rotary knobs for each track. While we don't think these are as essential as a footswitch, they are very nice for adjusting Mobius track output levels, input levels, pan, and feedback. There are many choices here that vary greatly in size and features. The Korg Nano series are inexpensive and small. The Novation Remote series combines a control surface with a keyboard which is handy for chromatic pitch shifting. Behringer, Mackie, M-Audio and AKAI all make interesting control surfaces. If you aren't sure what you need we recommend you first spend some time learning what you can do with Mobius tracks, then look for the controller that meets your needs. As usual, forums are a good source for reviews and advice.
9 Mobius Plugin
On Windows, Mobius may be used as a VST plugin. On OS X Mobius may be used as either a VST plugin or an Audio Units plugin. Be sure to read the Installation section and make sure the plugin files have been copied to a place that will be seen by your host application. Host applications vary widely in how they deal with plugins. Even hosts that operate in similar ways may use different terminology when talking about plugins. This makes it difficult to write a comprehensive document on using the Mobius plugin. We will give you some general guidelines and go into some detail on a few popular hosts, but it is simply not possible to document how to use Mobius in every host application. If you have never used a plugin with your host before, try starting with a simple plugin like a digital delay or soft synth to become familiar which using plugins in your host. Mobius is an unusual plugin. Most plugins fit into one of two categories, they are either effects or synths. Typical effects plugins are compressors, filters, and reverbs. They receive audio, and send out processed audio, and they don't support MIDI control. A synth plugin normally receives MIDI events, sends out audio, but does not receive audio for processing. Mobius is like a combination of an effect and a synth. It needs to receive and send audio like an effect, but it also needs to receive MIDI events like a synth. Many hosts, particularly older DAWs, have trouble with this. They either can't support the dual nature of the Mobius plugin, or they require complicated configuration to make the necessary connections.
Mobius is also unusual in that it supports 16 input and output channels or "pins". The vast majority of effects plugins only support a single set of stereo input and output channels. Some hosts will simply refuse to load Mobius because it has more than 2 channels. Others will load it but will only let you access the first 2 channels. Some hosts do not let effects plugins have direct access to MIDI devices. Instead they control plugins only through "parameter automation". In this style of host, the plugin advertises a set of parameters that may be controlled by the host. The host then allows the user to set up associations between MIDI events and these parameters. In this situation, you have to configure the Mobius functions and parameters to make available to the host. Then you do all of your MIDI mappings in the host. While this works it can be difficult to set up, and the host may not support parameters that behave like "momentary buttons" which will prevent you from using some Mobius features. Then there is synchronization. Mobius is also unusual in that it tries to provide synchronization of loop recording with the host's transport controls if it has them. Unfortunately hosts differ radically in how they implement the horrible VST specification, so trying to get synchronization to work on a new host is almost always a problem. If this is starting to sound scary, unfortunately it is. There are several popular hosts that work well for Mobius and we try to support them whenever they have a new release. But we simply cannot guarantee that Mobius will work with every host out there, and we don't have the resources to even try. If you have a problem with your favorite host and are willing to spend some time with us to diagnose them, we may be able to work with you. But otherwise you will have to consider one of the recommended hosts.
problems as the Recorder-style hosts but they can be better. Of these, Ableton Live is an outstanding host for Mobius and is actively supported. The Rack hosts attempt to simulate a hardware rack of effects and synths and most do not provide audio recording and editing. They are oriented toward "always on" plugins that are constantly responding to MIDI and audio in real time. Examples of this style include Apple Mainstage, Audiofile Engineering RAX, and Brainspawn Forte. These can be good hosts for Mobius but they are relatively unusual among the current user base so support may be spotty. Of these, we actively support Apple Mainstage. The Modular hosts typically present a user interface that uses pictures to represent plugins and other devices, and lets you draw "wires" to connect them. Examples of this style include Plogue Bidule, AudioMulch, Usine, and Max/MSP. Modular hosts are well suited for Mobius because they make it easy to visualize all of the input and output channels and make connections to them. They excel at creating "patches" combining effects and synths controlled by MIDI. They typically are not as easy to use for traditional linear audio and MIDI recording and editing. We use and recommend Bidule and AudioMulch.
post a message with your results on the forums or send us email. We are interested in compiling a list of those hosts that require this workaround. If the host does support multi-channel plugins then you have the option of having each Mobius track receive from and send to different channels. Mobius organizes channels into stereo pairs called "ports". Each track may be configured to have one input port and one output port. Assigning tracks to ports provides several useful performance options, such as having some tracks take input from a soft-synth rather than live audio. You may also insert a different effects plugin after the output of each track, making each track sound different even though they are driven by the same input signal. This is described in more detail in the Track Setups section of the Getting Started manual.
should try to arrange to let the host manage the MIDI devices and route MIDI events into Mobius. There are two special circumstances where you might want the Mobius plugin to open it's own MIDI devices: 1. The host is unable to route MIDI events to an "effects" plugin 2. You want Mobius to generate a master MIDI clock to synchronize the host The first case used to be rare and only seen on very old hosts, but it is unfortunately becoming more common in modern hosts like Mainstage. The philosophy coming into vogue is that plugins shouldn't have to know anything at all about MIDI, they should get all of their control signals through plugin parameters. It is then the hosts job to associate a MIDI event with each plugin parameter. This works fine for your typical effects plugin with a dozen or so parameters, but Mobius literally has hundreds of parameters. Further some Mobius features like pitch and speed shift are meant to be controlled using MIDI notes like a synthesizer. It is possible to control almost everything using plugin parameters if necessary, this is described in the Plugin Parameters section. But depending on the host it may be more convenient just to let Mobius open a private MIDI device connected directly to your footswitch or control surface. To select a MIDI input device open the MIDI Devices dialog and find the device selector labeled Plugin Input Devices. Select the device that is connected to your MIDI controller. Note that some hosts may already be in control of the devices you select in Mobius, this can cause conflicts and in some cases crashes. If you select a MIDI device for the Mobius plugin you should configure the host so that it does not open the same device. Usually there will be a dialog where you can pick which MIDI input and output devices the host will use. Unfortunately some hosts simply open every available MIDI device. The other common reason to have the plugin open a MIDI device is to send master MIDI clocks to the host. Plugins cannot normally be the sync master for the host, but this is possible if the plugin can generate MIDI clocks sent to a "loopback" device. This is discussed in more detail in the Controlling Plugin Host Tempo section of the Mobius Synchronization manual. While it is possible to select a Plugin Through Device in the MIDI Devices window, we are not aware of an interesting use for this. If you find one let us know!
Because most hosts do not deal well with plugins that have more than a few dozen parameters, you must explicitly select the parameters to expose to the host. The default set of plugin parameters is:
Input Level Output Level Feedback Secondary Feedback Pan Selected Track Quantize Mode Switch Quantize
You may declare additional parameters in the Plugin Parameters dialog from the Configuration menu. The Plugin Parameter Bindings section of the Exploring Mobius manual has more information on configuring plugin parameters. As mentioned in the Plugin MIDI Devices section, some hosts only allow plugins to be controlled through parameters, direct access to MIDI events is not possible. For these hosts you can either configure Mobius to open a private MIDI device, or you can declare all of the functions you want to use as plugin parameters, and associate them with MIDI events in the host. Binding MIDI events with plugin parameters is complex and different in every host. If you are not familiar with this process, the best thing to do is post questions on the forum.
9.8 Bypass
It is important to note that when a plugin is bypassed that no audio is "flowing" through the plugin. Without a steady stream of audio flowing through the plugin the Mobius user interface will appear to be hung. If you need to silence the Mobius plugin yet still have it be responsive to keyboard or MIDI commands, you will need to use Mobius functions such as Reset or Mute rather than bypassing the plugin.
input level meter flickering, but you don't hear anything, you may need to enable input monitoring in Mobius. Bring up the Global Parameters dialog and find the parameter named Monitor Audio Input. Check the checkbox and click Ok. If you can now hear your instrument then you are monitoring "through the computer". This means that you will hear the effects that all the plugins in the chain, including Mobius, are having on your signal. This is a perfectly fine way to monitor but it has consequences, primarily that you may hear a latency delay between the time you do something on your instrument and you hear the processed sound. The alternative is to use some form of side chain monitoring, typically this is done with a hardware mixer outside the computer or with audio interfaces that support "zero latency monitoring". If your instrument is a MIDI controller, or if you are guitar player using an amp modeling plugin then you have little choice but to monitor through the computer since it is the plugins that are defining the sound of the instrument you want to monitor. If you are using external hardware go generate the sound you want to monitor, it is best to do side chain monitoring to avoid the latency delay. Something to be aware of is that when you have the Monitor Audio Input option checked, the sound you are hearing might have a "metallic" quality that sounds like "flanging". If you hear this it often means that there is some form of chain monitoring active that is being combined with the through-the-computer monitoring. Because the through-the-computer signal will be slightly delayed, when combined with the side chain it will sound very much like a flanging effect is being applied. In this case you either need to disable the side chain monitoring, or uncheck Monitor Audio Input. Also when you monitor through the computer, you normally want to disable Mobius latency compensation. Rather than have Mobius do the compensation, you are already compensating mentally by adjusting your playing technique by playing slightly "ahead". The reasons for this are complicated and discussed more in the Tuning Latency section.
Again, it is best initially to simply make sure that the two latency override values are empty or set to zero. Latency calibration is covered in more detail in the Tuning Latency section.
10 Tuning Latency
Latency compensation is a complex topic and we recommend that you not be obsessed with it when you are just getting started. If you are using an ASIO or Core Audio device driver, latency is so small that many people don't even notice it. For those new to looping, timing problems with the loop start and end points or the alignment of overdubs are more often due to footswitch technique than latency. If you feel you need to fine tune latency compensation you can go through the calibration process described in this section. Typically people use the latency calibration dialog to find the starting values, then manually tweak latency overrides by ear until they sound right. A common misconception is that latency is a fixed quality of a particular audio interface. If you buy audio interface X you will have low latency, but audio interface Z will have high latency. The brand of audio interface certainly has an effect on latency but there are many other factors that determine the minimum latency you can achieve. These include the speed of the CPU, the amount of memory, the firewire chipset, shared memory in the graphics card, wireless network adapters, and the other software you have running. Latency isn't something you can just add up based on your hardware and software. It is something you tune to be as small as possible without causing audio distortion. Tuning latency is similar to finding the maximum comfortable operating speed of a car. It may be possible to drive your car at 120 MPH but it may be noisy and hard to control at that speed. Setting latency too low is like driving a car too fast. You are putting demands on the computer that it may not be able to meet reliably. Raising latency is like slowing down your car, it may take longer to do some things but you'll arrive safely. The consequence of having latency too low is that you will "miss an interrupt" or have "buffer underrun". The audio device is constantly asking the computer for little blocks of audio to play. If the computer cannot respond in time the audio interface will leave a gap in the digital audio stream, this will sound like a harsh "click" or "pop". Raising latency gives the computer more time to respond to requests from the audio device so these audible glitches don't happen. Because looping is to a large degree delayed playback of previously recorded material, latency is actually much less of an issue than in an application like a virtual instrument. Latency is noticeable whenever an abrupt change in playback occurs, such as ending the initial recording, and unquantized functions such as loop switch, loop trigger, or trim. If you are "quantizing" functions, you may not hear any glitches because quantizing will delay the function long enough that we can compensate for latency. When you make an abrupt change, say a loop switch, Mobius will already have buffered some frames from the current loop. We can start buffering frames from the next loop, but they will be delayed a few milliseconds while we play the frames that are already in the buffer. What output latency compensation does is begin buffering
the next loop not from the first frame, but at an offset equal to the number of frames from the old loop that are already buffered. The bad effect is that a small portion of the front of the next loop will be skipped. The good effect is that when the next loop finally becomes audible, it will be at its proper playback position, the same position it would be in if there were zero latency. This is important if you are playing rhythmically and want the rhythm to be maintained during the switch. Without this there would be a few milliseconds of "extra time" inserted whenever you switch that is likely to annoy your drummer. When you are quantizing, Mobius is usually able to anticipate where the change in output buffering needs to occur so that the switch occurs seamlessly without loss. This early buffering of the next loop can cause an audible glitch if you cancel the switch (or change the target loop) very close to the point where the switch is scheduled. If we have already started buffering the next loop, a few milliseconds of it will still be heard before hearing the correct loop. In practice this should be a relatively rare problem as most people don't change their mind about which loop to trigger a few milliseconds before the trigger is to be performed. Latency compensation must also be performed to ensure that overdubs are aligned properly with the audio that was being heard during the overdub. Without compensation the overdub may sound slightly ahead of or slightly behind where it should be. Mobius uses information returned by the device to estimate the amount of latency compensation to be performed. This can be calculated with reasonable accuracy by knowing the number and size of the buffers used by the audio device driver. But there are other factors besides buffer size that contribute to latency, so sometimes the estimate is not correct and latency must be adjustment manually. At the bottom of the Audio Devices... dialog, there are two fields labeled Override Input Latency Frames and Override Output Latency Frames. After you select a device and reopen the dialog, the default latency adjustment values are shown to the right of these fields. If you enter a number into either field, it will override the default value. The easiest way to determine what these values should be is to perform a calibration. Click the Calibrate Latency button and another dialog will popup with information about the calibration process. In order to calibrate, you must physically connect the left or right output channel of the sound card to the left input channel of the same card. For most cards this can be done with a cable that has mini-plugs on both ends. If the sound card output is being sent to a mixer, you probably have a way to connect the output to the input in the mixer. This is called a loop back connection. Once you have made a loop back connection, click the Start button on the calibration dialog. If you are monitoring the sound card's output, you will hear a series of clicks. If the loop back connection is not correct, after about 10 seconds a message dialog will popup saying that calibration timed out waiting for an input signal. If this happens check your connections and try the calibration again. If the calibration was successful, a message dialog will pop up displaying the total measured latency, and the recommended values for input and output latency frames. Click the Accept button to copy these values into the latency fields of the Audio Devices dialog, or click Cancel to keep the current values. If you want to tweak the latency values manually, start by increasing the values for both latencies by 10 until it sounds right. You normally shouldn't have to add more
than a few hundred frames. If it is still way out of alignment, stop adding to the input latency and start making more radical adjustments to the output latency, up or down in increments of 500. If that is required, submit a bug report with information about your computer and sound card. To get a better understanding of what these values mean, you can think that at any moment in time Mobius is receiving sound that was performed a few milliseconds in the past, and is playing sound that will be heard a few milliseconds in the future. Input latency is the number of frames it takes a sound to "get into" Mobius. If you set input latency too low, you will be recording sound that was performed before the time you triggered the record function. If you set input latency too high, you will lose some of the sound immediately after you triggered the record function. It is more critical that input latency be correct because miscalibration can result in unwanted sound or loss of sound at the record start point. If an overdub sounds like it has the right content but isn't aligned properly, then adjust output latency not input latency. If you set output latency too low, overdubs will sound like they are playing too late. If output latency is too high, overdubs will sound like they are playing too early. Deliberately adjusting output latency too low can actually be useful to compensate for monitoring latency. If you perform live using monitor speakers some distance away, it will take a noticeable amount of time for the sound to travel from the speakers to your ears. If you are overdubbing to this sound, it may not be aligned properly on playback. Raising output latency can help bring the overdubs back into alignment.
11 Next Steps
If you have been able to install and configure Mobius and record your first loop, proceed to the Getting Started manual for more depth on the user interface and an introduction to the most common looping functions.
Contents
1 Introduction 2 Concepts 2.1 Channel 2.2 Port 2.3 Frame 2.4 Loop 2.5 Layer 2.6 Cycle 2.7 Subcycle 2.8 Track 2.9 Loop Switch 2.10 Synchronization 2.11 Function 2.12 Mode 2.13 Event 2.14 Quantization 2.15 Script 2.16 Parameter 2.17 Preset 2.18 Control 2.19 Setup 2.20 Project 2.21 Trigger 2.22 Sustainable Trigger 2.23 Target 2.24 Binding 2.25 Binding Scope 2.26 Sustain Function 2.27 Long Press 3 User Interface 3.1 Menus 3.2 Button Area 3.3 Status Area 3.3.1 Floating Track Strip
3.3.2 Instant Parameters 3.3.3 Loop Status Cluster 3.3.3.1 Counter 3.3.3.2 Audio Meter 3.3.3.3 Loop Meter 3.3.3.4 Mode 3.3.3.5 Beaters 3.3.3.6 Minor Modes 3.3.3.7 Sync Status 3.3.3.8 Message 3.3.4 Layer Bars 3.3.5 Loop Bars 3.4 Track Strips 3.4.1 Track Number 3.4.2 Loop Radar 3.4.3 Loop Status 3.4.4 Output Level Control 3.4.5 Output Level Meter 4 Controlling Mobius 4.1 Binding Popup Windows 4.1.1 Binding Set Selector 4.1.2 Bindings List 4.1.3 Selecting Targets 4.1.4 Selecting a Scope 4.1.5 Binding Arguments 4.1.6 Trigger Binding Fields 4.1.7 Command Buttons 4.2 MIDI Bindings 4.2.1 Selecting MIDI Triggers 4.2.2 Multiple MIDI Binding Sets 4.2.2.1 Multiple MIDI Bindings Example 4.2.3 Showing MIDI Bindings 4.3 Keyboard Bindings 4.3.1 Showing Keyboard Bindings 5 Using Mobius 5.1 Using Presets 5.1.1 Preset Window 5.1.2 Preset Switch Tab 5.1.3 Preset Effects Tab 5.1.4 Preset Other Tab 5.1.5 Setting Parameters 5.1.6 Managing Multiple Presets
5.1.7 Selecting Presets with Menus 5.2 Using Functions 5.2.1 Modal and Instant Functions 5.2.2 Major Modes 5.2.3 Minor Modes 5.2.4 Reset, Empty, Clear, and Silent 5.2.5 Record 5.2.6 Reset 5.2.7 Overdub 5.2.8 Undo and Redo 5.2.9 Mute and Pause 5.2.10 Multiply 5.2.11 Instant Multiply and Divide 5.2.12 Replace 5.2.13 Insert 5.2.14 Reverse 5.2.15 Speed Toggle 5.2.16 Next Loop 5.2.17 Shuffle 5.3 Using Controls 5.3.1 Input Level 5.3.2 Output Level 5.3.3 Feedback 5.3.4 Secondary Feedback 5.3.5 Pan 5.3.6 Other Controls 5.4 Common Parameters 5.4.1 Loops Per Track 5.4.2 Quantize Mode 5.4.3 Subcycles 5.4.4 Overdub Quantized 5.4.5 Switch Quantize 5.4.6 Empty Loop Action 5.4.7 Switch Location 5.4.8 Switch Duration 5.4.9 Enable Secondary Feedback 5.4.10 Record Threshold 5.5 Using Feedback 5.6 Using Tracks 5.7 Using Scripts 6 Next Steps 7 Troubleshooting
Mobius is just frozen, it doesn't do anything! Record Stops Suddenly I edited an XML file, now everything is screwed up! I registered my script files but they won't run
1 Introduction
This manual will help you quickly get started doing basic looping with Mobius. We will introduce some of the major concepts and terms, describe the user interface, and give examples of some of the most common ways to use Mobius. You are expected to have read the Installation Guide and completed a successful installation test. Once you have finished this manual, Exploring Mobius will give you more information about how Mobius can be controlled and customized. The Mobius Synchronization manual has detailed information about creating loops and tracks that play together in perfect synchronization. The Mobius Techniques manual has detailed information and tutorials for some of the major looping techniques. The Mobius Reference manual will have an exhaustive description of every function, parameter, control and variable. You can skim this to get a feel for what is available, but normally you should read this last. The Mobius Scripting manual will have all the details about how to write and use Mobius scripts. Most users will want to use scripts at some point but it is recommended that you first become comfortable with basic Mobius use.
2 Concepts
Mobius is a complex application and it is difficult to talk about it without using some unusual jargon. In this section we will introduce some of the fundamental concepts and terminology that you will see throughout the documentation. You should read this section before you read anything else. Don't feel like you need to fully understand everything right away, just read through it and remember the terms so that when you see them later you can return here for review.
2.1 Channel
A channel is a stream of digital audio samples. Channels correspond to the physical inputs and outputs of your audio interface, or to the "pins" in the VST or AU plugin. Mobius is continually receiving audio from two or more channels and continually sending audio out to two or more channels.
2.2 Port
A port is a collection of adjacent channels. Mobius always processes digital audio in stereo, so it organizes channels into stereo pairs, one for the left channel and one for the right. These pairs of channels are called ports. If for example you have an audio
interface with 8 input channels, channels 1 and 2 will be port 1, channels 3 and 4 will be port 2, and so on. Mobius does not currently support ports with more than two channels, such a the 6 channels necessary for 5.1 surround. This may be addressed in future releases.
2.3 Frame
A frame is the smallest unit of digital audio that Mobius will use. Frames consist of a set of samples of digital audio, captured at a moment in time from one Port. Currently Mobius always processes audio in stereo, so a frame always contains two samples, one for the left channel and one for the right. Most of the time you can think of a frame and a sample as the same thing. It is a single slice of audio, whether it be mono, stereo, or surround. So what is commonly called "sample rate" is really "frame rate" in Mobius.
2.4 Loop
A loop can be thought of as one independent digital audio recording. Loops are typically allowed to play from beginning to end then repeat indefinitely, but you can use loops in other ways. Loops may be of any length and contain audio from any port. After a loop has been recorded you may add more audio by overdubbing. A loop may be altered in many ways using Functions. Loops can be made to evolve over time using Feedback.
2.5 Layer
While you can think of a loop as one digital audio recording, it may actually be built from several pieces known as layers. When you record a loop for the first time it will have one layer. Every time you modify the loop with Overdub or some other loop editing function, a new layer is created. Layers are the history of the loop and you can change which layer is currently playing. The most common use for layers is to undo a change you don't want. For example, if you're overdubbing new audio and you play a wrong note, you can delete the current layer and return to the previous layer.
2.6 Cycle
A cycle is a subdivision of the loop. Loops initially will contain only one cycle, but through various operations such as Multiply additional cycles may be added. Cycles are always the same length. Cycles are sometimes the same as measures in music notation, but not always. Cycles are primarily of interest for Quantization.
2.7 Subcycle
A subcycle is a subdivision of a Cycle. The number of subcycles in a cycle is defined by a Parameter that can be changed at any time. Subcycles are sometimes the same as beats in music notation, but not always. Subcycles are primarily of interest for Quantization.
2.8 Track
A track contains a set of loops with Controls that determine how the loops are recorded and played. Mobius tracks are similar to tracks in other audio applications. All tracks can be playing at the same time and can be mixed together using traditional controls like output level and pan. If you are familiar with looping hardware you can think of each track as one hardware looper that can be used independently and mixed together. Tracks can contain several loops but only one loop can be playing at a time. This is called the active loop. Changing loops in a track is called Loop Switching. The loops in a track can be of any length but most of the time various Synchronization methods are used to create loops that are exact multiples of each other so that they are rhythmically compatible.
2.10 Synchronization
Synchronization is a very complex topic but basically it refers to techniques that can be used to create loops with precise control over their size. This is important if you want to create loops that play together with a consistent rhythm. It is practically impossible to create loops in different tracks that are exactly the same size just by tapping the start and end with a footswitch. They may be close but there will always be a few milliseconds of difference and the loops will gradually go out of phase if you let them play long enough. If you wish to create loops in different tracks that will play together without drifting apart, you will always want to use some form of synchronization. Synchronization can also be used to create loops that play in time with an external device such as a sequencer or drum machine.
2.11 Function
A function is a named action performed by Mobius at the request of the user. Examples include Record, Overdub, and Reset. Causing a function to be performed is called executing the function.
Mobius provides many functions, some like Record will be used frequently, others are used only is special situations. We will introduce the most commonly used functions in this manual, the rest will be discussed in the Reference Manual . The behavior of a function may be altered by setting Parameters Functions may be combined in complex ways using Scripts
2.12 Mode
A mode is a temporary state that a track can be in. Modes are usually caused by Functions. Some functions take effect immediately and are then finished. Other functions have both a start and an end time. Functions that have both a start and end time are called modal functions. While the function is active the track is in a mode. The current mode is displayed in the user interface. The most common example is Record mode. When the Record function starts the track enters Record mode, when it ends the track enters another mode, usually the Play mode. While you are in a mode, functions may have different behavior. A function that does one thing when in Reset mode may have a different behavior when in Switch Quantize mode. This will be discussed in the detailed documentation for each function.
2.13 Event
An event is an action Mobius performs at a certain time in the future. Events are scheduled during the execution of a function. A function may schedule more than one event. In the user interface, events are displayed on a timeline so you can see what will be happening as the loop plays. Each track has its own list of scheduled events. The most common use for events is to perform a quantized function.
2.14 Quantization
Quantization causes the execution of functions to happen at a precise time. When quantization is disabled functions are executed immediately. When quantization is enabled, the execution of the function will be delayed until the next quantization boundary. Quantization is frequently used to build loops that have a regular rhythmic quality. The three quantization boundaries are Loop, Cycle, and Subcycle. You will see several phrases in the documentation used to describe the effects of quantization, such as "when quantizing", "during quantization", or "quantized function". All of these refer to the same concept.
2.15 Script
A script is a text file containing statements in a programming language. Scripts allow you control Mobius in very complex ways. In the simplest case scripts can be used as "macros" to perform a set of functions at exactly the same time. In more complex cases scripts can use conditional logic to adjust their behavior depending on what is currently happening. Scripting is a complex topic that will be covered in detail in the Mobius Scripting manual. For now you can think of scripts as a way to extend and customize the builtin Mobius functions. You don't need to understanding scripting right away, but most people will eventually use them.
2.16 Parameter
A parameter is named value that can be changed to control how Mobius behaves. There are four categories of parameters: global parameters, setup parameters, track parameters and preset parameters. Global parameters define general operating characteristics such as whether input monitoring is enabled, or the amount of latency compensation. Global parameters are usually set in a popup window opened by the Global Parameters item from the Configuration menu. Preset parameters change the way functions are performed, examples include Record Threshold, Quantize Mode, and Subcycles. Most of the time when we talk about parameters we are referring to preset parameters. Preset parameters are usually set in a popup window opened by the Presets item from the Configuration menu. Setup parameters define characteristics shared by all tracks, primarily these are related to synchronization. Track parameters define a few characteristics of each track such as the track name, group number, and input focus. These are relatively unusual and are used mostly in scripts. Parameters have a type which determines how they are shown in the UI and used in scripts.
Integer - a small positive number String - a short line of text Boolean - a true or false value, displayed as a checkbox Enumeration - one of a fixed set of values, displayed as a menu
2.17 Preset
A preset is a named collection of parameter values. While you can change parameters individually using MIDI or scripts, you will usually change parameters in bulk by selecting presets. You may need only one preset, or you may define several with parameters chosen for different looping styles. Each track has an active preset that may be changed at any time, even while a loop is playing. Each track may have a different active preset.
2.18 Control
A control is a named value that controls how audio is recorded and played in a track. Controls are similar to Parameters but their values are always integers and they have a larger range than most parameters. They are usually set by a MIDI device that sends continuous controller messages such as a rotating knob or a foot pedal. There are five built-in controls: Input Level, Output Level, Feedback, Secondary Feedback, and Pan. See the Using Controls section for more information.
2.19 Setup
A setup is a named collection of parameters, presets, and controls for all tracks. Setups also contain parameters that define how the tracks will be synchronized. You may define several setups to configure tracks in different ways. There is always one active setup. Setups may be changed at any time, even while loops are playing. Note however that tracks may not immediately change to include everything in the new setup. If a track is already playing a loop, synchronization options defined in the setup will not take effect until the track is fully reset. There are many ways to use setups, but usually they are designed with a particular performance piece in mind. You can name each track to indicate which instruments will be used in them, define a level and pan mix for those instruments, decide which preset to use in each track, and decide how the tracks will be synchronized.
2.20 Project
A project is a complete snapshot of Mobius state. It includes the current Setup plus the current control settings for each track which may be different than the setup. It also includes all of the audio content: tracks, loops, and layers. Once a project has been saved it may be loaded back into Mobius at a later time. Projects are not saved as a single file on the file system, there is a project directory file contain all the non-audio information, plus one or more audio files for each loop. The audio files are stored as standard wave files and may be loaded into other music applications.
2.21 Trigger
A trigger is an external stimulus that causes Mobius to do something. There are several types of trigger:
User Interface - clicking a button or turning a knob with the mouse Computer Keyboard - pressing and releasing a key MIDI - receiving MIDI messages from a foot controller or control surface Plugin Parameter Automation - receiving messages from the VST or AU host application OSC - receiving messages in the Open Sound Control network protocol
While Mobius supports all of these trigger types, by far the most common trigger is a MIDI foot controller, which are often called footswitches. Because of this, you will see phrases like "tap the Record switch" or "press Reset" in the documentation. Just remember that while we usually talk about MIDI footswitches, you can also do the same things with other triggers types.
UI Button Computer keyboard key MIDI Note MIDI Continuous Control OSC message
With UI buttons, Mobius is notified when the mouse button is pressed and when it is released. Similarly with computer keyboard keys, Mobius is notified when the key is pressed and released. With MIDI notes, Mobius expects to receive a NOTE ON message when the key (or footswitch) is pressed and a NOTE OFF message when the key is released. With MIDI control changes, Mobius will treat a non-zero CC value as "on" and a zero value as "off". This is useful for some footswitches that cannot send MIDI notes. MIDI Program Change messages are however not sustainable. There is no on/off state for a program change. If you are just starting Mobius you do not need to fully understand sustainable triggers, except for one common problem. If you are using a MIDI controller that sends note or continuous control messages you must make sure that the controller sends messages when you press a switch and when you release a switch. This is usually called "momentary" mode. If your controller operates in "toggle" mode or if it does not send messages at all when the switch is released Mobius will not work correctly. The most common problem caused by this is pressing a switch to do the Record function and having the record continue for about 1/2 second then stop. See the Record Stops Suddenly item in the Troubleshooting section for more information.
2.23 Target
A target is anything in Mobius that can respond to a Trigger. These include Functions, Controls, Parameters, Presets, and Setups. For example triggers can be used to start and stop a function, to change the value of a control, or to select a preset.
2.24 Binding
A binding is the association of a Trigger with a Target. Once a binding is defined, every time a trigger is received it will be sent to the target. A simple example is to bind the computer keyboard key 'R' to the function Record. Once this is done, every time you press R a recording will start or stop. Most users will bind MIDI messages from a footswitch or control surface to functions and controls so they can operate Mobius without being near the computer. In the user interface, bindings are created using several popup dialog windows for each trigger type. Just remember that while the user interface may be different they're all doing the same thing, associating a trigger with a target.
Not all functions have long press behavior, if they do it will be highlighted in the documentation for that function, these are referred to as "long press functions". If a function supports long press, you must use a Sustainable Trigger in order to use it. If you use a long press function with a non-sustainable trigger such as a MIDI program change, the long press behavior will never activate. A common problem that new users encounter is trying to bind the Record command to a trigger that sends a MIDI NOTE ON message but does not send a corresponding NOTE OFF message. This can happen with some footswitches. What happens is that the recording starts but within 1/2 second the loop resets. Mobius keeps waiting for the NOTE OFF but it never comes so it activates the long press behavior and resets the loop. If this happens to you then it is almost always a problem with the footswitch. This problem is also common when you try to bind the Record function to a plugin host parameter if the host does not support the "momentary button" concept.
3 User Interface
The Mobius window is divided into three areas. The button area at the top is where the configurable function buttons are arranged. The status area in the center contains many components that display the status of the current loop in the active track. The track strips at the bottom have controls and status indicators for each of the tracks.
Each of these areas is highly customizable. You can remove things you don't want and add optional things that aren't shown here. In the status area you can move the components around to create alternate layouts that might look better to you. This ability to customize the display is one of the reasons why Mobius has a rather primitive appearance compared to most modern applications. Photo-realistic brushed aluminum faceplates with bouncing analog needles will not be found here. In this manual we will only talk about the default user interface. See Customizing the User Interface in the Exploring Mobius manual for more information on changes you can make to the user interface.
3.1 Menus
Configuration of Mobius is performed using a set of popup dialog windows you open from the menus. There are several ways to access the menus depending on which operating system you use and whether you are running Mobius standalone or as a plugin. In all situations, the Mobius menus are accessible when you right-click the mouse button somewhere inside the status area. A popup menu will appear near the current location of the mouse. When Mobius is running standalone an application menu bar is also available. Under the Windows operating system, the application menu is displayed at the top of the Mobius window. Under the OS X operating system, the application menu is displayed at the top of the screen when the Mobius window is selected.
When Mobius is running as a VST or AU plugin, the application menu bar is usually not available. The one exception is under Windows when the Dual Plugin Windows option is enabled. In this case, Mobius is in full control over the window and adds a menu bar. We will talk frequently about opening various configuration windows. These are all opened by first selecting Configuration from the main menu, then one of the submenu items that appear.
Multi-line button area See Customizing Buttons in the Exploring Mobius manual for more information on changing buttons.
Default status area component outlines As you add or move components in the status area you may notice that some of the components are erased with a black rectangular area. This indicates that one or more components overlap. When this happens you need to use Z to switch to outline mode, and drag the components so that they no longer overlap. To drag a component in outline mode, click on it with the left mouse button, hold the button down, and move the mouse to a new location.
Moving components is not necessary unless you customize them and sometimes after upgrading to a new release. See Customizing the Status Area in the Exploring Mobius manual for more information on changes you can make to the status area.
Default floating track strip As you select different tracks the knobs will be redrawn to display the current levels in that track. To change the value of a knob, press and hold the left mouse button over the knob. To raise the value drag the mouse up or to the right. To lower the value drag the mouse down or to the left. Release the mouse button when the desired value is reached. See the Using Controls section for more information about what each of the controls do.
Default instant parameters When using the default set of keyboard bindings, you can change the highlighted parameter using the 8 (up) and 2 (down) keys on the numeric keypad. Use the 6 (right) and 4 (left) keys to change the selected value. Changes you make here are not stored permanently in the preset, they temporarily override the value from the preset. The original preset value will be restored as soon as you select a different preset, or you perform a Full Reset. You can change which parameters are displayed in this component, this is described in detail in the Visible Parameters section of the Exploring Mobius manual.
3.3.3.1 Counter The counter displays several pieces of loop information including the active loop number, the current playback position within the loop, and the current cycle within the loop.
Example Counter On the left is a small number that displays the active loop number. Recall that a track may contain any number of loops, but only one can be active at a time. In the center the larger digits show the current location in the loop in seconds. The digits to the left of the decimal point represent seconds, and the digits to the right represent tenths of a second. On the right are two smaller numbers separated by a slash. The number to the right of the slash is the number of cycles in the current loop, the number to the left of the slash is the number of the cycle that is currently being played or recorded. Cycles are created when you extend the loop using functions such as Multiply and Insert. Until you use those functions the loop will always have one cycle and the counter will always display 1/1. 3.3.3.2 Audio Meter The audio meter displays the level of the audio signal being received by the current track. It is a thin horizontal rectangle displayed between the Counter and the Loop Meter.
Audio meter showing the presence of a signal The audio meter will fill with color from the left to right as the signal becomes louder. The meter will usually flicker as the level changes. Note that the level displayed here is what mixing consoles call "post fader". It is the level of the track input after it has passed through the Input Level control and represents the level of the signal that will be recorded. 3.3.3.3 Loop Meter The loop meter is a very useful component that shows your current location in the loop using a graphical "thermometer". When you are at the loop start point, the loop meter will be empty. As the loop plays it will gradually fill with color until you reach the end point where the loop meter will be completely full. Then the meter is cleared and begins filling again.
To give you an even better idea of where you are in the loop, a series of tick marks is drawn under the loop meter. The longer marks represent cycles and the smaller marks represent subcycles. When you use quantization, functions may be delayed until some time in the future. When this happens an event is displayed under the tick marks with a small triangle showing when the event will happen. There may be several events scheduled to happen at the same time. In this example at the beginning of the 3rd cycle the loop will enter reverse mode and half-speed mode at exactly the same time. If the event triangle points up it means the event will happen as soon as the loop meter reaches that point. If the triangle points to the right (or the left if going in reverse) it means the event will happen during a later repetition of the loop. 3.3.3.4 Mode Recall that at any given time a loop is in a Mode, such as Reset, Record, or Play. The name of the current mode is displayed to the right of the Audio Meter.
The names of the possible modes are described in the section Major Modes. 3.3.3.5 Beaters The beaters are a set of three "lights" that flash briefly when the loop playback position reaches certain important points.
The first light flashes whenever a subcycle boundary is reached. The second light flashes whenever a cycle boundary is reached, and the third light flashes whenever the loop start/end point is reached. Watching the beaters can help give you a sense of the loop rhythm if you are overdubbing over a non-rhythmic loop. 3.3.3.6 Minor Modes The Minor Modes component displays a number of interesting loop states. These differ from the major Modes because a loop can be in any number of minor modes at the same time. The minor modes are displayed in a line above the Counter.
PitchBend PitchOctave PitchStep Reverse SpeedBend SpeedOctave SpeedStep SpeedToggle TimeStretch TrackMaster Window
See the Minor Modes section for more information on what each of these modes means. 3.3.3.7 Sync Status The Sync Status component is a small line of text displayed above the Minor Modes. When synchronization is enabled for the track, this component may display information about the nature of the synchronization.
For example, if the track is configured to generate a master MIDI clock this will display the tempo of the MIDI clocks. If the track is configured to follow an external sync source such as a MIDI clock or plugin host, the component will display the tempo of the external clock as well as the current beat and bar numbers. For MIDI, beat and bar numbers are guesses since MIDI clocks do not say what the time signature is. The way the counters work is every time we receive a MIDI start event we reset the beat and bar counters to 1. Then we start counting clocks, every 24 clocks is considered to be one beat. The number of beats in a bar is determined by the preset parameter named Record Beats/Bar. When this number of beats is received, we reset the beat counter back to 1 and increment the bar counter. 3.3.3.8 Message The Message component is used to display messages from scripts and a few messages generated internally by Mobius. It is a large rectangular area normally positioned under the loop meter and above the track strips. Because this component is normally invisible you will need to press the Control-Z key (assuming you have the default key bindings) to see where it is.
Whenever a preset is changed, Mobius will display the name of the new preset in the message area.
Scripts may use the Message statement to display a short message to let the user know what the script is doing. Messages from scripts will be displayed for a few seconds then be erased. The amount of time a message is displayed can be controlled by the global parameter named Message Duration. Using messages is an advanced topic that is primarily of interest to scripters. If you never intend to use scripts you can remove this component to save space, though this is not recommended since even non-scripters will often use scripts written by someone else.
Layer bars before undo Until you use the Undo function, the current layer will always be the last one displayed on the right. When you use undo, you move backwards to the previous layers. Each time you press undo you move back one layer. The highlighted layer will appear somewhere in the middle of the list.
Layer bars after undo The component can be constrained to have a fixed number of bars. The default maximum number of layer bars is 10. A loop may have more layers than this, but only 10 bars will be displayed. Once the number of layers is greater than 10, a small number is displayed in the upper left corner. This number indicates the number of layers that are not being displayed on the left.
Layer bars with maximum bars and overflow counter A special layer bar is displayed if you use the Checkpoint function. A checkpoint can be used to collapsing a number of layers together if you don't care about the layers in between two checkpoints. When you use Undo and Redo you will move between checkpoints and jump over all the layers in between. A checkpoint layer is shown in a highlighted color different than the color used for the current layer.
The loop bars component is not enabled by default because there are several other ways to show the current loop. The Counter displays the current loop as a number. There is also a graphical representation of the loops that can be displayed in the Track Strips that many people find more useful.
Default track strip The example above shows the default track strip components. Notice that the selected track will have a white rectangle drawn around its track strip.
4 Controlling Mobius
While you can control Mobius with the mouse by clicking on buttons and dragging knobs, most users will want to control Mobius using a MIDI footswitch or some other form of MIDI control surface. The keys on the computer keyboard also provide a convenient way to control Mobius. Recall from the Concepts section that a Trigger is an external stimulus that causes Mobius to do something. The most common examples of triggers are receiving MIDI events and detecting a computer keyboard key press. A Binding is the association of a trigger with a Target, the most common type of target is a function, script, or track control. By configuring bindings you can control almost every aspect of Mobius using MIDI or the keyboard.
Example Binding Window The binding windows for MIDI events, keyboard events, and plugin parameters all use this style of user interface with a few differences that are described in later sections.
On the left is the Bindings panel. This lists all of the bindings that are defined. The first column will have the name of the target, the second text representation of the trigger. The third arguments column contains the optional binding arguments.
Function Targets The Scripts tab will have a list of all loaded scripts. If you have not added any script files or directories from the Scripts configuration window then this tab will be empty. The Controls tab will have a list of all the built-in track controls. See Using Controls for more information on what these do. Control targets are almost always bound to MIDI continuous controllers.
Control Targets The Parameters tab will have a list of all the built-in loop and track parameters. Global parameters are not on this list.
Parameter Targets Parameter bindings are relatively uncommon, but one use for them is to bind a MIDI continuous controller to a parameter with a fixed set of values such as Quantize Mode. The MIDI controller range will be divided by the number of values in the parameter. With the MIDI controller at zero the first parameter value is selected, with the MIDI controller at 127 the last parameter value is selected. Other parameter values are selected as the MIDI controller sweeps between 0 and 127. The Configurations tab will have a list of all the user-defined presets, setups, and extended MIDI bindings.
Configuration Targets The name of the configuration will be prefixed with Preset:, Setup:, or Bindings: to indicate what it is. The example above shows a few of each type. If you are running Mobius for the first time, you should see only one preset and one setup in the list named "Default".
Configurations are commonly bound to MIDI program changes though MIDI notes and computer keys may also be used. When this trigger is received the preset, setup, or binding set is made active.
Scope Selector The most common use for scoping is to assign different MIDI continuous controllers to specific track Controls such as Output Level. This is typically done with control surfaces that have groups of faders and knobs similar to a mixing console. Each group of faders and knobs can be scoped to a specific Mobius Track. When you are just getting started we recommend you only use Global scope. The Advanced Control section of the Exploring Mobius manual has more detail on the use of binding scopes.
Command Buttons To create a new binding select a target, scope, and trigger and click New, a new binding will be added to the list. To delete a binding select it in the binding list and click Delete. To modify a binding select it in the binding list and notice that the target, scope, and trigger components change to have the values for the selected binding. Now change the target, scope, or trigger and click the Update button. The previous binding is changed to have the new values.
MIDI Trigger Fields The MIDI event type is specified with a menu containing these items.
Note - Note On or Note Off event Control - Continuous controller event Program - Program change event
The Channel field is used to select one of the MIDI channels from 1 to 16. The binding will only be executed if the MIDI event comes in on this channel. There is no omni mode, you must select a channel. The Value field is use to specify the note number, continuous controller number, or program change number. It is a text field, you must type in the number. To make it easier to create MIDI bindings, Mobius supports what is commonly called a "MIDI learn". The read-only text area below the Value field will show the MIDI events currently being received. To use this feature you must have previously selected one or more MIDI Devices. Just press keys or turn knobs on your MIDI controller and you should see them in the MIDI capture field. If you check the MIDI Capture box, the three trigger fields are changed to reflect the last MIDI event that was received. This makes entering the type, channel, and value for a MIDI binding much easier. The typical steps for creating MIDI bindings are:
1. 2. 3. 4.
Check the MIDI Capture box Select a target (function, control, parameter, or configuration) Select a scope Press a key, turn a knob, or move a fader on your MIDI device, the trigger fields should change to reflect the MIDI event 5. Click the New command button to add the binding
Binding Set Selector At the top of the MIDI binding window is the binding set selector The field at the top labeled Active Bindings is a menu containing all of the defined binding sets. The currently selected binding set is active the one that is active. Note that this menu is a little confusing because the first binding set named Common Bindings is always active so you use this menu to select which binding set you want active in addition to the common bindings. If Common Bindings is selected here it means only the common bindings are active with no extensions. If anything else is selected it means that that binding set is active and it will be combined with the common bindings. Below the active binding menu is a text field labeled Name which has the name of the binding set. The first binding set has no name, it is always displayed as "Common Bindings" and this cannot be changed. Extended binding sets may be given any name. When you first create them they will be given automatically generated names like "Bindings 1" and "Bindings 2". Edit the name field to set the preferred name, then click the Rename button. To create a new extended binding set click the small New button to the right of the active bindings menu. A new empty binding set is created and added to the menu. To delete a binding set, first select it from the active bindings menu then click the small Delete button. When you click Ok in the MIDI bindings window the extended binding set that is currently shown in the active bindings menu is made active. If you have been editing several binding sets be sure to leave the one you want to use now selected when you close the window. After you create extended binding sets, the binding sets themselves may be bound to a MIDI event, when that MIDI event is received it causes that set to be activated. Binding sets will be shown under the Configurations tab in the target selector.
4.2.2.1 Multiple MIDI Bindings Example While several uses for multiple MIDI binding sets have been discovered by users, the original goal of this was to provide more flexibility for the Ground Control Pro foot controller. This controller has some nice features but one unfortunate design choice is that it can only be configured with 12 "instant access" buttons. An instant access button is what you must use if you want momentary switches that send something both when they're pressed and when they're released. The problem is that there are no "banks" of instant access switches like there are on other footswitches, you only get 12 of them and what they send cannot be changed without reprogramming. To help work around this limitation you can create several extended binding sets that bind the same MIDI events from the instant access switches to different Mobius functions. In effect the binding sets become "banks" that reassign what the switches do. To switch between banks you then bind one row of switches (usually the top or bottom) to the binding sets themselves. For example switch 1 selects binding set A, switch 2 selects binding set B, etc. When set up in this way the top four switches are effectively bank select switches that change the behavior of the bottom 8 switches. This raises the number of Mobius functions at your disposal from 12 to 32.
Keyboard Binding Window The Trigger for keyboard bindings is specified with a single field labeled Key. This is a text field into which you type the name of the key you want to bind. The key names must follow certain rules, for example letters must be in upper case and control key combinations are written as "Ctrl+" followed by the key letter. It is possible to learn these rules but by far the easiest way to make key bindings is to check the Capture checkbox.
Keyboard Trigger Fields When key capture is checked, the name of any key you press, including combinations of shift and modifier keys, is automatically entered into the text field.
The Caps Lock key is not recognized as a shift modifier and cannot be bound. The Print Screen and Num Lock keys cannot be bound. The right Windows key may be bound, but cannot be used as a key modifier. The left Windows key may also be bound but it is not recommended since Windows will popup the start menu whenever this key is pressed. The keys in the number pad will have different names depending on the state of the Num Lock key. If Num Lock is down, the keys will appear as "Num 0", "Num 1", etc. If Num Lock is up, the keys will be duplicates of the arrow and page keys. Keeping Num Lock down will provide you with more unique keys to bind. The keys in the number pad are different than the number keys in the row above the letter keys. For example, "1" and "Num 1" may be bound to different functions. The typical steps for creating key bindings are: 1. 2. 3. 4. 5. Check the Key Capture box Select a target (function, control, parameter, or configuration) Select a scope Press a key with or without modifier keys on the computer keyboard Click the New command button to add the binding
Note that while it is possible to bind keys to track controls (Output Level, Pan, etc.) this is not normally done because keys cannot behave like continuous controllers. Keys are however Sustainable Triggers so they may be used with the sustain functions. If the key is bound to a sustain function, the function is active for as long as the key is pressed.
5 Using Mobius
In this section we will discuss some of the more common ways to use Mobius and describe some of the menu items and configuration windows. When you have finished this section you should have a good overview of what Mobius can do. The Mobius Techniques manual will go into more depth on functions and techniques. The Mobius Reference manual will have an exhaustive description of every function, parameter, control and variable.
functions are sensitive to one or more parameters so in order to understand what a function does, you need to understand the parameters that may effect it and what the parameter values mean. In this section we will not document what every parameter means, but we will show you how to change them. The Using Functions section will talk about how a few parameters are used with certain functions and the Common Parameters section will describe more parameters that are used with many functions. Parameters are usually set by using Presets, a named collection of parameter values. You may define several presets with different parameter values. Each track always has one active preset. Presets may be changed at any time and each track can have a different preset. To manage presets, open the Configuration menu and select the Presets item.
Preset Window
Effects Parameters
Other Parameters
Preset Management Components To create a new preset simply click the New button. A new preset is created and selected. The new preset will have a copy of the parameters from the preset that was selected when you clicked New. If you want to make a new preset that is similar to an existing preset, be sure to select the right existing preset before you click New. When a new preset is created it will be given a generated unique name starting with "Preset" followed by a number. To change this name, click on the Name text field and type in the desired name.
Renaming a new preset Next click the Rename button to save the name you entered into the preset. You must remember to click Rename.
Renamed preset
Once you have created several presets you can switch between them by using the Selected Preset menu at the top. The preset that is selected in this menu will become the active track preset when you click Ok on the preset window. If you are making changes to several presets, be sure to remember to select the one you want to be active before closing the window.
Selecting a preset To delete a preset simply select it and click the Delete button. The preset is deleted and removed from the selection menu. Be careful with the delete button, there is no "are you sure" prompt. If you delete a preset by accident click Cancel at the bottom of the preset window and open the window again. After making changes to one more presets that you are happy with, you must click the Ok button. If you click Cancel or the window close button all changes you have made will be lost.
Selecting a preset This menu will contain the names of all defined presets with a check next to the one that is active in the current track. To change presets simply select another one from the menu. If you just need to change presets without editing any parameter values using this menu is easier than opening the preset dialog.
So instead of saying something technically accurate like "perform the down transition of a sustainable trigger bound to the Record function" we will just say "press Record".
Reset - The loop is empty Run - A short-lived mode used during latency compensation, not usually seen Play - The loop is playing without being affected by a function Record - The Record function is active Threshold - The loop is waiting to begin recording until an audio signal of sufficient loudness is received Overdub - The Overdub function is active Multiply - The Multiply function is active Insert - The Insert function is active Stutter - The Stutter function is active Rehearse - The Rehearse function is active, and is in the review phase Rehearse Record - The Rehearse function is active, and is in the record phase Replace - The Replace function is active Substitute - The Substitute function is active Mute - The Mute function is active Pause - The Pause function is active Confirm - The loop is waiting for confirmation after a loop switch Switch - The loop is waiting for a quantize point before performing a loop switch
Synchronize - The loop is waiting for a synchronization point before beginning recording
Capture Master MIDIMaster Mute Overdub PitchBend PitchOctave PitchStep Reverse SpeedBend SpeedOctave SpeedStep SpeedToggle TimeStretch TrackMaster Window
The Reverse, Speed, and Pitch modes are called "effect" modes because they behave like applying audio effects to the track in real-time. The Master, TrackMaster, and MIDIMaster are synchronization modes you will see after recording the track that has been designated the sync master track. TrackMaster means that it is behaving as the track sync master, MIDIMaster means that the track is behaving as the MIDI sync master, and just Master means it is both track and MIDI sync master. Overdub is strange because it is both a minor mode and a major mode. Unlike other major modes if you start in Overdub mode then change to a different mode like Multiply when you leave Multiply mode you will return to Overdub mode. In effect the system always remembers if you started in Overdub mode and returns you there. This "pending" overdub mode is indicated by showing Overdub in the minor mode list. The Reverse, Speed, Pitch, and Overdub modes may be active while the loop is in Reset mode. Even though the loop is empty, the minor modes are "armed" and will become active once you start recording a new loop.
There are two important states that a loop can be in but the terms used to describe those states are sometimes used inconsistently in the forums and even in the documentation. Usually it is clear from the context what the meaning is, but in this section we will give precise definitions for these terms. When you first start Mobius, all loops are in a state called Reset. The loops contain nothing, they cannot be played or manipulated in any way until you record something into them. While the official term for this is Reset we sometimes use the term Empty to mean the same thing. An empty loop contains nothing. When you use certain features like Empty Loop Action, loops can be created that have a size but they do not contain any audible content. Loops in this state are said to be Clear or Silent. The problem word is Empty. It is common to think of a silent loop as "empty" but technically this is not correct. The loop is not empty, it can play and be operated upon just like any other loop. It just doesn't have anything audible in it. This is especially important in the discussion of "loop switching" with Next Loop and Empty Loop Action because "empty" loops will behave differently than "silent" loops.
5.2.5 Record
It all starts with Record. When a loop is empty is said to be in a reset state. Unless you choose to work only with pre-recorded loops you must always begin by recording audio into an empty loop. There are several ways to record loops but the one that most people start with is to use the Record function. You press Record once to begin recording and again to end the recording. Immediately after ending the recording the loop begins playing and continues forever until you modify it in some way. Another function that can be used to record a loop is Sustain Record. With this function recording starts when you press Sustain Record and ends when you release it. This is especially useful if you want to create very short loops. Some people like to have recording start automatically when they begin playing, then press Record to stop. You can do this by setting the Record Threshold preset parameter. When this parameter is zero, recording always starts immediately. When this parameter is set between 1 and 8, it the input level of the track must exceed the threshold before recording will start. Until then the track enters Threshold mode. Small values for the threshold will make it very sensitive, higher values will require a very loud signal. You will need to experiment with thresholds to find the one that works best for your input signal.
5.2.6 Reset
So now you've recorded a loop, how do you get rid of it? The Reset function will throw away the loop and return it to reset mode. You can bind a footswitch to the Reset function but if you are using a controller that supports Sustainable Triggers it is easier to use a Long Press of the Record function. Just press and hold Record for about 1/2 second and the loop will be reset. There are three versions of the Reset function.
Reset - reset the current loop Track Reset - reset all loops in the current track Global Reset - reset all loops in all tracks
5.2.7 Overdub
Once you have recorded a loop one of the most common looping techniques is to add more audio to the loop as it is playing, then when the loop plays back from the beginning you hear the original loop plus the new material. This process is called "overdubbing" and is done with the Overdub function. As the loop is playing, press Overdub to begin overdubbing and press Overdub again to stop. You should hear what you overdubbed the next time the loop plays from the beginning. You can also overdub using the Sustain Overdub function. Like other sustain functions, the overdub starts when you press the button and ends when you release it. If you do a lot of overdubs, the combined audio can reach the point of digital clipping and sound like harsh distortion. You may need to reduce the input level of the track so you can overdub several times without overloading. Overdub is often used in combination with the Feedback control. If you reduce feedback and keep overdub on, you can create an endlessly evolving loop as old layers fade out and new overdubs take over.
There are several options for what happens when you end a mute. These are controlled by the Mute Mode preset parameter. The possible values for this parameter are:
Continue - resume playing at the current playback location without moving Start - restart the loop from the beginning Pause - resume from the paused location
The last mute mode Pause actually changes the Mute function so that it behaves the same as the Pause function. Pause behaves like pause button on an old tape machine, when you press Pause the first time it freezes the loop, no sound is output and the loop does not advance. When you press Pause a second time it unfreezes the loop and continuous playback from the last location. The most common way to end mute mode is to press Mute a second time. But other functions can be configured to automatically cancel mute mode without having to press Mute. This is controlled by the preset parameter Mute Cancel which has these values:
Never - mute is never canceled automatically, you must use the Mute function Edits - mute is canceled by an editing function as Overdub Triggers - mute is canceled by an editing function or a loop triggering function such as NextLoop Effects - mute is canceled by editing functions, triggering functions, or by effects functions such as Reverse Custom - mute is canceled by a set of functions you choose Always - mute is canceled by any function
When you use the Custom mute cancel mode, you specify the functions you want to cancel with a global parameter. From the Configuration menu select Global Parameters, select the Functions tab then find the selector labeled Mute Cancel Functions. Move the functions you want to cancel mute to the panel on the right. Note that another option for silencing a loop is to simply turn the Output Level down. If you bind a MIDI expression pedal to the Output Level control you can quickly sweep the track output level up or down using the pedal.
5.2.10 Multiply
Often after recording a loop you would like to overdub something that is longer than the original loop. If you just use the Overdub function the overdub will "fold" over on itself rather than making the loop longer. The Multiply function is similar to Overdub except that it will extend the loop for as long as you are in multiply mode. When you press Multiply for the first time you will enter the Multiply major mode. During this mode whenever you let the loop play for the length of one cycle, a new cycle is appended or inserted. Recording is active during the multiply so you may overdub new material over the cycles being multiplied. It is important to understand that Multiply can behave differently if you use it again after the loop has been multiplied once. This behavior is determined by the Multiply Mode preset parameter which has these values.
Simple - Multiply simply extends the loop when necessary it never reduces the loop length
The default multiply mode is Normal which makes it behave similar to the multiply function on the Echoplex EDP. We will not go into full detail on how multiply behaves but the most important thing to know is that if the loop has already been multiplied once, using it again will perform a "Remultiply" which can end up reducing the loop length as well as extending it. You can think of it like marking a region of text in a text editor and cutting it. When you use multiply in an already multiplied loop, the section of the loop between the beginning and the end of the multiply is cut out and the content on either side is discarded. A new layer is created containing only the section of the loop that was covered by the multiply. Multiply behavior is complicated and difficult to understand for new users. If you do not already understand roughly how the EDP does multiply, it is recommended that you set Multiply Mode to Simple.
The Divide function is similar to Instant Multiply but it works the other way, the loop is instantly divided by some divisor. There are three built-in versions of this function, more divisors are available using scripts.
5.2.12 Replace
The Replace function is similar to what recording systems call "punch in". While the replace function is active, the previous contents of the loop are erased and replaced with the audio signal currently being received by the track. Replace is a modal function, the replace begins when you press the button for the first time and ends when you press the button a second time. It is fun to use Replace with the Quantize Mode parameter set to Sub Cycle. This allows you to create punches that follow a strict rhythm.
5.2.13 Insert
The Insert function will insert new material into the loop. Unlike Replace it does not overwrite the existing loop, instead it makes the loop longer by inserting space at the beginning, middle, or end of the loop. Insert is a modal function, the insert begins when you press the button the first time and ends when you press it a second time.
Insert will normally "round off" so that a full cycle is inserted. When you press Insert a second time, an event to end the insert is scheduled for some time in the future, and Insert mode will continue until that time is reached. This is useful if you want to create rhythmic loops and think of cycles like one or more measures in the time signature. If you want to create non-rhythmic or "glitchy" loops you can create an "unrounded insert" by ending insert mode by pressing the Record button rather than the Insert button.
5.2.14 Reverse
The Reverse function will toggle the playback direction. This is a minor modal function, reverse starts when you press the button the first time and ends when you press the button a second time. But unlike major modal functions you can be in reverse mode at the same time you are in other modes like Multiply or Overdub. Changing direction as you overdub can result in some very interesting effects. While you are in reverse mode, the word Reverse will appear in the Minor Modes Component in the user interface. You will also see the Loop Meter and Loop Radar draw in reverse.
empty loop halts playback and the next loop sits in Reset mode until you press Record to begin recording. Trying to create another loop that is the same size as the first "by ear" is next to impossible. There are many options for creating new loops that don't disrupt the flow of the performance. One is to set the Empty Loop Action parameter to Record. If this is set, whenever you switch to an empty loop, recording begins automatically. You do however still need to press Record to stop the recording. To create loops that are exactly the same size, or an exact multiple, set Empty Loop Action to Copy Timing. Now when you switch to an empty loop, a new clear loop will be automatically created that is exactly the same size as the original loop. You can then begin overdubbing into this new loop. Next Loop is just one of many functions that perform loop switches.
Next Loop Previous Loop Sustain Next Loop Sustain Previous Loop Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 Loop 7 Loop 8 Restart
Previous Loop works the same as Next Loop but it selects the loop in the other direction. The numbered Loop functions cause a switch to a specific loop. The Sustain Next Loop and Sustain Previous Loop functions must be bound to a Sustainable Trigger. If they are not, they behave the same as Next Loop and Previous Loop. What the sustain functions do is switch to the new loop for as long as the function button is held down, then return to the original loop. The Restart function restarts the current loop from the beginning. It doesn't sound like it would be a loop switch function but it is essentially a switch away from and then immediately back to the current loop. All of the features that are available when switching to a different loop are also available with Restart. The numbered Loop functions are similar. If you are not in the numbered loop, then it switches to that loop. If you are already in the numbered loop then it does the same thing as Restart.
5.2.17 Shuffle
Shuffle is a fun function you can use to slice a loop into pieces then reorder them. This is an "instant function" that will have immediate effect on the loop rather than placing you into a mode. When the Shuffle button is pressed all of the subcycles of
the loop are immediately arranged. You can change the granularity of this slicing by changing the Subcycles parameter. How the slices are rearranged is controlled by the Shuffle Mode parameter. It has these values:
With Reverse the slices are arranged in reverse order. For example starting with slices 1234 the new order will be 4321. With Shift the slices are shifted to the right by one. For example 1234 becomes 2341. With Swap pairs of slices are reversed. For example 1234 becomes 2143. With Random the slices are reordered randomly.
5.3.3 Feedback
Feedback controls how the loop decays over time. With feedback set at 127 the loop does not decay, it will play that way forever or until you change it with looping functions. With feedback reduced the loop will gradually become softer every time it plays until it eventually decays to silence. A common looping technique is to use Overdub with feedback reduced. You can keep adding new layers to the loop but old layers will decay. In this way you can create evolving loops that change gradually over time.
5.3.5 Pan
Pan adjusts the relative output levels of the left and right channels of the track.
Currently the track strip will not automatically resize to show the additional loops, you must close and restart Mobius to rebuilt the track strips with the new size.
the exact moment the loop reaches the start point. Or you may want to use Replace to punch in notes on a precise quarter note grid.
5.4.3 Subcycles
The Subcycles parameter sets the number of subdivisions in each cycle. This is used most often with the Quantize Mode parameter to define quantization points. You can see subcycles in the Loop Meter as the shorter tick marks. While the number of cycles in a loop stays the same until you extend or shorten it, you can change the number of subcycle divisions at any time just by changing the Subcycles parameter. You will see the subcycle tick marks in the Loop Meter change but otherwise the loop is unaffected.
Off Confirm Subcycle Confirm Subcycle Cycle Confirm Cycle Loop Confirm Loop
When the value is Subcycle, Cycle or Cycle the switch happens at the next quantization point. When you use one of the loop switch functions the loop will enter Switch mode while it waits for the next quantization point. The three "Confirm" modes require an extra confirmation action before the switch will happen. When you use one of the loop switch functions the loop will enter Confirm mode. To exit confirmation mode execute the Confirm function. What happens now is determined by the combination of the confirmation option and the quantization point. If the value is Confirm the switch happens immediately, if it is any of the other three the loop enters Switch mode and waits for the next quantization point before doing the switch. While the loop is in Switch or Confirm modes you can execute other functions to control what happens to the next loop when the switch is eventually performed. This is sometimes referred to as the "switch quantization period" and more casually on the forums as the "lame duck period". This is a complex topic that is described fully in the reference guide. But here are a few examples of functions you can use during the switch quantization period.
Record - forces the next loop to be rerecorded Overdub - copies the original loop to the next loop if it is empty Insert - copies the timing from original loop to the next loop if it is empty Reverse - toggles the playback direction of the next loop Speed Toggle - toggles the speed of the next loop
You can press any number of functions during the switch quantization period. In the Loop Meter You will see them "stack" under the switch quantization point. This is referred to as "function stacking". Some stacked functions are simply queued for execution after the loop switch, similar to normal quantization. Other functions have special behavior when they are stacked, Overdub for example does not simply turn on overdub mode in the next loop, it performs a sound copy from one loop to the next.
The Switch Location parameter determines where the playback position will be after you switch to another loop. The values are:
Follow - keep the same location you had in the previous loop Restore - restore the location the new loop had the last time it was playing Start - start the new loop from the beginning Random - move to a randomly chosen subcycle
When using Follow, if the new loop is smaller than the current loop the playback position may need to be "wrapped" so that it fits within the new loop. For example if the current loop is 6 seconds long and you are currently at the start of second 5, then you switch to a loop that is 3 seconds long, the new loop location will be at the start of second 2. When using Restore, if the new loop has never been played the location will be at the start. If you are using one of the methods to perform a sound copy or a timing copy (see Empty Loop Action) then the location will not be restored.
Permanent - you stay in the new loop until you manually change it Once - the new loop plays till the end then automatically enters Mute mode Once Return - the new loop plays till the end then returns to the previous loop Sustain - the new loop plays as long as the function button is held down, then it automatically enters Mute mode Sustain Return - the new loop plays as long as the function button is held down, then it returns to the previous loop
Once when combined with a Switch Location of Start makes the loop triggering functions behave similar to a sampler. The loop starts from the beginning, plays once, then stops (enters mute mode). The Sustain option requires that the function be bound to a Sustainable Trigger. If it is not, then this option behaves the same as Once. The Sustain Return option also requires a sustainable trigger. If it is not, then this option behaves the same as Permanent. Recall from the Next Loop section that there are two functions that always have sustained switching behavior, Sustain Next Loop and Sustain Previous Loop. These two functions do not use the Switch Duration parameter. They will always return you to the original loop when the sustain ends (subject to the Switch Quantize parameter).
See the Using Feedback section for more about how feedback can be applied.
Record different instruments or sounds in each track, for example rhythm, bass, chords, and solo. Use muting or the output level to bring parts in and out of the mix. Record the same instrument in several tracks. The effect is similar to overdubbing but you have control over the levels of each layer. Using advanced MIDI binding, give different musicians control over different tracks. Use tracks to simultaneously record the same loop, but with different effects such as speed shift and reverse applied to each track. After recording, the loop will play back differently in each track. Load tracks with pre-recorded loops and use them like a sample player, triggering the track to play once then stop while you loop in other tracks. "Bounce" a mix of several tracks down to one track and reclaim the source tracks for new uses.
In this section we'll describe the most common use for tracks: recording and mixing a set of background rhythm tracks for soloing. The Mobius Techniques manual will discuss some of the more advanced uses of tracks. Note that the steps described here assume that you have not made changes to the track setups. Setups are an advanced topic that are not described in this manual so this isn't a problem if you're installing Mobius for the first time. But if you're an experienced just make sure that all tracks are set to use the same preset, they all receive on the same port, Default Sync Source is set to Track and Default Track Sync Unit is set to Loop.
Start by making sure you can record a loop into the first track then reset it. Verify that you can click the mouse in the track strip to select tracks, or select them using the left and right arrow keys. Select track 1 and record a simple rhythm part for a few seconds. The first track you record becomes the track sync master track for all other tracks. Listen the first track and watch the loop radar. When the master is at the very beginning of the loop the loop radar will be blank and the loop is said to be at its start point. Now select track 2 and get ready to play a bass line. Wait until the master track is near the middle of its loop and press Record. It doesn't matter exactly when you press Record as long as you press it before the master track start point. Track 2 will now enter Synchronize mode. It is ready to record but the recording will be delayed until the master track reaches the next track synchronization point. Since the default track sync unit is Loop, the synchronization point is the start point of the loop. As soon as the master track reaches the start point, track 2 will change to Record mode and you can begin playing the bass line. Sometime during the recording of track 2, press Record again. You will see the event marker Record Stop appear at the end of the Loop Meter in the center of the window. This is a pending event marker which means that the recording is waiting for something before it can stop. In this case it is waiting for the master track to reach its start point. Continue playing the bass line. As soon the master track reaches its start point Record mode will end and Play mode will begin. Track 2 will begin playing the bass line loop in sync with the rhythm loop in track 1. If you're not satisfied with the result use Reset and start again. Continue this process to record other tracks. Experiment with the output level and pan controls. When you are ready to start over use the Full Reset function to reset all tracks at the same time. Note that if you are doing a track sync recording and you let the master track play beyond its start point before you press Record a second time, the recording will be delayed until the master track reaches its start point again and the new loop will be twice as long as the master loop. This often desirable if the master track is short and you want to record another track that is an exact multiple, such as 4 times as long.
If you are using TextEdit on a Mac, you need to save the file in a plain text encoding, either Western (Mac OS Roman) or Western (Windows Latin 1). When you use the Save As menu item, if you see a File Format: menu with items like Rich Text Format or Web Page (.html) then you are editing the file using rich text rather than plain text. Open the TextEdit Preferences window and under the New Document tab select the Plain Text radio button under the Format section. Once you do this create a new document and the Save As window should show a Plain Text Encoding: menu, select Western (Mac OS Roman). There are many text editors available that present encoding options in different ways or using different words. The presentation may also be different on different versions of the operating system. The main thing to keep in mind is that you must always pick the simplest text format available, usually this is referred to as "plain text" with encodings such as "ansi", "latin 1", "roman", or "MS-DOS". Stay away from anything that says "rich" or "unicode" or that looks like a word processor format. Though it isn't always required, it is recommended that you name script files using the extension ".mos". Once you have created the script file, you need to tell Mobius about it through a process called script registration. There are two ways to register scripts: by file and by directory. When you register a script file, that file is loaded into Mobius when it starts. If you register a script directory, all scripts in that directory are loaded. Registering script directories is convenient if you have a lot of scripts and you don't want to register all of them one at a time. You do need to be careful though to only put things in this directory you really need. To register a script open the Configuration menu and select Scripts, the Script Registration window will open.
On Windows you will see Add Script and Add Directory buttons that will bring up standard selection dialogs for files or directories. On Mac you will see a similar window but it will only have a single Add button because the standard Mac file selector lets you select both files and directories. To register a new script or script directory, click one of the add buttons, navigate to the file or directory you want to register and click Open on Windows or Choose on Mac. The name of the file or directory should now appear in the list in the center of the script registration window. If you want to remove an item from the list, click on it so that it becomes highlighted then click the Delete button. Finally click the Ok button at the bottom of the widow to save the changes. The new set of scripts will be loaded into Mobius and are available for binding. See the Controlling Mobius for a full description of how to associate triggers like MIDI foot switches to scripts. Once you have registered some scripts or script directories you will start seeing their names in the Scripts tab of the binding windows. Note that scripts will usually appear in the binding windows with a name other than the raw file name. Most scripts include a line starting with !name at the top that specifies a user friendly name you want to see in the binding windows. For example:
6 Next Steps
This manual has given you an overview of Mobius user interface and some of the more common ways to use Mobius. Experiment with what you have learned then proceed to the Exploring Mobius manual for information about more advanced features.
7 Troubleshooting
In this section we will discuss a few commonly encountered problems and suggest ways to solve them.
Text editors can sometimes store files in different formats such a text, rich text, HTML, and as word processor files. You must always save Mobius files as plain text. There are also several "encodings" that can be used with text files, it is important to select ones that Mobius can use. If you are using Notepad on Windows, you must save the file using the ANSI encoding, you must not use Unicode. If you are using Wordpad, in the Save as type: menu you must select either Text Document or Text Document - MS-DOS Format. If you are using TextEdit on a Mac, you need to save the file in a plain text encoding, either Western (Mac OS Roman) or Western (Windows Latin 1). When you use the Save As menu item, if you see a File Format: menu with items like Rich Text Format or Web Page (.html) then you are editing the file using rich text rather than plain text. Open the TextEdit Preferences window and under the New Document tab select the Plain Text radio button under the Format section. Once you do this create a new document and the Save As window should show a Plain Text Encoding: menu, select Western (Mac OS Roman). There are many text editors available that present encoding options in different ways or using different words. The presentation may also be different on different versions of the operating system. The main thing to keep in mind is that you must always pick the simplest text format available, usually this is referred to as "plain text" with encodings such as "ansi", "latin 1", "roman", or "MS-DOS". Stay away from anything that says "rich" or "unicode" or that looks like a word processor format.
Exploring Mobius
March 2012
Contents
1 2 2.1 2.2 2.3 2.4 2.5 2.6 3 3.1 3.2 4 4.1 4.2 4.3 4.4 5 6 6.1 6.2 6.3 6.3.1 6.3.2 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.5 6.5.1 6.5.2 6.5.3 6.6 Introduction Track Setups Track Parameters Command Buttons Synchronization Parameters Other Parameters Managing Multiple Setups Selecting Setups with Menus Projects Save Project Open Project Saving and Loading Loops Loop File Formats Open Loop Save Loop Quick Save Samples Advanced Control Binding Review Binding Scopes Focus Lock Setting Focus Lock Limiting Focus Lock Track Groups Displaying Track Groups Setting Track Groups Limiting Track Groups Group Output Level Track Groups and Focus Lock Binding Arguments Control Binding Arguments Parameter Binding Arguments Function Binding Arguments Plugin Parameter Bindings
6.7 OSC Bindings 7 MIDI Status Export 8 Customizing the User Interface 8.1 Item Selectors 8.2 Customizing Buttons 8.3 Customizing the Status Area 8.3.1 Components 8.3.2 Visible Parameters 8.4 Customizing the Track Strips 8.4.1 Focus Lock 8.4.2 Track Number 8.4.3 Group Name 8.4.4 Track Controls 8.4.5 Loop Meter 8.4.6 Loop Radar 8.4.7 Output Level Meter 8.4.8 Loop Status 8.5 Changing Colors 8.6 Changing Fonts 9 Esoterica 9.1 Trace 9.1.1 Trace Levels 9.1.2 Mac Trace Logging 9.1.3 Windows Trace Logging 9.1.4 Using Trace 9.2 XML Files 9.2.1 mobius.xml 9.2.2 ui.xml 9.2.3 Project .mob Files 9.3 Layer Flattening
1 Introduction
This manual contains information about Mobius features that were not covered in the Getting Started With Mobius manual. Among the topics will be customizing the user interface, advanced control options, projects, and track setups. It is required that you have at least skimmed Getting Started With Mobius . The sections in this manual do not have to be read in any particular order, you can skim it and read only the sections that interest you. The Track Setups section is however highly recommended. If you are interested in synchronizing Mobius with other hardware devices or applications, see the Mobius Synchronization manual.
For more detailed information on how to use some common Mobius functions see the Mobius Techniques manual.
2 Track Setups
A Track Setup is a named collection of parameters, presets, and controls for all tracks. It defines the initial state of all tracks before recording, and also defines the state each track will return to when it is reset. A setup stores the following things for each track:
Name Sync Source Track Sync Unit Preset Group Focus Lock Input Level Output Level Feedback Secondary Feedback Pan Mono Mode Audio Input Port Audio Output Port Plugin Input Port Plugin Output Port User Defined Variables
In addition a setup contains the following parameters that apply to all tracks:
Default Sync Source Default Track Sync Unit MIDI/Host Sync Unit Beats Per Bar Realign Time Out Sync Realign Action Out Sync Mute Action Out Sync Resize Adjust Out Sync Speed Adjust Out Sync Min Tempo
There is no requirement to define your own setups, Mobius comes with one default setup that you may be able to use without any changes. Setups are however very useful if you always want to change certain characteristics of a track before recording. For example, if you usually record with loud instruments you may want to reduce the input level from the default of 127 to avoid overloading the track. Rather than remembering to do this every time you start Mobius, you can set it in the setup and it will be automatically set to the desired level every time. Another common use for track setups is to specify which physical inputs and outputs of a multi-channel audio interface to use for each track. By default Mobius always uses the first two channels as a stereo pair called a "port". But if your audio interface supports more than 2 input and output channels you may not want to use the first pair. For example with some audio interfaces the first pair of output channels may go to the headphone jack while the second pair of channels is connected to the monitor speakers. Mobius can't know which port is the correct one to use, you must select it in the track setup. Setups are also useful if you need different track configurations for different compositions. If you play different instruments you may want different setups designed for each instrument. Or you may want to design a setup for a particular performance style like solo ambient looping and another for rhythmic "DJ" looping. Finally, setups contain many parameters related to synchronization. If you wish to use synchronization other than Track Sync you will need to edit at least one setup. To create and manage setups, open the Configuration menu and select the Track Setups item.
At the top of the setup window there is a collection of fields called the Setup Selector. These are use to select the setup you wish to edit, create new setups, and delete old setups. Under the selector is a row of tabs to select different setup parameters. The first tab named Tracks has parameters that can be set differently for each track. The Synchronization tab contains parameters related to synchronizing tracks. The Other tab has a few additional parameters that apply to all tracks. The Command Buttons at the bottom initialize the track parameters to their default values or to capture the track parameters from the current Mobius track. Remember that after making changes in this window you must click the Ok button to save the changes.
There are 8 sets of identical track parameters accessed with a radio button. To select the parameters for a track click on the small circle to the left of the track number.
The Name field allows you to give each track an optional short name. When this is set the name will be displayed in the track strip instead of the track number. This can be used to help identify the purpose of the track, for example "drone", "rhythm", or "solo". The Sync Source field defines the synchronization mode for this track. Each track may have a different synchronization mode, or they may all share the same mode. See the Synchronization Parameters of the Mobius Synchronization manual for more information about how to use this parameter. The Track Sync Unit field defines the location in the loop where track sync will be performed. Each track may a different track sync unit, or they may all share the same unit. See the Synchronization Parameters of the Mobius Synchronization manual for more information about how to use this parameter. The Preset field lets you set the starting preset for the track. You may for example want a preset that has quantization turned off for drone tracks, but turns quantization on for rhythm tracks. The Group field allows you to set the initial track group for the track. The default is (none) which means the track is not a member of a group. Groups are identified by a letter, the number of available groups is set by the Max Track Groups parameter in the Global Parameters configuration window. The Focus Lock checkbox determines if the track will start out having Focus Lock. This is an unusual thing to enable, but it may be useful if you want to begin by recording several tracks at the same time. In the center of the track parameters tab, there is a group of sliders to set the initial values of all the track controls. These sliders correspond to the round knobs you see in the user interface.
The Mono Mode checkbox changes the track from stereo to mono. The track will still receive from a stereo input port and will send to a stereo output port. The difference is that the two input left and right input channels will be summed and recorded into both the left and right track channels. This may be useful if you are using an instrument that does produce a stereo signal. Connect the instrument to either the left or right input channel of the audio device. The instrument will be recorded into both the left and right channels of the track and then sent to both the left and right output channels of the audio device. The Pan control can be used to balance the levels of the left and right output channels. At the bottom of the track parameters are a set of selectors for input and output ports. Each track must have both an input and an output port, the default for all is port number 1.
The Audio Input Port and Audio Output Port fields select the ports of the audio interface hardware to be used when Mobius is running standalone. The number of ports is determined by your audio interface. Ports correspond to a stereo pair of channels on the audio interface. If for example your audio interface has 8 input jacks, there will be 4 input ports. Jacks 1 and 2 will be port 1, jacks 3 and 4 will be port 2 and so on. You will need to experiment with the port settings to determine which ports match the jacks on your audio interface. The Plugin Input Port and Plugin Output Port fields select ports to be used when Mobius is running as a VST or Audio Units plugin. Each port corresponds to a stereo pair of "pins" on the plugin. By default the Mobius plugin has 16 input and output pins, or 8 input and output ports. Most plugin hosts will default to using the first input and output port. If the host supports plugins with more than one input and output port you will need to understand how to route signals into and out of the plugin pins in the host. Some hosts will display pins visually and allow you to draw lines to connect them. Other hosts may display pins as numbers in a menu.
The Initialize button will set all of the parameters in the currently selected track tab to their initial values. Controls all go to 127, pan goes to 64, the ports go to 1, the name, preset, group, and focus lock fields are cleared. The Initialize All button will set all parameters in all tracks to their initial values. The Capture button will copy the current values of all parameters from a Mobius track into the setup. The selected track tab in the setup defines which track is being captured. For example if track tab 2 is selected, the parameters from Mobius track 2 are copied to setup tab 2. Capture is useful if you want to experiment with track settings in real time until you find the ones you like, then you can capture them all at once into the setup. The Capture All button will copy the current track parameters for all Mobius tracks into the setup. Obviously you need to be careful using the Initialize All and Capture All buttons, you need to be sure you want to replace everything in the setup. If you click one of these by accident, click the Cancel button to close the setup without saving the changes.
Synchronization is a complex topic that is described fully in the Mobius Synchronization manual. See the Synchronization Parameters for more information about how to use these parameters.
The Active Track field selects the track you want to be active when the setup is selected or after a global reset. Usually this is 1. The Restore After Reset field is a multi-selection panel containing the names of some of the track parameters that are stored in the setup. Click on the names to highlight or unhighlight them. When one of these parameters is highlighted, its value will be restored to the value from the setup after the Reset or Track Reset functions are used. All parameters in the setup are always restored whenever you use the Global Reset function to reset all tracks. But by default if you do a simple Reset to reset just one loop in a track, the parameters are not restored. This is because you may want to change input level, output level, or preset parameters while you are recording a loop. Then if you make a mistake and want to rerecord the loop you can use Reset to start over and none of your parameter changes will be lost. Some users however might always want the parameters from the setup restored whenever a Reset is performed. To accomplish that select some or all of the items in the Restore After Reset panel. The Binding Overlay parameter determines which overlay binding set will be selected when this setup is selected. The default value is [Retain] which means to continue using whatever binding set is currently in effect. See the Multiple MIDI Binding Sets chapter of the Getting Started manual for more information on creating overlay binding sets. The Binding Overlay selection menu will always contain the items [Retain] and [Cancel] and in addition the names of any defined MIDI binding sets other than the Common Bindings.
When [Cancel] is selected it means that the current overlay bindings will be canceled when this setup is selected. In the previous example the binding set Touch OSC Overlay was selected which means this binding set will be activated whenever this setup is selected. The ability to control the overlay bindings is useful if you design a track setup with a particular piece of control hardware in mind.
At the top of the setup window is a set of fields and buttons that let you create, delete, select, and rename setups.
Mobius installs with one setup named "Default". To create a new setup click the New button. A new setup is created and selected. The new setup will have a copy of all the parameters from the setup that was selected when you clicked New. So if you want to create a setup that is similar to an existing setup, be sure to select the setup you want to copy before you click New. When a new setup is created it will be given a generated unique name starting with "Setup" followed by a number. To change this name, click on the Name text field and type in the desired name, then click on the button labeled Rename. Simply typing in a name isn't enough you must also click the Rename button.
Renaming a new setup Once you have created several setups you can switch between them by using the Selected Setup menu at the top. Click on the down arrow to open a menu containing all the setup names. The setup that is selected in this menu will become the active setup when you click Ok to close this window. If you are making changes to several setups, be sure to remember to select the one you want to be active before closing the window.
Selecting a setup To delete a setup, simply select it and click the Delete button. The setup is deleted and removed from the selection menu. Be careful with the delete button, there is no "are you sure" prompt. If you delete a setup by accident, click Cancel at the bottom of the window to throw away the changes and open the window again. After making changes that you are happy with, you must click the Ok button. If you click Cancel or the window close button all changes you have made will be lost. When a setup is selected, all tracks that are currently empty will be modified to have the parameters defined in the setup. Tracks that are not empty will not be modified.
Selecting a setup This menu will contain the names of all defined setups with a check next to the one that is active. To change setups simply select another one from the menu. If you just need to change setups without editing any parameter values using this menu is easier than opening the setup dialog.
3 Projects
A project is a collection of files that contain the complete state of Mobius at a moment in time, including the audio content of all loops in all tracks. You can use projects to capture a complex collection of loops that have just been improvised, or to define a set of background loops for a new performance.
NOTE: When you save a project with the same name as an existing project, all of the wave files in the existing project will be deleted first. This is necessary to avoid "garbage files" if you remove tracks or loops from the project. This will only occur however if the file is contained in the same directory as the project's .mob file. If you have manually edited the .mob file and added files a sample library, the sample library files will not be deleted as long as they are in a different directory than the .mob file.
16 Bit Wave File Option Check the box next to the parameter name and click Ok to close the window. Now all Mobius audio files will be saved using 16-bit integer samples. Note that this parameter does not effect how files are read. Mobius will continue to read both integer and floating point wave files. NOTE: Mobius usually runs with a sample rate of 44100 or 48000. If you load files created outside of Mobius the files may use other sample rates but these will not be automatically converted to the Mobius sample rate. It is recommended that you only load files whose sample rate matches the Mobius rate. The example files that come with the Mobius installation were all created with a rate of 44100.
If you want to change the base file name but keep the default directory, just enter a new name in this field.
If you want to change the directory in which the files are stored you will need to enter the absolute path name of the directory and the base file name. On Windows this must begin with a drive letter, on Mac it must begin with a / character.
If you are not familiar with absolute path names it is recommended that you let the files be saved in the default directory. NOTE: Do not include the .wav extension to the file name, this will be added automatically.
5 Samples
The samples feature was designed primarily for testing Mobius, though anyone can use it. Samples are short audio recordings that can be loaded into Mobius and triggered with buttons, keys, or MIDI events. When triggered, a sample plays from beginning to end without interruption and then stops. If you trigger it again before the last sample playback finishes, another overlapping playback of the sample will start. Samples are not part of a loop or track, it is like having a very primitive built-in sample player. So far this is pretty boring, but what makes samples interesting for testing is that while the sample is playing, the output is routed into the audio input of the tracks. So if the tracks are recording, they will record the samples you are playing, as well as whatever is coming in from the audio interface. This is convenient for testing because audio can be injected into the tracks just by pressing keys on the keyboard, without having to stop and play an instrument. A sample is just an audio .wav file. To configure samples, open the Configuration menu and select the Samples item.
At the top of the samples window are buttons to add, delete, and reorder samples. The large panel in the center has the file names of the samples that are currently registered. To add a new sample, click the Add button. A standard open file dialog is displayed where you can select the .wav file to load. Added samples are placed at the end of the list. To delete a sample, click on the file name in the list so that it is highlighted then click the Delete button. To change the order of samples, click on a file so that it is highlighted then click the Move Up or Move Down buttons. The order the sample files appear in the list is important because this determines which Mobius functions will trigger the samples. There are eight Mobius functions that will trigger samples. They all begin with the word "Sample" and are then followed by a number from 1 to 8, for example Sample1and ample2. The Sample1 function triggers the first sample in the list, the Sample2 function triggers the second sample in the list and so on. Because there are only eight sample trigger functions you should only register 8 sample files. You can add more but they will not be accessible. To get a feel for how this works, Mobius comes with a small set of sample files you can try. On windows these are in the samples sub directory of the Mobius installation directory which is usually c:\Program Files\Mobius\samples. On the Mac these will be in /Applications/Mobius/samples. Samples can be of any length though they are more useful if they are short. Because samples will "stack" if you trigger them several times rapidly you have to be careful about overloading the output bus and causing digital clipping. There is no way to adjust the level of the sample.
6 Advanced Control
The Controlling Mobius section of Getting Started With Mobius described the process for creating bindings that let you control Mobius using devices such as a MIDI footswitch. In this section we will describe some advanced options that give you more precise control over individual tracks.
Scope Selector When the scope is Global the binding is performed in currently selected track and all tracks that have focus lock. This is the most common binding scope. The scopes Track 1 through Track 8 force the binding to be performed in a specific track no matter which is currently selected. This scope is particularly useful if you have a MIDI control surface with sliders and knobs that resemble a mixing console. A typical configuration is to bind a row of sliders to the output level controls in each track, and a row of knobs to the pan controls. Then you can mix and pan the tracks any time without worrying about which one is selected.
The scopes Group A through Group D force the binding to be performed on all tracks that are in one of the track groups. For this binding scope to be useful you must also assign tracks to groups, see the Track Groups section for more on how to use track groups.
Focus lock with the track number You can turn focus lock on and off by clicking on the track number. There is another component you can add to the track strip to control focus lock called appropriately Focus Lock. It is displayed as a small round button that is filled red when a track has focus lock. In the next screenshot, you can see again that track 2 is selected and track 1 has focus lock.
Focus lock button You might choose to use the focus lock button if you want to save space in the track strip, though most people use the track number because it is easier to see and also helps you identify tracks. Like the track number, you can turn focus lock on and off by clicking inside the focus lock button. During live performance it can be awkward for the performer to stop playing, grab the mouse, and click on focus lock buttons. Most people that use focus lock therefore use MIDI or the computer keyboard to set focus lock. The function named Focus Lock can be bound to any trigger. When executed it will toggle focus lock in the target track. One approach is to bind the computer keys 1 through 8 to the Focus Lock function with the binding scope set to tracks 1 through 8. Then pressing the 1 key will toggle focus lock in track 1, pressing 2 will toggle focus lock in track 2, etc. Something similar could be done with a row of MIDI buttons on a footswitch or control surface.
Focus Lock Configuration Window This tab has two item selectors, the first one labeled Focus Lock Functions controls which functions will obey focus lock. By default most functions obey focus lock but the loop selection functions do not. If you do not want a particular function such as Record to obey focus lock, select it and remove it from the right panel. It does not matter what order the functions are in. When you have finished adding or removing functions remember to click "Ok" to close the window and save the changes.
name which might help you remember how the tracks are supposed to be used. For example group A for percussion, group B for bass, and group C for solo. Track groups become more useful when they are used as a binding scope. Recall that when you create a binding for a trigger such as a MIDI note, you can select a binding scope. The default binding scope is global which mean the trigger is sent to the currently selected track. If the binding scope is set to a group name, the trigger will be sent to all tracks in that group whether or not they are selected. One example use for track group bindings is to bind a MIDI expression pedal to the output level control to the group whose tracks contain the percussion loops. Then with one expression pedal you can adjust the mix of all of the tracks at the same time. Using track groups in this way is similar to using Focus Lock but it is more flexible.
Track Strip Item Selector You won't see much change initially because none of the tracks have been assigned to a group. The track strip will grow a little taller to make room for the group name but that space will be blank until the track is assigned to a group. Here is what the track strip will look like if you assign the first two tracks to group A and the second two to group B.
Visible track group name Note that each group name is displayed in a different color to help identify them. You can change the colors by editing the color palette.
Group selector in the setup window In the previous example the first track has been added to the first group which by default is named "A". Whenever you change setups the displayed track groups will change to match what is defined in the setup. If you execute the Global Reset function, the current track groups will also be reset to match what is in the setup.
You may also change track groups in real-time by executing the Track Group function. Each time you execute the Track Group function the track is assigned to the next higher group. If the track is not currently assigned to a group it is assigned to group A. If the track is currently assigned to the highest group, the group membership is removed. The pattern is:
Changing the number of track groups Locate the parameter named Track Groups and enter the desired number. In this example the number has been changed from 4 to 2. Changing the number of track groups is primarily of interest if you want to use the Track Group function to cycle over the groups. If you only need two groups then this changes the Track Group pattern to:
This special behavior is available only for the Output Level control and is canceled if you use any other level control such as a UI knob or a trigger that does not use the group binding scope.
Activating group focus lock When this option is enabled any triggers that have bindings using global scope are sent to the currently selected track and all tracks that are in the same group as the selected track. For example assume that tracks 1, 2, and 3 are in the same group and track 3 is selected. The Reverse function has a global binding to a MIDI note. When this MIDI note is received, tracks 1 2 and 2 all change direction, 3 because it is selected and 1 and 2 because they are in the same group as 3. Like simple focus lock, track group focus lock is only available for function bindings that use the Global binding scope. If you create a binding scoped to a specific track or track group, group focus will have no effect on that binding. Also like simple focus lock, you may not want all functions to be sent to all tracks in the group. You can use the same global parameter described in Limiting Focus Lock to decide which functions should obey group focus lock. The reason this is no longer the default behavior is because we have found that the ability to assign things like the Output Level control to a group is useful for mixing. But once you did that, all tracks in the group would respond to functions like Record at the same time which is not usually what you want. You can edit the Focus Lock Functions global parameter to remove all the functions you don't want to obey focus lock, but it's easy to forget. Most people never want a combination of both group bindings and group focus lock. So rather than making the combination the default we made the default to disable group focus lock and only support group bindings. If this is confusing don't worry, it has always been hard to explain and few if any people have ever made good use of it. Just leave the Groups have focus lock checkbox off.
min will set the target to its minimum value, max sets the maximum value, and center sets the center value. These three operators don't have an operand. These operators are normally used only when the target is a control. up will increase the current value of the target by some amount, down will decrease the current value by some amount, and set will set the target to a fixed value. All of these require an number operand. These can be used when the target is a control or a parameter. Here are some examples:
min - set a control to zero max - set a control to 127 center - set a control to 64 up 10 - increase a control by 10 down 5 - decrease a control by 5 set 90 - set a control to 90
If you bind a pair of MIDI notes to a control and give one the arguments "up 1" and the other then arguments "down 1" you can sweep the control through the full range of values by repeatedly pressing the MIDI notes. If you try to set a control to a value more than 127, it will be constrained to 127. Similarly if you try to set a control to a negative value if will be constrained to zero.
small number. Examples of parameters that you might want to use are Subcycles, Quantize Mode, and Switch Quantize. For integer parameters, the binding argument may be a number within the allowed range of the parameter. For example, binding a trigger to the Subcycles parameter with an argument of 8 will force the number of subcycles to 8 whenever this trigger is received. Before we had binding arguments, operations like this were frequently done with scripts. By using binding arguments you can avoid scripting in these simple cases. For enumeration parameters, the binding argument must be the name of the parameter value. This type of binding is a bit more complicated because you must use the internal script name of the parameter value. For example the Quantize Mode parameter has the following internal values: off, subcycle, cycle, loop. So to force the quantize mode to loop, create a binding and enter loop as the argument. You will need to consult the reference manual to understand the possible parameter values for each enumeration parameter.
In most cases, the argument is a small positive or negative number, for the speed and pitch functions this number indiciates a change in semitones up or down. For example setting an argument of 7 for the Pitch Step function will cause the function to raise the pitch by a 5th. Consult the reference manual for each function for more information on how it supports binding arguments.
Mobius has literally hundreds of targets that could be exposed as plugin parameters. Because there are so many they are not all exposed by default, you must explicitly ask for the targets you want exposed. To define plugin parameters open the Configuration menu and select the Plugin Parameters item.
Plugin Parameter Window with Default Parameters This looks like the other binding windows for MIDI and keyboard control. The unusual thing about parameter binding is that there are no fields for defining a trigger. This is because the association between a trigger and the plugin parameter is done in the host application rather than in Mobius. Mobius simply advertises a set of parameters that the host can use, the association of those parameters with things like MIDI events is done in the host. The typical steps for defining plugin parameters are: 1. Select a target (function, control, parameter, or configuration) 2. Select a scope 3. Click the New command button to add the parameter Plugin parameters can sometimes be used as sustainable triggers but it depends on the host application. The host needs to support the concept of a "momentary button" and set the parameter to non-zero when the button is pressed and zero when released. Not all hosts support this concept, some treat all parameters as continuous floating point values and display them as sliders rather than buttons.
controller 42 events will be sent to the selected MIDI output devices. If a parameter or control does not have a MIDI binding then no MIDI messages will be sent. There are two global parameters that control MIDI status export. The MIDI Status Export parameter will cause MIDI status events to be sent to the MIDI output devices selected in the MIDI Devices window. This is normally used only when running Mobius in standalone mode, but it can be used in the Mobius plugin if you are opening private MIDI devices. The Host MIDI Status Export parameter will cause MIDI status events to be sent to the VST or Audio Units plugin host. This can only be used when Mobius is running as a plugin. If you use this option you must then route MIDI coming from the Mobius plugin to the hardware control surface in the host. Every host does this differently and some don't even recognize MIDI generated by a plugin. If your host does support routing MIDI from a plugin, that is the recommended approach. If it doesn't then you can configure Mobius to open a private MIDI output device when in plugin mode and set the MIDI Status Export parameter instead. But be careful because having Mobius open MIDI devices can cause conflicts with some hosts.
Example Item Selector The panel on the right contains the items that are currently selected. The panel on the left contains the items that are available for selection. In the center is a column of buttons that move items between the two panels. To select an item, click on the name in the left panel to highlight it, then click on the button labeled ">". To deselect an item, click on the name in the right panel, then click on the button labeled "<". The button labeled ">>" will move all items to the right panel and the button labeled "<<" will move all items to the left panel.
Note that if the list of items is long there may be a scroll bar on the right edge of either panel. If that is the case you will need to use the scroll bar to see all of the available or selected items. For many item selectors, the order of the items in the right panel will determine the order the items are displayed in the user interface. If you want things to display in a certain order you will have to carefully select them in the desired order. You will quickly find out that drag-and-drop is not supported in the right panel so ordering the buttons can be tedious. It is best to plan your ordering ahead of time, use the "<<" button to clear the right panel, then add your items one at a time in the desired order.
Default Buttons To add or remove buttons in the button area, open the Button Configuration window by selecting the Buttons item from the Configuration menu.
Button Configuration Window The button configuration window looks similar to the other binding windows. The panel on the left lists all of the currently selected UI buttons, the upper right has panels for selecting a target for the button, and the middle right has selectors for the button scope and arguments. To add a button, select a target, optionally set a scope, and click the New button under the button list. To delete a button, select it in the button list and click the Delete button under the button list. Like other bindings, buttons can have arguments, see Binding Arguments for more on what can be done here. If you need to change the arguments of an existing button, select the button in the list, change the arguments, and click the Update button under the button list. You would normally only use targets of type Control or Parameter if the binding had arguments to set the new value for the control or parameter. Note that if you add buttons the button area may grow. If one row of buttons becomes full, another row will be added and the status area will be shifted down to make room. Shifting the status area down may sometimes cause it to overlap the top of the track strip which can cause the components to draw incorrectly. If this happens you will need to resize the window and either make it taller to make room for the extra button row, or make it wider so that an extra button row is not required. If you are using Mobius as a plugin you may not be able to resize the window. You will need to run Mobius standalone to resize the window, the new window size will then be used for the plugin windows.
Default status area at rest You can add or remove components and move them to new locations. Some components are initially invisible and will appear only when certain things happen in the track. To see the names and outlines of all active components, press and hold the Z key on the computer keyboard.
Default status area component outlines Note that as you add or move components in the status area you may notice that some of the components are partially erased with a black rectangular area. This indicates that one or more components overlap. When this happens you need to use Z to switch to outline mode, and drag the components so that they no longer overlap. To drag a component in outline mode, click over it with the left mouse button, hold the button down, and move the mouse to a new location. To configure components in the status area, open the Configuration menu and select the Display Components item.
Display Components Window - Main Tab The window has two tabs, one to select the components in the status area and another to select the components in the track strips. We'll start by exploring the first tab labeled Main. This tab contains two item selectors.
8.3.1 Components
The first item selector is labeled Components and determines which components are displayed in the status area. See the Status Area section of Getting Started With Mobius for details on the purpose of each component and how it looks.
Status Area Components Selector By default, all status area components are selected except for Loop Bars and Track Strip 2. It is recommended that you do not remove display components until you have used Mobius for awhile and have a better understanding for the things you don't need.
The second item selector labeled Visible Parameters determines which preset parameters will be displayed in the Instant Parameters component.
Instant Parameters Selector Note that you will see this component in the status area only if you have Parameters selected in the Components item selector at the top of this window. The default instant parameter component looks like this.
Default Instant Parameters Component The parameters will be displayed in the order they appear in the right item selector panel. If you add parameters to this list the Instant Parameters component will become taller and may start overlapping with other components or with the track strip. You may need to resize the window to make it taller, or move the components so they do not overlap.
Default fixed track strips The floating track strips are displayed in the status area, by default there is one on the left containing the major track controls.
Default primary floating track strip The components inside the track strips are always arranged horizontally. Because there are many controls and status components that can be added, it is possible to create track strips that are very tall. To keep the floating track strips shorter, there are two of them that may be added to the status area and they can contain different components. To add the secondary floating track strip to the status area, go to the
Main tab of the Display Components window and move the item Track Strip 2 into the panel on the right.
Adding the secondary floating track strip The next picture shows the status area with both floating track strips. By default, the secondary track strip is positioned on the right side, but it can be moved.
Default secondary floating track strip To change the components that are displayed in the track strips, go to the Track Strips tab of the Display Components window. The tab contains three item selectors, the first two select the components to be displayed in the two floating track strips, and the third selects the components to be displayed in the fixed track strips along the bottom.
Display Components Window - Track Strips Tab Like other item selectors the panel on the right shows which track strip components are selected and the order in which they will be displayed. The next screenshot shows what a track strip would look like if most of the possible items were selected and in the sections that follow we will describe each of the components.
Palette Window Some of the colors such as Cycle Tick Mark are used for very specific parts of the display. Others such as Button are used in many components. We won't document
the exact meaning of all the colors but most of them should be self-explanatory. Experiment to see the effects of each color. To change a color, click on the color box with the left mouse button, a standard system color dialog will pop up. Select a color and click Ok in the standard color dialog. When you are finished changing colors click Ok on the palette dialog and the color selections will be applied.
<FontConfig> <FontBinding name='mode' size='20'/> <FontBinding name='button' size='14'/> <FontBinding name='loopMeter' size='12'/> <FontBinding name='loopCounterSmall' size='30'/> <FontBinding name='loopCounterBig' size='40'/> <FontBinding name='layerList' size='8'/> <FontBinding name='message' size='18'/> <FontBinding name='minorModes' size='12'/> <FontBinding name='sync' size='12'/> <FontBinding name='parameter' size='14'/>
<FontBinding name='knob' size='12'/> <FontBinding name='trackNumber' size='30'/> <FontBinding name='trackName' size='20'/> <FontBinding name='trackGroup' style='1' size='12'/> <FontBinding name='loopStack' size='12'/> </FontConfig>
The FontBinding elements specify the font sizes used by the major UI components. The parameter font for example is used for the Instant Parameters component. To change a font size, edit the size element and change the number. You can get an idea for how large these fonts are by browsing them in a word processor. You cannot currently change the font name or style, Mobius will always use a sansserif font such as Helvetica.
9 Esoterica
In this section we will describe a few concepts and features that are intended for advanced users. Nothing in here is essential for using or understanding Mobius, but we do talk about these things from time to time in the forums. You may skip this section unless we recommended that you read one of these.
9.1 Trace
In order to diagnose some problems, you may be asked to capture a Mobius "trace log" and send it to the labs for evaluation. As Mobius runs it generates a constant stream of messages that show what it is doing inside. Normally these messages are discarded but you can configure Mobius to send them to a "log" instead where they can be seen. How you access this log will be different for Windows and Mac.
"ERROR:". If you see any of these please try to capture them and send them to us, they are almost always interesting. Level 2 messages are displayed during normal operation and provide insight on what is happening in the looping engine. These aren't errors, so you don't need to send them unless we are attempting to diagnose a problem. Level 3 messages are also not errors, but they are printed during every audio interrupt. This means that there will be thousands of them and they will slow down operations, causing audible glitches. There is rarely any need to enable this level of trace. To configure trace levels open the Configuration menu and select Global Parameters. Locate the parameters named Trace Print Level and Trace Debug Level. The default value for these parameters is 1, which means only severe errors are logged. Usually you will be asked to temporarily change the trace level to 2. After you have finished capturing a trace log it is important that you return to the global parameters window and set the level back to 1. Generating trace messages does reduce Mobius performance slightly so you want to turn them off when you don't need them. Trace Print Level controls the messages that are sent to the "console". On the Mac, the messages are sent to the "system console" that you can view with the /Applications/Utilities/Console application. On Windows console messages are only visible if you launched Mobius from the command line instead of the start menu or an icon. Since it is unusual to start Mobius from the command line you usually set Trace Debug Level instead. Trace Debug Level is used only when running on Windows, it controls the messages that are sent to what Windows calls the "debug output stream". Since OS X doesn't have the concept of a debug output stream this parameter is treated the same as Trace Print Level. To view the debug output stream you need to download an application. This is described in more detail below.
http://grantschenck.tripod.com/dbwinv2.htm
Another viewer is available from Microsoft:
http://technet.microsoft.com/enus/sysinternals/bb896647.aspx
An alternative to using a debug output stream viewer is launching Mobius from the Windows "command" window, also sometimes referred to as a "shell" window. Trace messages will be sent directly to the command window that was used to launch Mobius. It is assumed you know how to open an command window and enter DOS commands. Use the cd command to change to the Mobius installation directory, usually c:\Program Files\Mobius. Then enter "mobius" and hit enter. The Mobius window will be displayed and the shell window will remain suspended until the Mobius window is closed. Trace messages will be printed to the shell window as Mobius runs.
101 -5120: Function Record down 101 -5120: Loop: Add event Record(Record) 0 101 -5120: Loop: Set mode play
If you see trace messages, start using Mobius in the way you were using it when the problem happened. As soon as the problem happens, go to the console window, copy the contents and send them to us in an email message. If the log is very long, it is better to save it to a text file, then send the file as an email attachment.
enter a large number of MIDI bindings by typing in the XML rather than using "MIDI learn" in the MIDI Control window. The most useful thing to be aware of is that the XML files can be copied to make backups of the configuration or to email your configuration to someone else. Quite often to help diagnose problems we will ask you to send us your configuration files. The configuration files are:
mobius.xml - configuration related to the looping engine ui.xml - configuration related to the user interface
On Windows these are found in the installation directory which is usually c:\Program Files\Mobius 2. On Mac these are found in /Library/Application Support/Mobius 2. If you are brave enough to edit these files it is important that you use a simple text editor do not use a word processor to edit Mobius XML files. It is mandatory that these files be saved as simple ASCII text. See the Using Scripts section of Getting Started With Mobius for details about how to properly edit text files for Mobius. Always make a backup copy of the file before editing so you can restore it if the editor corrupts the file.
9.2.1 mobius.xml
The mobius.xml file contains a single large MobiusConfig element. The element has a large number of attributes that correspond to most of the global parameters. A typical MobiusConfig start tag is shown below. We're not going to document what all of the attributes mean because it is fairly obvious how to match these to global parameters in the reference manual.
<MobiusConfig audioInput='ASIO:M-Audio USB ASIO' audioOutput='ASIO:M-Audio USB ASIO' quickSave='c:\larson' noiseFloor='13' suggestedLatencyMsec='0' inputLatency='0' outputLatency='0' fadeFrames='0' maxSyncDrift='2048' tracks='8' trackGroups='2' maxLoops='4' longPress='500' pluginPins='16' shiftRange='48' tracePrintLevel='1' traceDebugLevel='2' driftCheckPoint='loop' dualPluginWindow='true' preset='Default'>
Within the MobiusConfig element are the following child elements that hold the more complex configuration objects.
ScriptConfig - contains the file names of registered scripts Preset - there will be one Preset element for each defined preset Setup - there will be one Setup element for each defined track setup BindingConfig - there will be at least one BindingConfig containing the default bindings Samples - contains the file names of the registered samples
HostConfigs - configuration options for VST hosts, this is for emergency use only and is not exposed in the user interface FocusLockFunctions - the list of functions that obey focus lock
It should be relatively obvious what the attributes in each of the elements mean. Preset attributes correspond to the preset parameters you see in the UI. Setup attributes correspond to the track setup parameters you see in the UI. Script and Sample elements contain file paths. FocusLockFunctions is just a long list of function names (the internal names without spaces). The BindingConfig element we'll explore more deeply because this is the most useful element to edit in XML. A BindingConfig contains a list of Binding elements that define the association of a trigger with a target. This will include bindings for MIDI events, keyboard keys, and host parameters. Even though those are edited using different popup windows in the user interface, they are all stored in one BindingConfig. An example Binding is:
scope - the scope of the binding: global, track number, or track group letter (default global) target - the target type: function, parameter, control, uiControl name - the internal name of the target trigger - the trigger type: note, control, program, key, host, osc value - numeric trigger value for all trigger types except osc channel - MIDI channel number from 0 to 15, only for triggers note, control, and program
If you're careful and you know your MIDI note numbers it can be faster to enter a large number of bindings by hand writing Binding elements rather than using "MIDI learn" in the MIDI Control window. Writing computer keyboard bindings is more difficult because you need to know the raw key codes and combine them with bits representing the state of the shift keys, most people will never do this. Writing host parameter bindings is easy, just give each one a unique value integer from one on up without any gaps. The order of the numbers will determine the order they are displayed in most hosts. OSC bindings are possible but still experimental. If you are interested in OSC control contact us for more information. For the target attribute it is important that you use the "internal name" for functions, parameters, and controls. These are usually the same as the names you would use in scripts and are documented in the reference manual. Usually names will be the same as what you see in the user interface, but with spaces between words removed.
9.2.2 ui.xml
The ui.xml file contains a single large UIConfig element. With the exception of the FontConfig element there is rarely any need to hand edit this file.
x - the X coordinate of the main window x - the Y coordinate of the main window width - the width of the main window height - the height of the main window refreshInterval - number of milliseconds between window refreshes maximized - true if the window is maximized messageDuration - number of seconds to display messages in the message area
The window bounds you normally set just by moving an resizing the window. messageDuration can be set in the UI with the global parameter Message Duration. refreshInterval is not exposed in the UI and there should never be a need to change it. In theory you can make the UI "crisper" by lowering the refresh interval but this also adds more CPU stress so it is not recommended. The UIConfig element contains a number of child elements for the more complex UI parameters.
Locations - names and coordinates of components in the status area InstantParameters - names of parameters displayed in the status area TrackControls - track control components displayed in the status area TrackStripControls - track control components displayed in the track strips Buttons - functions shown as buttons at the top of the window Palette - names and rgb values for the various component colors FontConfig - names and sizes of component fonts
The first four are what you are editing when you use the Display Components window. The Buttons element is edited from the Buttons window, and the Palette element is edited from the Palette window. An editing window for FontConfig is not currently available, the Changing Fonts section has more information on editing this element.
<Project number='0' setup='Default'> <Track active='true' output='100' feedback='127' altFeedback='127' pan='64' preset='Basic Looping'> <Loop> <Layer cycles='1' audio='test.wav'/> </Loop> <Loop active='true'> <Layer cycles='2' audio='samples/gcloop.wav' protected='true'/> </Loop> </Track> </Project>
There is a single root element named Project that contains one or more Track elements. Tracks are loaded into Mobius in the order they appear as XML elements, so the first track element will be track number 1, the second track number 2, and so on. Each Track element may contain one or more Loop elements. You can have any number of Loop elements, but if you have more than the value of the Loop Count parameter in the active preset, the extra loop elements will be ignored. A Loop element may have zero or more Layer elements. The layers are listed in reverse chronological order, meaning the first one is the newest and the last one is the oldest. Each element may have a number of XML attributes that define characteristics of the associated object, for example output defines the value of the Output Level track control. If you omit an attribute the default value is usually zero. The Project element may have the following attributes:
number - not currently used, always zero setup - the name of the active track setup bindings - the name of the active binding set overlay (optional)
preset - the name of the active preset if different than the setup active - true if this is the active track focusLock - true if focus lock is enabled group - track group number, if not present the track is not in a group
input - the value of the Input Level control output - the value of the Output Level control feedback - the value of the Feedback control altFeedback - the value of the Secondary Feedback control pan - the value of the Pan control reverse - true if the loop is in reverse speedOctave - the value of the Speed Octave control speedStep - the value of the Speed Step control speedBend - the value of the Speed Bend control speedToggle - the value of the Speed Toggle currently in effect pitchOctave - the value of the Pitch Octave control pitchStep - the value of the Pitch Step control pitchBend - the value of the Pitch Bend control timeStretch - the value of the Time Stretch control
active - true if this is the active loop frame - the playback position
id - an optional unique number used to reference this layer from segments cycles - the number of logical cycles in the layer audio - file system path to a wave file with layer contents protected - marks the wave file as being protected deferredFadeLeft - internal flag deferrerdFadeRight - internal flag containsDeferredFadeLeft - internal flag containsDeferredFadeRight - internal flag reverseRecord - internal flag
The id attribute is omitted unless segments are being saved (see below). If set, it must be a number that is unique among all Layer elements in the file. Note the protected attribute. This will not be set in projects saved by Mobius but you may want to use it in hand written projects. When this is true it means that the wave file must not be overwritten or deleted when the project is saved. You should set this when you are initializing layers contents from a library of pre-recorded loops that you want to preserve. The five "internal flag" attributes capture some special information about how the layers were recorded. They indicate whether the edges of the layer have been faded to zero. You will not set these if you are creating a project manually using prerecorded loops. If you see them in project files generated by Mobius be careful not to change them. If the global parameter No Layer Flattening is true, you may also see Segment elements inside the Layer elements. Segments are used to reference a portion of the
audio in a layer without actually copying the audio samples. When you use multiply for example, the layer will contain one segment for each multiplied cycle, that references the same backing layer. This then is combined with any new content overdubbed during the multiply in real time. You don't really need to understand any of this, though it does provide some insight into how Mobius manages memory. Basically, we always try to avoid copying previously recorded audio because audio buffers are large and take time to copy. Instead, audio buffers are referenced through a hierarchy of segments that are "flattened" in real time to produce the audio you actually hear. The Segment element may have the following attributes:
layer - the unique id number of a layer in this file startFrame - the frame location within the containing layer where this segment will be played offset - the frame offset within the referenced layer where the segment begins frames - the number of frames in the referenced layer beginning with offset that are played feedback - optional feedback level to apply to the segment copyLeft - true if the containing layer's audio file has content adjacent to the left edge of the layer copyRight - true if the containing layer's audio file has content adjacent to the right edge of the layer
We are not going to explain what all theSegment attributes mean, though if you've come this far you can probably figure them out. No one has ever wanted to hand write project files using segments, if you want to be the first then contact us and we'll do our best to talk you out of it.
Mobius provides two ways to combine the audio content of the past layers into the loop that you hear being played. 1. Flattening 2. Continuous Merging When Flattening mode is used, the full content of the current layer is copied into the next layer as it is being recorded. When the recording of a layer completes, everything necessary to play the layer is contained in one large block of audio memory owned by the layer. This is necessary for Continuous Feedback and is the default. When Continuous Merging mode is used, the content of a layer is not copied into the next layer. Instead the next layer contains only the new audio that was overdubbed. When a layer plays Mobius continually merges the contents of all the layers as the loop plays. In this mode layers are similar to tracks, they are completely independent recordings that are summed in realtime to create the loop. The advantage of Continuous Merging is that Mobius may require less memory if you tend not to overdub over the entire layer. For example, if you have a loop 10 seconds long, but only overdub 2 seconds worth of new material, the new layer will only require memory for 2 seconds. With Flattening mode, each new layer requires memory for the full 10 seconds whether or not there was any new material recorded during those seconds. Another interesting consequence of Continuous Merging is that when you save a project, you will create audio files containing only the new content overdubbed in each layer. These files can then be remixed to create variants of the loop. There are two big disadvantages of Continuous Merging. First, if you create many layers, the overhead of constantly merging the content from all the layers can require too much computer power which can cause audio glitches that sound like clicks or pops. Second, continuous feedback is not available in this mode because we are not gradually copying the content from one layer into the next. Only one level of feedback can be applied to all of the content from the previous layer. Choosing between layer flattening and continuous merging is done with the global parameter No Layer Flattening. When this parameter is checked, we will perform continuous merging. Most people will prefer to use layer flattening. There is however one interesting performance technique that is provided by continuous merging. If you set the Max Undo preset parameter to a non-zero value, Mobius will operate similar to a digital delay with a fixed number of repeats. For example, set Max Undo to 4, drop feedback slightly and record a loop. With feedback reduced, we will create a new layer on each repeat. But the Max Undo parameter restricts us to keeping only the most recent 4 layers. Once the first layer plays 4 times, the loop will become silent. The original recorded loop has "fallen off the edge" of the layer list. This technique can also be used to reduce the "wall of sound" effect when doing continuous overdubs. Material in older layers will be removed each time a new layer is created, letting the loop evolve without waiting for a gradual feedback decay. If you decide to use No Layer Flattening it is strongly recommended that you also set Max Undo to 20 or less to prevent a large number of layers from being created. This number may need to be lower if you create loops like this in multiple tracks. You will
have to experiment to see how many tracks and layers you can create before you start having audio glitches.
Mobius Techniques
March 2012
Contents
1 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 3 3.1 3.2 3.3 3.4 3.5 4 5 6 7 8 9 10 11 12 13 14 14.1 14.1.1 14.1.2 Introduction Record Sustain Record Record Mode Reverse Recording Speed Shifted Recording Auto Record Function Synchronized Recording Threshold Recording Generating MIDI Clocks Alternate Endings Long Press Record Auto Record Rehearse Overdub Ending Record with Overdub Overdub Mode Noise Floor Reduce Feedback During Overdub Overdub Quantized Reset Play Managing Layers Mute, Pause, and Solo Extending The Loop With Multiply Extending The Loop With Insert Shortening The Loop Replacing Loop Content Shuffle Changing Direction Speed Shift Speed Functions Speed Toggle, Sustain Speed Toggle Speed Step
14.1.3 Speed Up, Speed Down 14.1.4 Speed Next, Speed Previous 14.1.5 Halfspeed 14.1.6 Speed Cancel 14.2 Speed Controls 14.2.1 Speed Octave 14.2.2 Speed Step 14.2.3 Speed Bend 14.3 Speed Parameters 14.3.1 Speed Sequence 14.3.2 Speed Step Range 14.3.3 Speed Bend Range 14.3.4 Record Speed Changes 14.3.5 Speed Shift Restart 14.3.6 Speed/Pitch Note Range 14.4 Speed Combinations 15 Pitch Shift 15.1 Pitch Functions 15.1.1 Pitch Step 15.1.2 Pitch Up, Pitch Down 15.1.3 Pitch Next, Pitch Previous 15.1.4 Pitch Cancel 15.2 Pitch Controls 15.2.1 Pitch Octave 15.2.2 Pitch Step 15.2.3 Pitch Bend 15.3 Pitch Parameters 15.3.1 Pitch Sequence 15.3.2 Pitch Step Range 15.3.3 Pitch Bend Range 15.3.4 Pitch Shift Restart 15.4 Pitch Combinations 16 Time Stretch 16.1 Time Stretch Range 16.2 Combining Stretch, Pitch, and Speed 17 Loop Switching 17.1 Switch Quantize 17.2 Switch Confirmation 17.3 Switch and Confirm Modes 17.4 Empty Loop Action 17.4.1 Time Copy 17.4.1.1 Time Copy Mode
17.4.2 17.4.2.1 17.5 17.6 17.7 17.8 17.8.1 17.8.2 17.8.3 17.8.4 17.8.5 17.9 17.10 18 19 20 20.1 20.2 21 22 23 24 25 26
Sound Copy Sound Copy Mode Switch Location Switch Duration Return Location Switch State Transfer Record Transfer Overdub Transfer Reverse Transfer Speed Transfer Pitch Transfer Switch Velocity Sensitive Restart and Restart Once Changing Playback Position Changing The Start Point Loop Windowing Window Mode Scripting Windows Long Presses Managing Tracks Bounce Recording Capturing a Performance Sending MIDI Messages Host Control With MIDI Loopback Devices
1 Introduction
This document contains a sampling of common recording and performance techniques used with Mobius. You do not need to read this top to bottom, look at the index and skip to the sections that interest you. Note that this document is not yet complete. Many sections are still empty. If you have an interest in an empty section post a request to the forum and we will provide more information there.
2 Record
The Record function is used to record new loops of live audio. There are several ways to start and stop a recording, in the simplest case you press the Record button once to begin recording, and again to stop recording. Immediately after the second press the loop begins playing and continues until you alter it with another function. Before a loop is recorded for the first time, the loop is in reset mode and you will see the word Reset appear in the status display. While a loop is recording you are in record mode and will see the word Record in the status display. Unless and
advanced record ending option is used, when the recording completes the loop will enter play mode and Play will appear in the status display. If you want to discard the loop and start over you can use the Reset function to stop the loop, release all loop memory and return to reset mode. From there you can use the Record function again to record another loop. If you want to discard the loop and immediately begin recording a new one just press Record again with while the loop is playing. The memory for the previous loop is not released until you end the new recording, you can use the Undo function to cancel the new recording and return to the original loop. Note that Undo only restores the previous loop if the previous loop was not empty (in reset mode). Once a loop is reset all history of the loop is gone, you cannot undo from reset mode. Another way to reset a loop is to press and hold the Record button. This is referred to as a "Long Press Record" and it behaves the same as the Reset function. Using long press Record to reset the loop is a common technique when using a MIDI footswitch. Since you will almost always have a footswitch bound to the Record function you don't need to waste a footswitch bound to the Reset function, you can simply do a long press of the Record footswitch to do a reset. The loop will enter record mode for about 1/2 second (or whatever the configured long press interval is) then the loop will be reset. Once the loop has been recorded to your satisfaction, you may begin modifying it, or combining it with loops on other tracks.
Toggle - the default, one press to start and another to stop Sustain - forces Record to behave like Sustain Record Safe -
RecordMode=Safe should be it's own option so you can use it with both toggle and sustain recording.
2.4 Speed Shifted Recording 2.5 Auto Record Function 2.6 Synchronized Recording
Synchronized recording is a very complex topic that is covered fully in the Mobius Synchronization manual.
2.9 Alternate Endings 2.10 Long Press Record 2.11 Auto Record 2.12 Rehearse
3 Overdub
Overdubbing is the process of adding new sound to an existing loop. It is the most common way to modify loops after recording. When overdub is enabled, new sound coming into a track will be merged with the loop that is currently playing in that track. This will result in a new loop containing both the original sound and the new sound. Unlike many loopers, overdub in Mobius does not replace the original loop. Instead overdubbing creates a new "layer". Remember that loops are not single audio recordings, they are actually made up of several audio recordings called layers. Each time you modify a loop a new layer is created. If you don't like the results of a modification you can return the previous layer with the Undo function. Overdub is controlled with the following functions.
The Overdub function will toggle overdub on and off each time it is used. The Sustain Overdub function will turn overdub on when the function button is pressed and turn it off when the button is released. It must be used with a
sustainable trigger. This is useful if you want to create very short overdubs. Pressing, holding, then releasing a button is much faster than trying to press a button twice. The Overdub On and Overdub Off functions turn overdub on and off without toggling. They are intended for use in scripts where you want to set the overdub state without worrying about the current state. When a loop is playing, it is actually one of the layers in the loop that is playing. This is called the "active layer". The active layer is usually the last layer that was created, if you are displaying the Layer Bars in the Mobius window, the active layer will be highlighted. While overdub is on, a new layer is continually being created as the active layer plays. This new layer will contain a copy of what is in the active layer adjusted for feedback, then merged with the sound coming into the track adjusted by the track's input level. When the active layer plays to the end, the new layer with the overdub is "shifted" and becomes the active layer. The overdubbed layer then begins playing and a new layer is created to record the next overdub. This process continues for as long as overdub is enabled. This means that if you never turn overdub off you may generate a lot of layers. If you decide you don't like an overdub, you can use the Undo function to discard the new layer and return to the previous layer. You can keep using Undo to go all the way back in time to the very first layer, then start overdubbing again. See the Managing Layers section for more information on using Undo.
If you are overdubbing a loud audio signal you need to be careful not to overload the loop. Mobius does not do any compression or limiting, if you overdub loud sounds over loud sounds you may exceed the maximum level which will cause harsh digital clipping. If this happens you will need to reduce the track input level or reduce feedback. Reducing the input level makes the new overdubbed sound quieter, reducing feedback makes the sound being copied from the current loop quieter. If you prefer to leave the feedback control all the way up (127) Mobius can still slightly reduce the amount of feedback automatically while overdub is enabled. The amount of feedback reduction is small, approximately 5%. This can help reduce clipping if you overdub several times. Normally this small amount of feedback reduction is not audible but you can turn it off with a global parameter. Open the Global Parameters window and locate the checkbox labeled Reduce Feedback During Overdub, uncheck the box to turn this feature off.
4 Reset 5 Play 6 Managing Layers 7 Mute, Pause, and Solo 8 Extending The Loop With Multiply 9 Extending The Loop With Insert 10 Shortening The Loop 11 Replacing Loop Content
Speed Toggle Sustain Speed Toggle Speed Step Speed Up Speed Down Speed Next Speed Previous Halfspeed Speed Cancel
The speed of the loop may be changed in either semitone steps or with very small steps to achieve a smooth continuous shift. Most of the functions and controls apply a semitone shift, The Speed Bend control applies a smooth continuous shift.
For example when the binding argument is set to 7, the first press of the function will raise the speed by 7 semitones, or a perfect fifth. The second press will lower it by 7 semitones. If no argument is specified the default interval is -12 which makes Speed Toggle behave like half speed functions in other loopers. The Sustain Speed Toggle function behaves like Speed Toggle except that you do not execute it twice. It must be bound to a sustainable trigger such as a MIDI note. The speed shift is active while the trigger is held down and removed when the trigger is released. Speed Toggle has long press behavior. If you have Speed Toggle bound to a susutainable trigger, and you hold the trigger down longer than the long-press threshold, the function will convert to Sustain Speed Toggle and the speed shift will be removed when the trigger is released.
This pair of functions simply raises or lowers the speed by one semitone. You might use these if you want to raise or lower the speed in successive semitone steps but don't want to create a separate Speed Step bindings for each step.
14.1.5 Halfspeed
Halfspeed is an obsolete function that is provided only for backward compatibility with older scripts and bindings. It forces a non-toggling speed shift of one octave down. The same behavior is possible by creating a binding to Speed Step with an argument of -12.
Speed Controls
MIDI continuous controller, the controller will sweep through a range of 8 octaves. The center value of 64 will result in no shift.
Speed Parameters
This parameter defines the range of MIDI notes or controller values that will be automatically bound to the Speed Step or Pitch Step functions. The center of the range is defined by the note or control selected in the binding window. The parameter is found under the Miscellaneous tab of the Global Parameters window. The default value is 48 which will result in an 8 octave range to cover an entire MIDI keyboard. There is usually no need to change this, but you can specify a smaller range if desired.
15 Pitch Shift
NOTE: Pitch Shifting is still considered a "beta" feature. It can be fun to play with, but the algorighm introduces a significant amount of additional latency when it is active, and this is not being properly compensated. This makes it difficult to use pitch shifting when you are trying to synchronize multiple tracks with different amounts of shift, or if you are synchroning Mobius to an external device. Pitch shift is very similar to Speed Shift except that the pitch is changed without changing the length or tempo of the loop. In all other respects the functions and parameters used to control pitch shifting are almost identical to those for speed shifting. Pitch shifting may be controlled using these functions and controls.
Pitch Cancel will remove all forms of semitone and continuous pitch shift being applied to the track. It will cancel the effects of all pitch functions and pitch controls, and reset the Pitch Sequence index back to the beginning. This can be useful to get things back to normal if you have been combining Pitch Step, Pitch Bend and Pitch Octave in various ways without having to individually cancel each function and return the controls to their center positions.
Pitch Controls
this to a MIDI continuous controller, but these have less range and may result in a more audible "zipper" sound as you hear the pitch change in small steps. The internal range of the pitch bend control is defined by the Pitch Bend Range parameter. This defaults to 12 which means one octave up or down.
Pitch Parameters
This is commonly used when doing a ranged MIDI note binding to the Pitch Step function so that Mobius will behave simlilar to a keyboard sampler. Once the loop is recorded, you can play it chromatically on the keyboard, retrigging the loop with each new note.
16 Time Stretch
Time Stretch is an effect that combines Speed Shift and Pitch Shift to change the length and tempo of a loop without changing the pitch. Note that because Time Stretch relies on the Pitch Shift algorithm, it will have similar issues regarding added latency which can cause synchronization problems and a slight gap in the audio when as you change the amount of stretch. These issues will be addressed in future releases, until then we consider this a "beta" feature that needs to be used with caution. Time stretch is accomplished by binding to the Time Stretch control, there are no functions for time stretch. Like the Speed Bend and Pitch Bend controls, this can be bound to either the MIDI pitch wheel or to a continuous controller. The internal range of the time stretch control is defined by the Time Stretch Range preset parameter.
Time Stretch Control In the UI, the Time Stretch control will be shown with a value of zero in the center position when there is no time stretch being applied. When the MIDI pitch wheel is at the center position or the MIDI continuous controller is held at value 64, the value of the control will be zero and there is no time stretch. As the trigger value rises, the loop is compressed so that it becomes shorter and the tempo becomes faster. As the trigger value falls, the loop is expanded so that it becomes longer and the tempo becomes slower. Although time stretch combines Pitch Shift and Speed Shift it is not canceled by either the Pitch Cancel or Speed Cancel functions. You must cancel time stretch by returning the Time Stretch control to its center position.
The notion of a semitone range is confusing when applied to time stretch, since the purpose is to not change the pitch. Instead think of it this way, a one octave speed shift down results in a loop that lasts twice as long. For time stretch, a one octave shift down also results in a loop that is twice as long, but the pitch doesn't change. So for time stretch, the number 12 means the control has a range that will either double the loop length or cut it in half, but the pitch will not change.
17 Loop Switching
Tracks may contain several loops but only one loop at a time can be selected for playing or recording. This is called the active loop. Changing the active loop in a track a track is called loop switching. Loop switching is a complex topic because there are many options available to control when the switch happens and what happens to the new loop after it is activated. Often you will want to use switch quantization to control when the loop switch will happen relative to the loop that is currently playing. This is important if you want to maintain a steady rhythm, for example letting the current loop play to the end before switching. If the next loop is empty you will often want to automatically begin recording into it, or copy portions of the current loop into it so you can begin creating variations. One of the most common uses for loop switching is to record "song parts" such as verse A in loop 1, verse B in loop 2, and a chorus in loop 3, then switch between those at rhythmically precise times. You can also use track loops as a primitive sample player where each loop contains a different sound that when triggered plays from beginning to end and then stops. The following functions will do some form of loop switch.
Next Loop Previous Loop Sustain Next Loop Sustain Previous Loop Loop 1 Loop 2 Loop 3 Loop 4 Loop 5
The Next Loop function will activate the next loop in the track. If the last loop is currently active, Next Loop will wrap back around and activate the first loop. The Previous Loop function works in the opposite direction, activating the previous loop. If the first loop is currently active Previous Loop wraps and activates the last loop. The Sustain Next Loop and Sustain Previous Loop functions must be bound to a sustainable trigger . If they are not, they behave the same as Next Loop and Previous Loop. The sustain functions will switch to the new loop while the function button is held down, then they return to the original loop when the function button is released. Note that you can get sustain behavior with other loop switching functions by setting the Switch Duration parameter. The Restart function starts the current loop over from the beginning. It may not sound like this would be a loop switch but it behaves like a switch away from and then immediately back to the current loop. The RestartOnce function restarts the current loop, lets it play to the end and then automatically enters Mute mode. The numbered Loop functions switch directly to the numbered loop. If that loop is already selected these functions behave the same as Restart.
Off Subcycle Cycle Loop Confirm Confirm Subcycle Confirm Cycle Confirm Loop
When the value is Off the switch will happen immediately when you press the function button. When the value is Subcycle, Cycle or Loop the switch will be delayed until the next quantization point. You will see a white event marker under the loop meter showing when the switch will happen and the loop will enter Switch mode. When one of the four Confirm values is selected, an extra confirmation action will be required before the loop switch will happen. After you use any of the loop switch
functions, the current loop will first enter Confirm mode and wait there indefinitely. You must then execute the Confirm function to confirm the switch. See the Switch Confirmation section for other confirmation options. What happens after the confirmation action depends on which Switch Quantize parameter value was selected. If the value was Confirm the switch will happen immediately. If the value was Confirm Subcycle, Confirm Cycle, or Confirm Loop the loop enters Switch mode and waits for the next quantization point before switching. Note that while you in either Confirm or Switch mode many functions will behave differently than they normally do. This is sometimes referred to as the "switch quantization period" and by some older EDP users as "lame duck period". This is described in detail later in the Switch and Confirm Modes section.
Most functions you execute will simply be delayed until after the switch. This is called function stacking. In the user interface, you will see the function names stacking under the loop switch event marker. This can be used to queue up interesting combinations of functions and have them all execute exactly at the same time after the switch. For example, putting the next loop into Reverse, Speed Toggle, and Substitute modes all at once. Until the switch occurs you can use Undo to remove stacked functions if you trigger the wrong one or decide you don't want it. Once you have removed all the stacked functions and you are left with only the switch event marker, using Undo will cancel the switch and leave you in the current loop. NOTE: The EDP uses Undo as the switch confirmation action. If you like this and have Undo set in the Switch Confirmation Functions global parameter, then you will not be able to use Undo to undo the stacked functions and cancel the switch when you are in Confirm mode. You can however use Undo normally while in Switch mode. A few functions have special behavior when executed during the switch quantization period.
Record - forces the next loop to be rerecorded, even if it is not empty Overdub - performs a Sound Copy if the next loop is empty Multiply - performs a Sound Copy if the next loop is empty Insert - performs a Time Copy if the next loop is empty
A Sound Copy creates an instant copy of the original loop in the next loop. A Time Copy creates a clear loop of the same size as the original loop, but does not copy over any of the audio content. Both of these concepts are described in more detail later. The difference between Overdub and Multiply is what mode the loop will be left on after the sound copy. When Overdub was stacked, the loop will always be left in Overdub mode if a sound copy occurred. If Multiply was stacked the loop will be left in the mode specified by the Sound Copy Mode preset parameter.
When set to None, no automatic action will be performed. The loop will be left in Reset mode. When set to Record, the loop will immediately enter Record mode after the switch. You can record as long as you like but you must remember to execute the Record function to end the recording.
When set to Copy a Sound Copy will be made from the original loop into the new loop. When set to Copy Timing a Time Copy will be made from the original loop into the new loop. Copy Timing and less often Copy Sound are very useful because they let you creating synchronized loops that are exactly the same size or an exact multiple of a common factor. See the Loop Copy section of the Mobius Synchronization manual for more information on creating synchronized loops.
The default value is Insert. When Time 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 Time Copy Mode is set to Insert you will immediately begin inserting into copied loop. You must press the button for the Insert function when you are finished. The values available here are the same as those available for Sound Copy Mode. This means you can select Multiply but this is less useful after a time copy because there is no audio content to repeat so Multiply 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 Shortening The Loop for more information on using the Multiply function to make the loop smaller.
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. 17.4.2.1 Sound Copy Mode 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.
Follow - keep the same location you had in the previous loop Restore - restore the location the new loop had the last time it was playing Start - start the new loop from the beginning Random - move to a randomly chosen subcycle
When using Follow, if the new loop is smaller than the current loop the playback position may need to be "wrapped" so that it fits within the new loop. For example if the current loop is 6 seconds long and you are currently at the start of second 5, then you switch to a loop that is 3 seconds long, the new loop location will be at the start of second 2. When using Restore, if the new loop has never been played the location will be at the start. If you are using one of the methods to perform a sound copy or a timing copy (see Empty Loop Action) then the location will not be restored.
Switch Location only applies if the loop is not empty (in Reset mode). If the loop is empty then the new location will always be at frame zero of the empty loop.
Permanent - stay in the new loop until it is manually changed Once - play the new loop until the end, then automatically enter Mute mode Once Return - play the new loop until the end, then automatically return to the previous loop Sustain - play the new loop for as long as the function button is held down, then it automatically enter Mute mode Sustain Return - play the new loop for as long as the function button is held down, then return to the previous loop
The most common option is Permanent, you remain in the new loop until you change it with another loop switch function. The Once option when combined with a Switch Location value of Start makes the loop triggering functions behave similar to a sampler. The loop always starts playing from the beginning, plays once, then stops (enters mute mode). The Sustain option must be used with a switch function bound to a sustainable trigger . If you use a non-sustainable trigger then this will behave the same as Permanent, you will remain in the new loop but it will not enter Mute mode automatically. The Sustain Return option must also be used with a switch function bound to a sustainable trigger . If you use a non-sustainable trigger then this will behave the same as Permanent. Note that when Switch Duration is set to Sustain Return the Next Loop function behaves the same as the Sustain Next Loop function. Sustain Next Loop, and Sustain Previous Loop will always return to the original loop when the sustain ends. They ignore the Switch Duration parameter. The Restart and Restart Once functions ignore the Switch Duration parameter. Restart always behaves as if Switch Duration was set to Permanent and Restart Once always behaves as if Switch Duration was set to Once.
Follow - keep the same location you have in the current loop Restore - restore the location the original loop had the last time it was playing
Start - start the original loop from the beginning Random - move to a randomly chosen subcycle
When using Follow, if the original loop is smaller than the current loop the playback position may need to be "wrapped" so that it fits within the new loop. For example if the current loop is 6 seconds long and you are currently at the start of second 5, then you return to a loop that is 3 seconds long, the new loop location will be at the start of second 2.
When this parameter is set to Follow, if the current loop is in Record mode, after the switch the next loop will also automatically enter Record mode. Note that this will happen whether or not the next loop is empty. This option is useful if you want to record a set of loops all at once without stopping. Start by executing the Record function to record the first loop. Then execute the Next Loop function to end the current recoding and immediately begin recording the next loop. When this parameter is set to Off and the current loop is in Record mode, executing a switch function will finish the recording of the current loop then switch to the next loop. If the next loop is not empty it will simply start playing. If the next loop is empty the Empty Loop Action parameter controls what will happen.
Off - Overdub will be forced off in the next loop Follow - Overdub will be carried over from the current loop to the next loop Restore - Overdub will be restored to the state it had the last time the next loop was active
The default value is Off. If you like to leave overdub mode on all the time and control overdubbing by muting your instrument you may want to set this to Follow so you don't have to reactivate overdub every time you switch loops. Setting this to Restore is relatively unusual because you usually care more about what the overdub state is now, not what it was in the past.
Off - Reverse will be forced off in the next loop Follow - Reverse will be carried over from the current loop to the next loop Restore - Reverse will be restored to the state it had the last time the next loop was active
The default value is Off. If you think of reverse as a "global" option that should apply to all loops in a track then set this parameter to Follow. Setting this to Restore may be interesting if you want to have some loops that always play forward and some that always play in reverse.
Off - Speed shift will be off in the next loop Follow - Speed shift will be carried over from the current loop to the next loop Restore - Speed shift will be restored to the state it had the last time the next loop was active
The default value is Off. If you think of speed shift as a "global" option that should apply to all loops in a track then set this parameter to Follow. Setting this to Restore may be interesting if you want to have loops that always play at different speeds.
Off - Pitch shift will be off in the next loop Follow - Pitch shift will be carried over from the current loop to the next loop Restore - Pitch shift will be restored to the state it had the last time the next loop was active
The default value is Off. If you think of pitch shift as a "global" option that should apply to all loops in a track then set this parameter to Follow. Setting this to Restore may be interesting if you want to have loops that always play with different amounts of pitch shift.
The Switch Velocity Sensitive parameter can be used to automatically adjust the track output level during a loop switch. This can only be used if the loop switch function is bound to a MIDI Note message that can carry velocity information. When this parameter is checked, the output level of the track will be set to the velocity value of the MIDI note that triggered the loop switch function. If a loop switch function is not bound to a MIDI Note message, then this parameter will be ignored. This is most often used with the 8 numbered Loop X functions bound to adjacent keys on a MIDI keyboard, or to velocity sensitive pads on a control surface. Once loops have been recorded you can then "play" the loops by triggering them from the MIDI device making them softer of louder depending on how hard you hit the key/pad. If you also set the Switch Location parameter to Start and the Switch Duration to Once it will behave like a simple velocity sensitive sample player.
In addition there are two functions that may be used in scripts for even more control over the window.
WindowMove WindowResize
The following preset parameters control how the window is moved and sized.
Window Slide Unit Window Slide Amount Window Edge Unit Window Edge Amount
Though it is not required, loop windowing is usually performed after doing an "unrounded multiply" or a "remultiply" to cut the loop down to a shorter length. Unrounded multiply is the Multiply function followed by the Record function which can cut out a section of any size. Remultiply is Multiply followed by another Multiply within a loop that has more than one cycle to cut out a section that is exactly some number of cycles. Other functions that reduce the size of the loop include Divide, Trim Start, and Trim End. Once the loop length has been reduced, you then start by using the Window Backward function one or more times. With the default parameters you will move backward an amount equal to the current loop length. If you have not changed the length of the loop, the effect will be similar to using Undo, you simply move backward in the loop history one layer at a time. But if you have shortened the loop, you will be playing subsections of layers, or sections from different layers as you move the window. After you have moved the window backward, you can use the Loop Window Forward function to move it in the other direction, up until you return to the most recent loop. The effect is similar to Redo but you are not limited by layer boundaries. The amount of time the window is moved forward or backward is controlled by the Window Slide Unit and Window Edge Amount preset parameters. Window Edge Amount is a positive number and Window Slide Unit may have the following values:
The default value is Loop which means you slide the window by the current length of the loop. Setting this to Cycle or more often Subcycle lets you slide the loop by smaller amounts but still maintaining an exact mathemetical relationship to the original loop. The Millisecond and Frame units give you more control over the length of the slide, but since the values may not be musically related to the original loop these are best used for unpredictable "glitch" looping.
The Window Slide Amount parameter is usually left at 1 for Loop, Cycle, and Subcycle units. This value is a unit multiplier so with a unit of Subcycle and an amount of 4 you will slide forward or backward by 4 subcycles. For the Millisecond unit, the Window Slide Amount is the a number of milliseconds, so 1000 would slide the window forward and backward by 1 second. For the Frame unit, the slide amount is the number of frames, which are pairs of stereo samples. Determining the length of the slide in frames depends on your sample rate selection in the Audio Devices window. With the default sample rate, entering 44100 as the amount would result in a slide of 1 second. Sometimes after sliding a window, you may want to add or remove a little from the start or end of the new loop. The Window Start Backward and Window Start Forward funtions move the start of the window without changing the end, and the Window End Backward and Window End Forward change the end of the window without changing the start. The amount the window is resized is controlled by the Window Edge Unit and Window Edge Amount preset parameters. Window Edge Amount is a positive number and Window Edge Unit has the same values as Window Slide Unit. The default value for Window Edge Unit is Subcycle which is useful for creating loops that maintain remain at the original tempo. Millisecond or Frame can be used to fine tune the window edges. You can use the windowing functions in any combination, for example sliding the window backward, changing the starting and ending edges, then sliding the modified window forward. When you reach the beginning or ending of the loop history, it may not be possible to change the loop by the selected unit. For example if you are at loop frame 10,000 and a subcycle is 20,000 frames long and you then use the Widow Backward function with a Window Slide Unit of Subcycle you cannot move backward 20,000 frames. The slide will be limited to what is available, 10,000 frames. This may mean that when you reach either end of the loop history, the window position may shift so that when you slide in the opposite direction you won't be playing exactly the same windows that were playing when you were sliding toward the history edge.
you would like to keep, you may simply keep playing the window or begin modifying it with other functions such as Overdub and Multiply. If you make changes to the window layer and you let it play to the end without using any of the windowing functions, then the window layer is added to the loop history and you exit Window mode. It is important to understand the relationship between Window mode and the Feedback control. If you have reduced Feedback you are making a change to the layer being played. You are recording a new layer containing the layer being played at a reduced level. If you are in Window mode with Feedback lowered and you let the window layer play to the end, the window layer will be added to the history and you will exit Window mode. This can make it difficult to position the window if the window is short. The window will quickly play to the end and cancel Window mode before you have a chance to slide the window to the desired location. For this reason it is recommended that you do not leave Feedback lowered or be in Overdub mode when you use windowing functions.
Note that bounce recording is a special kind of "global mode" that is not related to any particular track or loop. While you are bounce recording, you can be manipulating tracks and loops in any way, including recording new loops, multiplying, overdubbing, triggering, and speed shifting. Mobius is recording the entire process. Bounce recording can be especially useful with the Restart, Speed Shift and Pitch Shift functions. Once a loop is created, you can play a chord progression using Speed Shift or Pitch Shift, record the result of that performance, and bounce this into a new track to serve as a background loop. The timing of the bounce recording may be controlled with the Bounce Quantize parameter. Bounce quantization is not affected by the Quantize parameter that is used with other functions. This is because bounce quantization is almost always set to Loop or Cycle, but you may not wish to use this same quantization for the functions that build the loop.
24 Capturing a Performance 25 Sending MIDI Messages 26 Host Control With MIDI Loopback Devices
Mobius Synchronization
March 2012
Contents
1 2 2.1 2.2 2.3 2.4 3 3.1 3.2 3.3 3.4 4 4.1 4.1.1 4.1.2 4.2 5 5.1 6 6.1 6.2 6.3 6.4 7 7.1 7.2 8 8.1 8.2 8.3 8.4 9 9.1 9.2 Introduction Concepts Start Point and End Point Reset, Empty, Clear, and Silent Related Sizes Cycles and Subcycles Loop Copy Empty Loop Action = Record Empty Loop Action = Copy Sound Empty Loop Action = Copy Timing Other Ways To Copy Loops Track Copy Empty Track Action Empty Track Action = Copy Sound Empty Track Action = Copy Timing Track Copy Functions Synchronization Parameters Sync Source Track Sync Track Sync Master Track Sync Unit Track Sync Example Changing the Track Sync Master Track Host Sync Synchronizing Stop Recommended Track Configurations MIDI Slave Sync Configuring MIDI Devices for Slave Sync Configuring the MIDI Sync Source Using MIDI Slave Sync Recommended Track Configurations MIDI Master Sync Configuring MIDI Devices for Master Sync Configuring MIDI Master Sync Source
9.3 Recommended Track Configurations 9.4 MIDI Master Sync Parameters 9.5 Out Sync Manual Start 9.6 Calculating The Tempo 9.7 Adjusting The Tempo 9.7.1 Out Sync Speed Adjust 9.7.2 Out Sync Resize Adjust 9.8 Changing the MIDI Sync Master Track 9.9 Controlling Plugin Host Tempo 9.10 Mute and Pause during MIDI Master Sync 10 Drift, Dealign and Realign 10.1 The External Loop 10.2 Drift Correction 10.2.1 Drift Resync Frames 10.2.2 Drift Correction and Track Sync 10.3 Realign 10.3.1 Realign with Track Sync 10.3.2 Realign with MIDI Master Sync 10.3.2.1 Out Sync Realign Action = Send MIDI Start 10.3.3 Realign Alternatives - MIDI Start and Mute MIDI Start 10.3.4 Realign Alternatives - Sync Start Point
1 Introduction
Unless you intend 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 creation of multiple loops and tracks that will play with a consistent rhythm without drifting apart. If you like to record "ambient" loops you may not need synchronization, but most users will eventually need some form of synchronization. There are three techniques for creating synchronized loops:
Loop Copy - copying some or all of a loop from one location to another Synchronized Recording - creating a new live recording whose size is controlled by another loop MIDI Clock Generation - controlling the tempo of loops in another device such as a drum machine with MIDI clocks
Loop Copy instantly copies one loop to another. The target loop can be in the same track or a different track. Since the loops are exactly the same size or have Related Sizes they will play together without drifting apart. Synchronized Recording involves adjusting the beginning and ending of a new loop recording so that the finished loop has a size that is exactly related to another loop. There are three ways to make synchronized recordings: track sync, host sync, and MIDI slave sync. With track sync, recording will be synchronized to the playback location of another track. With host sync, recording is synchronized with beat or bar
pulses from the transport running in the plugin host application. With MIDI slave sync, recording is synchronized to beat or bar pulses coming from an external MIDI clock. All of these are sometimes referred to as forms of slave sync since you are letting another loop or clock source determine the length of a recording. MIDI Clock Generation is a form of synchronization that causes MIDI clocks to be sent out at a tempo that is calculated from the length of one of the Mobius tracks. Devices following this MIDI clock will then play in sync with the loop in the Mobius track. Here the loop you are synchronizing isn't inside Mobius, it is being played by another device such as a drum machine or sequencer. This is sometimes referred to as master sync since Mobius is controlling another device. Each of these techniques will be discussed in more detail in later sections. But first it is important to understand a few concepts described in the next section. Be sure to read Concepts before jumping to the other sections.
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.
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.
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 Copy
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 listener. 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 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:
Switch Quantize 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 Start 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 start 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 use the Empty Loop Action preset parameter.
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 Play. 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. If you know you want to immediately begin overdubbing into the copied loop set the parameter to Overdub or Multiply>. Insert is less common, you will immediately begin the insertion of a new empty cycle so the listener will not hear the copied loop until you end the insert. If you set this parameter to Overdub, Multiply, or Insert, 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.
This parameter has the same possible values as Sound Copy Mode described in the Empty Loop Action = Copy Sound 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.
Record - perform an unconditional Record even if the loop is not empty Overdub - perform a Sound Copy and enter Overdub mode Multiply - perform a Sound Copy Stutter - perform a Sound Copy Insert - perform a Time Copy
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 Copy
In the previous section we discussed ways to create synchronized loops by coping one loop into another within the same track. Similar techniques exist for copying loops from one track to another track which can then play at the same time. We refer to this technique as track copy but note that the term is a bit misleading. When we say track copy it sounds like that might mean copying the entire contents of one track into another. But what this actually means is copying a single loop from one track into a single loop of a different track.
Empty Track Action is a preset parameter that can cause the loop playing in the active track to be immediately copied to an empty loop in a different track when that track is selected.
Empty Track Action 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:
Clicking the mouse over a track in the user interface Using the left or right arrow keys to select the track to the left or right of the current track Executing one of the track selection functions: Next Track, Previous Track, or Track X
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 original track so it doesn't matter as much when the change happens.
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. A clear loop has a size and it can be played and modified, but it starts without any 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: Play, Overdub, Mulitply, and Insert. The default value is Play. The most common alternative is Overdub. See Empty Loop Action = Copy Timing for more information on using Time Copy Mode
5 Synchronization Parameters
In the remainder of this document we will discuss various forms of synchronized recording. There are several parameters that can be used to control these forms of synchronization, all are defined in the Track Setup. See Track Setups in the Exploring Mobius manual for more information about creating track setups. Bring up the Track Setup configuration window and select the Synchronization tab.
Most of the parameters under the Synchronization tab apply to all tracks. For example when you set Realign Time the same realign time will be used for all tracks. Two of the parameters however can be overridden so that each track may have a different value. The two parameters are Sync Source and Track Sync Unit.
Each track may have a Sync Source which defines how the track will be synchronized. Often you will want all tracks to have the same sync source, but sometimes you may have tracks that need a different synchronization style. The default sync source for all tracks is set in the Default Sync Source field under the Synchronization tab.
None - The tracks are not synchronized Track - The tracks synchronize with a master track Out - A master track sends MIDI clocks out, non-master tracks sync with the master track Host - The tracks synchronize with the plugin host MIDI - The tracks synchronize with an incoming MIDI clock
The value selected here will be used by all tracks unless they override it. To override the Default Sync Source parameter select the track under the Tracks tab and set the Sync Source field.
In the previous example the default sync source was MIDI and track 1 has the sync source set to Default. This means that track 1 and all other tracks with sync source Default will be using sync source MIDI. This is the easiest way to make all tracks use the same sync source. Have all tracks set their sync source to Default then you can just change the one parameter Default Sync Source to set the sync source for all tracks. Occasionally though you may want tracks that use different sync sources. For example most tracks would use MIDI to sync with an external drum machine but one track is used for arrhythmic drones and should not sync to MIDI clocks. To override the sync source in selected tracks set the Sync Source parameter to something other than Default.
In the previous example track 8 has Sync Source set to None which will disable the default MIDI sync source.
6 Track Sync
The simplest way to create synchronized tracks is to set the Sync Source parameter to Track. 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 or measure), they will play in sync.
Default Track Sync Unit To override this value for some tracks, set the Track Sync Unit parameter under the Tracks tab.
Track Sync Unit Override The default is Loop. In this example we have overridden this in track 1 to be Subcycle. When the track sync unit is Loop the starting and ending of a recording will be aligned with the loop start point of the master track. Setting this parameter to Cycle or Subcycle allows you to record synchronized tracks that are shorter than the master track but will still play in sync.
master track is called the master loop. Make the loop at least a few seconds long so you can experiment with Track Sync Unit 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 Unit 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.
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 Unit 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 unit will behave the same as the Loop sync unit. To experiment with this set Default Track Sync Unit to Subcycle and set the Subcycles preset 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 Unit 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 Unit is set to Subcycle we may not be able to keep 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.
7 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, set the Sync Source parameter to Host, then set the parameter MIDI/Host Sync Unit to either Beat or Bar.
Sync Source Host The Record function will now be quantized so that it starts exactly on a beat or bar pulse from the plugin host. This is a bit like using Track Sync with Default Track Sync Unit set to Cycle or Subcycle. You can record loops that are exact multiples of the host bar length, or you can record loops with an odd number of beats so that the loop goes in and out of phase with the host. Most people set MIDI/Host Sync Unit to 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 late 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 too 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.
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.
Program the host and Mobius so that they respond to the same MIDI message Program the MIDI controller so that it sends two messages, one for the host and the other for Mobius Execute a Mobius script that stops the host transport using a MIDI "loopback" device
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.
The second configuration is to have one track use Sync Source = Host and record that first so that it becomes the track sync master track. Then have all other tracks use Sync Source = Track. Then you will have only one track that needs to follow the host and the others will follow the Mobius master track. The differences between the two approaches are subtle. We recommend that new users use the first approach and have all tracks use Sync Source = Host. The main reason to use the second approach is to have more control over the granularity of the synchronization points. For example you can record synced loops that are fractions of the size of a host beat by setting Track Sync Unit = Subcycle and setting Subcycles to a large value. Or you can record synced loops that are many host bars in length by setting Track Sync Unit = Loop. Since each track can have a different Sync Source it is possible for tracks to use a combination of Host Sync, MIDI Master Sync and MIDI Slave Sync at the same time. We are aware of no practical reason to do this, unless you know exactly why you are doing this it is strongly not recommended.
The host application does not support VST synchronization or does not have a "transport". A hardware device such as a drum machine is to be the sync master for both the host application and Mobius.
In these cases you can get MIDI beat clock into Mobius in two ways:
Let the host open the MIDI device and route MIDI beat clock messages into Mobius through the VST interface Let Mobius open a private MIDI device and receive MIDI beat clock directly from the device
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.
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: Beats Per Bar or Subcycles. Beats Per Bar is found under the Synchronziation tab of the track setup window as shown in the previous capture. If Beats Per Bar is set to a value other than zero, that will be the number of beats in one bar. If Beats Per Bar is empty or zero, the number of bar beats is determined by the value of the Subcycles preset parameter. It is recommended that you set the Beats Per 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 Beats Per Bar to 4 if you are using 4/4 time but have Subcycles set to 8 so the smallest quantization unit is an eighth note.
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.
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 "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.
Sync Source Out 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. Once a track becomes the MIDI sync master, all other tracks that have Sync Source set to Out will behave as if they were using Track Sync. There can only be one master track in control over the MIDI clocks being sent, the other tracks will slave to the master track. This is important so it deserves repeating. Setting Sync Source to Out is almost exactly the same as setting it to Track. One track will be designated the master and other tracks will sync to the master track. The primary difference between this and Track Sync is that the master track will also send out MIDI clocks. 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 the 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 one tenth.
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.
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 behave as if the sync source was set to Track.
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:
Resizing the master loop with functions such as Trim and Unrounded Multiply Moving between layers of the master loop with Undo or Redo if the layers have different sizes Switching between loops in the master track that have different sizes Changing the speed of the master loop with Rate Shift
In these cases, two setup parameters control what will happen to the tempo of the generated MIDI clocks:
Out Sync Speed Adjust - used when changing the playback rate Out Sync Resize Adjust - used when the loop changes size
These parameters have may either be set to None which means that the current tempo is not changed, or Change Tempo which means that the tempo will be recalculated so that it matches the new characteristics of the loop.
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 restarted 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 Out Sync Mute Action parameter which may have these values.
Send Stop/Start continue clocks Send Stop/Start stop clocks Stop clocks Continue clocks
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 Out Sync Mute Action 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. If Continue clocks is used, we do not send a MIDI Stop message 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.
Reversing playback direction (Reverse, Forward, Backward) Changing playback rate (Rate Shift) Restarting the loop from the beginning (Restart, Loop Switch) Executing the Move function in a script
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.
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 Calculating 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 a size in frames and pulses. We begin "playing" this loop silently, it will advance at exactly the same rate as the other Mobius tracks though it is invisible and you won't hear it. We also 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.
loop pulses, if the drift frames are negative it means the Mobius tracks are behind the external loop pulses. 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.
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 Source set to MIDI and all the other tracks had Sync Source set to Track. 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 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 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 the master track.
10.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:
Reversing playback direction (Reverse, Forward, Backward) Changing playback rate (Rate Shift) Restarting the loop from the beginning (Restart, Loop Switch) Executing the Move function in a script
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 playback position of the external loop. Typically realign is delayed until the external loop reaches its start point. 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 synchronization parameter which may have these values.
For most users it is recommended that you leave this at the default value of Start Point. Setting this to Next Bar or Next Beat will cause the realign to happen when the external loop reaches the next beat or bar pulse. Setting this to Now will cause the realign to happen as soon as the next sync pulse is received. For Host sync this will be the same as Next Beat but for MIDI and Out it will be on the next MIDI clock which will make it feel like it happens almost immediately.
Restart 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. 10.3.2.1 Out Sync Realign Action = 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 timer pulses, we will tell the external device 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.
Mobius Reference
March 2012
Contents
1 Introduction 2 Concepts 2.1 Display Names and Internal Names 2.2 Parameters 2.3 Controls 2.4 Variables 2.5 Modes 2.6 Functions 2.7 Function Quantization 2.8 Instant Functions 2.9 Modal Functions 2.10 Rounding Functions 2.11 Sustain Functions 2.12 Function Families 2.13 Mode Endings 2.14 Function Classes 2.14.1 Modal Edit Functions 2.14.2 Instant Edit Functions 2.14.3 Loop Window Functions 2.14.4 Reset Functions 2.14.5 Instant Move Functions 2.14.6 Loop Switch Functions 2.14.7 Effect Functions 2.14.8 Mute Functions 2.14.9 Global Functions 3 Major Modes 3.1 Confirm 3.2 Insert 3.3 Multiply 3.4 Mute 3.5 Overdub 3.6 Pause 3.7 Play 3.8 Record
3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12
Rehearse Rehearse Record Replace Reset Run Solo Solo Mute Stutter Substitute Switch Synchronize Threshold Minor Modes Capture Master MIDI Master Mute Overdub Pitch Bend Pitch Octave Pitch Step Reverse Speed Bend Speed Octave Speed Step Speed Toggle Time Stretch Track Master Window Functions Auto Record Backward Bounce Checkpoint Clear Confirm Divide Focus Lock Forward Global Mute Global Pause Global Reset
5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 5.40 5.41 5.42 5.43 5.44 5.45 5.46 5.47 5.48 5.49 5.50 5.51 5.52 5.53 5.54
Halfspeed Insert Instant Multiply Loop Loop Copy MIDI Out MIDI Start MIDI Stop Move Multiply Mute Mute MIDI Start MuteOff MuteOn Mute Realign Next Loop Next Track Overdub OverdubOff OverdubOn Pause PitchBend Pitch Cancel Pitch Down Pitch Next PitchOctave Pitch Previous Pitch Step Pitch Up Play Previous Loop Previous Track SpeedBend Speed Cancel Speed Down Speed Next SpeedOctave Speed Previous Speed Step Speed Toggle Speed Up Realign
5.55 5.56 5.57 5.58 5.59 5.60 5.61 5.62 5.63 5.64 5.65 5.66 5.67 5.68 5.69 5.70 5.71 5.72 5.73 5.74 5.75 5.76 5.77 5.78 5.79 5.80 5.81 5.82 5.83 5.84 5.85 5.86 5.87 5.88 5.89 5.90 5.91 5.92 5.93 5.94 5.95 5.96
Record Redo Rehearse Replace Reset Restart Restart Once Reverse Sample Save Capture Save Loop Shuffle Slip, Slip Backward, Slip Forward Solo Start Capture Start Point Stop Capture Stutter Substitute Sustain Insert Sustain Multiply Sustain Mute Sustain Mute Restart Sustain Next Loop Sustain Overdub Sustain Pause Sustain Previous Loop Sustain Record Sustain Replace Sustain Reverse Sustain Speed Toggle Sustain Stutter Sustain Substitute Sustain Unrounded Insert Sustain Unrounded Multiply Sync Master MIDI Sync Master Track Sync Master Track+MIDI Sync Start Point Time Copy TimeStretch Track
5.97 Track Copy 5.98 Track Copy Timing 5.99 Track Group 5.100 Track Reset 5.101 Trim End 5.102 Trim Start 5.103 Undo 5.104 Window Backward 5.105 Window Forward 5.106 Window Start Backward 5.107 Window Start Forward 5.108 Window End Backward 5.109 Window End Forward 5.110 WindowMove 5.111 WindowResize 6 User Interface Functions 6.1 UI Decrement Parameter 6.2 UI Increment Parameter 6.3 UI Next Parameter 6.4 UI Move Display Components 6.5 UI Previous Parameter 7 Preset Parameters 7.1 Auto Record Bars 7.2 Auto Record Tempo 7.3 Bounce Quantize 7.4 Empty Loop Action 7.5 Empty Track Action 7.6 Enable Secondary Feedback 7.7 Loops Per Track 7.8 Maximum Redo 7.9 Maximum Undo 7.10 Multiply Mode 7.11 Mute Cancel 7.12 Mute Mode 7.13 No Feedback Undo 7.14 No Layer Flattening 7.15 Overdub Quantized 7.16 Overdub While Rounding 7.17 Overdub Transfer 7.18 Pitch Bend Range 7.19 Pitch Step Range 7.20 Pitch Sequence
7.21 7.22 7.23 7.24 7.25 7.26 7.27 7.28 7.29 7.30 7.31 7.32 7.33 7.34 7.35 7.36 7.37 7.38 7.39 7.40 7.41 7.42 7.43 7.44 7.45 7.46 7.47 7.48 7.49 7.50 8 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 9
Pitch Shift Restart Pitch Transfer Quantize Mode Speed Bend Range Speed Step Range Speed Sequence Speed Shift Restart Speed Transfer Record Resets Feedback Record Speed Changes Record Threshold Record Transfer Return Location Reverse Transfer Shuffle Mode Slip Mode Slip Time Sound Copy Mode Subcycles Switch Duration Switch Location Switch Quantize Switch Velocity Sensitive Time Copy Mode Time Stretch Range Track Leave Action Window Edge Unit Window Edge Amount Window Slide Unit Window Slide Amount Track Parameters Focus Lock Group Input Port Mono Track Name Output Port Plugin Input Port Plugin Output Port Preset Preset Number Setup Parameters
9.1 Active Track 9.2 Beats Per Bar 9.3 Binding Overlay 9.4 Default Sync Source 9.5 Default Track Sync Unit 9.6 Out Sync Manual Start 9.7 Out Sync Max Tempo 9.8 Out Sync Min Tempo 9.9 Out Sync Mute Action 9.10 Out Sync Realign Action 9.11 Out Sync Resize Adjust 9.11.1 Out Sync Speed Adjust 9.12 Restore After Reset 9.13 Realign Time 9.14 Slave Sync Unit 9.15 Sync Source 9.16 Track Sync Unit 10 Track Controls 10.1 Feedback 10.2 Input Level 10.3 Output Level 10.4 Pan 10.5 Pitch Bend 10.6 Pitch Octave 10.7 Pitch Step 10.8 Secondary Feedback 10.9 Speed Bend 10.10 Speed Octave 10.11 Speed Step 10.12 Time Stretch 11 Global Parameters 11.1 16 Bit Wave Files 11.2 Audio Input Device 11.3 Audio Output Device 11.4 Bindings 11.5 Confirmation Functions 11.6 Custom Message File 11.7 Drift Check Point 11.8 Drift Resync Frames 11.9 Dual Plugin Edit Window 11.10 Fade Frames 11.11 Focus Lock Functions
11.12 Groups Have Focus Lock 11.13 Host MIDI Status Export 11.14 Input Latency 11.15 Isolate Overdubs 11.16 Long Press Milliseconds 11.17 Max Loops Per Track 11.18 Message Duration 11.19 MIDI Input 11.20 MIDI Output 11.21 MIDI Record Mode 11.22 MIDI Status Export 11.23 MIDI Through 11.24 Modes Ignoring Secondary Feedback 11.25 Monitor Audio Input 11.26 Mute Cancel Functions 11.27 Noise Floor 11.28 OSC Input Port 11.29 OSC Output Host 11.30 OSC Output Port 11.31 Output Latency 11.32 Periodic Status Log 11.33 Plugin MIDI Inputs 11.34 Plugin MIDI Outputs 11.35 Plugin MIDI Through 11.36 Plugin Ports 11.37 Quick Save File 11.38 Speed/Pitch Note Range 11.39 Reduce Feedback During Overdub 11.40 Save Project Layers 11.41 Selected Track 11.42 Setup 11.43 Trace Debug Level 11.44 Trace Print Level 11.45 Track Groups 11.46 Tracks 12 Menu Reference 12.1 File 12.1.1 Open Loop 12.1.2 Open Project 12.1.3 Save Loop 12.1.4 Save Project 12.1.5 Quick Save
12.1.6 12.2 12.3 12.4 12.4.1 12.4.2 12.4.3 12.4.4 12.4.5 12.4.6 12.4.7 12.4.8 12.4.9 12.4.10 12.4.11 12.4.12 12.4.13 12.5 12.5.1 12.5.2 12.5.3 12.5.4
Exit Track Setups Presets Configuration Presets Track Setups MIDI Control Keyboard Control Buttons Plugin Parameters Scripts Samples MIDI Devices Audio Devices Global Parameters Display Components Palette Help Menu Key Bindings MIDI Bindings Refresh UI About
1 Introduction
In this manual we will provide complete but concise documentation for every mode, function, control, and parameter that exists in Mobius. This is intended for advanced users that are already somewhat familiar with what these items do, but may need clarification on how they behave and interact. If you are interested in tutorials that describe in detail how and why you might use these items, read the Mobius Techniques manual first. When an item in the reference manual has also been documented in any of the other manuals we will provide links to the other manuals. You can use the reference manual like an index to get a brief overview of a topic of interest, then follow links to more detailed documentation elsewhere. Note that some of the items in the reference manual are accessible only in scripts so you will not see them in the binding windows or other parts of the user interface. We will provide brief script examples here, but for details on writing scripts read the Mobius Scripting manual. The reference manual is not intended to be read from top to bottom. Most of the sections are arranged alphabetically to make it easier to locate something of interest. It is however recommended that you read the Concepts section first because these will clarify some of the terms used in this manual.
2 Concepts
Mobius has a lot of "things" in it that can be controlled by external triggers or used in scripts. In this introductory section we will review the major categories of things and define several important concepts that will be used throughout the reference manual. It is recommended that you read this section completely before reading anything else in the reference manual.
2.2 Parameters
A parameter is named value that influences how Mobius behaves. There are four categories of parameters: global parameters, setup parameters, track parameters and preset parameters. Global parameters control general operating characteristics such as whether input monitoring is enabled, or how many tracks should be displayed. They are set in the Global Parameters popup window. Setup parameters define things that effect all tracks at the same time, most of these are related to track synchronization. They are set under the Synchronization and Other tabs of the Track Setups popup window. Track parameters control a few characteristics of each track such as the track name, group number, and input focus. These are relatively unusual and are used mostly in scripts. They are set under the Tracks tab of the Track Setups popup window. Preset parameters control how functions behave, examples include Record Threshold, Quantize Mode, and Empty Loop Action. Most of the time when we talk about parameters we are talking about preset parameters. They are set in the Presets popup window. Parameters have a type which determines how they are shown in the user interface and how they can be used in scripts.
Integer - a small positive number String - a line of text Boolean - a true or false value, displayed as a checkbox Enumeration - one of a fixed set of values, displayed as a menu
Some parameters can be bound to triggers such as MIDI events but this is relatively unusual. More often parameters are set in scripts that are bound to MIDI triggers. If you do bind a MIDI trigger to a parameter, you should use a MIDI continuous controller. This is because unlike functions parameters have a ranged value and you need a trigger that can sweep over all the values in the range. You cannot bind parameters of type String, those can only be changed from scripts. You can bind to parameters of type Integer though this is rarely useful. The integer range of a MIDI continuous controller is from 0 to 127, but it can be difficult to dial in an exact number. If you bind a non-ranged trigger such as a MIDI note to an integer parameter it will simply increment the current value by one each time it is triggered, wrapping back to zero when the maximum value is reached. Binding to parameters of type Enumeration is more useful, the 128 step range of a MIDI continuous controller is divided into regions for each value in the enumeration. For example the Shuffle Mode parameter has four possible values, so CC messages from 0 to 31 select the first value, CC messages from 32 to 63 select the second value and so on. If you bind a non-ranged trigger to an enumeration parameter it will cycle through the possible values. Binding to a parameter of type Boolean is similar to binding to an enumeration parameter. There are only two possible values, true and false, so a MIDI continuous controller will be divided into two regions and non-ranged triggers will simply toggle the value.
2.3 Controls
A control is a named value that controls how audio is recorded and played in a track. Controls are similar to track Parameters but their values are always integers and they have a larger range than most parameters. They are usually set by a MIDI device that sends continuous controller messages such as a rotating knob or a foot pedal. There are five built-in controls:
The initial values for all track controls is set in the track setup . Controls may then be changed by binding them to triggers, or by turning knobs in the user interface.
2.4 Variables
A variable is similar to a parameter, it is a named value that holds information about the current Mobius state. Unlike parameters though, most variables cannot be changed. They can only be read in scripts and used to make decisions. Variables change as a side effect of normal Mobius operation. For example the variable loopFrame has the current record position in the current loop of the active track. There are many variables, some are frequently used in scripts, others are esoteric and intended only for unit testing. Since variables can only be used in scripts they are documented in the Mobius Scripting manual.
2.5 Modes
A mode is a temporary state that a loop can be in. Modes have a name that will normally displayed in the center of the Mobius window. Modes are usually caused by the execution of a function but there are also a few system modes that are not associated with any particular function. There are two types of modes, major modes and minor modes. A loop can only be in one major mode at a time. Examples of major modes are Reset, Record, Play and Multiply. When a function needs to change the major mode, the current mode must be ended before the new one begins. Ending a major mode can be a complex process that requires extra time, this may delay the change to the new mode. While a major mode is active, some functions may change their behavior. A loop can be in any number of minor modes at the same time. Examples of minor modes include Reverse, Speed Toggle, and Pitch Sttep. With a few exceptions minor modes do not alter the normal behavior of functions. All major and minor modes are canceled when the loop is Reset To understand what executing a function will do, you must therefore understand not only what Parameters will influence the function but also how the current modes will influence the function. In the user interface, the current major mode is displayed with the Mode Component and the active minor modes are displayed with the Minor Mode Component . It is recommended that you do not disable these components.
2.6 Functions
A function is a named action performed by Mobius at the request of the user. Examples include Record, Overdub, and Reset. Causing a function to be performed is called executing the function. Functions are normally bound to a trigger that is a button of some kind such as a MIDI footswitch or a computer keyboard key. Functions do not have a numeric value so they are not normally bound to MIDI continuous control pedals, knobs, or faders. Some functions require that they be bound to a Sustainable Trigger that notifies Mobius both when the trigger is "pressed" and when it is "released". Typically this will be a MIDI Note message. Functions operate in one of three ways: instant, sustain, and modal. Instant functions happen immediately. Sustain functions start when you press the trigger and end when you release the trigger. Modal functions start when you press the trigger the first time, and end when you press the trigger a second time.
You will see several phrases used in the documentation to describe the effects of quantization, such as "when quantizing", "during quantization", or "quantized function". All of these refer to the same concept. For most functions quantization is controlled by the Quantize Mode parameter. For loop switch functions this is controlled by the Switch Quantize parameter. A few functions have their own dedicated quantization parameter. The important thing to understand about quantization is that while we may say that a function happens "instantly" or that it "starts when you press a button", the actual execution of the function may happen sometime after you press a button if quantization is enabled. We will not usually say things like "function X starts when you press a button, or if quantization is enabled will be deferred until the next quantization point" as this gets tiresome to read (and write!) over and over. Instead you should assume that if a function obeys quantization that execution may be delayed even though we don't explicitly say it. See Quantize Mode in the Getting Started With Mobius manual for more information.
one major mode active at a time, any major modal function will usually end the previous major modal function. Some minor modal functions will also end the current major mode, but others will let the current mode continue. Minor modes are less consistent in how they start and end. Some belong to a function family that contain functions to toggle the mode, to force it on, to force it off, or to change characteristics of the mode rather than turn it off completely. See Mode Endings for more details on ending modes.
Some related functions may be grouped into families. These are usually minor modal functions where each function in the family can change characteristics of mode rather than simply ending it. One example is the Speed function family which includes the functions Speed Up, Speed Down, Speed Cancel, Speed Toggle and many others.
Auto Record Record Rehearse Overdub Multiply Insert Replace Substitute Stutter Sustain Record Sustain Overdub Sustain Multiply Sustain Unrounded Multiply Sustain Insert Sustain Unrounded Insert Sustain Replace Sustain Substitute Sustain Stutter
Clear Instant Multiply Divide Trim Start Trim End Start Point Sync Start Point
Window Backward Window Forward Window Start Backward Window Start Forward Window End Backward
Next Loop Previous Loop Sustain Next Loop Sustain Previous Loop Loop Restart Restart Once
Reverse
Forward Backward Sustain Reverse Halfspeed Speed Down Speed Up Speed Next Speed Previous Speed Octave Speed Step Speed Bend Speed Toggle Sustain Speed Toggle Speed Cancel Pitch Down Pitch Up Pitch Next Pitch Previous Pitch Octave Pitch Step Pitch Bend Pitch Cancel Time Stretch
Mute MuteOn MuteOff Sustain Mute Sustain Mute Restart Mute Realign Mute MIDI Start Pause Sustain Pause Play
The functions on this class do not operate directly on loops. Instead they operate on tracks or the entire collection of tracks.
Track Focus Lock Track Group Sample MIDI Start MIDI Stop Sync Master MIDI Sync Master Track Start Capture Save Capture Stop Capture Save Loop Bounce Global Mute Global Pause Solo
3 Major Modes
3.1 Confirm
Confirm mode is active while you are in the confirmation period of a loop switch. This happens when you have the Switch Quantize parameter set to Confirm, Confirm Subcycle, Confirm Cycle, or Confirm Loop. While you are in the confirmation period you may "stack" functions to be executed after the switch. When you are ready to do the switch you must use a confirmation function such as Confirm or any other function defined in the Confirmation Functions parameter. By default, the Undo function will also operate as a switch confirmation function. The loop is not being modified while in Confirm mode, though if Feedback is reduced the loop is allowed to decay. See Loop Switching in the Mobius Techniques manual for more information on loop switching and using switch quantization.
3.2 Insert
Insert mode is active while you are executing the Insert, Sustain Insert, or Sustain Unrounded Insert functions. During Insert mode new empty space is being added to the loop and any sound being received by the track is overdubbed into that space.
Insert is a rounding mode unless it was started by the Sustain Unrounded Insert function. During Insert mode, the Record function will cancel the rounding period and end the insert immediately.
3.3 Multiply
Insert mode is active while you are executing the Multiply, Sustain Multiply, or Sustain Unrounded Multiply functions. During Multiply mode new space may be added to the loop by copying the original cycle and appending it to the end. Sound being received by the track will be merged with the current content of the loop in the same way as Overdub mode. Multiply is a rounding mode unless it was started by the Sustain Unrounded Multiply function. During Multiply mode, the Record function will cancel the rounding period and end the multiply immediately.
3.4 Mute
Mute mode is unusual because it may be displayed as both a major and a minor mode. When the Mute minor mode is active, and no other major mode is active besides Play, we will display Mute as the major mode to make it easier to see. When the Mute minor mode is active, the loop will continue to advance but no sound will be sent out of the track. Mute mode is toggled by the Mute and Global Mute functions. Sustain Mute and Sustain Mute Restart will force mute on when the function trigger is pressed and force it off when the trigger is released. Mute Realign and Mute MIDI Start will force mute on, then automatically turn it off when certain synchronization points are reached. When you execute a function that wants to change the major mode, the loop may still remain muted during the new mode. Whether the mute continues or is canceled is determined by the Mute Cancel and Mute Cancel Functions parameters. If the mute is not canceled then the major mode will change and the loop may be modified, but it will still continue to be silent. You will continue to see Mute appear as a minor mode. This technique can be used to modify loops while the audience can't hear them creating a surprise when the loop is unmuted.
3.5 Overdub
Overdub mode is unusual because it may be displayed as both a major and a minor mode. When the Overdub minor mode is active and no other major mode is active besides Play, we will display Overdub as the major mode to make it easier to see. When Overdub is the major mode any sound being received by the track will be merged with the current content of the loop. When Overdub is a minor mode but is not displayed as the major mode, overdubbing is suspended and will resume when the current major mode ends. Leaving overdub suspended is a useful technique to create "seamless" recordings when changing from one mode to another. For example, if overdub is on and the major mode is Replace, when leaving Replace mode we will immediately enable Overdub mode and can avoid a fade out of the end of the replaced section.
Overdub mode is toggled by the Overdub function. The Sustain Overdub function will force overdub on when the trigger is pressed and off when it is released.
3.6 Pause
Pause mode is active while you are executing the Pause or Global Pause functions. During Pause mode the loop freezes and does not advance. No would will be sent out from the track. Pause mode is canceled by any major modal function.
3.7 Play
Play mode is the default system mode that is active when the loop is not empty and is not in any other major mode. During Play mode the loop will advance and the sound in the loop will be sent to the output device assigned to this track.
3.8 Record
Record mode is active while you are executing the Record, Auto Record, or Sustain Record functions. During Record mode, a new initial loop is being created and no sound will be sent out of the track.
3.9 Rehearse
Rehearse mode is active while you are executing the Rehearse function and you are in the rehearse phase, listening to what was just recorded. Rehearse is an unusual function because sets two major modes, Rehearse and Rehearse Record. Rehearse mode is a special form of Play mode, you will hear the loop that was just recorded but if you let the loop play to the end you will return to Rehearse Record mode.
3.11 Replace
Replace mode is active while you are executing the Replace or Sustain Replace functions. During Replace mode the current content of the loop is removed and replace with the sound being received by the track.
3.12 Reset
Reset mode is a default system mode that will be active whenever the loop is empty. All loops will be in Reset mode when Mobius is started for the first time. Loops may also be placed in Reset mode after loading a project that does not contain audio content for every loop. Once a loop has content, you can make it empty by executing the Reset, Track Reset, or Global Reset functions.
3.13 Run
Run mode is an internal system mode that you normally will never see. It is involved with latency compensation and usually lasts such a brief period of time that it won't be seen in the user interface. The loop is not being changed during Run mode, though it may be playing.
3.14 Solo
Solo mode is activated by the Solo function. The loop that is in Solo mode will be heard playing, but the loops in all other tracks will be muted. The other tracks will be in Solo Mute mode.
3.16 Stutter
Stutter mode is active when you are executing the Stutter or Sustain Stutter functions. During Stutter mode the loop is being extended by copying the contents previous cycle and inserting it after the end of that cycle. After a cycle has been inserted, sound being received by the track will be merged with content of the new cycle in the same way as Overdub mode.
3.17 Substitute
Substitute mode is active while you are executing the Substitute or Sustain Substitute functions. During Substitute mode the current content of the loop may be completely or partially removed and merged with the sound being received by the track.
3.18 Switch
Switch mode is active whenever you have used Next Loop or any of the other loop switching functions and the Switch Quantize parameter is set to something other than Off. The switch is being delayed until a quantization point. During Switch mode you can "stack" functions to be executed after the switch.
3.19 Synchronize
Synchronize mode is active when you have executed a Record, Auto Record, or Sustain Record function, and the loop is waiting for a synchronization pulse to begin recording. This can happen when Sync Source or Default Sync Source is set to something other than None. During Synchronize mode the loop is not changing or playing.
3.20 Threshold
Threshold mode is active when you have executed a Record, Auto Record, or Sustain Record function, and the loop is waiting for an audio signal to be received by the track whose average volume exceeds a threshold. This happens when the Record Threshold parameter is set to a value greater than zero. During Threshold mode the loop is not changing or playing.
4 Minor Modes
4.1 Capture
Capture mode is active after executing the Start Capture function. While Capture mode is active, all audio being received by and sent from the tracks is captured and may be saved to a file. Capture mode is ended by the Stop Capture or Save Capture functions.
4.2 Master
Master mode is active after a loop has been recorded and the track containing it becomes both the MIDI Sync Master and the Track Sync Master track. When a track is the MIDI Sync Master it will send MIDI clocks to the configured output device at a tempo calculated from the loop length. When a track is the Track Sync Master other tracks will synchronize the start and end of the Record function to quantization points in the master track.
4.4 Mute
Mute mode is active after executing the Mute, Global Mute, Mute Realign, Mute MIDI Start, Sustain Mute, or Sustain Mute Restart functions. During Mute mode the loop will continue to advance but no sound will be sent out of the track.
Mute mode is unusual because it is both a major and a minor mode. When the Mute minor mode is active and no other major mode is active besides Play, we will display Mute as the major mode. When you execute a function that wants to change the major mode, the loop may still remain muted during the new mode. Whether the mute continues or is canceled is determined by the Mute Cancel and Mute Cancel Functions parameters. If the mute is not canceled then the major mode will change and the loop may be modified, but it will still continue to be silent. You will continue to see Mute appear as a minor mode. This technique can be used to modify loops while the audience can't hear them creating a surprise when the loop is unmuted.
4.5 Overdub
Overdub mode is active after executing the Overdub or Sustain Overdub functions. During Overdub mode any sound being received by the track will be merged with the current content of the loop. Overdub mode is unusual because it is both a major and a minor mode. When the Overdub minor mode is active and no other major mode is active besides Play, we will display Overdub as the major mode to make it easier to see.
4.9 Reverse
Reverse mode is active whenever the loop is playing backward from the end to the beginning. It may be activated by the Reverse or Backward functions.
Track Master mode is active after a loop has been recorded and the track containing it becomes the Track Sync Master track. When a track is the Track Sync Master other tracks will synchronize the start and end of the Record function to quantization points in the master track.
4.16 Window
Window mode is active after using one of the Loop Window Functions. The current recording is canceled, the loop returns to Play mode and the window may be moved forward or backward in history.
5 Functions
5.1 Auto Record
Internal name: AutoRecord Auto Record starts a loop recording that ends by itself automatically after a configured number of bars. The length of the recording is determined by the Sync Source, Beats Per Bar, Auto Record Bars, and Auto Record Tempo parameters. This is a modal function that sets the major mode to Record while it is active. Unlike most modal functions you do not have to execute another function to end Record mode, it will end by itself when the calculated number of bars has been recorded. The function is not sensitive to the Quantize Mode parameter, it will cancel all major modes and execute immediately. Unlike Record this function does not cancel rounding modes. The function is sensitive to the Record Threshold parameter which will defer the start of the recording until a loud enough signal is received. While waiting for a proper threshold the loop will be in Threshold mode. If the Sync Source parameter is set to MIDI or Host, executing this function may enter Synchronize mode temporarily waiting for the next sync pulse. To calculate the loop length the Beats Per Bar setup parameter is multiplied by the Auto Record Bars preset parameter to get to the total number of beats to record. This is then combined with a tempo which determines the amount of time in each beat. How the tempo is determined depends on the Sync Source parameter. When Sync Source is MIDI the tempo is calculated from incoming MIDI clock messages. When Sync Source is Host the tempo is given to the plugin by the host application. When Sync Source is Off or Out and this track is the MIDI Sync Master track, the tempo is determined by the Auto Record Tempo parameter. If the current track was recorded with Track Sync and is following a master track, then a tempo is not used to calculate the loop length. Instead the total number of beats from Beats Per Bar and Auto Record Bars is multiplied by the length of the subcycle in the master track. See Record in the Mobius Techniques manual for more information.
5.2 Backward
Internal name: Backward Backward forces the loop direction into reverse and sets the Reverse minor mode. Unlike the Reverse function this does not toggle Reverse mode, if you are already in reverse the function has no effect. This function will obey the Quantize Mode parameter. Changing direction will end most major modes, see the documentation for Reverse for a full list. This function has no effect on minor modes besides Reverse. See Changing Direction in the Mobius Techniques manual for more information.
5.3 Bounce
Internal name: Bounce Bounce is used to merge the contents of one or more tracks and save the result to another track. This is similar to "bouncing" in traditional recording systems. Bounce is really just a special form of Capture. If the Capture minor mode is not active, Bounce behaves the same as Start Capture, it will begin mixing the output of all unmuted tracks and storing it in a temporary capture area. When the Bounce function is used during Capture mode it end Capture mode and stores the captured audio in an empty track loop. After creating the new loop all tracks that were unmuted at the time of the bounce will be muted, this mute is not quantized. The bounced recording will be placed in the first track from the left that has an empty loop selected. If there are no tracks with an empty loop the bounce is discarded. This function does not obey the Quantize Mode parameter but it will obey the Bounce Quantize parameter. This may delay the start and end of the bounce if the active loop in the active track has content. If the active loop in the active track is empty then Bounce Quantize is ignored. Bounce will not end any major modes in progress when the capture starts but muting the source tracks when the capture ends will cancel all major modes. See Bounce Recording in the Mobius Techniques manual for more information.
5.4 Checkpoint
Internal name: Checkpoint Checkpoint creates a new layer checkpoint and collapses the display of layers between the new checkpoint and the last checkpoint. When you use the Undo and Redo functions to move between layers, they will skip over any layers between two checkpoints. If you use Checkpoint on a layer that is already a checkpoint, the checkpoint is removed and all the layers between they current layer and the previous checkpoint are restored. This function is not considered to be a loop editing function, it is not quantized and will not end any major or minor modes. See Managing Layers in the Mobius Techniques manual for more information.
5.5 Clear
Internal name: Clear Clear erases the current contents of the loop, leaving a silent loop the same size as the original. A new layer is created so you can use Undo to return to the original loop. See Reset, Empty, Clear, and Silent for a discussion about the difference between these similar terms. This function is not quantized. It is considered an instant edit function so it will end the following modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Replace in the Mobius Techniques manual for more information about techniques to replace parts of a loop.
5.6 Confirm
Internal name: Confirm This function can be used to confirm a loop switch during Confirm and Switch modes. When the Switch Quantize parameter is set to one of the confirmation modes, this function will end the confirmation period and start the switch quantization period. If the loop is in the switch confirmation period it will cause the switch to happen immediately. This function has no other purpose outside of Confirm and Switch modes. The EDP does not have this function, instead the Undo function has this behavior during the switch quantization period. This function is provided as an alternative in case you would Undo to behave normally and remove stacked functions during Confirm mode.
5.7 Divide
Internal names: Divide, Divide2, Divide3, Divide4 The Divide functions cause an immediate reduction in the loop size. The amount of the reduction is determined by the divisor which is the number in the name of the function. Divide 2 will divide the loop length in half, Divide 3 will divide the loop length by 3, and Divide 4 will divide the loop length by 4. The division functions are similar to the Instant Multiply functions except they work in the other direction, cutting the loop into smaller pieces then selecting one of those pieces. The division happens immediately and a new layer is created with the shorter loop. You can use Undo to return to the original loop. The new loop will contain the portion of the original loop that you were in at the time the function was executed. For example if a loop is 4 seconds long and you execute Divide 2 while the current loop location is at the end of second 1, the new loop will contain seconds 1 and 2 of the original loop. If instead you execute Divide 2 when the current loop location is at the end of second 3, the new loop will contain seconds 3 and 4 of the original loop. The function named just Divide without a number is accessible only scripts. With this function the divisor is specified as an argument written after the function name. See Divide in the Mobius Scripting manual for usage examples. This function is not quantized. It is considered an instant edit function so it will end the following modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Shorting The Loop in the Mobius Techniques manual for more information.
This function has no effect on the loop, it simply changes the way future functions will behave. It is not quantized and does not have any effect on major or minor modes. See Focus Lock in the Exploring Mobius manual for more information.
5.9 Forward
Internal name: Forward Forward forces the loop into the normal forward direction. If the loop is already playing forward the function has no effect. Forward is a minor modal function in the Reverse function family that will end Reverse mode. This function will obey the Quantize Mode parameter. Changing direction will end most major modes, see the documentation for Reverse for a full list. See Changing Direction in the Mobius Techniques manual for more information.
See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
5.13 Halfspeed
Internal name: Halfspeed Halfspeed changes the loop speed so that it plays twice as long and sounds one octave lower. It is an older function that is provided for backward compatibility. If you are writing scripts it is recommended that you use the more general Speed Step function. Executing Halfspeed is identical to executing the Speed Step function with an argument of -12. This function will obey the Quantize Mode parameter. This function will not cancel most major modes. You may continue modifying the loop while the speed is changing. See Speed Shift in the Mobius Techniques manual for more information on speed shifting.
5.14 Insert
Internal name: Insert Insert inserts new clear space into a loop and allows you to overdub into the new space. This is a major modal function that sets the mode to Insert while it is active. Insert is a rounding mode that will preserve the loop's cycle length unless you force rounding off. The Record function has modal behavior during Insert mode. It will cause an immediate termination of the insert without rounding and return the loop to Play or Overdub mode. This is called an "unrounded insert". This function will obey the Quantize Mode parameter. This function will end the following major modes.
This function is ignored in Reset, Threshold and Synchronize modes. This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function changes behavior in Confirm and Switch modes. It will "stack" and be executed after the loop switch where it will perform a Time Copy from the current loop into the next loop. See Extending The Loop With Insert in the Mobius Techniques manual for more information.
This function is ignored in Reset, Threshold and Synchronize modes. This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch.
See Extending The Loop With Multiply in the Mobius Techniques manual for more information.
5.16 Loop
Internal names: Loop, Loop1, Loop2, Loop3,..., Loop8 The Loop family of functions switch directly to a numbered loop. If the track is already playing this loop the effect will be the same as the Restart function. Since these are loop switch functions many options are available to control when the switch happens, and what happens after the switch. The following parameters may all influence the loop switch:
Switch Quantize Switch Location Switch Duration Return Location Switch Velocity Sensitive Overdub Transfer Pitch Transfer Speed Transfer Record Transfer Reverse Transfer
The timing of this function is controlled by the Switch Quantize parameter. Using the numbered loop functions with Switch Duration set to Once, Switch Location set to Start, and Switch Velocity Sensitive set to true will make Mobius behave like a simple sample player. The function named just Loop without a number is accessible only in scripts. With this function the loop you want to trigger is specified as a function argument. See Loop in the Mobius Scripting manual for usage examples. These functions will end the following major modes.
These functions will cancel Threshold and Synchronize modes. If there is a pending recording in the current loop it will not be carried over to the next loop. These functions will change the number of the next loop during Confirm and Switch modes.
These functions may end Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. See Loop Switching in the Mobius Techniques manual for more information.
This function does not change the loop and has no effect on major or minor modes.
5.21 Move
Internal name: Move Move will instantly move the loop playback position to a new location. This function is not quantized and is accessible only from scripts. See Move in the Mobius Scripting manual for usage examples. This function will end the following major modes and may be delayed due to rounding.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch.
5.22 Multiply
Internal name: Multiply Multiply is a complex function that can be used to both make the loop longer and shorter. It is influenced by the Multiply Mode parameter. Multiply is a major modal function that sets the mode to Multiply while it is active. Multiply is a rounding mode that will preserve the loop's cycle length unless you force rounding off. After a loop has been recorded and still has only one cycle, Multiply will make the loop larger by appending copies of the original for as long as multiply mode is active. Once a loop has more than one cycle, Multiply can both extend the loop and resize it to make it smaller. The Record function has modal behavior during Multiply mode. It will cause an immediate termination of the multiply without rounding and return the loop to Play or Overdub mode. This is called an "unrounded multiply". This function will obey the Quantize Mode parameter. This function will end the following major modes.
This function is ignored in Reset, Threshold and Synchronize modes. This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function changes behavior in Confirm and Switch modes. It will "stack" and be executed after the loop switch where it will perform a Loop Copy from the current loop into the next loop. See Extending The Loop With Multiply and Shortening The Loop in the Mobius Techniques manual for more information.
5.23 Mute
Internal name: Mute Mute will silence the loop. Mute is a minor modal function that will toggle Mute mode. During mute mode the loop will continue to play, you will see loop meter advancing in the user interface, but no sound will be sent out from that track. There are several options for what happens when you exit mute mode, these are defined by the Mute Mode parameter. You usually end mute mode by executing the Mute function again, but you can also cancel mute mode automatically when other functions are executed. The Mute Cancel preset parameter and Mute Cancel Functions global parameter control which functions will cancel mute mode. When the track being muted is the MIDI Master Sync track, there are several options for what happens to the MIDI clocks being generated. This is controlled by the Out Sync Mute Action parameter. Mute is an unusual mode because while it is primarily a minor mode, it will also be displayed as a major mode if there are no other major modes active. If Mute minor mode is active and the loop enters the Play major mode, the major mode is set to Mute instead. This function will obey the Quantize Mode parameter. This function will end the following major modes and may be delayed due to rounding.
This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See also Pause, MuteOn, and MuteOff See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
5.25 MuteOff
Internal name: MuteOff MuteOff will cancel the Mute minor mode. If the loop is not in mute mode the function has no effect. This function is not quantized and is accessible only in scripts. See MuteOff in the Mobius Scripting manual for usage examples. The Mute Mode parameter determines what will happen when Mute mode is canceled.
5.26 MuteOn
Internal name: MuteOn
MuteOn will activate the Mute minor mode and immediately silence the loop. If the loop is already muted the function has no effect. This function is not quantized and is accessible only in scripts. See MuteOn in the Mobius Scripting manual for usage examples. Starting Mute mode will cancel most other major modes, see the Mute function for more information.
Switch Quantize Switch Location Switch Duration Return Location Switch Velocity Sensitive Overdub Transfer Pitch Transfer Speed Transfer Record Transfer Reverse Transfer
This function will cancel Threshold and Synchronize modes. If there is a pending recording in the current loop it will not be carried over to the next loop. This function will change the number of the next loop during Confirm and Switch modes. This function may end Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. See Loop Switching in the Mobius Techniques manual for more information.
5.30 Overdub
Internal name: Overdub Overdub will toggle the Overdub minor mode. If the current major mode is Play then Overdub will also become the major mode. While Overdub is the major mode, sound being received by the track will be combined with the current loop content creating a new layer with both the old and new sounds. This function may obey the Quantize Mode parameter, but only if the Overdub Quantized parameter is checked. Overdub will not cancel any major modes except Mute and Mute depending on the values of Mute Cancel and Mute Cancel Functions. Overdub is an unusual mode because while it is primarily a minor mode, it will also become the major mode if no other major modes override it. If you execute another major modal function, the Overdub major mode will be canceled and overdubbing into the loop will stop. But the Overdub minor mode will still be active. When the current major mode ends and returns the loop to Play mode, if the Overdub minor mode is still active, then Overdub will once again become the major mode and overdubbing into the loop will be resumed.
See also OverdubOff and OverdubOn During Switch mode, Overdub has special modal behavior. It will cause the current loop to be copied into the next loop and will leave the next loop in Overdub mode. See Overdub in the Mobius Techniques manual for more information.
5.31 OverdubOff
Internal name: OverdubOff OverdubOff forces the Overdub minor mode off. If Overdub is also the major mode, the loop will return to Play mode. If Overdub mode is already off the function will have no effect. This function is not quantized and is accessible only in scripts. See OverdubOff in the Mobius Scripting manual for usage examples. See Overdub for more information on how the Overdub minor and major modes interact.
5.32 OverdubOn
Internal name: OverdubOn OverdubOn activates the Overdub minor mode. If overdub mode is already active the function has no effect. If the current major mode is Play then Overdub also becomes the major mode and overdubbing will begin. This function is not quantized and is accessible only in scripts. See OverdubOn in the Mobius Scripting manual for usage examples. See Overdub for more information on how the Overdub minor and major modes interact.
5.33 Pause
Internal name: Pause Pause is a special form of Mute that will both mute the track and also freeze the active loop's playback position. You will see the loop meter in the user interface stop advancing. When pause mode is canceled the loop begins playing from its previous location. The effect is similar to pressing the pause button on an audio recorder. Unlike Mute, Pause is always a major modal function that will cancel the current mode and activate Pause mode. You usually end pause mode by executing the Pause function again, but you can also cancel pause mode by executing any other major modal function. Note that the Mute Cancel preset parameter does not apply to the Pause function. This behavior is also available with the Mute function when you set Mute Mode to Pause. When the track being paused is the MIDI Sync Master track, there are several options for what happens to the MIDI clocks being generated. This is controlled by the Out Sync Mute Action parameter.
See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
5.34 PitchBend
Internal name: PitchBend PitchBend is available only in scripts. It will change the pitch of the loop up or down in small intervals. The number of intervals is specified as an argument to the fucntion. See PitchBend in the Mobius Scripting manual for usage examples. While this can be called as a function it is expected that pitch bend be usually performed by changing the value of the Pitch Bend control. See Pitch Shift in the Mobius Techniques manual for more information about pitch shifting.
If the amount of pitch shift becomes non-zero, then the Pitch Step minor mode will become active and displayed in the user interface. If the pitch shift becomes zero (normal) then Pitch Step mode is canceled. This function will obey the Quantize Mode parameter. This function will not cancel any other major or minor modes. See Pitch Shift in the Mobius Techniques manual for more information.
5.38 PitchOctave
Internal name: PitchOctave PitchOctave is available only in scripts. It will change the playback pitch of the loop up or down in octave intervals. The number of octaves is specified as an argument to the fucntion. See PitchOctave in the Mobius Scripting manual for usage examples. See Pitch Shift in the Mobius Techniques manual for more information about speed shifting.
If the amount of pitch shift becomes non-zero, then the Pitch Step minor mode will become active and displayed in the user interface. If the pitch shift becomes zero (normal) then Pitch Step mode is canceled. This function will obey the Quantize Mode parameter. This function will not cancel any other major or minor modes. PitchStep may also be used in scripts but it is not ranged. Instead the amount of shift is specified as an argument to the function. See PitchStep in the Mobius Scripting manual for usage examples. See Pitch Shift in the Mobius Techniques manual for more information.
5.41 Pitch Up
Internal name: PitchUp Pitch Up increases the pitch of the loop by one semitone. If the amount of pitch shift becomes non-zero, then the Pitch Step minor mode will become active and displayed in the user interface. If the pitch shift becomes zero (normal) then Pitch Step mode is canceled. This function will obey the Quantize Mode parameter. This function will not cancel any other major or minor modes. See Pitch Shift in the Mobius Techniques manual for more information.
5.42 Play
Internal name: Play Play will end the current major mode and return to the loop to the default Play mode. If the loop is currently in Reset or Play mode the function is ignored. You can think of Play as a universal major mode cancel function. It will get you out of modes like Insert, Multiply, Rehearse, Replace, Substitute, Overdub, and Mute and return to Play mode without having to remember to press right button for the current mode. Play does not however cancel most minor modes. like Reverse or SpeedStep. Play will cancel the Overdub and Mute minor modes. This function will end the following major modes and may be delayed due to rounding.
Switch
Switch Quantize Switch Location Switch Duration Return Location Switch Velocity Sensitive Overdub Transfer Pitch Transfer Speed Transfer Record Transfer Reverse Transfer
This function will cancel Threshold and Synchronize modes. If there is a pending recording in the current loop it will not be carried over to the next loop. This function will change the number of the next loop during Confirm and Switch modes. This function may end Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions.
See Loop Switching in the Mobius Techniques manual for more information.
5.45 SpeedBend
Internal name: SpeedBend SpeedBend is available only in scripts. It will change the playback speed of the loop up or down in small intervals. The number of intervals is specified as an argument to the fucntion. See SpeedBend in the Mobius Scripting manual for usage examples. While this can be called as a function it is expected that speed bend be usually performed by changing the value of the Speed Bend control. See Speed Shift in the Mobius Techniques manual for more information about speed shifting.
Speed Down decreases the playback speed by an amount that will sound like a one semitone drop in pitch. If the amount of speed shift becomes non-zero, then the SpeedStep minor mode will become active and displayed in the user interface. If the speed shift becomes zero (normal) then SpeedStep mode is canceled. This function will obey the Quantize Mode parameter. This function will not effect any other major or minor modes. See Speed Shift in the Mobius Techniques manual for more information.
5.49 SpeedOctave
Internal name: SpeedOctave SpeedOctave is available only in scripts. It will change the playback speed of the loop up or down in octave intervals. The number of octaves is specified as an argument to the fucntion. See SpeedOctave in the Mobius Scripting manual for usage examples. See Speed Shift in the Mobius Techniques manual for more information about speed shifting.
If the amount of speed shift becomes non-zero, then the Speed Step minor mode will become active and displayed in the user interface. If the speed shift becomes zero (normal) then SpeedStep mode is canceled. This function will obey the Quantize Mode parameter. THis function will not effect any other major or minor modes. See Speed Shift in the Mobius Techniques manual for more information.
In release 2.2 this concept was generalized so that you can toggle between a shift of any number of semitones up or down. The number of semitones may be specified as a number entered into the Arguments field of the binding windows. If an argument is not entered, the default shift is -12, making it the same as the old Speed function. When used in scripts, calling the function with a script argument sets the toggle, and calling it with the same number or with no arguments cancels the toggle. See SpeedToggle in the Mobius Scripting manual for usage examples. See Speed Shift in the Mobius Techniques manual for more information on speed shifting.
5.53 Speed Up
Internal name: SpeedUp Aliases: RateUp Speed Up Increase the playback speed by an amount that will sound like a one semitone rise in pitch. If the amount of speed shift becomes non-zero, then the SpeedStep minor mode will become active and displayed in the user interface. If the speed shift becomes zero (normal) then SpeedStep mode is canceled. This function will obey the Quantize Mode parameter. This function will not effect any other major or minor modes. See Speed Shift in the Mobius Techniques manual for more information.
5.54 Realign
Internal name: Realign Realign will bring the Mobius loop back into alignment with the external loop. For all sync modes except MIDI Master Sync, realign will move the Mobius loop playback position so that it aligns with the external loop. For MIDI Master Sync the realign behavior is determined by the Out Sync Realign Action parameter. When the realign adjustment happens is controlled by the Realign Time parameter. This function is not quantized. This function is not modal, it will schedule an event for the desired realign time. The realign event may be canceled with Undo. This function will end the following major modes and may be subject to rounding.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See The External Loop in the Mobius Synchronization manual for more information on what "external start point" means. See Realign in the Mobius Synchronization manual for more information on the Realign function.
5.55 Record
Internal name: Record Record begins and ends a new loop recording. This is a major modal function that will toggle Record mode. Usually Record mode is ended by executing the Record function a second time, though most other functions will also end the recording. Record will cancel all major and minor modes and throw away the layer history. The Record Threshold parameter can be used to delay the start of the recording until an audio signal of sufficient loudness is received. The Record Speed Changes parameter determines whether speed shifting functions such as Speed Step and Speed Toggle will end the recording, or whether the shifting alters how the recording is made. The Record Resets Feedback parameter can be used to reset the feedback control to the level specified in the track setup whenever a recording is started. During all rounding modes (Multiply, Insert, Stutter) the Record function has special modal behavior. Instead of canceling the mode and starting a new recording it will instead cancel the rounding period and end the current mode immediately. The loop will then return to either Play or Overdub modes. Record has long press behavior. If the trigger for the Record function is held down it will cause the Reset function to be executed. See Record in the Mobius Techniques manual for more information.
5.56 Redo
Internal name: Redo Redo moves the loop to the next layer on the redo list. If the redo list is empty, this function will have no effect. In order to have layers on the redo list, you must use the Undo function one or more times, and you must have the Maximum Redo parameter set to a number greater than zero.
If the loop is the MIDI Sync Master, changing layers may require adjustments to the generated MIDI clocks if the cycle size in the new layer is different that the current cycle size. This is controlled by the Out Sync Resize Adjust parameter. This function will end all of the following editing modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Managing Layers in the Mobius Techniques manual for more information.
5.57 Rehearse
Internal name: Rehearse Rehearse begins and ends a special recording mode where you can listen what you recorded then decide if you want to keep it or try another recording. When you execute Rehearse the first time it begins recording a new loop just like the Record function except that the major mode is set to Rehearse Record. When you execute Rehearse a second time it ends the recording and begins playing it. The major mode is set to Rehearse. While you are in Rehearse mode you are reviewing the loop to determine if you want to keep it. If you let the new loop play to the end, the mode will automatically change back to Rehearse Record and you can record a different loop. When you have recorded a loop that you want to keep, execute the Play or Undo functions to cancel Rehearse mode and return to Play mode. See Rehearse in the Mobius Techniques manual for more information.
5.58 Replace
Internal name: Replace Replace allows you to replace a section of a loop with new sounds, in a way similar to what traditional recording systems call "punch in". Replace is a major modal function that will toggle Replace mode. During Replace mode, the current content of the loop is erased and the sound coming into the track is saved in this empty space.
You usually cancel Replace mode by executing the Replace function a second time, but all other major modal functions will also cancel the replace. During Replace mode the loop is muted so the current contents of the loop being replaced will not be heard. This is the only difference between Replace and Substitute which may let you hear the current loop contents. This function obeys the Quantize Mode parameter. This function will end all of the following editing modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See also Substitute. See Replacing Loop Content in the Mobius Techniques manual for more information.
5.59 Reset
Internal name: Reset Reset deletes all layers in the current loop and makes it "empty". Reset does not create a new layer and cannot be reverted with Undo. See Reset, Empty, Clear, and Silent for a discussion about the difference between these similar terms. This function is not quantized and all major and minor modes will be canceled. Track parameters will be restored to the values specified in the track setup . See Reset in the Mobius Techniques manual for more information.
5.60 Restart
Internal name: Restart
Restart will restart the loop over from the beginning. It is a loop switch function so it will obey the Switch Quantize parameter which controls when the restart will happen. The Switch Velocity Sensitive parameter can be used to adjust the output level. Unlike most loop switch functions, Restart ignores the Switch Location, Switch Duration, and Return Location parameters because the loop is not being changed, it is just moving the playback position of the loop. See also Restart Once which will restart and also automatically mute the loop after it plays to the end. This function will end the following major modes.
This function will cancel Threshold and Synchronize modes. This function will be ignored during Confirm and Switch modes. This function may end Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. See Loop Switching in the Mobius Techniques manual for more information.
Substitute
This function will cancel Threshold and Synchronize modes. This function will be ignored during Confirm and Switch modes. This function may end Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. See Loop Switching in the Mobius Techniques manual for more information.
5.62 Reverse
Internal name: Reverse Reverse toggles the Reverse minor mode, which changes the playback direction of the loop. While Reverse mode is active the loop will play from the end to the beginning, in the user interface you will see the loop meter moving from the right to the left. Reverse mode is canceled by executing the Reverse function a second time or by executing the Forward function. This function will obey the Quantize Mode parameter. The functions that change direction will end the following major modes.
This function may be used in Reset, Threshold and Synchronize modes to toggle playback direction before a recording starts. This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See also Backward and Forward. See Changing Direction in the Mobius Techniques manual for more information.
5.63 Sample
Internal names: Sample, Sample1 through Sample8 The Sample family of functions will play one of the loaded samples. When triggered, a sample plays from beginning to end without interruption and then stops. If you trigger it again before the last sample playback finishes, another overlapping playback of the sample will start. Samples are not part of a loop or track, it is like having a very primitive built-in sample player. The sample functions are not quantized.
The function named just Sample without a number may only be used in scripts. The sample to trigger is specified as a function argument that may be a number or an expression. See Sample in the Mobius Scripting manual for usage examples. The sample functions are not quantized and they have no effect on major or minor modes. If a loop is in one of the following recording modes, the sample will be recorded into the loop as it plays.
5.66 Shuffle
Internal name: Shuffle Shuffle will instantly cut the loop into several slices then reorder the slices. A new layer is created so you can Undo to return to the original loop. The number of slices the loop is cut into is determined by the Subcycles parameter. The new ordering of the slices is determined by the Shuffle Mode parameter. When used in scripts, Shuffle is much more powerful. Script expressions can be used to define complex patterns of slices. See Shuffle in the Mobius Scripting manual for usage examples. This function will obey the Quantize Mode parameter. It is considered an instant edit function so it will end the following modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Shuffle in the Mobius Techniques manual for more information on using the basic Shuffle function.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. The function named just Slip can only be used in scripts where the amount of slippage is specified as a function argument. See Slip in the Mobius Reference manual for usage examples. See Changing Playback Position in the Mobius Techniques manual for more information.
5.68 Solo
Internal name: Solo Solo mutes all tracks that are currently playing except for the active track. The active track enters the Solo major mode and all other tracks enter the Solo Mute major mode. When solo mode is canceled, all the muted tracks that were playing at the time of the Solo are unmuted, but tracks that were muted at the time of the Solo are left muted. Solo mode is canceled if you execute the Solo function a second time, or you execute any of the mute cancel functions. The set of functions that cancel mute is defined by the Mute Cancel and Mute Cancel Functions parameters. See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
See Capturing a Performance in the Mobius Techniques manual for more information.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Changing the Start Point in the Mobius Techniques manual for more information.
5.72 Stutter
Internal name: Stutter Stutter is a variation of the Multiply function that will extend the loop by inserting copies of the current cycle. When Stutter is executed for the first time the major mode Stutter is activated and the cycle the loop playback position is currently in becomes the stutter cycle. While Stutter mode is active, each time the playback position reaches the end of a cycle, another copy of the stutter cycle is inserted. While this is happening the sound being received by the track will be merged with the stutter cycles as it is during Overdub mode. Stutter mode is canceled when the Stutter function is executed a second time, or when any other major modal function is executed. This function will obey the Quantize Mode parameter. This function will end the following major modes.
This function is ignored in Reset, Threshold and Synchronize modes. This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function changes behavior in Confirm and Switch modes. It will "stack" and be executed after the loop switch where it will perform a Loop Copy from the current loop into the next loop. See Extending The Loop With Multiply in the Mobius Techniques manual for more information.
5.73 Substitute
Internal name: Substitute Substitute allows you to replace a section of a loop with new sounds, in a way similar to what traditional recording systems call "punch in". This is a major modal function that toggles Substitute mode. Substitute is very similar to the Replace function but it gives you more control over how new sound is combined with the current contents of the loop. Substitute differs from Replace in two ways. First, during Substitute mode you will continue to hear the contents of the loop that you are replacing. During Replace mode the current loop contents are always muted. Second, Replace will always completely replace the current contents of the loop, Substitute allows you to blend the new sounds with the old sounds by adjusting the Secondary Feedback control. To use Substitute with Secondary Feedback you must check the Enable Secondary Feedback parameter. When Secondary Feedback is all the way up, then Substitute
behaves like Overdub. When Secondary Feedback is all the way down, Substitute behaves like Replace. If you bind the Secondary Feedback control to a MIDI continuous controller, you can sweep secondary feedback up and down during the substitute to "sculpt" the loop. This function obeys the Quantize Mode parameter. This function will end all of the following editing modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Replacing Loop Content in the Mobius Techniques manual for more information.
Internal name: SUSMute Sustain Mute is the same as the Mute function except that the request to end Mute mode is made when the sustainable function trigger is released. See Sustain Functions for more information on how sustain functions behave. See Mute for more information on mute mode.
See Overdub for more information on overdub mode, and how this function interacts with other major and minor modes.
Sustain Replace is the same as the Replace function except that Replace mode will end immediately after the sustainable function trigger is released. See Sustain Functions for more information on how sustain functions behave.
See MIDI Master Sync in the Mobius Synchronization manual for more information.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions.
This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See The External Loop in the Mobius Synchronization manual for more information on what "external start point" means. See Sync Start Point in the Mobius Synchronization manual for more information on how Sync Start Point is used.
5.95 TimeStretch
Internal name: TimeStretch TimeStretch is available only in scripts. It will change both the playback speed and the amount of pitch shift such that the observed pitch stays the same but the playback speed increases or decreases. This function must have a script argument that specifies the number of units of stretch. This number is the same as that used for the Pitch Bend or Speed Bend functions. See Speed Shift in the Mobius Techniques manual for more information about speed shifting.
5.96 Track
Internal names: Track, Track1 through Track8 The Track family of functions will activate one of the numbered tracks. If the track is already active, the function will have no effect. If the new track is empty, the Empty Track Action parameter determines what actions will be taken. The track select functions are not quantized. The function named just Track can only be used in scripts where the track to select is specified as a function argument. See Track in the Mobius Reference manual for usage examples. Changing the selected track will cancel the following recording modes in the current track.
This function will not cancel Mute and Pause modes in the current track. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Track Copy in the Mobius Synchronization manual for more information on using Empty Track Action.
assuming this default the group assignment pattern when executing the Track Group function would be:
none -> Group A -> Group B -> none -> Group A -> Group B -> ...
Track groups are primarily useful when creating complex function bindings that target only the tracks in a group. They can also be used in scripts to identify sets of tracks the script should operate on. This function is not quantized and has no effect on the active loop. See Binding Scopes and Track Groups in the Exploring Mobius manual for more information on using track groups in bindings.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Shortening The Loop in the Mobius Techniques manual for more information.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will be "stacked" in Confirm and Switch modes and will be executed immediately after the loop switch. See Shortening The Loop in the Mobius Techniques manual for more information.
5.103 Undo
Internal name: Undo Undo will cancel scheduled events and move the loop to the previous layer in the layer list. If there are scheduled events, Undo will remove them one at a time. Once all of the events have been removed, Undo will move to the previous layer. If the first
layer in the layer list is already active this function will have no effect. If the Maximum Redo parameter is set to a number greater than zero, the current layer will be moved to the redo list. Using Undo and Redo you can freely travel back and forth in the layer history. If the loop is the MIDI Sync Master, changing layers may require adjustments to the generated MIDI clocks if the cycle size in the new layer is different that the current cycle size. This is controlled by the Out Sync Resize Adjust parameter. This function will end all of the following editing modes.
This function may cancel Mute and Pause modes depending on the values of Mute Cancel and Mute Cancel Functions. This function will cancel the loop switch when in Confirm and Switch modes once all stacked events have been removed. See Managing Layers in the Mobius Techniques manual for more information.
Internal name: WindowStartBackward This function will move the start of the loop window backward in the loop history. Visually this is the left edge of the window and moving it backward will make the window larger. The amount of movement is defined by the Window Edge Unit and Window Edge Amount preset parameters. The function will end all editing modes and discard any pending changes.
5.110 WindowMove
This function moves the loop window to a location defined by the function arguments. It is only available in scripts.
5.111 WindowResize
This function changes the size of the loop window using the function arguments. It is only available in scripts.
See Customizing the Status Area in the Exploring Mobius manual for more information.
7 Preset Parameters
A preset is a named collection of parameters that effect how looping functions will be performed. While you can change parameters individually using MIDI or scripts, you will usually change parameters in bulk by selecting presets. You may need only one preset, or you may define several with parameters chosen for different looping styles. Each track has an active preset that may be changed at any time, even while a loop is playing. Each track may have a different active preset. All preset parameters can be changed in scripts but these changes are not permanent. Parameters changed in scripts will only live until a new preset is selected, or until the Track Reset or Global Reset functions are executed. Some parameters are available for binding in the binding windows. You would normally bind them to a trigger that can generate a range of values such as a MIDI expression pedal.
See Auto Record in the Mobius Techniques manual for more information on how this parameter is used with the Auto Record function.
When set to None, no automatic action will be performed. The loop will be left in Reset mode. When set to Record, the loop will immediately enter Record mode after the switch. You can record as long as you like but you must remember to execute the Record function to end the recording. When set to Copy a Loop Copy will be made from the original loop into the new loop. When set to Copy Timing a Time Copy will be made from the original loop into the new loop. See Loop Copy in the Mobius Synchronization manual and Empty Loop Action in the Mobius Techniques manual for more information.
When set to Record, the loop will immediately enter Record mode after the switch. You can record as long as you like but you must remember to execute the Record function to end the recording. When set to Copy a Loop Copy will be made from the original loop into the new loop. When set to Copy Timing a Time Copy will be made from the original loop into the new loop. See Track Copy in the Mobius Synchronization manual for more information.
You can control which modes obey secondary feedback with the global parameter Modes Ignoring Secondary Feedback See Using Feedback in the Getting Started With Mobius manual for more information.
Normal Simple
The default value is Normal which will make Multiply behave similar to the multiply function in the EDP. When the value is Simple, multiply will only add cycles when you reach the end of the loop and otherwise will behave like the Overdub function. See Extending The Loop With Multiply in the Mobius Techniques manual for more information on how this parameter effects the Multiply function.
Triggers Mute mode is canceled by the Modal Edit and Instant Edit functions as well as the Trigger functions such as Next Loop, Restart, etc. Effects Mute mode is canceled by the Modal Edit, Instant Edit, and Trigger functions as well as the Effect functions such as Reverse, Pitch Step, Speed Bend, etc.
Custom The functions that cancel mute mode may be individually selected.
When this parameter is set to Custom the functions that cancel mute mode are defined by the global parameter named Mute Cancel Functions. Since this is a global parameter it cannot have a different value in each preset. See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
Continue - resume playing at the current playback location Start - restart the loop from the beginning Pause - resume from the paused location
When this is set to Pause the Mute function will behave the same as the Pause function. See Mute, Pause, and Solo in the Mobius Techniques manual for more information.
See Layer Flattening in the Exploring Mobius manual for more information.
Off - Overdub will be forced off in the next loop Follow - Overdub will be carried over from the current loop to the next loop Restore - Overdub will be restored to the state it had the last time the next loop was active
See Overdub Transfer in the Mobius Techniques manual for more information.
See Pitch Shift in the Mobius Techniques manual for more information.
Follow - Pitch shift will be carried over from the current loop to the next loop Restore - Pitch shift will be restored to the state it had the last time the next loop was active
See Pitch Transfer in the Mobius Techniques manual for more information.
Not all functions obey quantization and some use a different parameter to control quantization. See Overdub Quantized Switch Quantize, and Bounce Quantize for other parameters related to quantization. See Quantize Mode in the Getting Started With Mobius manual for more information on using quantization.
48 semitones. The smallest value is 1 which gives you a range of 2 semitones, one up and one down. You may wish to lower the step range when binding to a MIDI continuous controller to give you more control when selecting steps. If the range is too high, very slight changes to the knob or pedal will change speeds. With a lower range, the knob or pedal must move a longer distance before changing speeds. See Speed Shift in the Mobius Techniques manual for more information.
Off - Speed shift will be returned to normal in the next loop Follow - Speed shift will be carried over from the current loop to the next loop Restore - Speed shift will be restored to the state it had the last time the next loop was active
See Speed Transfer in the Mobius Techniques manual for more information.
Internal name: recordResetsFeedback Internal values: true, false This parameter determines whether the Feedback control will be returned to the level specified in the Track Setup whenever the Record function is executed. This is convenient if you like to lower feedback once a loop has been recorded but you don't want to manually return it to its default level if you decide to re-record the loop.
If set to Off what happens after the switch is determined by the Empty Loop Action parameter. If set to Follow and the current loop is in Record mode, the next loop will always be reset and a new recording will begin immediately. See Record Transfer in the Mobius Techniques manual for more information.
Follow - keep the same location you have in the current loop Restore - restore the location the original loop had the last time it was playing Start - start the original loop from the beginning Random - move to a randomly chosen subcycle
See Return Location in the Mobius Techniques manual for more information.
Off - Reverse will be forced off in the next loop Follow - Reverse will be carried over from the current loop to the next loop Restore - Reverse will be restored to the state it had the last time the next loop was active
See Reverse Transfer in the Mobius Techniques manual for more information.
Next Subcycle - Playback jumps to the next subcycle boundary Next Cycle - Playback jumps to the next cycle boundary Start - Playback jumps to the loop start point Relative Subcycle - Playback jumps an amount equal to one subcycle relative to the current position Relative Cycle - Playback jumps an amount equal to one cycle relative to the current position Milliseconds - Playback jumps the number of milliseconds set in the Slip Time parameter
See Changing Playback Position in the Mobius Techniques manual for more information.
The default value is Multiply. See Sound Copy in the Mobius Techniques manual for more information.
7.39 Subcycles
Internal names: subcycles, 8thsPerCycle Internal value: an integer between 1 and 512 This parameter sets the number of subdivisions in each cycle. This is used most often with the Quantize Mode parameter to define quantization points. You can see subcycles in the Loop Meter as the shorter tick marks. While the number of cycles in a loop stays the same until you extend or shorten it, you can change the number of subcycle divisions at any time just by changing the Subcycles parameter. You will see the subcycle tick marks in the Loop Meter change but otherwise the loop is unaffected. The Subcycles parameter is used by the Shuffle function to define the number of loop slices that will be reordered. Subcycles may be used to calculate the tempo of the MIDI clocks generated when Sync Source is Out. It will be used only if the value of Beats Per Bar is not set.
Permanent - stay in the new loop until it is manually changed Once - play the new loop until the end, then automatically enter Mute mode Once Return - play the new loop until the end, then automatically return to the previous loop Sustain - play the new loop for as long as the function button is held down, then it automatically enter Mute mode Sustain Return - play the new loop for as long as the function button is held down, then return to the previous loop
See Switch Duration in the Mobius Techniques manual for more information.
Follow - keep the same location you had in the previous loop Restore - restore the location the new loop had the last time it was playing Start - start the new loop from the beginning
See Switch Location in the Mobius Techniques manual for more information.
Next Loop Previous Loop Sustain Next Loop Sustain Previous Loop Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 Loop 7 Loop 8 Restart Restart Once
Off Subcycle Cycle Loop Confirm Confirm Subcycle Confirm Cycle Confirm Loop
See Switch Quantize in the Mobius Techniques manual for more information.
This parameter can be used to automatically adjust the track output level during a loop switch. it can only be used if the loop switch function is bound to a MIDI Note message that can carry velocity information. When this parameter is true, the output level of the track will be set to the velocity value of the MIDI note that triggered the loop switch function. See Switch Velocity Sensitive in the Mobius Techniques manual for more information.
The default value is Insert. See Time Copy in the Mobius Techniques manual for more information.
None
The default value is None. When the value is None the track selection is changed without effecting the current track. If the track is recording, muted, etc. it will continue in that mode. When the value is Cancel Current Mode the mode active in the current track will be canceled and the track returned to Play mode. Note that for modes that do rounding like Mulitply the actual ending of the mode may happen long after the track selection has changed. When the value is Cancel and Wait the mode active in the current track will be canceled, and Mobius will wait for the track to return to Play mode before changing tracks.
Internal name: windowSlideAmount This combined with Window Slide Unit defines the amount of change made by the Window Forward and Window Backward functions. The value is an integer number of loops, cycles, subcycles, milliseconds, or frames. It is normally 1 for loops, cycles, and subcycles.
8 Track Parameters
Each track has a few parameters that are set in the Track Setup. These will have their initial values specified in the Track Setup but they may be changed in scripts.
8.2 Group
Internal name: group Internal value: an integer from 1 to 8 This parameter determines whether the track is a member of a track group. The value is an integer parameter that has the number of the track group in the current track. If the value is zero there is no track group. Positive group numbers are displayed as letters in the user interface. Group 1 is displayed as A group 2 is displayed as B etc. When setting this parameter from a script you may use either numbers staring from 1 or letters starting from A. Script example:
See Track Groups in the Exploring Mobius manual for more information.
8.4 Mono
Internal name: mono Internal value: true, false When set, this parameter will cause the left and right audio input channels to be summed and then sent equally to the left and right output channels. This can be used if you have a single channel audio signal such as a guitar DI that you want centered and sent to stereo channels.
To set the port used when Mobius runs standalone use Input Port.
8.9 Preset
Internal name: preset Internal value: a preset name This parameter has the name of the preset that is active in the track. This is intended for use only in scripts, in the user interface you select presets from the preset menu or from the preset window. When setting this from scripts you may use either the preset name or the preset number from 1. While setting this parameter in scripts is allowed, it is preferable in scripts to use the Preset built-in script function. Script example:
set preset 1 set preset "My Preset" Preset 1 Preset "My Preset"
Script example:
9 Setup Parameters
The track setup contains several parameters that apply to the collection of tracks as a whole. Most of these are related to synchronization.
During MIDI Slave Sync to set the bar size of the incoming MIDI clocks During MIDI Master Sync to calculate the tempo of the generated MIDI clocks With the Auto Record function to calculate the length of the recording
See Configuring the MIDI Sync Source in the Mobius Synchronization manual for more information on how this parameter is used with MIDI Slave Sync. See Calculating The Tempo in the Mobius Synchronization manual for more information on how this parameter is used with MIDI Master Sync. See Auto Record in the Mobius Techniques manual for more information on how this parameter is used with the Auto Record function.
This parameter specifies the binding overlay that is to be activated when the setup is selected, or when a Global Reset is performed. This parameter is not accessible in scripts.
This parameter sets the sync source for a tracks. When the value is Default the value of Default Track Sync Unit will be used for this track. See Sync Source in the Mobius Synchronization manual for more information on how to configure sync sources.
10 Track Controls
Track controls are really just Track Parameters but we call them controls because the values of these parameters is different than the others. A control value ranges from 0 to 127 and is almost always bound to a MIDI expression pedal.
10.1 Feedback
Internal name: feedback Internal value: 0 to 127 Feedback controls how the loop decays over time. With feedback set at 127 the loop does not decay, it will play that way forever or until you change it with looping functions. With feedback reduced the loop will gradually become softer every time it plays until it eventually decays to silence. A common looping technique is to use Overdub with feedback reduced. You can keep adding new layers to the loop but old layers will decay. In this way you can create evolving loops that change gradually over time. See Using Feedback in the Getting Started With Mobius manual for more information.
10.4 Pan
Internal name: pan Internal value: 0 to 127, center 64 Pan adjusts the relative output levels of the left and right channels of the track.
Pitch Step is used to make adjustments to the loop pitch in jumps of one semitone. When bound to a MIDI continuous controller, the center position of the control will cause no pitch shift. Moving the control down will lower the pitch. It is very similar to the Pitch Step function, but differs in how binding arguments are used and the range can be controlled with the Pitch Step Range preset parameter.
11 Global Parameters
Global parameters affect the operation of Mobius regardless of which setup, preset, or binding configuration is active. There is only one set of global parameters and they are always active. To edit most global parameters open the Configuration menu and select the Global Parameters item.
Devices window. If you are using an ASIO device the value of this parameter must be the same as the Audio Output Device parameter. In a script, this parameter may only be read, setting the value will have no effect. One possible script application is to use the parameter in a conditional expression to change the behavior of the script depending on which device is selected.
11.4 Bindings
Internal name: bindings Internal value: binding set name This parameter has the name of the MIDI binding set that will be merged with the default binding set. Unlike most global parameters this one is set in the MIDI Control window, if you leave a binding set selected other than the first one. In scripts, the value will be a string containing the name of the binding set. Since binding set names often contain spaces you must remember to surround the name in quotes. Script example:
The Confirm function does not need to be on this list, it is always a switch confirmation function. In scripts the value of this parameter will be a string containing a comma separated list of function names. Script example:
loop - at the start point of the Mobius loop (the default) external - at the start point of the external loop
When set to external we check for sync drift every time the external loop reaches the start point. The external start point is defined by the number of "pulses" counted when the loop was first recorded. When syncing to MIDI clocks a pulse is a MIDI clock, when syncing to VST beats a pulse is a VST beat, when syncing to a VST bar a pulse is a VST bar, etc. Every time we receive this number of pulses we are at the external loop start point. For example, when syncing from MIDI clocks, a loop is recorded for 96 clocks. After
recording we continue to count MIDI clocks wrapping back to zero every time we count up to 96. When we wrap back to zero, this is the external start point. Script example:
This option is only available for VST plugins under Windows. It is not available for either VST or Audio Unit plugins on the Mac. This parameter cannot be set from scripts.
set fadeFrames 16
Internal value: an integer from 1 to 16 This parameter has the maximum number of loops that are allowed in each track. It is found under the Limits tab of the Global Parameters window. The default is 4. Note that this does not by itself specify how many loops will be in a track, that is done by the preset parameter Loop Count. For example, Max Loops Per Track may be 8 but if Loop Count is 4 the track will only have 4 loops. Setting this parameter is important if you have chosen to add the Loop Status component to the track strip. This component displays a vertical column of rectangles representing the loops in a track. Because the actual number of loops is determined by the Loop Count preset parameter, each track may contain a different number of loops. But while tracks can have different numbers of loops, the height of this component must be the same in all tracks. The Max Loops Per Track determines the height of the Loop Status component. If the track has fewer than this number of loops, the component will just display empty space at the bottom. Because people usually want the track strip to be as short as possible, you should think about the number of loops you will actually need in each track so you don't waste space in the track strip. If you don't use the Loop Status component then this parameter is ignored. It is not meaningful to set this parameter from a script because changing will not cause the user interface to be redrawn. The value can only be set from the Global Parameters window, and it will only take effect when you restart Mobius.
set messageDuration 10
This parameter has the names of the MIDI devices that have been selected for input when running in standalone mode. This is not set in the Global Parameters window, it is set from the Input Devices panel in the MIDI Devices window. When used in a script the value will be a string containing a comma separated list of device names. Setting this value in a script will have no effect until Mobius is restarted. This is a relatively useless parameter, but you could use it in a script to take different actions depending on the MIDI devices being used.
If you do not want these modes to use secondary feedback, add the mode name to the Modes Ignoring Secondary Feedback parameter using the item selector. In Replace mode, the feedback level is always zero. In Insert mode, there is no background content so feedback is not relevant. In all other modes recording is not active so feedback is not relevant.
The parameter is stored in the mobius.xml file as the AltFeedbackDisables element. In scripts, the value is a string containing a comma separated list of mode names. Script example:
set noiseFloor 50
See Noise Floor in the Mobius Techniques manual for more information.
When used in a script the value will be a string containing a comma separated list of device names. Setting this value in a script will have no effect until Mobius is restarted.
set shiftRange 48
set to the maximum value of 127. It is found under the Miscellaneous tab of the Global Parameters window. Enabling this parameter can reduce the chance of harsh digital clipping when overdubbing because a small amount of feedback will always be applied. Even when enabled though it is still possible to reach clipping if your overdubs are very loud. Script examples:
The number of the first track is 1. In a script this parameter may be both read and set, when set it will change the selected track. You can also change the selected track with the Track function which is the preferred way to change tracks. Script example:
set selectedTrack 2
NOTE: Use of this parameter is not recommended, the parameter may be removed in a future release. Use the Track functions instead to select tracks.
11.42 Setup
Internal name: setup Internal value: setup number This parameter has the number of the currently selected track setup. This is not set in the Global Parameters window, instead setups are selected in the Track Setups window. The value of this parameter is always an integer. The first setup will be number 1, the second number 2, and so on. You can set this parameter from a script to change setups. The value in a script may either be the number or the name. You can also change setups in a script by using the Setup statement. The behavior is the same, we prefer using the Setup statement. Because of this the setup parameter is relatively useless, you can change it with a function and scripts almost never need to know the number of the currently selected setup. Script example:
The default value is 2 which means both serious errors and operational status messages are sent. See Trace in the Exploring Mobius manual for more information on trace and the debug output stream.
11.46 Tracks
Internal name: tracks Internal value: an integer from 1 to 16 This parameter has the number of tracks that will be shown in the main window. It is found under the Limits tab of the Global Parameters window. The default value is 8. You can set this number lower to save space in the user interface if you don't need 8 tracks. You can also set it higher if you need more, but there are problems drawing the user interface if you have too many tracks. Changing the parameter will not take effect until you restart Mobius. Because changes do not take effect until a restart, it is meaningless to set this parameter in a script. You might reference it in a script if you need to know how many tracks there are.
12 Menu Reference
12.1 File
12.1.1 Open Loop
Loads a single loop from a file. A standard file selection dialog window will be displayed to select the loop file. You can only load files stored in the Windows .wav format. The current loop will be reset before loading. After the loop has been read, Mobius will enter Pause mode. See the Open Loop section of the Exploring Mobius manual for more information.
12.1.6 Exit
In standalone Mobius, this will close the window and halt the application. All track content will be lost if it has not been saved. In the Mobius plugin this will close the plugin editor window but the plugin remains active.
12.3 Presets
This is a dynamic menu whose items will have the same names as the currently configured presets. Selecting a menu item will activate that preset. See the Using Presets section in Getting Started With Mobius for more information on presets.
12.4 Configuration
12.4.1 Presets
Displays a dialog window for managing presets. See the Using Presets section in Getting Started With Mobius for more information on presets.
12.4.5 Buttons
Displays a dialog window to select buttons to be displayed at the top of the main Mobius window.
See the Customizing Buttons section in Exploring Mobius for more information on buttons.
12.4.7 Scripts
Displays a dialog window to register scripts to be loaded into Mobius. Once registered scripts may be bound to buttons, keys, MIDI events, and any other trigger. See the Using Scripts section in Getting Started With Mobius for an introduction to scripts. See the Mobius Scripting manual for a thorough discussion of scripting.
12.4.8 Samples
Displays a dialog window to register a list of audio .wav files that can be played as samples. See the Samples section in Exploring Mobius for more information on samples.
12.4.13 Palette
Displays a dialog window to specify the colors that are used when drawing the graphics in the main Mobius window. See the Changing Colors section in Exploring Mobius for more information on changing colors.
12.5.3 Refresh UI
This will cause the entire Mobius window to be redrawn. Use of this menu item is not usually necessary but it you notice areas in the window that are blank white rectangles, or that don't seem to be displaying properly, try selecting this menu item. This was added to address a problem with the way some plugin hosts open the plugin editor window.
12.5.4 About
Displays ubiquitous about dialog window. There is nothing really interesting here besides the version number which you should include when reporting problems.
Mobius Scripting
March 2012
Contents
1 2 3 4 5 5.1 5.2 5.3 5.4 5.5 5.6 6 7 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9 7.2 7.3 7.3.1 7.3.2 7.3.2.1 7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.3.8 Introduction Writing Scripts Running Scripts Debugging Scripts Script Language Fundamentals Anatomy of a Statement Intrinsic and Function Statements Case Insensitivity Parameters and Variables Statement Blocks and Indentation The Mysterious $ Script Execution Environment Script Language Reference Declarations !autoload !controller !focuslock !multiclick !name !quantize !spread !sustain !switchQuantize Expressions Intrinsic Statements break call Procedures cancel diff end endproc echo else
7.3.9 7.3.10 7.3.11 7.3.12 7.3.13 7.3.14 7.3.15 7.3.16 7.3.17 7.3.18 7.3.19 7.3.20 7.3.21 7.3.22 7.3.23 7.3.24 7.3.25 7.3.26 7.3.27 7.3.28 7.3.29 7.3.30 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.5.8 7.5.9 7.5.10 7.5.11 7.5.12 7.5.13
elseif endif end for if initpreset jump label load message next preset proc prompt repeat save set setup unittestsetup variable wait while Special Labels reentry sustain endSustain click endClick Functions Divide Backward Forward SpeedCancel Halfspeed InstantMultiply Loop MidiOut Move MuteOff MuteOn OverdubOff OverdubOn
7.5.14 7.5.15 7.5.16 7.5.17 7.5.18 7.5.19 7.5.20 7.5.21 7.5.22 7.5.23 7.5.24 7.5.25 7.5.26 7.5.27 7.6 7.6.1 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.8 7.9 7.9.1 7.9.1.1 7.9.1.2 7.9.1.3 7.9.1.4 7.9.1.5 7.9.1.6 7.9.1.7 7.9.1.8 7.9.1.9 7.9.1.10 7.9.2 7.9.2.1 7.9.2.2 7.9.2.3 7.9.2.4 7.9.2.5 7.9.2.6 7.9.2.7
PitchBend PitchOctave PitchStep SpeedBend SpeedOctave SpeedStep SpeedToggle Sample Shuffle Slip Sustain Functions TimeStretch Track Loop Windowing Parameters Comma Separated Values Track Parameters focus group preset presetNumber Track Controls Variables Script State clickCount midiChannel midiNumber midiType midiValue returnCode sustainCount triggerNumber triggerOffset triggerValue Loop Sizes cycleCount cycleFrame cycleFrames cycleNumber layerCount loopCount loopFrame
7.9.2.8 7.9.2.9 7.9.2.10 7.9.2.11 7.9.2.12 7.9.2.13 7.9.2.14 7.9.3 7.9.3.1 7.9.3.2 7.9.3.3 7.9.4 7.9.4.1 7.9.4.2 7.9.4.3 7.9.4.4 7.9.4.5 7.9.4.6 7.9.4.7 7.9.4.8 7.9.4.9 7.9.4.10 7.9.5 7.9.5.1 7.9.5.2 7.9.5.3 7.9.5.4 7.9.5.5 7.9.5.6 7.9.6 7.9.6.1 7.9.6.2 7.9.6.3 7.9.6.4 7.9.6.5 7.9.6.6 7.9.7 7.9.7.1 7.9.7.2 7.9.7.3 7.9.7.4 7.9.7.5
loopFrames loopNumber redoCount subCycleNumber subCycleFrame subCycleFrames subCycleCount Loop Events nextEvent nextEventFunction nextLoop Loop Modes effectiveFeedback inHalfspeed inMute inOverdub inPause inRealign inReturn inReverse isRecording mode Speed and Pitch rate rawPitch rawSpeed speedToggle speedSequenceIndex pitchSequenceIndex Track State globalMute outSyncMaster solo track, trackNumber trackCount trackSyncMaster Generic Sync syncAudioFrame syncBar syncBeat syncCorrections syncCyclePulses
7.9.7.6 syncDealign 7.9.7.7 syncDrift 7.9.7.8 syncDriftChecks 7.9.7.9 syncLoopFrames 7.9.7.10 syncPreRealignFrame 7.9.7.11 syncPulse 7.9.7.12 syncPulseFrames 7.9.7.13 syncPulses 7.9.7.14 syncRawBeat 7.9.7.15 syncTempo 7.9.8 Out Sync 7.9.8.1 syncOutBar 7.9.8.2 syncOutBeat 7.9.8.3 syncOutRawBeat 7.9.8.4 syncOutSending 7.9.8.5 syncOutStarted 7.9.8.6 syncOutStarts 7.9.8.7 syncOutTempo 7.9.9 MIDI Sync 7.9.9.1 syncInBar 7.9.9.2 syncInBeat 7.9.9.3 syncInRawBeat 7.9.9.4 syncInReceiving 7.9.9.5 syncInStarted 7.9.9.6 syncInTempo 7.9.10 Host Sync 7.9.10.1 syncHostBar 7.9.10.2 syncHostBeat 7.9.10.3 syncHostRawBeat 7.9.10.4 syncHostReceiving 7.9.10.5 syncHostStarted 7.9.10.6 syncHostTempo 7.9.11 Miscellaneous 7.9.11.1 blockFrames 7.9.11.2 configurationDirectory 7.9.11.3 installationDirectory 7.9.11.4 noExternalAudio 7.9.11.5 sampleFrames 8 Examples 8.1 Sustain Scripts 8.2 Long Press Scripts
1 Introduction
Mobius provides a powerful feature called scripting that can be used to add new functions or customize the behavior of Mobius to match your looping style. Some of the things that can be done with scripts include:
Perform several functions at exactly the same time with a single button press. Perform different functions from the same button, depending on the current loop mode. Perform a function while temporarily changing one or more of the preset parameters. Perform a sequence of functions at musically useful intervals. Automate gradual changes to output level and pan.
A script is simply a text file that can be created with any text editor. The contents of the script file are statements in a language called the Mobius Scripting Language. Once the script files have been written, they are registered so that Mobius knows their names and locations. Once a script file has been registered, it may be assigned one or more triggers which can be MIDI messages, computer keyboard presses, or buttons in the Mobius window. When a trigger for a script is received, the statements in the script are performed. This process is called running the script, executing the script, or calling the script. The following is an example of a simple script:
2 Writing Scripts
You may write a script using any text editor, though it is critical that you save the files as "plain text". If you are not in the United States you need to be careful about the character encoding used for the script file. Scripts must be written in an 8-bit character encoding that is compatible with ASCII. If you are using Notepad on Windows, you must save the file using the ANSI encoding, you must not use Unicode. If you are using Wordpad, in the Save as type: menu you must select either Text Document or Text Document - MS-DOS Format. If you are using TextEdit on a Mac, you need to save the file in a plain text encoding, either Western (Mac OS Roman) or Western (Windows Latin 1). When you use the Save As menu item, if you see a File Format: menu with items like Rich Text Format
or Web Page (.html) then you are editing the file using rich text rather than plain text. Open the TextEdit Preferences window and under the New Document tab select the Plain Text radio button under the Format section. Once you do this create a new document and the Save As window should show a Plain Text Encoding: menu, select Western (Mac OS Roman). There are many text editors available that present encoding options in different ways or using different words. The presentation may also be different on different versions of the operating system. The main thing to keep in mind is that you must always pick the simplest text format available, usually this is referred to as "plain text" with encodings such as "ansi", "latin 1", "roman", or "MS-DOS". Stay away from anything that says "rich" or "unicode" or that looks like a word processor format. A script file may have any name, but it is recommended that they have the extension .mos. Scripts may be stored in any directory. On OS X most people keep them in /Library/Application Support/Mobius/scripts. On Windows most people keep them in a directory under the Mobius installation directory, usually c:\Program Files\Mobius 2\scripts. Once you have created the script file, you need to tell Mobius about it through a process called script registration. There are two ways to register scripts: by file and by directory. When you register a script file, that file is loaded into Mobius when it starts. If you register a script directory, all scripts in that directory are loaded. Registering script directories is convenient if you have a lot of scripts and you don't want to register all of them one at a time. You do need to be careful though to only put things in this directory you really need. To register a script open the Configuration menu and select Scripts, the Script Registration window will open.
On Windows you will see Add Script and Add Directory buttons that will bring up standard selection dialogs for files or directories. On Mac you will see a similar window but it will only have a single Add button because the standard Mac file selector lets you select both files and directories. To register a new script or script directory, click one of the add buttons, navigate to the file or directory you want to register and click Open on Windows or Choose on Mac. The name of the file or directory should now appear in the list in the center of the script registration window. If you want to remove an item from the list, click on it so that it becomes highlighted then click the Delete button. Finally click the Ok button at the bottom of the widow to save the changes. The new set of scripts will be loaded into Mobius and are available for binding.
3 Running Scripts
Like build-in functions, scripts are run in response to a trigger such as a MIDI message, computer keyboard key, or a button in the Mobius user interface. The process of associating a trigger with a script is called binding. >See the Controlling Mobius in the Getting Started manual for a full description of how to create bindings. Once you have registered some scripts or script directories you will start seeing their names in the Scripts tab of the binding windows.
Note that scripts will usually appear in the binding windows with a name other than the raw file name. Most scripts include a line starting with !name at the top that specifies a user friendly name you want to see in the binding windows. For example:
4 Debugging Scripts
TODO: Introduce DBWIN32, Echo, Message, Prompt...
For a given line of text the first significant character determines the type. The first significant character is anything other than white space characters such as spaces and tabs. If all the characters on a line are white space, the line is empty and is ignored. If the first significant character is a # the line is a comment and the entire line is ignored. If the first significant character is a ! the line is a declaration. If the first significant character is anything other than whitespace, # or ! the line is a statement. Declarations are used to give Mobius information about how to run the script. They can appear anywhere in the script but it is recommended that you put them all at the top. The order of declarations is not important. Statements are performed in the order they are written in the script.
# Do the NextLoop function after turning off switch quantize !name Next Loop Now
variable nextLoop
In the previous example the keyword is Variable so this is called a Variable statement. After the keyword is the argument nextLoop. The meaning of the argument depends on the keyword, in this case the argument is the name of a script variable. Here is a more complex example:
You do not have to follow this style, "NextLoop", "nextloop", "NEXTLOOP", or "NeXtLoOp" all mean the same thing. Intrinsic statements will begin with a lower case letter in this document, but this is very inconsistent in older script examples. Keywords whose names are found in common programming languages are usually written in all lower case, these include if, else, for, and while. But other Other keywords are often capitalized, such as Variable, Label, and Jump.
These functions all use the remainder of the line following the keyword as a message to be displayed to the user. The message will be displayed exactly as it is written. For example the statement "message mode" will display the string "mode". If you want to
display a message with the name of the current looping mode, you reference the mode variable with a $.
7.1.1 !autoload
Normally scripts are loaded once when Mobius is first started and remain in memory for as long as Mobius runs. If you make changes to the script file they will not be used by Mobius until you restart it. The !autoload declaration will cause the script file to be reloaded from the file system every time the script is called. This is very useful when writing new scripts as it allows you to keep Mobius running while you make changes the script. After the script is working properly you should remove this declaration. Reloading the script causes a small delay before the script is run. This can make it difficult to apply the script to exact locations in the loop.
7.1.2 !controller
This option identifies the script as a controller script. When the script is triggered by a MIDI continuous controller, the script is called whenever the value of the controller changes. Normally, when a script is bound to a MIDI continuous controller, it is assumed that the controller messages are being sent by a momentary switch rather than an expression pedal. Momentary switches typically send a non-zero controller value when the switch is pressed and a zero value when the switch is released. Mobius will only call the script when it receives a non-zero value which means the switch has been pressed. It will not call the script when it receives a zero value after the switch is released, unless you also use the !sustain declaration. This behavior is usually not desired when the continuous controller values are being generated by an expression pedal. With an expression pedal, you want the script called whenever the position of the pedal changes, even when it goes to zero. Controller scripts are most often used to change the track controls : Input Level, Output Level, Feedback, Secondary Feedback, and Pan. They may also be used to change speed and pitch shift for each track, and change preset parameters such as 8ths Per Cycle or any other parameter that has a range of values. Including the !controller declaration in a script will disable the following directives if they also appear in the script.
Here is an example script that implements a basic volume control. The behavior of this script is exactly the same as binding a controller to the Output Level track control.
7.1.3 !focuslock
Normally scripts do not obey focus lock or track groups. When a script is run it will only run in the selected track. The !focuslock declaration makes the script sensitive to track focus lock. The script will be run simultaneously in all focused locked tracks. If the Groups Have Focus Lock parameter is true, this declaration will also cause the script to be run in all tracks that have the same group as the selected track. This option is useful for simple scripts that only operate on one track. It makes the script behave more like the built-in Mobius functions. If however the script uses the for statement to operate on several tracks, you normally do not use the !focuslock option.
7.1.4 !multiclick
This option allows the script to change behavior if you trigger it more than once within a short time. Some people think of this as "double clicking". A script that uses this option is called a multi-click script. To create a multi-click script, add this declaration:
!multiclick 2000
The numeric argument is the trigger expiration period expressed as a number of milliseconds. The default expiration period is 1000 (1 second) so you only need to include this argument if you want a value other than 1000. In this example the expiration period will be two seconds. Next add Label statements to the script with these names:
click - run whenever the script is triggered again before the expiration period endClick - run when the trigger expiration period is reached
7.1.5 !name
This declaration is used to specify the name to be displayed for this script in the binding windows. If no name is specified, the file name is displayed. It is very
common to use a !name declaration since the script file name is not always meaningful to the user. The name consists of all characters after the space after the !name declaration up to the end of the line. In the following example, the name displayed for the script would be "Auto Record 4".
7.1.6 !quantize
Normally scripts will not obey the Quantize Mode parameter in the preset. When a script is triggered it will be run immediately. The !quantize option makes the script sensitive to the Quantize Mode parameter, it will be run at the next quantization point. This makes scripts behave more like built-in functions. This option is most often used when the script does not begin with a Wait statement. TODO: The difference between !quantize and Wait...
7.1.7 !spread
This option will allow the script to be triggered by a range of MIDI note, controller, or program change messages. The script is bound once to the center of the range, but will then be triggered by messages on either side of the center. This option is usually used when binding to MIDI note messages. If the script is bound to middle C, then notes on either side of middle C will automatically be bound to the script. This is similar to the way the Pitch Step and Speed Step functions behave. The note you select in the binding window is the center note, pressing notes below the center lowers the pitch/speed, pressing notes above the center raises the pitch/speed. For spread scripts, the script will be run when any note in the range is pressed. The script can then reference internal variables to determine which note within the range was pressed. While it will be most common to bind spread scripts to MIDI notes so that you can "play" the script chromatically, you can also bind the script to a range of program changes or continuous controller values. To define a spread script, include this declaration at the top:
!spread
The default range of the spread is 48 values on either side of the center, which for notes means 4 octaves up and 4 octaves down. You can reduce this range by adding an argument to the !spread declaration:
!spread 4
In the previous example, the 4 argument means that the spread will be 4 notes on either side of the center. If there is a conflict between a spread script binding and another function that is bound to a specific note, the other function will have priority. For example, if a spread script with a range of 12 is bound to note 64, the script will be called whenever notes 52 to 76 are received. If you also have the Record function bound to note 59, that note will call the Record function, but all the notes around it will still call the script. You can think of this like "holes being punched" into the spread range. You usually do not want to have a spread range conflict with another function binding so it is best to move the center notes so they do not overlap. If you want to have a large spread range, you will need to use different MIDI channels for the center notes. When a spread script is called, the following system variables may be referenced to adjust the behavior of the script:
triggerOffset - A positive or negative integer representing the relative position of the trigger from the center of the range.
For example, if you bind the script to note 64 and you press note 63, the value of triggerOffset will be -1. If you press note 64 triggerOffset will be 0, and if you press note 65 triggerOffset will be 1. The built-in Speed Step function could be implemented with this script:
SpeedStep triggerOffset * 12
7.1.8 !sustain
This option will cause the script to be run on both the down and up transitions of the trigger. A down transition happens when you press a switch, an up transition happens when you release a switch. A script that uses this option is called a sustain script. Sustain scripts are effective only if you are using a momentary trigger such as a MIDI note, MIDI continuous controller, or computer keyboard key. To use MIDI notes, the trigger device must send a Note On event when a switch is pressed and a Note Off event when the switch is released. To use MIDI continuous controllers, the switch must send a CC value greater than zero when the switch is pressed and zero when the switch is released. Note that you can not use MIDI program changes for sustain scripts since the program change is only sent when the switch is pressed. Sustain scripts are also run repeatedly while the switch is held down, this allows it to change behavior depending on how long the switch is held. This allows scripts to have long press behavior like other built-in functions. To be notified when the trigger goes up, you simply add this label to the script:
label endSustain
The statements following this label will be run when the function trigger goes up. To be notified while the trigger is held, add this label to the script:
label sustain
The statements following this label will be run every 250 milliseconds (1/4 second) while the trigger is held. You can determine how long the trigger has been held by testing the sustainCount variable. This will have a number starting at 1 and incrementing by 1 every time the sustain script is called. You can specify the duration of the sustain notifications by adding a number after the !sustain keyword. This number is the number of milliseconds between notifications. For example, this declaration will cause the sustain label to called every second rather than every 1/4 second.
!sustain 1000
Here is a more complex example that demonstrates all of the features of sustain scripts.
# the Message statement can be used to display brief messages message Starting sustain test end
GEEK Note: Scripts are similar to a re-entrant function in a multi-threaded programming language. Each of the calls for the down transition, up transition, and sustain notifications are done in an environment similar to a thread. If you use Wait statements, it is possible for the script to be active in more than one thread. By using variables, the threads can communicate with each other. Here is a more realistic example. A long-press of the Record function will normally perform a Reset. This script does something similar but with the Mute function.
!name Mute/Reset
Mute end
change speed or pitch shift the longer the trigger is held bounce between half speed and normal speed every second as long as the trigger is held slip forward one subcycle every 1/2 second
Here is another example of simple sustain script that raises the speed a fifth while held and drops it back when released.
!name SUSSpeedUp5
SpeedUp 7 end
7.1.9 !switchQuantize
When you change loops with the switchQantize parameter set something other than off, Mobius will enter a special Switch mode while it waits for the next switch quantization point. During this mode, many functions that you trigger are queued and performed after the loop switch. By default scripts do not wait until after the loop switch, they are run immediately. The !switchQuanitze option will delay the execution of the script until after the loop switch. This makes scripts behave more like built-in functions. Note however that the functions performed by the script are not treated like alternate endings to the switch function. For example, if you do an Overdub during the switch quantization and the next loop is empty, the current loop is copied into the next loop. But if you run a script whose first function is Overdub, this will not cause the loop to be copied.
Square brackets are used to surround optional tokens. In this example the call statement may have an optional list of arguments. The ... means that the contents within the brackets may be repeated any number of times. Two special tokens are used in syntax notation:
<arg> - replaced by a symbol, string, or variable reference <expression> - replaced by a complex expression
Note that some of the intrinsic statements are intended for use only in special testing scripts. The statement keywords are presented using the character case that is most often seen in the example scripts. As mentioned in the Case Insensitivity section, case in function names is ignored.
7.3.1 break
This statement is used only by developers running Mobius under a debugger. It will have no effect when running Mobius outside of a debugger. Return to your homes, there is nothing to see here.
7.3.2 call
# Call a script using its !name # note that quotes must be used if the script name contains spaces
# Call a script using its file name without the .mos extension call myscript
Script arguments may either be symbols, strings, or variable references. A symbol is simply a word without spaces. A string is a sequence of characters surrounded by double quotes. A variable reference is the name of a variable or parameter prefixed with the $ character.
# Call a script passing a string argument call ShowMessage "This is my message to you!"
# Call a script passing a variable value variable message "This is my message to you!" call ShowMessage $message
In the script being called, arguments are referenced with a number preceded by the $ character. Script arguments are numbered starting from 1. For example:
Note that scripts that are designed to be called from other scripts usually do not have any declarations other than !name and sometimes !autoload. Any other declarations in the called script will be ignored. If you want the called script to be quantized for example, you will need to use the wait statement in the calling script. 7.3.2.1 Procedures A procedure is a set of statements defined within a script that will not be executed until you call them. Procedures are defined with the proc statement. Procedures are used in the Mobius test scripts but are not often used in user scripts. Their primary use is to prevent the duplication of a set of statements that are needed more than once in the script.
# define a procedure # the statements within the Proc/Endproc will NOT be executed # until you call the procedure
# Define a procedure proc ChangeDirection if inReverse Message Leaving reverse mode else Message Entering reverse mode endif Reverse endproc
call ChangeDirection
# set 8thsPerCycle to the value of the first argument proc SetSubCycles set 8thsPerCycle $1 endproc
7.3.3 cancel 7.3.4 diff 7.3.5 end 7.3.6 endproc 7.3.7 echo 7.3.8 else 7.3.9 elseif
7.3.10 endif 7.3.11 end 7.3.12 for 7.3.13 if 7.3.14 initpreset 7.3.15 jump 7.3.16 label 7.3.17 load 7.3.18 message 7.3.19 next 7.3.20 preset 7.3.21 proc
proc <procedureName>
This statement begins a procedure definition. The argument must be a literal string that defines the procedure name. The procedure definition must be terminated by an endproc statement. See Procedures for more information on defining and calling procedures.
7.3.22 prompt 7.3.23 repeat 7.3.24 save 7.3.25 set 7.3.26 setup 7.3.27 unittestsetup 7.3.28 variable
7.5 Functions
All Mobius functions may be used in scripts. The names of the functions used in scripts may differ slightly from the names you will see in the UI. In particular, script function names never contain spaces. If a function name is displayed in the UI with spaces such as "Next Loop", the script function name is usually the same with the spaces removed such as "NextLoop". The function reference section of the Mobius Reference manual contains a complete list of all functions arranged in alphabetical order by the display name you will see in the UI. Within the documentation for each function will be a line beginning with Internal name:, the word after this prefix is the name you would use in a script to execute this function. Note that the function names displayed in the UI are taken from a file that may be modified by the user. This file is called a message catalog. The default message catalog is in the Mobius installation directory and is named Catalog_USEnglish.txt. If you have modified this file, or if you have asked Mobius to read messages from a different file, the names that appear in the reference manual may not be the same as what you will see in the UI. We will not provide reference documentation for every function in this manual. We will only document functions and function features that are only accessible from scripts. For more information on what the functions do and how they are influenced by parameters, you must read the documentation in the reference manual.
7.5.1 Divide
The function named just Divide without a number is accessible only scripts. With this function the divisor is specified as an argument written after the function name. The argument may be a number or an expression. For example:
7.5.2 Backward
Backward forces the loop direction into reverse and sets the Reverse minor mode. This function is provided as a convenience for script writers that need to ensure the loop is playing backward without having to test the inReverse variable. The following two code blocks have the same behavior.
7.5.3 Forward
Forward forces the loop into the normal forward direction. It is provided as a convenience for script writers that need to ensure the loop is playing forward without having to test the inReverse variable. The following two code blocks have the same behavior.
7.5.4 SpeedCancel
SpeedCancel forces the loop out of all speed shifting modes: SpeedToggle, SpeedOctave, SpeedStep and SpeedBend. This is provided as a convenience to script writers that need to ensure the loop is playing at normal speed without having to test the inHalfspeed or speedToggle varialbes or the speedOctave, speedStep, and speedBend controls. The following two code blocks have the same behavior:
See Speed Cancel in the Mobius Reference manual for more information.
7.5.5 Halfspeed
Halfspeed changes the loop speed so that it plays twice as long and sounds one octave lower. It is an older function that is provided for backward compatibility. If you are writing scripts it is recommended that you use the more general SpeedStep function. Executing Halfspeed is identical to executing SpeedStep with an argument of -12. The following threecode blocks have the same behavior.
# Toggle speed if we're not currently in 1/2 speed if !inHalfspeed SpeedToggle endif
See Halfspeed in the Mobius Reference manual for more information.
7.5.6 InstantMultiply
The function with internal name InstantMultiply without a number may only be used in scripts. The multiplier is specified as an argument to the function. For example:
InstantMultiply 6
You can also use the InstantMultiply functions with numbers in their names in scripts. These two script statements will have the same effect.
7.5.7 Loop
The function named just Loop without a number is accessible only in scripts. With this function the loop you want to trigger is specified as a function argument, which may be a number or an expression. For example:
Loop4 Loop 4
See Loop in the Mobius Reference manual for more information.
7.5.8 MidiOut
MidiOut can send any MIDI message to the configured MIDI output device. This function is accessible only from scripts. The MIDI message to send is specified with up to four function arguments. The syntax is:
MidiOut <status> <channel> <value> <velocity> status: noteon noteoff control program stop start continue
7.5.9 Move
Move will instantly move the loop playback position to a new location. It is accessible only from scripts. The new position is specified as a function argument which may either be a number or an expression whose result is a number. This number is used as a frame number within the loop. The first frame in a loop has frame number zero.
7.5.10 MuteOff
MuteOff will cancel the Mute minor mode. If the loop is not in mute mode the function has no effect. This function is not quantized and is accessible only in scripts. It is a convenience for script writers that want to make sure that mute mode is off without having to worry about the current mute state. You can also use the Mute function but since that toggles mute mode you have to test the current mute state. The following script examples are equivalent:
7.5.11 MuteOn
MuteOn will activate the Mute minor mode and immediately silence the loop. If the loop is already muted the function has no effect. This function is not quantized and is accessible only in scripts. It is a convenience for script writers that want to make sure that the loop is muted without having to worry about the current mute state. You can also use the Mute function but since that toggles mute mode you have to test the current mute state. The following script examples are equivalent:
7.5.12 OverdubOff
OverdubOff forces the Overdub minor mode off. This function is not quantized and is accessible only scripts. It is provided as a convenience for the script writer that needs to turn overdub off, but is more convenient than using the Overdub function that toggles overdub mode. The following two script examples are equivalent:
7.5.13 OverdubOn
OverdubOn activates the Overdub minor mode. If overdub mode is already active the function has no effect. This function is not quantized and is accessible only in scripts. It is a convenience for the script writer that needs to turn overdub on, but is more convenient than using the Overdub function that toggles overdub mode. The following two script examples are equivalent:
7.5.14 PitchBend
PitchBend will change the playback pitch of the loop up or down in small intervals. The number of intervals is specified as an argument to the fucntion. While this can be called as a function it is expected that pitch bend be usually performed by changing the value of the pitchBend control. Neither the function or the control are quantized. The range of values is from -8192 to 8181 to match the MIDI pitch wheel.
# change the pitch with the PitchBend function PitchBend 2091 PitchBend -4087
# change the pitch with the pitchBend control set pitchBend 2091 set pitchBend -4087
See Pitch Bend in the Mobius Reference manual for more information.
7.5.15 PitchOctave
PitchOctave will change the playback pitch of the loop up or down in octave intervals. The number of octaves is specified as an argument to the fucntion. The octave can also be changed with the pitchOctave control. The difference between the control and the function is that the functions may be quantized but the control is never quantized.
7.5.16 PitchStep
PitchStep can change the playback pitch of the loop up or down to achieve a pitch change in a number of semitones. The number of semitones is specified as an argument to the function. You may also change the pitch step by setting the pitchStep control. The function may be quantized but the control is never quantized.
7.5.17 SpeedBend
SpeedBend will change the playback speed of the loop up or down in small intervals. The number of intervals is specified as an argument to the fucntion. While this can be called as a function it is expected that speed bend be usually performed by changing the value of the speedBend control. The range of values is from -8192 to 8181 to match the MIDI pitch wheel.
# change the speed with the SpeedBend function SpeedBend 2091 SpeedBend -4087
# change the speed with the speedBend control set speedBend 2091 set speedBend -4087
See Speed Bend in the Mobius Reference manual for more information.
7.5.18 SpeedOctave
SpeedOctave will change the playback speed of the loop up or down in octave intervals. The number of octaves is specified as an argument to the fucntion. The octave can also be changed with the speedOctave control. The difference between the control and the function is that the functions may be quantized but the control is never quantized.
7.5.19 SpeedStep
SpeedStep can change the playback speed of the loop up or down to achieve a pitch change in a number of semitones. The number of semitones is specified as an argument to the function. You may also change the speed step by setting the speedStep control. The function may be quantized but the control is never quantized.
SpeedStep -7
7.5.20 SpeedToggle
SpeedToggle is similar to SpeedStep in that it changes the speed of the loop up or down by some number of semitones specified as an argument to the function. The difference is that if you execute SpeedToggle a second time without an argument, the shift established by the previous call to SpeedToggle is canceled. In the following example we raise the speed by 5 semitones, wait for the end of the loop, then lower it by 5 semitones.
Wait loop
7.5.21 Sample
The Sample family of functions will play one of the loaded samples. The function named just Sample without a number may only be used in scripts. The sample to trigger is specified as a function argument that may be a number or an expression.
# another way to trigger the first sample with the number # specified as a function argument Sample 1
See Sample in the Mobius Reference manual for more information.
7.5.25 TimeStretch
TimeStretch is available only in scripts. It will change both the playback speed and the amount of pitch shift such that the observed pitch stays the same but the playback speed increases or decreases. This function must have a script argument that specifies the number of units of stretch. Time stretch may also be accomplished with the timeStretch track control. The function may be quantized, the control is never quantized. The range of values is from -8192 to 8181 to match the MIDI pitch wheel.
# change the duration with the function TimeStretch 2091 TimeStretch -4087
# change the duration with the control set timeStretch 2091 set timeStretch -4087
See Time Stretch in the Mobius Reference manual for more information.
7.5.26 Track
The Track family of functions will activate one of the numbered tracks. If the track is already active, the function will have no effect. The function named just Track can only be used in scripts where the track to select is specified as a function argument.
# move back one loop independent of the windowSlideUnit parameter WindowMove loop, -1
# orient the window at the beginning of the previous layer WindowMove layer, -1
# orient the window at the beginning of the loop history WindowMove start
# orient the window at the end of the loop history WindowMove end
Note that in these examples a comma is required if you are using negative amounts. This is one of the rare functions whose argument list is completely parsed as an expression (Shuffle is another), and since operator precedence is like C, "x -1" is the same as "x - 1" which means to subtract 1 from x. So the arguments "subcycle -1" would be parsed as subtracting 1 from the variable named subcycle. To prevent this you need to put a comma between them, "subcycle,-1", or surround -1 in parantthesis, "subcycle (-1)". It is easier to use commas. The start and end units are unusual becase they are not relative units for sliding, they are absolute locations within the history and do not need an amount. The syntax of the WindowResize function is:
7.6 Parameters
Describe in general how parameters can be accessed and set from scripts..
Overdub
7.7.1 focus
Value value: true, false This parameter determines whether the track has focus lock. The parameter may be set with the Focus Lock function or by clicking on the Track Number in the track strip. Script example:
7.7.2 group
Value: an integer from 1 to 8 This parameter determines whether the track is a member of a track group. The value is an integer parameter that has the number of the track group in the current track. If the value is zero there is no track group. Positive group numbers are displayed as letters in the user interface. Group 1 is displayed as A group 2 is displayed as B etc. When setting this parameter from a script you may use either numbers staring from 1 or letters starting from A. Script example:
7.7.3 preset
Value: a preset name This parameter has the name of the preset that is active in the track. This is intended for use only in scripts, in the user interface you select presets from the preset menu or from the preset window. When setting this from scripts you may use either the preset name or the preset number from 1. While setting this parameter in scripts is allowed, it is preferable in scripts to use the Preset built-in script function. Script example:
set preset 1 set preset "My Preset" Preset 1 Preset "My Preset"
7.7.4 presetNumber
Value: an integer from 1 to infinity This parameter has the number of the preset that is active in the track. This is intended for use only in scripts, in the user interface you select presets from the preset menu or from the preset window. When setting this from scripts you may use either the preset name or the preset number from 1. While setting this parameter in scripts is allowed, it is preferable in scripts to use the Preset built-in script function. Script example:
7.9 Variables
7.9.1 Script State
7.9.1.1 clickCount Number of times the script has been reentered due to multi-clicks. 7.9.1.2 midiChannel The MIDI channel number of the trigger event. This is also embedded in triggerNumber, but it is easier to use here. 7.9.1.3 midiNumber The MIDI key/controller number of the trigger event. 7.9.1.4 midiType The type of MIDI trigger: note, control, program. 7.9.1.5 midiValue The same as triggerValue but has a more obvious name for use in !controller scripts.
7.9.1.6 returnCode The return code of the last ThreadEvent. Currently used only by Prompt statements to convey the selected button. 0 means Ok, 1 means cancel. 7.9.1.7 sustainCount Number of times the script has been notified of a sustain. 7.9.1.8 triggerNumber The unique id of the trigger. For FunctionSourceMidi this will be a combination of the MIDI status, channel, and number. For other sources it will be a key code or other simple number. 7.9.1.9 triggerOffset An optional extra value associated with the ranged triggers. This will have the relative position of the trigger from the center of the range. 7.9.1.10 triggerValue Alias: triggerVelocity An optional extra value associated with the trigger. For MIDI triggers this will be the second byte, the note velocity for notes or the controller value for controllers.
7.9.2.6 loopCount The current loop count. This is effectively the same as the "moreLoops" parameter but I like this name better. This should really be an alias of moreLoops so we can get and set it using the same name!! 7.9.2.7 loopFrame The current record frame. The value of this variable changes automatically as the loop plays. You might think that setting this variable would cause the playback position to move but this is not allowed. Instead you must use the Move function to change the playback position. 7.9.2.8 loopFrames The number of frames in the loop. 7.9.2.9 loopNumber The number of the current loop within the track. The first loop number is 1 for consistency with the trigger functions Loop1, Loop2, etc. 7.9.2.10 redoCount The number of redo layers in the current loop. 7.9.2.11 subCycleNumber The current subcycle number, relative to the current cycle. 7.9.2.12 subCycleFrame The current frame relative the current subcycle. 7.9.2.13 subCycleFrames The number of frames in one subcycle. 7.9.2.14 subCycleCount The number of subCycles in a cycle. This is actually the same as the Subcycles preset parameter and can change with the preset, but we expose it as an internal variable so it is consistent with the other loop variables.
7.9.3.2 nextEventFunction Returns the function name associated with the next event. We subclass NextEventVariableType for the getTrackValue logic. 7.9.3.3 nextLoop The number of the next loop if we're in loop switch mode. Loops are numbered from 1. Returns zero if we're not loop switching.
7.9.4.8 inReverse True if reverse is enabled. 7.9.4.9 isRecording True any form of recording is being performed. Note that this does not necessarily mean you are in Record mode, you could be in Overdub, Multiply, Insert, etc. 7.9.4.10 mode This variable will contain the name of the current major mode. The possible values are:
Confirm Insert Multiply Mute Overdub Pause Play Record Rehearse RehearseRecord Replace Reset Run Stutter Substitute Switch Synchronize Threshold
Total speed shift, expressed as a float times 1000000. 7.9.5.4 speedToggle The current amount of toggled speed shift being applied to the track. If this is -12 it is the same as inHalfspeed being true. 7.9.5.5 speedSequenceIndex The current index into the speed sequence for the track. The index starts at zero and has a maximum value of one less than the length of the speed sequence. This is one of the few variables that may be set in scripts to change the sequencnce position. 7.9.5.6 pitchSequenceIndex The current index into the pitch sequence for the track. The index starts at zero and has a maximum value of one less than the length of the pitch sequence. This is one of the few variables that may be set in scripts to change the sequencnce position.
The actual Loop frame at the last pulse. The difference between this and syncPulseFrame is the amount of drift (after wrapping). 7.9.7.2 syncBar The current bar count. This will be the same as syncOutBar, syncInBar, or syncHostBar depending on the SyncMode of the current track. 7.9.7.3 syncBeat The current bar relative beat count. This will be the same as syncOutBeat, syncInBeat, or syncHostBeat depending on the SyncMode of the current track. 7.9.7.4 syncCorrections The number of sync drift corrections that have been performed since the sync tracker was locked. 7.9.7.5 syncCyclePulses The number of external sync pulses counted during recording. 7.9.7.6 syncDealign The number of frames the current track is dealigned from the sync tracker for this track. 7.9.7.7 syncDrift The current amount of drift, positive or negative. 7.9.7.8 syncDriftChecks The number of sync drift checks that have been performed in this loop since it was recorded. 7.9.7.9 syncLoopFrames The length of the sync tracker loop (external loop) in frames. 7.9.7.10 syncPreRealignFrame The loopFrame prior to the last Realign. 7.9.7.11 syncPulse The number of sync pulses we have received at the moment in the external loop. 7.9.7.12 syncPulseFrames
The length of a sync pulse in frames. The value is a float. Since tracks may have different sync sources, the pulse width may also be different for each track. 7.9.7.13 syncPulses The total number of sync pulses in the external loop. 7.9.7.14 syncRawBeat The current absolute beat count. This will be the same as syncOutRawBeat, syncInRawBeat, or syncHostRawBeat depending on the SyncMode of the current track. 7.9.7.15 syncTempo The current sync tempo. For Sync=Out this is the tempo we calculated. For Sync=In this is the tempo we're smoothing from the external source. For Sync=Host this is the tempo reported by the host.
7.9.11 Miscellaneous
7.9.11.1 blockFrames The number of frames in one audio interrupt block. 7.9.11.2 configurationDirectory Base directory where Mobius configuration is saved. Typically c:\Program Files\Mobius 2 on Windows and /Library/Application Support/Mobius 2 on Mac. 7.9.11.3 installationDirectory Base directory where Mobius has been installed. Typically c:\Program Files\Mobius 2 on Windows and /Applications/Mobius 2 on Mac. 7.9.11.4 noExternalAudio When set disables the pass through of audio received on the first port. This is used in the unit tests that do their own audio injection, and we don't want random noise coming in from the sound card to pollute it. 7.9.11.5 sampleFrames The number of frames in the last sample we played.
8 Examples
8.1 Sustain Scripts 8.2 Long Press Scripts
Contents
1 2 3 4 5 6 7 8 9 10 11 12 12.1 13 14 Introduction Network Configuration Addresses and Arguments Buttons and Sliders Argument Values Setting Parameters With Scaled OSC Arguments Setting Parameters With Address Values Setting Parameters With Ordinal Arguments Setting Parameters With Relative Values Executing Functions Address Translation Status Export Latency Reloading the OSC Configuration File TouchOSC Tips
1 Introduction
Mobius may be controlled and monitored using the Open Sound Control (OSC) protocol. This is an advanced topic intended for users that are already very familar with OSC, and have a hardware device capable of sending and receiving OSC messages. Mobius OSC support was tested primarily using the popular TouchOSC application for Apple and Android mobile devices but any device that supports OSC should be usable. To get the most out of OSC it is important that the device be programmable so that it can send addresses and arguments that are compatible with Mobius. If a device sends a fixed message, such as the default layouts in TouchOSC, it is still possible to use it with Mobius but it will require more effort to configure. OSC support is a relatively new feature that not many people use. If you have problems or suggestions, please do not hesitate to post on the Mobius forums.
2 Network Configuration
To communicate with an OSC device you must set four parameters in the Global Parameters dialog under the Advanced tab.
OSC Input Port - the port number on on the computer where we will listen for OSC messages OSC Output Host - the IP address of the OSC device where we will send messages OSC Output Port - the port number on the OSC device where we will send messages OSC Trace - check to enable OSC trace messages
If you don't understand what any of that means, then we're sorry but you're not ready for OSC. Post a message on the forums if you need assistance, but unfortunately OSC requires some knowledge of TCP/IP networking, and this document is not a tutorial. The OSC Enable defaults to false so we won't open network sockets that aren't needed. This must be checked if you want to use OSC. The OSC Input Port defaults to 7000. There is probably not a need to change this, but in rare situations there may be a conflict with another application that wants to use this port. Diagnosing port conflicts is beyond the scope of this document. Try it and if it doesn't work, post to the forum. The OSC Output Host must be the IP address of the device that will be sending and receiving OSC messages. This is not required, but it is desireable if you want to see controls in the OSC device match the current Mobius paramters. For example, if you bind an OSC address to the Output Level parameter, we can send the device a message every time the output level changes due to a MIDI pedal, moving the UI knob, a script, or any other means of changing the parameter. An IP address has the form of four numbers seperated by periods, for home networks, the IP addres normally starts with "192.168.1" and ends with a number between 100 and 200. The OSC Output Port defaults to 9000 which is the default port number used by TouchOSC. This must be changed if your device listens on a different port and you want the device to receive notifications when Mobius parameters change. The OSC Trace - checkbox enables sending trace messages whenever OSC messages are received or sent. On Mac, the messages are sent to the system console. On Windows, they are send to the debug output stream and you will need to use an application such as DBWIN32 to view them. See the section Trace in the Exploring Mobius manual for more information on how to enable and view trace messages. The Trace Debug Level parameter under the Advanced tab must also be set to 2 to see OSC trace messages. If you are setting up a new device it is recommended that you enable trace to help diagnose problems. Once the device and Mobius are working properly, disable trace to reduce clutter in the logs.
/mobius/trigger/scope/target/value
The /trigger container is optional and is usually not included. It can be used to convey information about how the physical device is behaving, if this is different than the default Mobius expectations. This will be described in detail later. The /scope container is optional and may contain one of the following values.
The word global A track number starting with 1 A group letter starting with A
If a scope is not specified in the address it defaults to global. Here are some example addresses containing scopes, the first two are the same because the default scope is global:
argument - the value is specified by the OSC message argument absolute - the value is specified in the address relative - an adjustment to the current value is specified in the address, with the amount of adjustment specified by the OSC message argument
We will discuss ways to specify target values in more detail below, here are some examples:
/mobius/global/output 0.5 /mobius/1/quantize 0.333 -- these are absolute /mobius/global/preset/Default+Preset /mobius/1/quantize/subcycle /mobius/A/pan/center /mobius/global/output/max -- these are relative /mobius/global/output/up 1.0 /mobius/8/feedback/down 5.0 /mobius/global/output/up/1 /mobius/8/feedback/down/5
continuous - a slider or rotary knob that sweeps between a range of values momentary - a button that sends a value when it is pressed and another when it is released single - a button that sends a value when it is pressed, but not when it is released toggle - a variation of the single button, it sends a value when it is pressed, and a different value when it is pressed a second time xy - a rectangular area with a "puck" that sends two values as the puck is moved
You can set Mobius parameters using any of these control types. Continuous controls are useful if you want to to sweep through the possible values of a parameter. Often the track control parameters such as "input", "output" and "feedback" are associated with physical controls that resemble sliders. Enumerated parameters such as "quantize" or "recordThreshold" might be assigned to rotary knobs. You can also use buttons to set parameters. In this case the button will either force the parameter to a particular value (absolute), or raise and lower the value of the parameter by some amount (relative). To execute Mobius functions you almost always use physical controls that have button behvaior. It is possible to execute Mobius functions with sliders but this can be
difficult to use. When executing functions, it is important to understand the differemce between momentary, single and toggle buttons. Many Mobius functions are "sustainable" which means they can have different behavior when a button is pressed and released, or when a button is held down for a period of time. If you wish to use any of the sustainable or long-pressable functions, you must use physical buttons that behave as momentary buttons, sending a message both when it is pressed and released. All TouchOSC buttons behave this way. It is posssible to use single message buttons to execute functions but Mobius has to be told not to expect the extra release message. Otherwise sustainable functions will enter their long-press state because they never see the up transition of the button. This is done with a special keyword in the address and is described below. Toggle buttons are not very useful with Mobius. They are typically used for effects parameters such as chorusing or reverb, where you want to press once to enable the effect, then press again to disable the effect. Such buttons typically send 1.0 when they are pressed once, 0.0 when pressed again, then repeat the 1.0 and 0.0 pattern forever. This behavior might be useful for some parameters, for example toggling quantize mode between "loop" and "off", but this is not recommended for executing functions. XY controls can be used to set Mobius parameters but we have not seen many interesting examples. If you find one let us know!
5 Argument Values
The OSC devices with which we are familar send one and rarely two arguments that are floating point numbers. The argument usually has a default range of 0.0 to 1.0. When a slider is down, the value 0.0 is sent and as it is raised the value increases smoothly until it reaches 1.0 at the top end of the slider range. Momentary buttons usually send 1.0 when the button is pressed and 0.0 when the button is released. This is the default behavior of TouchOSC controls. To minimize the amount of programming for TouchOSC, Mobius will expect most arguments to be in the range of 0.0 to 1.0, though in some cases this can be adjusted.
/mobius/global/output
One argument is expected to be sent with the message whose value ranges from 0.0 to 1.0. Mobius will take the floating point range and scale it into an integer or "ordinal" range for the target, in this example the output parameter. The output parameter has an ordinal range from 0 to 127, so an OSC argument of 0.0 becomes output level 0,
1.0 becomes 127 and 0.5 is approximately 64. This is almost always done when the physical device is a slider or rotary knob. This style of argument is convenient if you want to smoothly sweep the knob over all possible values of the parameter. It is also possible to set values with a button, but this is not often done with scaled OSC arguments. To set the value of a parameter you must know the floating point range of each of the possible parmeter values. For example the quantize parameter has four possible values: off, subcycle, cycle, and loop. This divides the floating range by four, so values from 0.0 to 0.2499999 select off, values from 0.25 to 0.4999999 select subcycle and so on. It is inconveinent for the device programmer to calculate these values so instead parameters set with buttons usually use address values or ordinal arguments. Another problem setting parameters with buttons, is that many devices use momentary buttons and send a message when it is pressed and again when it is released. When setting Mobius parameters you usually want to ignore this second message. For example, say we're configuring a TouchOSC button to set the quantize parameter to loop. You set set the high value to 1.0, but what about the low value? If you leave it at 0.0 the parameter will change twice, once when you press the button and again when you release since 0.0 is the value for "off". To avoid this you must set the low value of the button to -1.0 or any other negative number. Mobius will ignore the negative value and leave the parameter set to 1.0.
/mobius/global/quantize/loop
The quantize parameter value will be set to loop whenever this message is received with a non-zero argument. Since the default behavior of TouchOSC is to send 1.0 on button press and 0.0 on release, the message is processed when 1.0 is sent, but the message is ignored when 0.0 is sent so we won't try to change the parameter twice every time a button is pressed. This is convenient for two reasons, first you don't have to worry so much about the value of the argument since most devices default to 0.0 to 1.0. Second, you don't have to calculate the numeric form of each parameter value, instead you can reference them by name just as you would in a script. When you use this style of address you normally do not send it from a slider or knob. As you sweep over the slider range, we will set the parameter to the same value many times which adds overhead and accomplishes nothing. To set the value container, consult the reference manual for each parameter. If the parmaeter value is an enumeration the set of possible values are listed. If the value is an integer the minimum and maxmum values will be given. For example, the output level parameter range is from 0 to 127, so these are some valid example addresses.
/mobius/global/output/0
/mobius/global/output/42 /mobius/global/output/127
To change presets, setups or binding overlays, you reference the objects using the name they have in the user interface. These names often contain spaces which are not allowed in OSC addreses. You must substitute the plus '+' character for spaces in configuration object names:
min - set the parameter to the minimum value max - set the parameter to the maximum value center - set the parameter to the center value
These symbolic values are the most useful for the track level parameters.
/mobius/global/output/arg
This differs from using scaled arguments in that the argument is not expected to be a floating value from 0.0 to 1.0. Instead it is expected to be an integer that fits within the range allowed by the target parameter. In this example, the target is output which expects values from 0 to 127. Ordinal arguments accomplish the same thing as using address arguments and are a bit more obscure since they require ordinal parameter numbers, whereas address arguments may use symbolic values. In the previous example, if the device was programmed to send an argument value of 100, the same effect could be achieved using an address argument.
/mobius/global/output/100
A variation on setting parameters with addresses is to use the address to specify a relative value. There are two special sumbols you can use in the value container to set relative values.
For example:
/mobius/global/output/up /mobius/1/feedback/down
The amount to raise or lower the value is specified by the OSC argument. So assuming the TouchOSC default of 1.0 for button presses, the values will rise and lower by 1. If you create a custom TouchOSC layout you can adjust the maximum value to achieve higher amounts of adjustment. For example a button with a maximum value of 5.0 will raise or lower the parameter value by 5 units each press. If you do not wish to program a custom template, you may also specify the amount of change in the address. For example:
/mobius/global/output/up/5 /mobius/1/feedback/down/20
This style of address can be used with any parameter, the value will be automatically constrained so the parameter can't go beyond it's minimum and maximum values. The value of the OSC argument doesn't matter as long as it is possitive. Positive argument values will cause the parmameter to be changed, zero or negative values are ignored, which is necessary for buttons that send 0.0 when they are released. Setting parameters values in the address is convenient for devices that have only buttons or a limited number of sliders.
10 Executing Functions
Functions are almost always executed using a physical control that behaves as a button. It is possible to execute functions with sliders but it takes more effort. Wherever possible, the button should be programmed to send an argument of 1.0 when the button is pressed and 0.0 when it is released. It doesn't really matter what the press value is but the release value must be 0.0. If the release value is not 0.0, mobius will execute the function again when the button is released which is not normally desired. Here are some examples of function addresses:
after a long press. If the button will not send a release value the special symbol /noup must be added to the address after the /mobius container.
/mobius/noup/global/record
When the /noup trigger qualifier is used, the value of the OSC argument is ignored. Any time a message is received with this address the function is executed, and we will not wait for a release message. A few functions may take a single integer argument when used in scripts. Some examples are divide which instantly divides the loop by a number, and speedUp which raises the speed of the loop by a number of semitones. For those functions that recognize arguments, you may specify the argument in the address.
/mobius/global/divide/5 /mobius/1/speedDown/12
There is usually no need to combine a numeric function argument with the /noup option. Functions that take argumets are assumed to not be sustainble. There may however be scripts that are sustainable and take an argument. So it is best if you consistently add /noup if you know the device will not behave like a momentary button.
11 Address Translation
If your device does not support programmable addresses, or if you wish to use the default TouchOSC templates without creating custom templates, you can still use the device with Mobius, but it requires editing an XML file. The file is named osc.xml. On Windows it is found in the installation directory, usually c:\Program Files\Mobius 2. On Mac this is found in /Library/Application Support/Mobius 2. You need to be comfortable with XML syntax and selecting text encodings to edit this file. See this section in the Getting Started manual for more information on the proper way to edit XML files. The default osc.xml file contains a single <OscConfig> element which in turn contains several <OscBindingSet> elements. An <OscBindingSet> contains several <Binding> elements. Each <Binding> defines the translation between the incomming OSC address (triggerPath) and the corresponding Mobius address (targetPath).
<OscConfig> <OscBindingSet name="Touch OSC Simple" active='true'> <Binding triggerType='continuous' triggerPath='/1/fader1' targetPath='/mobius/1/output'/> <Binding triggerType='continuous' triggerPath='/1/fader2' targetPath='/mobius/2/output'/> <Binding triggerType='continuous' triggerPath='/1/fader3' targetPath='/mobius/3/output'/> <Binding triggerType='continuous' triggerPath='/1/fader4' targetPath='/mobius/4/output'/>
<Binding triggerType='continuous' triggerPath='/1/fader5' targetPath='/mobius/global/pan'/> <Binding triggerType='toggle' triggerPath='/1/toggle1' targetPath='/mobius/noup/record/> <Binding triggerType='toggle' triggerPath='/1/toggle2' targetPath='/mobius/noup/overdub/> <Binding triggerType='toggle' triggerPath='/1/toggle3' targetPath='/mobius/noup/mute/> <Binding triggerType='toggle' triggerPath='/1/toggle4' targetPath='/mobius/noup/reset/> ... </OscBindingSet> <OscBindingSet name="Touch OSC Beat Machine"> ... </OscBindingSet> <OscBindingSet name="Touch OSC Keys"> ... </OscBindingSet> ... </OscConfig>
Only one OscBindingSet may be active at a time, this is indiciated by setting the XML attribute active to true as seen in the above example. If more than one <OscBindingSet> set is marked active, the first one is chosen. If no binding sets are active the first one in the <OscConfig> is chosen. The active binding set is consulted whenever an OSC message is received. We search for a <Binding> whose triggerPath matches the address from the OSC message. In the examples above, the triggerPath values are the messages sent by TouchOsc in one of it's default configurations. If a matching <Binding> is found, the value of the targetPath is used to process the message instead of the one that was received from the device. targetPath values conform to the Mobius address format described earlier in this document. The triggerType value tells Mobius about the behavior of the physical OSC trigger and the values the OSC message argument will have. This is optional because Mobius can usually figure out the appropiate trigger type based on the targetPath and trigger options such as /noup. The possible values are.
continuous - argument sweeps from 0.0 to 1.0 momentary - argument is 1.0 when a button is pressed and 0.0 when released once - argument is 1.0 a the button is pressed and nothing is sent when the button is released
toggle - argument is 1.0 when button is pressed once and 0.0 when pressed again xy - a pair of arguments from 0.0 to 1.0 is sent for each coordinate in a rectangle
For TouchOSC, incoming paths that contain the word "fader" or "rotary" are continuous, paths with the word "toggle" are toggle, and paths with the word "push" are momentary. Mobius currently cannot make use of xy messages.
12 Status Export
In addition to receiving OSC messages, Mobius may also send OSC messages so that the device can display the current Mobius state. By default, any OSC address whose target is a parameter and whose argument is a continuous value from 0.0 to 1.0 will be automatically exported when the parmeter is changed. So if you use an address like this:
/mobius/output
A message will be sent back to the OSC device using the same address whenever the output level changes. For this to work you must configure the OSC Output Host and OSC Output Port in the Mobius Global Parameters window. Note that addresses that target functions, or that include specific values will not be exported. For example, these address cannot be exported.
loopLocation - the current playback location in the loop loopStart - flashes at the loop start point loopSubcycle - flashes at the loop start point loopCycle - flashes at the loop start point modeRecord - set when the loop is in record mode
Watch points are still under development, if you have ideas about Mobius states that should be exporable as watch points please let us know. When a watch point is continuous such as loopLocation the value will be constantly changing. The output value will be scaled to the range 0.0 and 1.0. For TouchOSC this can be used with fader or rotary controls. When a watch point flashes it indicates that the state is instant and does not have a time duration. For example when the loop reaches the start point. For instant watch points, an OSC message will be sent with value 1.0 when the state is reached, and a
short time later a message with value 0.0 is sent. This can be used to turn lights on the OSC device on and off. For TouchOSC this should be used with toggle buttons. When a watch point is "modal" such as modeRecord it turns on and off for an undefined time. A 1.0 will be sent when the mode is entered and 0.0 when it is exited. To export watch points, you must edit the osc.xml file and add <OscWatcher> elements. These elements appear as immediate childrenof the <OscConfig> element. For example:
<OscConfig> <OscWatcher name='loopLocation' path='/1/fader1'/> <OscWatcher name='loopStart' track='1' path='/1/toggle1'/> <OscBindingSet> ... <OscBindingSet> ... <OscConfig>
In this example, the loop location of the currently selected track will be sent to the OSC device using the address /1/fader1. In the second <OscWathcer>, a specific track is specified so the OSC device will be send a message to /1/toggle1 only when the loop in track 1 reaches its start point.
12.1 Latency
There may be a considerable delay between the time that a Mobius watch point is reached and the OSC device responds to the message. So while watch point port export can give you a general idea of what is happening, it is not always suitable for making time critical decisions, such as synchronization or as a metronome. Mobius sends messages as fast as it can, but wireless networks and mobile devices can both add delays that are not under the control of Mobius.
14 TouchOSC Tips
The most inexpensive way to use OSC with Mobius is through the TouchOSC application for Apple and Android mobile devices. It is available here . TouchOSC provides a few default layouts such as Beat Machine and Keys but it is also fully programmable with the TouchOSC Editor.
The default layouts the send messages such as /1/fader1/ can be used but they require editing the Address Translation file. For most people it is easier to use the TouchOSC Editor to send address that Mobius understands without mapping. For Mobius, the most useful layout object types are Push Button, Fader V, Fader H, Rotary V, and Rotary H. Use Push Button to execute functions or set specific parameter values, and use Fader and Rotary to sweep through paramter values. Toggle Button can be used but it doesn't work very well since Mobius does not have many concepts that behave like toggles. You might use this to swtich between two parameter values, but it is not suitable for executing functions. XY Pad and the various Multi types are not usable with Mobius. The read-only status types such as LED and Battery V can be used as the targets for OscWatchers.