[ardour-dev] ardour-0.9beta30 released

Paul Davis paul at linuxaudiosystems.com
Mon Sep 12 07:45:31 PDT 2005

After months and months of delay, I am pleased to release


While most of my ardour-centered time was focused on getting the
devilish problems with plugin latency compensation and its interaction
with aligning captured material, others stepped up to help fix a
metric ton of bugs major and minor.  Major credit must go to Sampo
Savolainen who stepped in as I stepped out to work on many, many bug
fixes since the last release, and then pulled the SSE optimization
work out of his left sleeve (or somewhere). The work that he has done
over the last few months has really kept Ardour development
moving. Thanks! Also thanks to Nick Mainsbridge who has also kept a
steady trickle of important fixes and changes coming.

If there are no major issues reported with this release (there may,
for example, be a problem with some versions of gcc4), we will move
rapidly to repackage this as 0.99, and then 1.0. No more bugfixes are
planned on that path, but if they are minor and clearly correct, I
will accept and apply them.


   * plugin latency compensation now working correctly (we believe)
      This really requires JACK 0.100.0 or above to work
      properly, but even without that, they result in notable improvements
      in the way Ardour aligns newly recorded material.

   * new ardour_ui.rc file: Ardour has a new skin (its been on
      ardour.org/index.php for a while now, so many of you have seen it).
      Many thanks to Doug Mclain for his efforts with the mind-numbing work
      involved in this change.

   * SSE optimization (Sampo Savoleinen) - under some circumstances,
       almost a 50% drop in JACK "DSP load". *NOT* enabled by default,
       see notes at end on how to build and use them.

   * alignment options for newly captured material are now per-track.
      NOTE: they may not be set correctly for existing sessions.
      To change, context click in the track controls area. See
      the "Alignment" submenu. 90%+ of the time, Ardour will
      select the correct answer by itself.

   * mixer window does not appear by default (we may change this for 0.99)


   * DEBIAN scons option renamed SYSLIBS

   * MMC shuttle fix from CKG (corrects error in parsing MMC speed

   * massively increase speed of moving end marker (and probably
     other markers)

   * add option to control -12dB gain reduction during ffwd/rew

   * end marker does not reset when overdubbing "early" in a session

   * removed redundant "source" info from state files

   * fix for the displayed sizes of horizontal meters (e.g. in some
     plugin GUIs)

   * update info on gettext version required (done online too)

   * waveform color is now controllable via ardour_ui.rc

   * fix for potential crash bug in canvas-waveview,
      caused by rounding a float incorrectly.

   * fix for occasional waveform wobbling induced by the playhead or
      other "object" moving over the regions. this was
      caused by the opposite rounding error for waveviews :)

   * shift-button1 click on faders once again restores to unity gain

   * mousewheel now shifts by approx +/- 3dB/click, as before the
      new pix scrollbars. remember that control and alt-control will
      provide finer and much finer control, respectively.

   * correct saving of automation track heights

     NOTE: the new code ignores old "shown" settings for
     automation tracks. when used on sessions where automation
     tracks were saved in a visible state, they will be
     invisible now. 

   * remove + 0.5 rounding expressions from waveform renderers
     (believed to be unnecessary)

   * fix persistence of hidden automation tracks

   * generate ardour.rc from ardour.rc.in, reflecting
     platform-specific options

   * very small fix so that the right shift button also works for keyboard  

   * when switching clock modes, drop keyboard focus (prevents
       losing keyboard focus after accidentally starting a
       clock edit)

   * fix up labelling of automation mode buttons when a track
       has ended up with no outputs (e.g. after a h/w interface

   * major fixes for waveform display (ardour <3 thomas
     charbonnel :)

        - NOTE: some peakfiles generated by ardour in the past are
	 incorrect. this only affects recordings of extremely
	 low level signals (in my and thomas's case, signals
	 generated by the noise in our on-board soundcards).

	- fixes concern primarily near-end-of-file conditions,
	  and variations in the display when changing zoom level 

   * avoid needless malloc/free during waveform cache filling

   * generalize import thread to "inter-thread information" handling
     and use for track freeze progress bar/dialog

   * if a crossfade is the only one present at a context click, 
     its entry in the context menu says "Crossfade", rather than 
     "Region Name 1 -> Region Name 2"

   * widen the Snap To combo to take stupid "FUDGE" size into account

   * begin work on using mouse-click to select control points (instead
      of just rubber-band drag)

   * fix incorrect positioning of region "zero line" that causes odd
     overwriting of the thin black line between tracks      

   * normalize to 1.0 - FLT_EPSILON, not 1.0     

   * prevent leak (and eventual "Critical: MIDI pool out of memory"
     error) caused by unconditionally allocating a new MIDIRequest
     for MMC messages that are never sent

   * new ffwd/rew bindings:
         <in mixer>
	 Left -> ffwd
	 Shift-Left -> rapid ffwd
	 Ctrl-Left -> slow ffwd
	 Right -> rew
	 Shift->Right -> rapid rew
	 Ctrl-Right -> slow rew

   * start of global RGBA color map for all canvas items
      (doug plans to finish filling it out)

   * fix for "ghost" waveforms in automation tracks that were not
     in sync with their parent waveforms

   * complete inversion of in/out counts for port inserts. for a
     a port insert, the desired number of *outputs* is the number
     of inputs it is expected to receive, and the desired number
     of *inputs* is the number of outputs of the track/bus, more
     or less.

   * alter left/right ordering of port insert GUI so that the
     outputs are on the left ("first" for most users), and
     inputs ("returns") are on the right ("second" for most users).

   * hide the "use N of available h/w input/outputs" options 
     for stereo audio hardware

   * fully expose the auto-connect model in the Misc. tab of the
     options editor, just as it is done in the new session dialog.

   * add tooltips for automation track control buttons

   * fix design problem with Locations state

   * prevent crash when attempt to cut a range from a bus track

   * more changes to export to avoid crashes when upsampling (e.g. 48kHz->88.2kHz) 

   * make region non-opacity work again

   * final fix for waveform display issues (??)
        - while recording, "flat-lining" was occuring
	  due to mistakenly copying zero-filled
	  areas of the cache. 

   * "follow playhead" button now gets its state
      stored/restored across ardour invocations
      as intended (note: this is not session-specific)

   * dragging region gain control points activates the
     gain line (thanks Sampo)

   * undo/redo works correctly for region gain line
     active state (thanks Sampo)

   * "crash recovery" dialog centered in screen

   * port inserts now return the correct number of inputs+outputs
     thus causing their "owner" routes to have the correct
     number of panners

   * LADSPA plugin parameter default values handled "better"
     (HINT_SAMPLE_RATE is applied as intended, i think)

   * partially fix duplication-selection operation

   * change keybindings:
        - keyboard range definition is now on keypad-{up,down}
        - regular up,down now step the track display up/down one

   * slider_position_to_gain() function (widely used) now
       returns zero rather than 2.32e-10 when the slider
       position is zero.

   * remove pathetic attempt to cache the first and last
       positions of control points in automation event lists.
       This fixes aberrant behaviour of automation when
       the last point is moved, but the "cached last"
       position is not (any attempt to read automation
       values after the cached position would return
       the final value).

   * do not attempt to use gain value in
       Route::deliver_outputs_no_pan() if it was already
       applied during automation. this fixes another
       odd behaviour for automation, where moving the playhead
       backwards after reaching a given automation point
       would cause the gain to be stuck at that point's value.
       This only applied to tracks with no panner (i.e. 1in/1out)

   * add a handler for WM-delete events to the popup objects
       used for MIDI binding, and other things. this should
       stop one category of crashes caused by "WM-deleting"
       these windows.

   * set widget name on all (?) menus to get them to use theme

   * patch from Sampo to properly track and control automation
     track visibility

   * fix for crashing TimeFX bug

   * compress space consumed by plugin GUIs

   * put plugin author names in title bar of plugin GUIs

   * fix mis-ordering between alignment options and enum
       (switched the apparent choice that the user made. dang!)

   * reset diskstream capture_offset's more often
   * compute capture alignment more accurately

   * use new jack_recompute_total_latencies () function

   * get correct plugin latency after LadspaPlugin::set_state()
   * xfade state restore fix (thanks!)

   * fix interaction of plugin latency compensation, alignment models
        input and output latencies and the phase of the moon.

   * #undef cache memmove optimizations in waveview code

   * prevent connection modifications if not connected to JACK

   * add some new widget names to help with style file

   * fix some compile time warnings from printf format types

   * use new click sounds from nick mainsbridge

   * recompute track i/o latencies more often

   * add sigc++config.h to the tarball release so that people
        building from it do not require auto* tools

   * plugin editors become bound to the window (editor/mixer) in which
     they were first created, instead of always being bound to the

   * important fix to prevent crackles and noise when plugin
     latency compensation is in effect.

   * ensure that declicks applied when the transport start up
     are applied to tracks that are delayed by plugin latency compensation.

   * prevent mousewheel (or buttons 2 & 3) from having any effect in
     Input/Output dialog connected port lists.

   * removing a location marks the session dirty

   * several important fixes to prevent clicks and crackles during
       transport operations, event handling and more

   * make polarity work even during a declick

   * post-fader redirects get zeroed signal if gain is zero

   * gain control (fader) now operational during recording

   * automation gain playback during recording possible

   * SConstruct update from Kito for better linking on MacOSX and better  
      flags for non-osx PPC platforms.
   * stop auditioning when a file is selected in the
      library/filesystem browser.

   * fix an unreported buglet with restoring state to audio track

   * prevent automation gain levels propagating across a mix group
      when the transport comes to a stop

   * fix problems with trimming regions which have been moved so that
        position zero of their source files is at a negative position.

   * fix problem with trimming not paying attention to trim direction
        when snap mode is set to anything except None

   * a few printf-format-arg fixes

   * a couple of x86_64 fixes

   * fix for audio track pink "recording rectangles" so that they are
      in the correct location even when PLC is in effect

   * location window improvements from Markus Schwarzenberg

   * templates no longer reference automation data, and all
       automation states are set to Off.

   * normalization does nothing to a region that already has
         a maximum sample value of +/- 1.0.
   * plugin addition/removal does nothing if not connected to JACK

   * Shuttle bug fix by Markus Schwarzenberg, thanks!

[ from Sampo Savoleinen ]

   * Fix for mantis #920. Fixes deleting a range selection where
     the selection starts at the same frame as the region starts.
     This fix is in the global ARDOUR::coverage() method, thus 
     it might introduce problems in other places in ardour where
     the method is used.

   * Fix for mantis #991. Fixes playing gain automation from a
     point where gain automation value is -inf

   * Fix for trimming the region end. +1/-1 problem, trimming left
     always trimmed 1 frame too many, trimming right trimmed 1
     frame less.

   * When moving the gain fader on a track beloging to a mix group
     from -inf, the gain of other tracks in the mix group will
     only raise a little bit instead of going through the roof.

   * IO's have now a max gain so that you can't fiddling huge
     gain values using mix groups. This maximum is about +30dB.
     This limit is NOT the limit visble on mixer strips.

   * When dragging files to create new tracks, the new tracks will
     respect the output configuration.

   * Dialog for editing meter marks (this is 4/4, 3/4:ths etc.)
     the dialog will show the currently selected note type.

   * Fix for ardour locking when playlist range in splice mode
     is cut.

   * Gain envelopes with 2 points (start & end) which don't have default
     values are now correctly saved. Previously they were saved as
    "default" envelopes regardless of the envelope point values.

   * Fix for rounding errors in zooming which resulted in
     "zoom to session" not to start from frame 0.

   * Fixed "Center to playhead" and "Center to edit cursor" to work 
     even when the playhead / edit cursor is visible.

   * Fixed programming error in removing redirects
     (Thanks: Valgrind & Paul)

   * Fixed noise when activating a newly created ladspa
     plugin which reports latency.

   * Initialize quieten_at_speed_is_user in ARDOUR::Configuration

   * Ladspa output meters are now displayed correctly:
     Omitted ladspa bounds are now respected and output meter
     values aren't allowed to go over bounds (of bounds are set)

   * New global keybinding for remove last capture, 
     default key is Ctrl-Delete

   * Remove last capture verify dialog is now controllable
     via an option in Options->Misc )

   * Configuration XML element <recording-plugins> was read 
     and written two times, fixed.

   * Removed ancient "meter bridge" key binding

   * Corrected memory leak in Source::read_peaks()
     (Thanks Geoff!)

   * Prohibit the fake regions visible while recording from
     saving state and thus stop it from leaking memory.

   * Few UI tweaks to "Zero lines" (blank line that represent
     the height at which a signal is at 0.0, visible when track
     size is larger or large or largest).

   * Fade ins & outs will be the correct colour depending on their
     activated / deactivated state when a new session is loaded.

   * Fade in & out handles will now be only visible when the
     mouse is on top of that region.

   * Rec boxes will now behave correctly even when the zoom
     level is changed while recording.

   * Applied patch by Christopher K. George which fixes the
     "separate region" function for tracks where speed != 1.0

   * Dialog for playlist destruction confirmation in session 
     cleanup is now centered.

   * Track speed selector fixes:
     - Fixed rounding errors which caused the speed factor to be at
       values really close to 1.0 but not quite
       (Thanks Wolfgang!)
     - The mouse grab initiated when clicking on the selector is now
       ended even when the grab was started with the mousewheel
     - Fixed set_bounds() which didn't set the "initial" value
       as it's supposed to

   * Fixed uninitialized variable in CrossfadeEditor::audition_both()
     (Thanks Aad!)

   * Fixed some non-errors which made valgrind angry

   * Removed accidentally committed debug output

   * Regions now store the state of _first_edit (Thanks Valgrind!)

   * Fixed rubberband selection for tracks with speed != 1.0

   * Fixed unset object field in Editor

   * Fixed uninitialized variable in Crossfade XML constructor 

   * Cut selection is now cleared when session is closed. This fixes
     a segfault when doing copy/cut operations in a session after closing
     a session where you had performed some copy/cut operations.

   * Frozen tracks will now have both rec button and playlist switch
     button inactive when loading a frozen track from disk.

   * The next operations on tracks where speed != 1.0 will work properly
     now: Cut/copy, paste, find next region (used for example in

   * Snapping to region start/end/boundaries/sync point works
     for tracks where speed != 1.0

   * Context menu crash from right clicking regions on
     varispeed tracks fixed.

   * Imported fix for "shaped dither" algorithm from libgdither-0.6
     (Thanks Wolfgang & Steve!)

   * Fixed trimming regions using the edit cursor for varispeed tracks

   * Cleared up an issue with the gain meter which was caused by an
     earlier commit to fix the varispeed click box. Setting gain to
     unity by middle-clicking on the gain display set gain to -0.1dB
     instead of 0.0dB.

   * move global transport declick to correct location in the route
     signal flow

   * ensure that gains are stored with sufficient resolution in the
     session file

   * make all versions of gcc use the same fastlog code (nick/sampo)

   * "brickwall" mixgroup gain patch
        - if a mixgroup is active, changing the gain of any
	  member of the group is barred if it would change
	  the relative gain levels within the group.
	- because of the nonlinear motion of the faders, this
	  can cause visually odd behaviour if you have a group
	  that includes tracks with extremely low gain settings
	  along with others at 0dB or above. however, the audible
	  results are what you would really be expecting.

   * Fix for region export. Resulting files are now
      properly closed and memory allocated for export
      is freed properly.

   * Fix 32-bit integer export for sample values < 0.0

   * SSE optimized functions for peak computation, buffer mixing and
      applying gain. These functions can be used on any x86 processor
      (except those running in 64 bit mode). 

   * New command line parameter which enables the HW specific
        -o / --use-hw-optimizations

[ From Nick Mainsbridge ]

   * Fix for artefacts in the BBT ruler

   * Added patch from nickm for gcc4 support.  
        Added virtual destructors that gcc4 warned about, correcting memory leak in Stateful in the process.

   * place choice dialogs at center of screen, not mouse position, to
     avoid issues with dialogs that show up near edge of long menus

   * fix for mantis 770: editing tempo location doesn't change its

   * changing the click to an existing soundfile sets both emphasis
     and regular click sounds to the same file; fixed.

   * remove port button never set back to insensitive if it was ever
     sensitive; fixed.

   * no more seamless loop button; choice is now made automagically
     based on slave setting

   * fastlog.h fix for gcc4

   * fix for type in xfade initialization

   * fix for loading/not rewriting instant.xml during session loading

Quick HOWTO on the SSE optimizations

When the routines are built in, ardour will check the processor
features run-time and select them if the processor supports
SSE. Look for a message "Enabling SSE optimized routines" in
the console when starting up Ardour. If you do NOT see this
message, it means that these optimizations have not enabled.

There are two scons flags related to SSE:

 *  USE_SSE_EVERYWHERE=1 (scons flag)
This means that gcc is supposed to optimize all compiled code with SSE
instructions. This should be used if the built binary will be used only
on computers with SSE.

The hand-written assembler functions will be built in and will be
selected run-time if the parameter "-o" is given AND the current
processor supports SSE.

Everyone "rolling their own" ardour executables on x86 platforms
should use both of these options.

Note to packagers who need to produce binaries which will work on a
variety of platforms: to make your life easier, we have tried to make
it possible to compile ardour in whole without SSE BUT include these
routines. To do this, set:

This builds ardour without SSE instructions overall, but it builds the
optimized routines, checks for SSE at run-time and selects them
if the current architecture can run them.

People building Ardour for OS X can ignore both options (for several
months, at least ;)

More information about the Ardour-Dev mailing list