Proposal Crossfade

Proposed Feature
Simple to use interface to fade out one track and fade in another.

Developer Backing

 * Vaughan Johnson
 * Dominic Mazzoni
 * Federico Grau

Use Cases

 * One of the most common operations people want to do when mixing audio is to smoothly transition between two sound clips.

Project suggestion GSoC ideas page: GSoC_Ideas_2008

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

Interface
 * Initial creation - There are two ways that this is done in existing software. In the first, an overlapping region of two clips is selected and some key press or menu selection pops up a cross-fade creation window. In the second, dragging clips over each other to create an overlapping region creates a cross-fade automatically. I think that the second option is the best choice for the first stage of implementation. It offers a smoother user experience at the expense of immediate fine control over fade options.
 * 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 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 inside the fade region will slide the fade within the overlap region.
 * Clicking and dragging a boundary of the overlap region (as marked by either a background color change or another set of vertical lines) will slide the clip that forms the opposite side of the overlap. Extending an 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 fade shapes.

Cross-fade functionality In the first development stage, the fade-in and fade-out will be linked according to selected fade type. Three fade shapes will be offered.
 * 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.
 * Exponential - A constant-power cross fade in which a exponentially 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.

Display
 * Fade representation - Most existing software renders waveform data from both overlapping clips and then overlays plots of both the fade-in and fade-out envelopes. Brubeck's proposed display instead has a line 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 is rendered. Above the line, the right-hand clip was rendered. This would look cooler, but non-constant-gain cross-fades can't be accurately represented in this way. (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 exponential case, this is no longer true.) I propose implementing both display systems and allowing users to choose which they prefer from the fade options menu that pops up on a right-click.
 * 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.
 * The color change indicates the total extent of overlap rather than the fade length, an important distinction when these lengths are not the same. If an icon were used, vertical lines could indicate overlap length, but this would not be ideal. Perhaps a slightly different shade of gray for the background color change would be acceptable? Also, would the icon scale with zoom level? --Jeff Hussmann 19:07, 18 April 2008 (PDT)
 * 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.
 * I am leaning towards simply not rendering silenced overlap regions in the Brubeck display mode. This would eliminate the red. --Jeff Hussmann 19:07, 18 April 2008 (PDT)

A mock-up of this display and interface can be found at http://www.duke.edu/~jah36/audacity_GSoC/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.

Current Implementations
There is a Nyquist Cross-Fade plug-in available on the | Audacity Forum

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


 * http://www.cumbrowski.com/lp/audacitycrossfade.asp (Adobe Premiere CS3)
 * http://www.soundonsound.com/sos/mar00/articles/stereoedit.htm
 * http://www.transom.org/tools/editing_mixing/200111.voiceediting.jtowne.html
 * This link shows a scenario very similar to the one described by james on the audacity-devel list and highlights the way that zooming in and zooming out interrupts the flow of editing work.
 * http://emusician.com/special_report/types_fades/
 * http://www.prosoundweb.com/recording/books/berklee/protools/3.shtml
 * http://transom.org/tools/editing_mixing/200305.pt_mix3.towne.html
 * http://www.soundonsound.com/sos/feb07/articles/ptworkshop_0207.htm
 * http://books.google.com/books?id=iGV0pgXqXVAC&pg=PA170&lpg=PA170&dq=sonar+cross+fade&source=web&ots=feXK1TiMY6&sig=_2QopteH_0wXKzgusmyoLZPkqAc&hl=en#PPA169,M1
 * Some pages from a book on Sonar 3 (a fairly old version of Sonar) detailing its cross-fade interface.
 * http://books.google.com/books?id=iGV0pgXqXVAC&pg=PA170&lpg=PA170&dq=sonar+cross+fade&source=web&ots=feXK1TiMY6&sig=_2QopteH_0wXKzgusmyoLZPkqAc&hl=en#PPA169,M1
 * Equivalent section from a book on Digital Performer.
 * Not a web page, but an image of 's simple cross-fade, which fades clipboard content into the beginning or end of a track open in the editor as an effect. "Preview the cross-fade using the play button. Only the overlapped, cross-faded area is previewed. Note that you'll need to press the play button again to preview changed settings."
 * [[Image:Goldwave_Crossfade.png|320px|Goldwave Crossfade Effect Interface]]

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 cross-fades that are within the clips and cases where the cross-fade would go beyond the end of the clip.
 * Do you mean cases where the clip would go beyond the end of the cross-fade? --Jeff Hussmann 10:11, 19 April 2008 (PDT)
 * 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 Requests about Cross-Fade
There are only these references:
 * "Extend batch processing to include features dependent on selecting parts of tracks (e.g. trim, fades)" (26 votes).
 * "Add cross-fade when looping to prevent possible clicks/pops." (from Release Checklist Not Aiming).
 * Anecdotally, a few users would prefer "Cross Fade In" and "Cross Fade Out" were not called that because they are only a smoother fade.

Other Topics

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


 * files/classes affected
 * Initial work on changing clip sliding behavior can be found at http://www.duke.edu/~jah36/audacity_GSoC/
 * I tentatively plan on each WaveTrack maintaining a list of OverlapRegion objects (similar to the list of WaveClips currently maintained) that would contain the necessary rendering and cross-fade application information.


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