Expert Sleepers Augustus Loop v2.4.
Copyright © 2009-2013 Expert Sleepers. All rights reserved. This manual, as well as the software described in it, is furnished under licence and may be used or copied only in accordance with the terms of such licence. The content of this manual is furnished for informational use only, is subject to change without notice, and should not be construed as a commitment by Expert Sleepers. Expert Sleepers assumes no responsibility or liability for any errors or inaccuracies that may appear in this document.
Contents Introduction 12 Installation 14 Mac OS X, Audio Unit (AU)! Mac OS X, VST! Mac OS X, AAX! Windows (VST)! Windows (AAX)! System Requirements Mac OS X! Windows! 14 14 14 14 14 15 15 15 Registration 16 What’s New in Version 2 17 Quality Improvements 17 Freeze Loop 17 Sync Groups 17 Tape Sim 17 Skinnable and Scriptable GUI 17 OSC 18 MIDI & OSC Scripting 18 Waveform Display 18 Record Offset 18 Tape Read Mode 18 Quickstart 19 Using Augustus Loop 20
Using the controls Knobs! Sliders! Dropdown menus! Value edit boxes! Name/value display! 20 20 20 20 20 20 Overview 21 Delay Time 22 Max Delay! Delay Time! Min! Max! Current delay time! Delay Slider! 22 22 22 22 22 22 Delay Taps 23 Delay Time! Delay Level! Master! 23 23 23 Pitch Pitch! Pitch Slider! 'Piano Keys'! Reverse! Stop! LFO Speed! LFO Depth! Filter Cutoff! Q! Type! LFO Speed! LFO Depth! Saturate! Saturation! Shape! 24 24 24 24 24 25 25 25 26 26 26 26 26 26 26 26 27 Tape Sim 27 Driv
Gain! Lo Freq/Lo Amnt! Hi Freq/Hi Amnt! Sync Host Tempo! Beat Divisor & Triplet! Beats! Using Beats with Tap Record! Sync Groups! 27 27 27 28 28 28 28 28 28 Clock Out 29 Ping-Pong/Read Mode 29 Mono-ize & Init Pan! Tape Read Mode! Levels Dry! Effect! Input! PISIL and POSIL! Loop Tap Rec! Hold Rec! Tap Length & Hold Length! Freeze Loop! Freeze Loop Mode! Clear Loop! Misc Fix Delay! Trigger Arm! 29 29 30 30 30 30 30 31 31 31 31 31 31 32 32 32 32 Fade 32 Punch In/Out 33 Punch In Quantize (me
Digital Mode 34 Record Offset 35 Waveform Display 36 Augustus Loop Fx Loop 37 Introduction 37 Using the Fx Loops 37 Setting up your DAW for Fx Loops 38 Ableton Live! Current Limitations Preferences 38 38 39 MIDI In 39 Skin 39 OSC Base Port 40 MIDI output 40 Rounded tempos (for Live) 40 Legacy filter behaviour 40 Ignore AudioUnitReset 41 Skins 42 Preamble 42 Learn by example 42 Share your Skins! 42 Anatomy of a Skin 43 Mac OS X! Windows! Bundle structure! Image req
The Skin Script getWindowSize()! getFont()! getLabelFont()! getTextFieldFont()! createUI()! Functions callable from createUI() setBannerPosition( y [, showVersion ] )! setGroupActiveColour( r, g, b, a ), setGroupInactiveColour( r, g, b, a )! texture( filename )! setBackgroundTexture( texture )! setBackgroundColour( r, g, b )! sliderRenderer( texture )! buttonRenderer( texture )! knobRenderer( texture, u, v, size )! group( name )! group:add( control )! group:width()! group:height()! group:bounds()! group:se
waveformDisplay:setMoving( v )! waveformDisplay:isMoving()! getParameterID( param )! Functions callable from luaButton functions getParameter( param )! setParameter( param, value )! setOthersParameter( id, param, value )! getOthersParameter( id, param )! sendOSC( address, path [, format ] [, values ] )! control:setVisible() / control:isVisible()! control:setState() / control:getState()! redrawLabels()! 51 51 51 52 52 52 52 52 53 53 53 53 Pre-defined Global Values 54 Debugging 54 Mac OS X! Windows!
Share your scripts! 59 Script locations 60 Mac OS X! Windows! 60 60 Overriding the default script 60 MIDI & OSC Script Functions 60 getParameterID( param )! getParameter( param )! setParameter( param, value )! getParameterMinMax( param )! setOthersParameter( id, param, value )! getOthersParameter( id, param )! sendOSC( address, path [, format ] [, values ] )! requestAllNoteOn( function )! requestAllNoteOff( function )! requestAllCC( function )! requestAllNRPN( function )! requestAllProgramChange(
Mac OS X! Windows! Version History v2.4.1 28th October 2013! v2.4.0 (Windows) 20th August 2013 / (Mac) 3rd December 2012! v2.3.4 4th November 2011! v2.3.3 1st March 2011! v2.3.2 21st February 2011! v2.3.1 17th August 2010! v2.3.0 5th August 2010! v2.2.2 28th June 2010! v2.2.1 24th February 2010! v2.2.0 9th February 2010! v2.1.1 24th August 2009! v2.1.0 8th May 2009! v2.0.4 17th April 2009! v2.0.3 19th March 2009! v2.0.2 3rd March 2009! v2.0.1 11th January 2009! v2.0.0 23rd October 2008! v1.8.
Issues with keyboard input 74 Contact 75 Acknowledgements 76 Lua 76 oscpack 76 glew 77 FreeType 78 FTGL 78 libpng 78 zlib 78
Introduction Augustus Loop is an emulation of a tape-based delay effect, with some extra features to facilitate its use as a looping device. (If you're unfamiliar with the concept/genre of looping, pay a visit to www.loopers-delight.com). The key features of Augustus Loop that make it more than just a big delay effect are: • • • • • • • • • • Really long maximum delay (3600 seconds - that's one hour). Tap length/tap record. You can set the loop time while recording your first phrase. Virtual tape.
• • • • • • • • • Ability to sync multiple instances of the plug-in running at once. Automatic fades up and down to allow smooth transitions in your playing. It can even automatically clear the loop for you once it’s faded out. Host transport-sync’d punch in and out when recording. ‘Inertia free’ mode suppresses the tape-like behaviour when changing delay times to allow seamless transitions between loop lengths.
Installation Mac OS X, Audio Unit (AU) One file (ExSlAugustusLoop.component) contains all variants of the plug-in. Simply copy the file to the folder: Library/Audio/Plug-Ins/Components Mac OS X, VST There is one file per plug-in configuration, named ExSlAugustusLoop.vst and ExSlAugustusLoopFxLoop.vst. Simply copy the files to the folder: Library/Audio/Plug-Ins/VST Mac OS X, AAX The plug-in file is named “ExSlAugustusLoop.aaxplugin”.
System Requirements Mac OS X Augustus Loop v2.2.0 and above require at least Mac OS X version 10.6.8. The plug-in is Intel-only, and built for both 32 and 64 bit. Older versions of Augustus Loop also work on PowerPC Macs and OS X versions back to 10.2.8. The Audio Unit version will work in any Audio Unit host. The VST version requires a “VST 2.4” compatible host.1 The AAX version requires Pro Tools 10.3.6 (32 bit), or Pro Tools 11 or higher (64 bit).
Registration The downloadable version of Augustus Loop stops working after 15 minutes every time you use it. To stop this happening, you need to buy a registration. You can buy a registration key online using a credit card or PayPal from the Expert Sleepers Licence Manager application. See here for more information. Note that you need at least version 1.0.12 of the Licence Manager. The e-commerce side of things is handled by eSellerate.
What’s New in Version 2 This section summarises the new features of Augustus Loop version 2. It is aimed at users who are already familiar with the previous versions of the plug-in. If you’re new to Augustus Loop, please skip ahead to the Quickstart section. For a complete list of changes, please refer to the version history. Quality Improvements Great attention has been paid to removing the niggling little clicks and pops that used to occur if you used some features and were unlucky with your timing.
of the interface. With Augustus Loop you can move user interface elements around, remove things you don’t use, add new buttons to drive your own new functionality. A general purpose scripting language lies behind all this, so your new buttons aren’t just limited to setting plug-in parameters - you can build complex systems limited only by your imagination (and programming skill!). See the Skins section below for details. OSC Augustus Loop can now be remotely controlled via the Open Sound Control protocol.
Quickstart Augustus Loop is designed to be used as an insert effect, but you can use it as a send effect if you wish. By default, the effect produces a straightforward one second delay, with fairly high feedback. Play a note through it - you should hear it echo once a second for quite some time. The GUI consists of two sliders, a number of knobs and a smaller number of buttons. The shorter of the two sliders and the cluster of edit boxes around it control the delay time.
Using Augustus Loop Using the controls Knobs Basic use of the knobs is to click on them and drag the mouse up and down. However you can obtain different results by holding keys as follows: • • Shift : Values change more slowly as you move the mouse. Command1 (Mac OS X)/Alt (Windows) : The knob assumes its default position. Sliders Sliders behave similarly. • • Shift : Values change more slowly as you move the mouse. Command : The slider assumes its default position.
Overview Here's a block diagram of the 'circuitry' of Augustus Loop. It can help to visualise this when understanding the effect of some settings, particularly the delay time settings.
Delay Time The delay time controls consist of a slider and four text boxes. Max Delay This field sets the maximum delay time the plug-in is capable of using. The highest value that you can enter here is '3600', which is an hour (60 minutes times 60 seconds). NB Changing this value causes the plug-in to reallocate its delay buffers. This can be a slow operation, especially if the value entered is large.
Delay Taps A total of nine knobs make up this section. Eight of these are in pairs, giving you control of delay time and feedback level for each of the four taps. Delay Time Sets the delay time for the tap, expressed as a percentage of the master delay time set in the delay time section. Delay Level Sets the feedback level for the tap. This is the same as the actual output level of the tap in our architecture. The four taps let you feedback sound between the two stereo channels.
Pitch Pitch This text field simply reflects the current pitch value. You can type numbers directly in here. The values represent semitones (12 semitones is an octave). Pitch Slider The slider controls the speed of the virtual tape, over a range of two octaves i.e. you can go from half-speed up to double-speed. If you hold the Option (Mac OS X)/Ctrl (Windows) key while dragging the slider, it will only move to whole number values.
In a more complex example, say the tap times are set to 100%, 75%, 50% and 25%. When the tape is reversed, the tap times become 100%, 125%, 150% and 175%. Note that the display of the tap times values does not change, only their internal interpretation. Because in reverse delay times can reach 200%, you should try to make sure that the maximum (allocated) delay time is set to at least twice the actual delay time. Note that the speed at which the tape reverses is controlled by the inertia setting (below).
Filter Cutoff Controls the filter cut-off frequency (in Hz). Q Controls the filter resonance. Type Allows you to smoothly change between the following filter types: • • • • Thru - no filtering Low - lowpass filter Band - bandpass filter High - highpass filter LFO Speed Controls the speed of the filter LFO (in Hz), which modulates the cutoff frequency. LFO Depth Controls the depth of the filter LFO. The value is a number of octaves to sweep the cutoff frequency by.
Shape Controls the shape of the saturation. At '1.0' the effect is that of soft saturation and clipping. At '0.0' the effect is of hard digital clipping. Note that at shape settings other than '0.0', some alteration is applied to the signal even if the Saturation level is zero. Tape Sim The Tape Sim controls are displayed by clicking on the ‘Filter’ button at the top left of the filter controls.
Sync The controls in the Sync group (to the right of the delay slider) allow you to sync the delay time to the tempo of the host application, or to another instance of Augustus Loop. (NB not all plug-in hosts provide tempo information.) Host Tempo This button activates the host tempo mode. Beat Divisor & Triplet The 'Beat Divisor' drop-down menu lets you set the units in which you want to control the loop length. '1/4' corresponds to quarter notes, '1/8' to eighth notes etc.
• • Tempo - the plug-in takes its tempo information from the group master, instead of from the host application. If you enable ‘Host Tempo’ as above, the loop length will be based on the master’s tempo, not the host tempo. This is typically useful if you want the loop times of two Augustus Loops to be rhythmically connected, but not actually the same. Time - the plug-in takes its delay time directly from the delay time of the group master.
Levels Dry Controls the amount of the input signal that is fed directly to the plug-in's output. The level meter to the left of the ‘Dry’ knob shows the level of the signal entering the plug-in. The slider to the left of the meter sets the trigger level (see below). The small button at the bottom right of the meter increases the meter sensitivity, which can be useful when setting the trigger level on signals with a low noise floor.
Loop Tap Rec When first clicked, • • • silences the effect output sets the pitch to 0.0 turns off the 'reverse' feature When clicked again, sets the delay time to the interval between the two clicks, and immediately begins playback of the signal recorded in that time. Hold Rec Same as 'Tap Rec', except the delay time is set by the length of time the button is held down. Tap Length & Hold Length Similar to 'Tap Rec' and 'Hold Rec' except that the only effect is to change the delay time.
Clear Loop Wipes the virtual 'tape'. Because this can be a lengthy operation (especially when the max delay time is large) you should not expect to press this button and immediately be able to begin recording again. During the clear operation, the Clear Loop button remains lit, and the output level meters show a decreasing level to indicate progress. Misc Fix Delay Normally when you change the pitch the delay time is changed as well. E.g.
The menu below the indicator allows you to automatically clear the loop (i.e. as if you pressed the 'Clear Loop' button) when the fade out is complete. There are two settings (plus 'No Clear'): • • AutoClear - simply activates loop clearing after a fade out. AutoClr2 - activates loop clearing after a fade out, then does an instant fade-in after the loop is clear. Punch In/Out These controls are used in conjunction with Tap Record, and affect the exact time that the start and end of recording take place.
Inertia Pitch Inertia The ‘Inertia’ knob controls how long the tape speed takes to react to changes in pitch (including reversing and stopping the tape). Low inertia settings cause the pitch to change more quickly. Delay Inertia The 'Inertia Free' button controls how Augustus Loop behaves when a delay time is changed. (This includes a change to the overall delay time setting, or to one or more of the delay tap times.
Also note that if you want a totally clean loop, you should also set the filter to 'Thru' and turn off the saturation. NB setting the saturation knob to zero is not the same as turning it off (by pressing the button). Likewise all the Tape Sim controls (Crunch, Drive and Hi and Lo Amnt) should be zeroed. Record Offset Record Offset is a feature designed to help with latency issues when using Augustus Loop as a looper in live situations.
Waveform Display The waveform, or ‘tape’, display is shown and hidden by the small button marked ‘Tape’ just above the Delay Time controls. Showing the waveform display hides the entire top half of the GUI the Filter, Inertia, Ping-Pong and Pitch groups. The displays shows the stereo waveform on Augustus Loop’s virtual tape - the left channel is on the top. Five lines are overlaid on the waveforms. The red line shows the write position, at which audio is recorded onto the tape.
Augustus Loop Fx Loop Introduction The normal Augustus Loop configuration is a stereo or mono-to-stereo plug-in. As of version 1.8.0, another configuration is also available; known as Augustus Loop Fx Loop, it’s a 6-in 6-out plug-in. The 6 inputs and output are arranged as 3 stereo pairs. (At this point it may help to refer to the overview diagram earlier in this manual.) The first stereo pairs (inputs 1&2 and outputs 1&2) are the regular inputs and outputs that the stereo plug-in configuration has.
leaves it - i.e. it affects the delay time. The compensation controls allow you to make up for this, so the delay time you specify is the one you actually get. Note this is not the same as the latency usually meant by “plug-in latency” in DAWs, which refers to the internal latency introduced by a given plug-in. In the case of Augustus Loop’s fx loops, the latency is introduced by the host’s buffering of plug-in inputs and outputs.
Preferences Pressing the ‘Prefs’ button brings up a dialogue where various preferences are set. These global settings are shared by all instances of Augustus Loop, and are not stored with presets. The top section shows the product version. The Windows version also shows which SSE variant has been detected (there are optimised versions of the core processing routines for systems with SSE2). The central section will show your serial number once you’ve bought a registration.
OSC Base Port Sets the base port number for OSC. See the section on OSC, below. MIDI output This checkbox enables or disables the output of MIDI clock messages (see above). The Windows version also has a drop-down menu for choosing which MIDI output port to send the MIDI clock on. Rounded tempos (for Live) Note - the following applies to version 7.0.10 of Ableton Live and earlier versions. Version 7.0.12 changed the behaviour of the application in this area, but it also introduced other issues.
Ignore AudioUnitReset This setting applies to the Audio Unit version of the plug-in only. Audio Unit plug-ins usually have the ability to be ‘reset’ by the host application, which usually occurs when the transport is started or stopped (e.g. Logic resets AUs on transport start, Ableton Live resets AUs on transport stop), and is intended to clear any delay or reverb tails which might be undesirable when re-starting playback at a new position.
Skins Preamble From Augustus Loop v2.0.0 onwards it is possible to completely redefine the plug-in’s GUI. Typical uses for this would be to simplify the GUI to show only the parameters you need to access when playing live, or to add new buttons which perform actions specific to your needs. Or maybe you just don’t like the default colour scheme. The skin GUIs are defined by a script file, and by any graphical resources the script uses (e.g. images for the buttons and knobs).
Anatomy of a Skin Skins use the standard Mac OS X bundle system. Since this is essentially just a folder hierarchy with a special structure, this works just fine on Windows as well.
return 773, 491 end getFont() This function should return a list of fonts that the GUI should attempt to use as the general purpose font for e.g. group labels. The first font in the list that the system can successfully find and load will be used. Each entry in the list is a Lua table, defining the file name and point size of the font. All the standard locations are searched for the font file - on Mac OS X, that’s Library/Fonts in the user, local and system domains; on Windows, it’s $WINDIR \Fonts. E.g.
Functions callable from createUI() The following functions are defined by the skin system, and may be called from your createUI() function. setBannerPosition( y [, showVersion ] ) Sets the vertical position of the banner, which is where the plug-in displays its version information, and the name and value of the parameter currently being edited. An optional second parameter lets you disable the version information and only show the parameter information, which is useful for small skins.
You can create multiple renderers, but there is a concept of a ‘current’ renderer. When a new slider is created, it automatically associates itself with the current renderer. The current renderer is the one named ‘theSliderRenderer’. E.g.: atlas = texture( "buttons.png" ) theSliderRenderer = sliderRenderer( atlas ) buttonRenderer( texture ) As sliderRenderer(), but for buttons. The current button renderer is named ‘theButtonRenderer’.
y = y + miscButtonsGroup:height() group:bounds() Returns the extremities of the group. E.g. local minx, miny, maxx, maxy = delayTimeGroup:bounds() group:setPosition( x, y ) Sets the position of the group within the GUI. E.g. miscButtonsGroup:setPosition( x, y ) group:setVisible( v ) Sets the visibility of the group. The parameter ‘v’ should be a boolean value (i.e. true or false). E.g. recordOffsetGroup:setVisible( false ) group:isVisible() Returns whether the group is visible or not. E.g.
u, v specify the location in the renderer’s image of the sub-image to be used to draw the button. The optional ‘hold’ parameter lets you create a button that sets the parameter value to 1.0 while the button is held down; without this option, the button toggles the parameter value each time it’s pressed. E.g.
x, y, w, h specify the position, width and height of the button. u, v specify the position of the sub-image within the renderer’s image to be used to draw the button. E.g.
delaySlider( x, y, w, h, orient, u, v, du, dv ) Creates Augustus Loop’s slider that controls the delay time. The parameters correspond to those of the ‘slider’ function. control:setVisible( v ) Sets the visibility of the control (where ‘control’ is a knob, button, slider etc.). The parameter ‘v’ should be a boolean value (i.e. true or false). E.g. theWaveformDisplay:setVisible( false ) control:isVisible() Returns whether the control is visible or not. E.g.
u, v specify the position of the sub-image within the texture image to be used to draw the meter. w, h specify the meter’s width and height. levelMeters:add( id, x, y ) Adds a level meter to be drawn by the levelMeter object. ‘id’ should be one of "InputRmsLeft", "InputRmsRight", "FxRmsLeft" and "FxRmsRight". E.g. meters = levelMeters( atlas, 512-5, 0, kMeterW, kMeterH ) meters:add( "InputRmsLeft", x, y ) waveformDisplay( x, y, w, h ) Creates a graphical representation of the plug-in’s virtual tape. E.g.
Functions callable from luaButton functions These functions should not be called from your createUI() function, but can be used within functions invoked by any luaButton (see above) that you create. getParameter( param ) Returns the value of the plug-in parameter. ‘param’ can either be the parameter name (as used in all the control creation functions above) or the parameter ID (as returned from getParameterID()). Using the ID is more efficient.
sendOSC( address, path [, format ] [, values ] ) Sends an OSC message. ‘values’ is an optional array of data items to be sent with the message. If ‘values’ is used, then ‘format’ is an optional string that indicates how the items in the values array should be interpreted. This is required because Lua treats all numbers as being of the same type, whereas OSC differentiates between integers and floating point values. The number of characters in ‘format’ should be the same as the number of values.
Pre-defined Global Values The system defines some values before calling your script, which you can use to make the script’s behaviour dependent on, for example, what kind of computer you’re using. These values (which are pretty self-explanatory) are: • • • • • • • • • isMac isWin isVST isAU isFxLoopVersion majorVersion minorVersion dotVersion version The plug-in’s version number is of the form x.y.z (e.g. 2.1.4) where x is the major version number, y is the minor version number, and z is the dot version.
MIDI control Most of Augustus Loop's controls can be controlled via MIDI. There is a preference setting in the 'Prefs' dialog that controls whether Augustus Loop responds to MIDI events on all channels, or just on channels 1&2. In the latter case, the plug-in responds to MIDI controller messages on channel 1 (see table below) and to note on messages (to alter the pitch setting) on channel 2. This can make it more convenient to play a soft-synth and control Augustus Loop from the same keyboard.
OSC Control From version 2.0.0 Augustus Loop can be controlled via the Open Sound Control (OSC) protocol. If you’re new to OSC, start by visiting opensoundcontrol.org. Two settings control what port Augustus Loop uses to listen on for OSC commands. One is the base OSC port, set in the preferences. The second is the OSC Port Offset control. If the port offset is set to something other than ‘Off’, then the two numbers are added together and the result used as the port number. E.g.
replies to 10.0.0.2:7000 with (assuming parameter 14 has the value 64.0) /foo 14 64.0 /getAll s:returnUrl s:returnPath Behaves exactly as if a /get message was received for every parameter. /getNumParameters s:returnUrl s:returnPath Responds by sending a message back to the returnUrl and returnPath with the parameters i:numParameters where ‘numParameters’ is the total number of parameters defined by the plug-in. E.g. /getNumParameters osc.udp://10.0.0.2:7000 “/foo” replies to 10.0.0.
Lua function, as can best be managed given the varying limitations of the two. Specifically, the following table describes the mapping from OSC types to Lua types: OSC Lua bool bool float number double number int32 number int64 number string string nil nil /call s:func s:returnUrl s:returnPath ... As /exec, but also responds to the returnUrl and returnPath with the results of the Lua function call.
MIDI & OSC Scripting Preamble From Augustus Loop v2.0.0 onwards it is possible to extend the plug-in’s MIDI & OSC functionality via user-writeable scripts. Indeed, the standard MIDI functionality described above has been re-implemented using such a script, which you can use as reference for your customisations. The language used for the MIDI scripts is Lua. You will find a complete description of the language, and some useful tutorials, at the Lua website: www.lua.
Script locations Augustus Loop looks for MIDI & OSC scripts in standard locations. Scripts must have the filename extension “.lua”.
pitch = getParameter( “Pitch” ) pitch = getParameter( paramID_Pitch ) setParameter( param, value ) Sets the value of the plug-in parameter. See the description of getParameter() for the meaning of ‘param’. E.g. setParameter( “Pitch”, 12.0 ) setParameter( paramID_Pitch, 12.0 ) getParameterMinMax( param ) Returns the minimum and maximum values allowable for a plug-in parameter. See the description of getParameter() for the meaning of ‘param’. E.g.
E.g. sendOSC( "osc.udp://localhost:7001", "/foo" ) sendOSC( "osc.udp://localhost:7001", "/foo", { 3, 5.2, "hello" } ) sendOSC( "osc.udp://localhost:7001", "/foo", "ifs", { 3, 5.2, "hello" } ) Note that the second example sends two floats and a string; the third sends an integer, a float and a string. requestAllNoteOn( function ) Request that the given function be called in response to any MIDI note on event. E.g.
requestAllPolyPressure( function ) Request that the given function be called in response to any MIDI poly pressure (polyphonic aftertouch) event. E.g. local function handlePolyPressure( channel, key, value ) -- do stuff end requestAllPolyPressure( handlePolyPressure ) requestNoteOn( note, function ) Request that the given function be called in response to a MIDI note on event matching the given note number. E.g.
local function handlePC( channel, value ) -- do stuff end requestProgramChange( 2, handlePC ) requestPolyPressure( key, function ) Request that the given function be called in response to a MIDI poly pressure (polyphonic aftertouch) event on the given key. E.g. local function handlePolyPressure( channel, key, value ) -- do stuff end requestPolyPressure( 60, handlePolyPressure ) requestPitchWheel( function ) Request that the given function be called in response to a MIDI pitch wheel event.
end requestTimedCallback( 2.0, timerTimeOut ) requestPeriodicCallback( interval, function ) Requests that the given function should be called every interval seconds. Returns a timer object that can be passed to cancelTimer() (see below). E.g. local function timerCallback() print( "tick" ) end requestPeriodicCallback( 1.0, timerCallback ) cancelTimer( timer ) Cancels a timer that was created with requestTimedCallback() or requestPeriodicCallback().
The OSC packet should include a float value after the path, which will be the value for the parameter. E.g. registerOSCPathForParameter( "/1/fader1", "Env 1 Scale" ) registerOSCPathForParameterNormalized( path, param ) As registerOSCPathForParameter() except that incoming OSC values in the range 0-1 are renormalized to control the full parameter range between its minimum and maximum values.
Windows The system OutputDebugString API. Use an application like Sysinternal’s DebugView to view it.
Version History v2.4.1 28th October 2013 • • First AAX release. Fixed skinning, broken by v2.4.0. v2.4.0 (Windows) 20th August 2013 / (Mac) 3rd December 2012 • Maintenance release rolling up a lot of minor enhancements and stability improvements to the code shared with Silent Way v2. v2.3.4 4th November 2011 • First Windows 64 bit release. v2.3.3 1st March 2011 • Fixed an issue introduced in v2.2.0 which would cause unpleasant audio artefacts at certain pitch settings. v2.3.
• • • Fixed compatibility with OS X 10.5. Worked around a bug in Digital Performer 7.1 which would cause a crash when the plug-in prefs dialog was used. Generally improved stability of the Cocoa UI. v2.2.0 9th February 2010 • • First 64 bit AU release. 32 bit AU now uses a Cocoa UI if the host supports it. v2.1.1 24th August 2009 • Added new OSC commands (registerOSCPathForParameter() and registerOSCPathForParameterNormalized()), primarily for compatibility with TouchOSC. v2.1.
• • • • • • • • • • • • • Added waveform display. The ‘Max Delay Time’ parameter now has a smaller minimum value (1.0 seconds) and is not rounded to the nearest 10 seconds. Added Tape Read Mode parameter. The Freeze Loop function is much improved. A small crossfade is now applied when activating Clear Loop, and when Clear Loop ends. The Input Level parameter is now protected against sudden changes, which previously could result in audio artefacts.
• Further enhanced the plug-ins’ resilience to font installation issues. v1.7.1, 17th March 2008 • (Mac OS X versions only) Fixed a possible crash if a system font is not installed in the expected location. v1.7.0, 14th March 2008 • • • • • First Windows version. First Mac OS X VST version. New GUI. Fixed various filter problems. In particular, the filter cutoff was being limited to about 2kHz - now the full range up to 8kHz is usable.
v1.4.3, 13th July 2005 • • • Tempo is calculated and displayed even if MIDI clock output is disabled. MIDI clock generation is completely rewritten internally, and is generally more compatible with host apps. Once tap recording has been performed, changing the beats/beat divisor/triplet controls changes the delay time accordingly to maintain the tempo calculated at the end of tap recording. v1.4.2, 11th June 2005 • Fixed some potential issues with Logic's AU validation. v1.4.
• • • • Fixed issue with 48kHz operation. Fixed behaviour of MIDI remote control of pitch parameter. Fixed problem with Freeze Loop button staying on after tap record. Rebuilt with Core Audio SDK 1.3.1. v1.0, 5th June 2004 • ! First release.
Release Notes Issues with keyboard input There are known issues with some hosts, in particular Ableton Live, and all plug-ins that require keyboard input. (Augustus Loop is such a plug-in.) Ableton have done something to address this issue in Live 7.0.2. See • • http://www.ableton.com/forum/viewtopic.php?t=84434 http://www.ableton.com/pages/faq/options_text Basically you can enable keyboard presses in plug-ins by creating or editing a file called Options.
Contact The Expert Sleepers website is here: http://www.expert-sleepers.co.uk/ Or you can email info@expertsleepers.co.uk Or you can use the forum, which is here: http://www.kvraudio.com/forum/viewforum.
Acknowledgements The software described in this manual makes use of the following open source projects. The author is greatly indebted to them for their efforts and generosity. Below are reproduced the various copyright notices and disclaimers that accompany these software projects, in accordance with their terms of use. Lua Copyright (C) 1994-2008 Lua.org, PUC-Rio.
glew The OpenGL Extension Wrangler Library Copyright (C) 2002-2007, Milan Ikits Copyright (C) 2002-2007, Marcelo E. Magallon Copyright (C) 2002, Lev Povalahev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. FreeType The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg.