todo.txt

This file contains a list of current features being
worked on, possible ideas, and ideas for the future.
Last updated June 27, 2003.  Please check the
Audacity-devel list to see who's working on what,
and for updates.  This file is likely to be updated 
only about every 2-3 months.

------------------------------------------------------
 Definitely in 1.2.0 - high priority
------------------------------------------------------

* Some improvements to Save / Export - not a full
  refactoring, but some of the ideas below.

* Normalize Effect that removes DC bias and sets maximum
  amplitude to some standard value like -6 dB

* Allow the user to create keyboard shortcuts for Effects

* A Fit option that sizes the tracks vertically to fit
  in the window.  Shortcut should be Shift+Ctrl+F.

* Finish adding Preview for all effects where it makes sense

* Support custom cursors on Mac.

* New waveform-drawing code that I half-finished  Speeds up
  drawing in Mac OS X by 2-3x minimum, also should help on
  older PCs.

* Check for multiple copies of Audacity on Unix

* Add a new item at the top of the Effect menu - Repeat Last Effect
  (maybe it could dynamically change its name, i.e. "Repeat
  Compressor".  It would not bring up a dialog, but use the last
  values.  It would have a keyboard shortcut.

* Open multiple files (it's supported by wxWindows; we should
  enable and use this feature.)  Both Open and Import.

* VU meters, if at all possible, with a "monitor" mode for recording.

* A master gain control, if at all possible

------------------------------------------------------
 Ideas - need further discussion
------------------------------------------------------

* Resize window to a larger size, including to full screen, also does
  a fit-to-window if we were fitted to window before the resize.
  I think that tracks should expand proportionally.

  I think that when you open a project, auto-track-resizing should
  be on by default.  It only goes off if you specifically drag the
  _bottommost_ track and make it bigger or smaller.  (Then, how
  should you turn it back on again?)

* Improved Save / Export

  I think we all agree on this:

  - Unified Export commands that let you save in any
    format (except AUP) using a choice control in the
    file selection dialog.

  - The Save As dialog should let you save in any format,
    AUP or one of the PCM/compressed audio formats.

  - If you choose a format that does not support all of the
    features of the project (e.g. multiple tracks, envelopes,
    etc.) then it warns you that saving in this format will
    result in a mixdown.

  Ideas (not yet agreed upon):

  - When saving/exporting, don't display formats that can't
    support the project?  (I don't like this idea...
    I think that all formats should be available, and it
    warns you if it needs to do some sort of reduction
    in order to save in that format.  It should tell the
    user exactly what will be lost.)

  - Exporting should take into account mute and solo?

  - Does export depend on what tracks are selected?  I didn't
    think it did...Juhana, could you test this and clarify the
    problem?

* Zooming using mousewheel - obviously this shouldn't
  be the only way to do it, since not everyone has a
  mousewheel.  When should it be used, then?

* Allow the user to create keyboard shortcuts for Effects.
* Normalize Effect that removes DC bias and sets maximum
  amplitude to some standard value like -6 dB

* Resize window to a larger size, including to full screen, also does
  a fit-to-window if we were fitted-to-window before the resize -JKC.

ALTERNATIVELY:

  Remember window size, position and maximized/normal state when 
  Audacity closes and apply when we open Audacity.  This deals 
  with a common case where the feature is useful -JKC.

* Automatic Vertical resizing of tracks.

  I think that tracks should expand proportionally (vertically) on
  a resize.
  I think that when you open a project, auto-vertical-track-resizing 
  should be on by default.  It only goes off if you specifically 
  drag the _bottommost_ track and make it bigger or smaller.  (Then, 
  how should you turn it back on again?) 

* Add an Audio menu with items like Play, Stop, Record, Pause,
  Loop, etc.?

* It is possible to extend the selection out of the track display
(when the view is scrolled to end), but then the end edge of the
selection cannot be grabbed and dragged. Solution: selection can
be made only up to the end of the track.

  (I'm not sure this is a good idea... DM)

* When a selection is readjusted by grab&drag, the release of the
button at outside of the track panel could mean "undo".
Similar for all other operations.

* dragging the selection edge out of display starts moving the
wave, but moving could start 100 or so pixels before the display
edge so that the coming wave can be seen

------------------------------------------------------
 OK for 1.2.0 but not necessary
------------------------------------------------------

(If you want to do these, go ahead, but if nobody volunteers
and I don't have time, I think it's okay if they slip...
Note that some of them might make it into 1.2.1 even as we
continue with a new unstable branch...)

* "Smart Record"

  Includes higher-quality recording (because of extremely limited
  GUI operations), timed recording, large VU meters, and more.
  All of the recording options that are too complicated to do
  with the normal record button (in the future: volume-triggered
  recording, record directly to MP3/Ogg, etc.)

* A master gain control.

  (I don't think it's necessary.  I'd rather see some option
   that lets you adjust all gains simultaneously by holding
   down shift or something...)

* A bars/beats time ruler and snap-to bars/beats.

  (Karl, if you want to submit a patch, it's fine with me,
  as long as it's complete and clean.)

* A function to export all tracks as separate wave files all at once.

* Alternate keyboard layouts

* In the Timeshift-tool mode I propose making [ctrl+mb1] do
"Align track to cursor". Since they're only one clip per track,
simply clicking anywhere in to the track should perform that function.
Only the Selector tool can set the cursor, right?
[ Checking the mouse button operations through should be done.
Multitool should be considered as a base for the default mode.
Some operations would work always, like making a selection.
Then various tools would change function of some of the mouse
buttons. Without the multitool the Audacity is very annoying to
use, IMHO.   JS]

* When drag selecting the tracks out of track window, the window should
scroll and reveal more tracks.

------------------------------------------------------
 Should wait for next unstable branch
------------------------------------------------------

* One-click preview for 'cut selection'.  Plays (configurable)
  3 seconds around the selection, _excluding_ the selection itself.

  Compared to most other ideas, this is pretty complicated and
  would require either some hacks, or some major changes to the
  AudioIO code.  I'd rather avoid it.  If someone who understands
  all of the details of AudioIO wants to do this, I won't object,
  but I'll be wary of a patch.  IMHO, this will be more difficult
  than adding looping if we want to implement it the cleanest and
  most general way.  DM

  The suggestion of a general mechanism for 'preview in context'
  with this as a special case makes a lot of sense, so I'm now happy 
  for this to be post 1.2.0.  JKC.
  N.B. It would make sense to combine this with a fade-in, fade-out
  for preview which has been requested for playing short samples,
  which can click at start/end otherwise.
  Question: Is this what pre-roll and post-roll mean?

* Maybe post 1.2 we also need multiple projects in the same window
feature: either by (i) subwindows inside the main window, a common
toolbars, (ii) no subwindows but the project is technically behind
a pointer which can be changed from a "projects" menu, (iii) different
projects are in tabbed windows, as commonly used in 3D graphics
software. Tabbed windows could also contain preferences/controls for
Audacity and for all plug-ins. That requires a way to build the tab
pages on-the-fly. Certainly post-1.2 stuff.

* More built in code for automated testing, not sure exactly what,
ideas for how to do this would be welcome.
[ It is more like continuous research job. Leave to post-1.2 version. ]

* Related to this, a self-image-capture class. This puts the gui through
its paces, capturing .pngs of toolbars, sliders, dialogs according to
an external script file.  This makes updating the images in the
documentation much easier.
[ Third party screen capture program which accepts remote commands
via a named pipe, say. Audacity would then have a way to send one
command only and a way to send commands repeatedly (n times per
minute). ]

* Half a dozen nyquist scripts, annotated and explained in the
Audacity documentation.  Nyquist looks an incredibly powerful
feature, but I (JKC) haven't a clue how to do some of the simplest 
things with it.

* Track label could be changed to look like what is in commercial
multitrack software. More compact, that is.  JS.

  [I don't think we should necessarily copy the commercial software
   in this regard.  I hate most of their UIs because they force me
   to memorize what tiny little symbols and colors mean.  I like
   my UIs to be "discoverable".  DM]
  [Agree with DM about not simply copying and discoverability.
  Agree with JS that more compact ways to do Track Label need 
  investigation.  Screen real estate is valuable.  JKC]

------------------------------------------------------
 Unclear - what are these?
------------------------------------------------------

* In zoom mode, scrollwheel click acts as middle button click, but when
dragging with it, it behaves strangely (I couldn't figure out the logic)
Also rmb dragging behaviour is strange. As lmb dragging is intuitive, I
assumed that dragging small area with rmb would zoom out a lot,
and dragging bigger areas would zoom out less.

------------------------------------------------------
 Bugs
------------------------------------------------------
Moved to bugs.txt.

------------------------------------------------------
 More far-future ideas
------------------------------------------------------

[JKC] L&R <-> Average+Difference display. This way you can see 
what a stereo track gets mixed down to as mono, and the stereo 
content separately.

[JKC] Split Track into band pass filtered components. Useful 
even just to view a waveform without background mains hum.
[JS] Spectrogram would do that already?  
[JKC] No.  This is a split of the actual waveform into two 
components which sum to the original.


[JKC] Sound-diff: Ability to compare waveforms and have this 
displayed graphically.
[JS] Can a plug-in operate on two tracks and generate preview to
third track? Or replace the second track with the result.
It would be essential that the subtraction between two tracks
is made interactively so that user may time-shift the waveforms
and manually find the alignment between the tracks.
This may go post-1.2 if it requires changes to plug-in system.
[JKC] I have in mind something more like Unix diff that compares 
and aligns waveforms.  Useful when you have several takes of 
the same track.

* Allow UI while importing 

-----------------------------------------------------------
Here's an older list of items.  Things we've already done
have been removed, so these are all still valid ideas.
-----------------------------------------------------------

- Upload some icons for people to use with
  KDE, GNOME, WindowMaker, AfterStep, BlackBox...

- Do "preflight" check of disk space before editing
  operations.

- Check for existence of project _folder_ when opening
  a project - help the user find it if it's not there.

- Smart Record dialog
  - VU meter
  - Control latency
  - Use as little CPU power as possible
  - Detect dropped samples using many different methods
  - Visually show buffer sizes
  - Multi-channel record
  - Show remaining disk space
  - Timed record (i.e. only record x seconds, start
    at particular time)

- Choice of dither
- Pre-roll and post-roll: amount to play before and after
  a selection (see DG Malham email - Please add date so can
  check the archives for it.)
- Latency control in Audio I/O prefs
- Support portaudio multiple driver models

UI::
- Turn off autoscrolling if the user manually hits the scroll bar.
- Allow opening multiple files (use wxFileDialog wxMULTIPLE option)
- Label the "Left" and "Right" channels!
- Select None
- Small toolbar option
- Create our own progress dialog:
  - Improved time estimate
  - Stop and cancel buttons (not the same!)
- A "mini view" of the whole project, which shows what part
  you're working on, etc. like a lot of other programs have
- Visual track dragging
- Split at labels
- Improve Save prompt dialogs: use "Save", "Don't Save", and
  include the name of the file.
- When a user exports the entire project (in any format)
  and the export doesn't require any mixing, mark the project
  as not dirty (i.e. don't ask if they want to save it).
- Put close box in toolbar.
- Make ID3 tag dialog optional when saving MP3s
- Import... should be able to import Audacity projects
  and Audacity project files
- Crash recovery
- Adapt text color - should be white by default if
  the background color is very dark
- Select dialog box ("1.5 - 3.0 seconds")
  and allow selection by frames (24 frames/sec), samples, etc.
- Invert selection (for now, until we allow discontiguous selections,
                    this should mean two options: select up to selection,
                    and select after selection)
- Vertical zooming
- Legend (Ruler) for pitch and spectrum
- A way to turn a track into a loop.  It would be cool if the
  display showed the "real" waveform once, and then "ghosts" of
  that waveform repeating forever...  (We now have a loop-play
  using shift-play which goes some way to answering this request).
- While playing, click in ruler to change playback
  position
- Drag the play marker in the ruler to "skip" to a new time
- Scrubbing, where you here the track speeded up as you drag 
  the play marker.
   
Import/Export::
- Support ID3 tags in Ogg files
- Import/Export markers in WAV files (like Goldwave does - 
  see email from Shane M.  - Please add date so can check archives.)

Effects::
- Show spectrum in FFT filter
- Add real-time effects directly to tracks (see Ezequiel 5/10/2002)
- Freeverb 3.0 (and better interface)
- Smart Mix (like Quick Mix but guarantees no clipping)
- Cross-fade (smooth between two tracks)
- Native port of Freeverb (ideally optimized)
- Auto find track boundaries
- Pop/click removal
- Save VST plug-in parameters to a file, or at least
  remember the last settings

-----------------------------------------------------------
Future:
-----------------------------------------------------------

- Speed issues when you have a project of 5 or more tracks
- Edit markers
- "Fit in window" also works vertically
- Better adaptation to different font sizes (sizers)
- Move to lossless compression (FLAC?) for internal representation
  (Note: this doesn't support 32-bit float samples)
- discontiguous selection
- visualization window: VU meters, equalizer, continuous waveform, oscilloscope
- Mouse scroller should vertically scroll project (Um, isn't it assigned
  to zoom-in/-out now?)
- User-adjustable fonts so I don't have to recompile just to get the
  ruler looking decent and the track label fitting.

-----------------------------------------

Resolved-Issues
===============
* Make Generate a submenu of the Effect menu?  [Jun/22/03 No,
  not at this stage.  That list of Generate's will grow - JKC]

* We could have a bias parameter per track, next to the track
  volume fader.  (I don't think this is useful - adjusting the
  bias is a very unusual operation and the only reasonable
  justification I can think of is to center the waveform
  vertically - why would you ever legitimately want to bias
  it? DM) [Jun/22/03.  Bias parameter would be a bad use of
  screen real estate.  Let's drop this suggestion, and if
  anyone does want non-zero bias it can be via a Nyquist 
  effect JKC]

- Horizonal line at zero point in waveform display.  
  [Has been tried.  The waveform looks better without.  Showing
  the rms in a lighter blue as Audacity does gives you a good
  idea of where the zero-line is.  JKC]


Done. Remove these items from this list once 1.2.0 is released:
===============================================================

* Upgrade of cursors and tool-button-bitmaps so that cursors
  and button bitmaps match (on platforms where this is possible).
  This should be supported on all platforms - I will personally
  patch wxMac 2.4.0 to enable this feature on the official Mac
  build.

* Option to have "Close" not exit Audacity, but instead open
  a new blank document.  A very vocal MINORITY of users seem
  to prefer it this way; we should give them the option but
  I don't think it should be the default (except on the Mac,
  where m programs stay open until you explicitly Quit).

* Zooming using mousewheel - obviously this shouldn't
  be the only way to do it, since not everyone has a
  mousewheel.  When should it be used, then? [Added by Markus]

* Finish adding Preview for all effects where it makes sense
  [Assuming we are not adding preview for Nyquist.]

* Fine tuning of colours/bitmaps

  - Should the gain tooltips be the same shade as other
    tooltips?  Where does wxWindows come up with the shade
    for tooltip backgrounds?  Can we copy it?

  - What's the consensus on the new magnifying glass image?
    (I'd actually slightly favor reverting back to the older
    image.)

* MS Windows window resizing handle graphic.  (bottom right 
  corner).  

* A zoom-toggle button that switches between two zoom levels.

[ We could add two radio buttons and one standard button to toolbar:
<Z1, level1 select>, <Z2, level2 select>, and <ZS, zoom set>. The set
button would assign the current zoom level to the selected button.
Initially the zoom level memories would be empty, and only press of <ZS>
will change their values, i.e., user could change the zoom in anyway
but he would get the memorized zoom value by clicking the <Z1> and <Z2>
buttons. ][Done using a simpler one button solution 15/Jun/03].

- Ability to drag tracks instead of move down, move down, move down
- Save preferences (write to disk) after closing dialog

arch-tag: 391c81dc-d7dc-48ea-9aec-98f4c9728be7

