

Rosegarden 0.2 Roadmap
======================

   "0.2 is the one where friendly potential-users join in trying
    to use it and then complain about everything, 0.6ish is
    where much of the help text and stuff has somehow magically
    appeared and possibly where we first release binaries,
    somewhere 0.2-0.7 has decent working printing support, and
    0.9 (which comes out quite shortly before the 1.0 freeze)
    feels like 1.0 to us but crashes when anyone else tries
    to use it."


updated: 25.04.2002 [rwb]

The purpose of the 0.2 release is to get the target audience of
Rosegarden 4 to give us some feedback on what we (the developers)
have done so far.  We can call the output of this phase "usability
testing" or something similar.

Currently the project is post 0.1.4 release and status is as follows.
We have a working MIDI sequencer complete with two competent editing
clients for musical Notation and for Matrix (Piano Roll) views.  The
sequencer also offers limited audio support.  We can import Rosegarden
2.1 files, import and export MIDI files and of course have our own XML
based RG4 format.  Rosegarden uses a "Segment" editing concept on the
main track canvas.  A Segment is a pointer to an audio sample or a
container of Rosegarden Internal (MIDI) Events.  A Segment can be moved,
deleted, edited (according to type) resized, split or joined with other
Segments.  All operations on the Segment Canvas are undoable as are the
Event-level operations in both of the clients.  The sequencer provides
a Studio concept that maps Tracks on the Segment Canvas to the actual
MIDI and audio devices underneath (via Instruments).  The Studio is again
XML based and it is intended that it will eventually have its own
specialised GUI for adding "real" Studio components (faders, plugins
etc).  The keynote concept of the application so far is flexibility -
with the 0.2 release we want to test that this flexibility has not made
it difficult for the users to actually enjoy using it.

Whilst the 0.1.4 release was very usable it was not (and was never
intended to be) end-user-friendly.  To bring the current codebase up to
a standard that a Linux/KDE user will not baulk at requires additional
work as defined in this roadmap.

After much consultation the lead developers have settled on the following
list of work to be done to get the code to the intended 0.2 usability
release standard:

[now modified and updated to reflect progress - rwb 25.04.02]

In order of importance:

  o Matrix tools (shorten/lengthen note, join/split note, move note) [DONE]

  o Get the GUI to make sense when loading files and switching states,
    enabling correct buttons and menu options corresponding to whether
    (for example) anything is selected in the view

  o Better MIDI support (Controllers, Pitch Bend, Sys Exs, maybe time codes and
    synchronisation?)

  o GUI support for various things that are supported in the
    internal representation already - tuplets [DONE], n-dotted notes,
    tempo [DONE], text [DONE except for lyrics], and quantization
    beyond the simplest sort [DONE].

  o Segment start and end markers - moveable non-destructive markers for
    Segments [largely DONE for end markers at least]

  o Switcheable pointer-follow mode - turn it off, enable the same behaviour
    in clients

  o Method of displaying overlapping Segments

  o Improve Audio support to basic four track recorder level i.e. no or not
    many effects but usable

  o Improved Printing (by how much we don't yet know)
  
  o Meta editing dialog (song information, copyright information, contact
    details for RG4 and MIDI files)

  o Parameter box fields don't look very disabled even when they are
    [DONE by Qt3]

[work completed or partially completed]


  o Kill all the big bugs - closing bug being one.  Soak testing of
    sequencer and gui for leaks (looping of an entire piece for a
    day or so - that kind of thing)
    [CLOSING BUG DONE]

  o Annoying bugs to be fixed:

    - LoopRulers aren't getting set on clients, can't be edited
      from clients.  SegmentCanvas LoopRuler doesn't disappear
      when Loop button toggled.
      [PARTIALLY DONE]

    - TrackButtons scrolls independently of SegmentCanvas
      [DONE]
  
    - PianoKeyboard scrolls independently of MatrixView
      [DONE]

  o Save Instrument and Segment parameter states to RG4 file
    [DONE]

  o Add, Move and Delete Tracks including associated Segments
    [ADD DONE]

  o Dialog for changing latency and other general options (bars count-in)
    [IN - ready for more options/rework]

  o Modifying tempo
    [DONE]

  o Composition start and end markers - moveable non-destructive markers for
    Composition length
    [PARTIALLY DONE]

  o Zooming - even if it's just horizontal
    [DONE]

  o Wait cursor/progress bar for lengthy operations (file loading,
    re-rendering score etc).
    [DONE]

  o Defining the KDE versions we support - currently we're 2.2 specific, if
    we can fiddle KDE 2.x and KDE3.0 support should we?
    [DONE - defined KDE3.0 and KDE2.2 as IN SCOPE]


[other auxilliary tasks]

  o Producing RPMS/packages.

  o Producing documentation either in-app, on-line or both.

  o Naming the release something meaningful.


Notes:

It'd be good to get this release out asap - considering we have a good
starting point and a decent head of steam up in development this kind
of exercise could engender further momentum.

Thoughts?


End of Roadmap.




----





Pre-Rosegarden 0.1.4 wishlist for 0.2 follows
=============================================

Three categories: Work required to finish basic features that are
already started; new features that are suitable for the 0.2 timeframe;
basis work for features that won't appear until later.


Work required to fix existing stuff
-----------------------------------

1.  updating one edit window when something is edited in another
    (however crudely we do it at first).  -- at the moment if you
    delete a note in one window then insert in another, it crashes
    [carried over from 0.1] [DONE -- dead slow though]

2.  better time signature support.  The way things are at the
    moment, if you insert a time sig into a track it gets copied
    into all other tracks (correctly) but if you then move one of
    the tracks they become out of sync again.  Better to store
    time sigs in the Composition's reference track only, and save
    them to file from there.  Probably a good case for having
    notation elements without corresponding events (because the
    time sig event will never be copied to individual tracks).
    [DONE]

    This would also require GUI for handling time sigs in track
    editor rather than (just) notation view.  Complicated stuff
    [GUI BIT NOT DONE YET]

3.  leger lines [DONE]

4.  ties (rendering them; they already are stored and handled in
    playback - qcanvasspline is here though) [DONE]

5.  possibly quite a bit of work needed on improving the "feel" of
    insertion, track dragging etc: they currently feel rather
    vague, there's resistance in the GUI, feedback is not good,
    sometimes insertion just doesn't work (e.g. when height is too
    far from that of existing note)

