Difference between revisions of "Proposal Crossfade"

From Audacity Wiki
Jump to: navigation, search
(External References)
(External References)
Line 48: Line 48:
* http://www.soundonsound.com/sos/feb07/articles/ptworkshop_0207.htm
* http://www.soundonsound.com/sos/feb07/articles/ptworkshop_0207.htm
** Some pages from a book on Sonar 3 detailing its crossfade interface.
** Some pages from a book on Sonar 3 (a fairly old version of Sonar) detailing its crossfade interface.
Do any of these use translucency of the clips, and if so, does that work well or not?   
Do any of these use translucency of the clips, and if so, does that work well or not?   

Revision as of 01:27, 19 April 2008

This page is intended to compare existing or theoretical implementations of cross-fade, and to generate a discussion on future implementation of fades and cross-fades in Audacity, so we can make good design choices.


This page is for community discussion of cross-fade. Most of the content (as of April 18th 2008) was added by a potential GSoC student. We are trying to evolve the page away from being 'like a GSoC proposal', and towards being an open proposed feature discussion. The student (Jeffrey) knows how to use this page, he's not about to paste it all back into his application to us!, and if discussions of options here lead to significant changes in the scope of what he plans to do for GSoC then those changes need to be written up in clear in his student application. This is a companion page to the Label Track page and has a similar intent.

Why Cross-Fade?

Here is a link to the original project suggestion on the Audacity GSoC ideas page. GSoC_Ideas#Intuitive_cross-fading

Core Features

The basic functionality is implied by the the cross-fade mockup at http://limpet.net/mbrubeck/temp/cross-fade/.

Cross-fade functionality - A single linked fade. Three fade shapes will be selectable.

  • Linear - A constant-gain cross fade in which a linear envelope decreasing from 1 to 0 over the course of the fade is applied to the left-hand clip and a linear envelope increasing from 0 to 1 is applied to the right-hand clip.
  • Logarithmic - A constant-power cross fade in which a logarithmically decreasing envelope is applied to the left-hand clip and the mirror image of this envelope is applied to the right-hand clip.
  • S-Curve - A commonly discussed fade shape - see for instance http://transom.org/tools/editing_mixing/200309.stupidfadetricks.html. An envelope of 1/2+1/2 cos (2*pi*w/T) is applied to the left-hand clip where w is the number of samples from the start of the fade and T is the fade length in samples. The mirror image of this envelope is applied to the right-hand clip.


  • Fade representation - A line will cut through the track display from the top at the fade start point to the bottom at the fade end point. Below the line, the left-hand clip will be rendered. Above the line, the right-hand clip will be rendered. For the linear and S-curve cross-fades, the two envelopes being applied to the clips sum to 1. This means that a single line shaped like the fade-out envelope is enough to completely visualize the cross-fade. In the logarithmic case, this is no longer true. More thought will need to be given to how to indicate that a logarithmic fade is being applied in a way that is consistent with what is actually being done. Dotted gray vertical lines will mark the start and end of the fade.
  • Overlap extent - Since it will be possible for clips to overlap for longer than the actual duration of the fade, the total extent of the overlap needs to be displayed. I propose changing the track background to an unobtrusive light color inside overlapping regions. Waveform data for the (enveloped into silence) portion of a clip that extends past the fade boundary will be rendered in a different colour too. (Alternatively, if this turns out to be too obtrusive, this data could simply not be rendered.) To ensure that the existence of cross-fade is visible no matter how far out the user zooms, this background color change will have a minimum pixel width (possibly a single pixel).
    • How about replacing the color change used to indicate a fade with a small clickable icon? Clicking the icon could be used to select options such as 'locking in' the fade, so that the two clips are joined.
    • Hmm. Colour choices will need to be discussed. New developers tend to over-use red - They want to draw attention to new features. We have found that shades of blue and grey tend to give a more restful interface than an overly colourful one, with colour for various 'modes' being used with great care. Often icons and shape changes give better visual cues than a colour-coding can.


  • When a modifier is held down (I propose ctrl-shift), clips dragged into each other will no longer be forced to respect each others boundaries. Instead, an overlap region will be created and a cross-fade applied between the two clips. By default, the cross-fade will extend from the left-most point of the right-hand clip to the right-most point of the left-hand clip. Clicking and dragging the dotted lines that mark the fade boundaries will resize the fade so that the fade interval can be any continuous interval of the overlap region. Clicking and dragging a boundary of the overlap region (as marked by the background color change) will slide the clip that forms the opposite side of the overlap. Extending and overlap region in this way will be capped at the point where one clip would be completely contained in another. Right-clicking anywhere inside the overlap region will pop up a menu from which the user can choose between the three fade shapes.

A mock-up of this display and interface can be found at background.PNG.

Non Core

A series of incremental features additions:

  • Default settings - The basic setup is geared towards artistic uses of cross-fades rather than utilitarian clean up procedures. To remedy this, an option will be added to the preferences menu to toggle automatic usage of a default set of parameters whenever a clip slide triggers cross-fade creation. In particular, default overlap and fade lengths will be set to allow rapid, repeated application of the same type of fade with a single mouse drag (for example, to apply a basic click removal fade to merge two clips).
    • A 'would be nice' is a button on the edit toolbar to allow quick selection of cross-fade mode. Could operate by popping up a dialog with the fade options. Or maybe after clicking the icon on the fade, the next auto-cross-fade we do behaves like the last one, and if we don't like that we have to click the icon to change it....
  • (optional, if time permits) Envelope variation - The user will be given the ability to create arbitrary (single-linked) fade shapes by clicking and dragging points on the line that cuts through the cross-fade region.
  • (optional, if time permits) Non-linked fade - A preference menu option will be provided to unlink the fade-in and fade-out envelopes from each other, allowing each one to be independently shaped and sized. Note that this option will dramatically change the way the cross-fade is displayed.

External References

Some discussions of cross-fade uses, fade shapes, and glimpses of other programs' fading interfaces:

Do any of these use translucency of the clips, and if so, does that work well or not?

Insights From These Links

  • The interface needs to cope with both crossfades that are within the clips and cases where the crossfade would go beyond the end of the clip.
  • For artefact removal, being able to overlap the clips at high-resolution, so that the waves are in sync, and to then move the centre of the cross fade without moving the clips is a plus.
  • ...other insights.

Summary From These Links

  • ...How these affect/do-not-affect proposed interface.

Feature Request 'Cross Fade'

  • ...Relevant text distilled from our feature requests pages

Other Topics

    • undo-stack
    • stereo track support
      • display different from mono tracks
      • picker for fade type

    • files/classes affected
      • planned changes to affected files

  • possible optional extensions
    • fade in/out with out another clip