Ardour 3 beta 4 arrived after more than 3 months of development activity, and more than 1000 commits to the source code repository. Beta 4a followed rapidly after a deadlock was discovered when pasting regions, and incidentally gained support for MIDI region export along the way.
- Linux 32 bit http://ardour.org/files//Ardour_32bit-3.0beta4a_12406.tar
- Linux 64 bit http://ardour.org/files//Ardour_64bit-3.0beta4a_12406.tar
- OS X Intel (Tiger, Leopard, Snow Leopard, Lion) http://ardour.org/files/Ardour-3.0-12406.dmg
This is the last beta release before 3.0 is actually released. As of this release, 3.0 is now in "feature freeze". There are many bugs to fix and UI details to fix/improve, but there will be no new functionality added before the release. We know that there are many things about 3.0 that need to be improved, and they will be, but the big push is now to get to a release that we can stand behind and get more users switched over to, thus allowing us to move to post-3.0 development.
As usual, there are a gaggle of new features, as detailed below.
Significant New Functionality
New Crossfade Model
In this beta release of Ardour3, we have switched to a new model for Crossfades that is derived from work done by Ben Loftis of Harrison Consoles for Mixbus. The older model, which was inherited from Ardour2, was quite complex at the code level and removing it makes other things simpler too. The two models are very different, however:
- In the old model, a crossfade was an independent object that described the gain relationship between the start of one region and the end of another.
- In the new model, crossfading simply uses the existing fade in (or out) curve of a region, and applies a complementary fade out (or in) to any material "below" the region. Put differently, in the new model crossfading does not happen between two specific regions, but is instead the gain management applied to manage the start (or end) of a region and anything "below" it.
The new implementation reduces the number of standard fade shapes to just 5: Linear (for crossfading strongly correlated audio), Constant Power (for general purpose crossfades), Fast, Slow and Symmetric (the last 3 all have a different feel, but are somewhat "musical").
It is now possible to drag the end of an xfade that isn't defined by the start (or end) of a region, and sensible things will happen. More work is planned for the future to allow full, easy and fast control of crossfades. The old crossfade editor is no longer accessible, and will be replaced in the future by a simpler but more powerful tool.
If you have an existing Ardour 3 session that uses crossfades for specific effects, you should make a copy of the entire session folder before using it with this release.
Reimplementation of support for Mackie Control Protocol devices
Ardour2 and Ardour3 have had existing support for devices that use something like Mackie Control Protocol such as the Mackie Control Pro, the Logic Control and the BCF2000. Unfortunately, this support was somewhat buggy and had a number of issues. As a result of unexpected access to the relatively new Solid State Logic Nucleus control surface, I decided to invest the time and effort to revamp the support for devices like this. In the end the code has been almost entirely reimplemented. So far we have only really tested with the Nucleus and the Steinberg CMC series, but before 3.0 is released we plan to ensure complete out of the box functionality with the Mackie Control Pro and Behringer BCF2000 as well. Well-tested and operational features:
- Support for both Mackie and Logic variants of the control protocol
- Full access to gain/mute/solo/pan, bank-by-channel, bank-by-track, metering
- Full fader and LED feedback from Ardour
- GUI dialog to bind any surface button to any Ardour function
- Shuttle/Zoom with the jog wheel
- Strip locking
- Per-device info files
- Profiles allow task-specific button bindings for different workflows
LV2 Plugin API Support
- Ardour now uses the released versions of the lv2core, serd, sord, sratom, lilv and suil libraries, and no longer requires pre-release versions of these libraries. It will no longer build against old versions of these libraries and no longer has any support for the slv2 library that was replaced by lilv.
- Many fixes for support of different types of LV2 GUIs (plugin editors/interfaces)
- Support for the following extensions:
- worker thread, including sample-accurate synchronous execution during export
- event MIDI in/out
- atom MIDI in/out
- instance-access, data-access
- state, including full non-destructive file saving, and saving of all atom types (via lilv)
- uri-map, urid
- ui, with support for Gtk/Qt/X11 UIs (via suil) and external UIs
- ui control "touch"
- full round-trip communication between ui and plugin for messages (e.g. atoms)
- display plugin and port documentation in UI as tooltips
- presets (loading only)
- latency
- support for ports specially designated for BPM and freeWheeling
Other
- support a grid of beats/64 and beats/128
- Freezing tracks is now more generally possible, but will only operate on the processing in a track/bus as far as the the first send/return/insert or a plugin with a different I/O configuration than the input of the track/bus.
- Copying of sends is now better behaved, including retaining the same connections as the original (with new names, obviously)
- Add user metadata. User metadata is edited from the same dialog and read/writable using the same mechanism as session metadata, but it is stored in the ardour.rc file instead of with the session. Importing metadata from another session does not change user metadata.
- Add 44 MIDNAM files for a variety of external hardware synthesizers, thus providing named patch/program management for this hardware
- MIDI region export
GUI Improvements
- Remove magic number voodoo when saving zoom focus/snap settings to instant.xml etc. (this has a minor breaking-behaviour for existing sessions)
- Keep track of grid type/settings in and out of note edit mode and switch back and forth, thus allowing independent grids while working at the note or region level
- Make region gain line visibility global, not per-region
- Display fader and send gain automation in dB using a logarithmic fader.
- Add base MIDI map for the Behringer BCF2000 in Mackie emulation mode.
- If there is one invert button for many channels, always use a menu; in this case, also partially light the invert button if only a subset of channels are inverted
- Show the number of channels in brackets when there is a single invert button for multiple channels
- Make route group dialog resizable
- Make ArdourPrompter entries resize when the window is resized, rather than the label
- Mark rec enable controls as toggling, thus ensuring proper behavior with various controllers
- Always show loop markers when looping is initiated
- Add motorised attribute to DeviceInfo for generic MIDI maps so that we can specify if a surface is motorised, and as such will keep its phyiscal controls in sync with Ardour's controllables at all times. If this is not the case, we enable the code to avoid jumps when controls and controllables are out of sync. Mark the BCF2000 as motorised
- Expand just entry fields when the metadata dialog is expanded and fix label assignments
- Tweaks to improve the Freesound browsing/import dialog
- Allow the number of recent sessions to be configured
- Put a tooltip in the recent session display.
- Remove submenu-only items from the keybindings dialog
- Move text in rulers up by a few pixels for MUCH better appearance
- Make the close button in the config info dialog work.
- Handle default session dir a little better
- Force the creation of a new session on first run of Ardour 3
- Visual state management now uses ctrl-Fn (Fn is a function key such as F1) to save, Fn to goto
- Save and restore nudge clock value
- Reduce the width of the line separating tracks in the editor summary line (by-product: slightly more space appears to be there between the colored blocks representing regions too
- Make toggle MIDIControllables with program changes only respond to the appropriate program change
- Make MIDI Patch Manager search in $user_config_dir/patchfiles for midnam files as well as the per-session equivalent
- Add tooltips to plugin controls in the processor box
- Relabel the "precise" button does in the timefx dialog to make it clear what it does
- Don't leave internal edit mode when clicking on an automation region view
- Make stereo panners move right with the mouse
- Reshow time selection when zooming in object-range mode
- Make automation thinning factor controllable at run time
- Fix some packing issues in the monitor section when using high-channel-count master/monitor busses (eg. with ambisonics)
- Force small screen profile if ARDOUR_NARROW_SCREEN is set in the environment
- Add Primary-Shift-P as shortcut for preferences dialog
- Support adding plugins via keyboard (Enter).
- Remove seemingly not-that-useful menu item, since edit mode can be changed from the drop-down in the toolbar.
- Remove a couple of uses of the word Route in the UI.
- Make it possible to select very short regions
- Use Later / Earlier in descriptions of nudging and some playhead movements, instead of Forward / Backward
- Display hardware IO individually in the port matrices unless we are in _show_only_bundles mode.
- Embolden the labels of connection matrix tabs when they have connections
- Reorder editor route list columns to put visible and active first
Internal Improvements
- The installer will now create a link to the program in /usr/local/bin to allow starting from the command line.
- If the installer or uninstaller is not running as root, they will now attempt to use both sudo and su to get root access. This means double click install now works on systems that don't have sudo installed or configured.
- Fix Ardour/VST build
- Drop boost::signals2 and replace with a home-grown solution which continues to rely on boost::function and boost::bind for the hard stuff.
- Fix up a substantial mess with the operation of toggle-zoom and related actions, partially caused by XMLNode semantics
- New design for processor drag-n-drop
- Tweak audio track importer to use the modified xml++ API for XPATH searching
- Some deep changes to xml++ in which we retain a C-level xmlDocPtr as a member of an XMLTree objects. this allows us to do repeated XPATH searches (as in the midnam parser of libmidi++) without constantly rewriting an entire tree into memory to recreate a new xmlDocPtr with which we can search.
- A lot of tweaking and fixing for the MIDNAM parsing code so that it correctly handles all 44 sample files from digicake.com/midnams.
- Draw all automation points, rather than trying to use a heuristic to show some at any given zoom level.
- add "centrally-parsed" property to MIDI::Port so that we can avoid the MidiUI loop from handling input for every MIDI port that Ardour creates
- various fixes based on feedback from Coverity
- A few tweaks to make Ardour build in GCC -std=c++0x mode
- A few tweaks to make Ardour build with GCC 4.7
- Use a list of ControlPoints to hold the automation selection, rather than a time range. Simplifies the code a fair bit simpler, and should fix some unexpected behaviours, especially when cutting automation points.
- Use a read-write mutex for playlists and remove the single bit of design that used to require a recursive mutex.
- Clarify behaviour of Region::read (overwrites its buffer) wrt Region::read_at (mixes into its buffer). Fixes various Rhythm Ferret bugs.
- Remove virtual inheritance of sigc::trackable by Receiver and AbstractUI, done by changing Gtkmm2ext::UI to use composition (HAS-A) rather than inheritance (IS-A) for Receiver
- Use correct synchronization when starting up a BaseUI event loop thread so that tests that start/stop quickly do not encounter a race condition
- Add --generic flag to wscript to facilitate 32 bit builds on 64 bit OS X
- Stop using old GNU config.guess script and use python's builtin os.uname() values
- Fix crashes on certain processors by correctly using posix_memalign() in general, and specifically in connection with assembler code that saves the FPU flag state.
- Major rationalization of use of search paths. ardour now has just 4 functions used to define how external resources are located: ardour_config_search_path() (for system or user specific configuration data), ardour_data_search_path() (for machine, user and system independent data), ardour_dll_directory() (base directory where shared libraries are found) and user_config_directory(). These are now used throughout the code. the config, data and dll paths/directories can be overridden by environment variables. the user config dir is added as the first element of the first two search paths, and use selectively when searching for a few other things.
Bugs Squashed
- Slightly tweaked patch from colinf to avoid crashes on out-of-range LADSPA port indices
- Fix crash on stem export of 4-channel tracks
- Prevent duplication of search path elements when symlinks are involved
- allow shortcut/accel for set-mouse-mode-draw to work
- Fix auto-connect of bus outputs
- Fixes some misplaced BBT-time based pastes.
- Fix up naming of Sends/Returns when copying them
- Fix crash when display MIDI region context menu
- Fix crash when setting an LV2 preset that refers to ports via incorrect names
- Use an AutoSpin rather than a combo box for plugin parameters marked up as scalePoint with fewer labels than there are possible values for the parameter
- Prevent a deadlock when removing an aux send
- Fix bug in decoding URL's
- Fix reads off the end of the data array during transient analysis
- Fix reference to MIDI track after it has been deleted
- Fix double-delete of peakfile descriptor
- Fix failed assertion with plugins with only an audio output are inserted on a MIDI track
- Don't abort if mis-matched processors are found; a vaguely satisfactory workaround for crashes when loading sessions with missing plugins.
- Don't crash when hovering over a MIDI region
- Possibly fix loss of MIDI notes when changing existing tempo marks
- Fix freeze operation crashes by obtaining process buffers in freeze thread (and then dropping them) rather than just setting up the per-thread object that stores them
- Fix linear interpolator to avoid error accumulation.
- Get the _note_mode set up correctly in a MidiDiskstream before the initial buffer fill, so that percussive mode tracks play properly
- Fix crash during region spectral analysis
- Fix the focussing of newly-created marker name entries when Config->get_name_new_markers() is true.
- Stop crash if an error message is generated before the style RC file is loaded
- Don't load irrelevant symlinks when trying to discover control protocol shared objects
- Fix unnecessary backups of session files.
- Imported sources should be marked as non-writable and non-removable, always
- When resetting the import dialog based on selceted track counts, change the file chooser filter to match a clear selection of a a particular track type
- Make solo lock/safe button only respond to mouse button1
Translations
- German update from Edgar Aichinger
Contributors
Carl Hetherington, David Robillard, Colin Fletcher, Nick Lanham, Joern Nettingsmeier, Paul Davis