6.  a great many optimisations in layout and particularly in
    relayout after insertion, including some really obvious ones
    like only re-preparsing the one staff you just inserted onto...
    probably some optimisations possible in pixmap generation too
    [some of these optimisations, particularly for insertion,
    actually got DONE in 0.1]

7.  a few fixes to basic note drawing -- sometimes shifts the
    wrong notehead, note's stem sometimes doesn't meet its beam &c
    [some DONE]

8.  mucho cleaning up and tidying in the GUI: toolbars, menus,
    palettes etc.  kind of obvious

9.  Selection global to entire composition, and selection updated
    correctly throughout all views on (e.g.) note insert [DONEish]
    
10. Implement undo for cut/copy/paste, and for the track
    insert/delete/resize tools [DONE]

11. Composition to become container for multiset of Segments
    instead of just set? - DONE



New features suitable for 0.2
-----------------------------

1.  selection and cut, copy, paste [DONE mostly]

2.  dynamics, such as slurs and hairpins [DONE]

3.  text on the score (and MIDI import and export)

4.  generic event property editor dialog

5.  "internationalisation" of gui?  some nice english note names...

6.  Note velocities.  Internal rep and import/export.  Text to
    velocity conversions?

7.  MIDI recording - also requires basic track selection and Record/Mute
    track buttons. [DONE - still needs realtime Segment view of new events]

8.  Transport GUI - play, rwd buttons etc - timer. [DONE]

9.  Looping. [DONE]

10. Position pointers in notation client. [DONE]

11. Track canvas and client that follow playback (playback follow mode). [DONE]

12. Piano-roll view, but only if someone other than us steps up
    to implement it in parallel with the stuff we're doing? [DONEsque]

13. Event editor (possible hyper editor type i/f for velocities)

14. Tuplets


Basis for later features
------------------------

2.  layers (for counterpoint)

3.  some skeletal help

4.  audio tracks support

5.  instruments - assigning them on the GUI and how they map
    through to aRts (basic Environment)

6.  Lilypond output (definitely a higher priority than MusiXTeX
    for this version, and possibly higher than any other printing
    method too)

7.  NIFF I/O?  Or MusicXML may be more productive.  (It'd be nice to
    get independent contributors to work on I/O -- although I can
    imagine doing the basic Lilypond stuff myself if need be)

7a. ETF import.  See http://www.cs.uu.nl/~hanwen/lily-devel/etf.html
    and various sample files available at http://www.cpdl.org

8.  Brahms file I/O -- I'd ideally like to see export as well as
    import, if only as a matter of goodwill.  The Brahms file
    format is XML and looks straightforward.

