[gsharp-devel] Gsharp progress report

Robert Strandh strandh at labri.fr
Sun Nov 20 19:11:48 UTC 2005

Dear mailing-list member,

This is the first in what I hope to be a series of regular Gsharp
progress reports for people who do not follow the cvs mailing list
and who do not participate in the #lisp IRC channel.

Since it is hard to talk about `progess' in a first report like this,
let me instead give a brief list of what Gsharp can do, what it can
not yet do, and what things are, should, or ought to be worked on

What we have: 

  * The fundamental buffer data structure is not perfect yet, but it is
    getting there.  We don't have a formal buffer protocol yet, but
    such a protocol is getting possible as I learn what could be
    implemented efficiently.  

  * The line-breaking algorithm seems to work, and has been abstracted
    out into a library called Obseq.  Gsharp uses this library only in
    a trivial way right now for producing `roll of paper' output.  We
    would like to add various page-based output styles (fixed number
    of pages, number of pages modulo n = 0, last page filled or not,

  * The spacing algorithm is similar to that of the Lime score editor,
    and seems to work.  However currently only temporal spacing is
    implemented.  So called lyric spacing which is used in crowded 
    conditions, is not yet implemented, because the spacing algorithm
    does not know the physical width of clusters and lyrics elements. 

  * The beaming algorithm seems to be work. 

  * Functionality-wise, Gsharp can handle multiple staves, multiple
    voices (called layers), multi-staff note clusters, complex
    accidental placements, etc. 

What can not do yet:

  * Literally hundreds of little things that are necessary in any
    score editor, like staccato marks, fermata, etc.  It is my hope
    that advanced potential Gsharp users will eventually be able to
    add such functionality, so that I can concentrate my energy on
    fundamental algorithms and data structures.

  * Multiple beams.  The main difficulty is to get secondary and
    fractional beams to come out exactly parallel to the main beam.
    Doing this requires fiddling with regions for the output.

  * Triplets, etc.  The spacing algorithm needs to be improved to
    handle this.

  * Many minor things like creating a buffer when a non-existing file
    name is used for loading, doing the right thing when the user
    remove a staff, etc.

What is being worked on:

  * Changing key signatures and clefs at arbitrary places in the score
    (Christophe Rhodes is working on this). 

  * Personally, I am working on restructuring some computations such
    as stem direction and accidental placement, so that the result of
    these computations are known to the line-breaking algorithm.  This
    will enable that algorithm to take physical width into account,
    which is a prerequisite for lyrics spacing. 

  * In parallel with restructuring the code, I have added many
    comments to it, and tried to improve it so as to facilitate future

Other things that are high priority but that nobody is working on yet
(as far as I know):

  * Multiple beams (see above)

  * Improving the appearance of stacks of notes by substituting
    special glyphs for such stacks. 

  * Adding a "mode line" giving the name of the file being edited, and

  * Using presentation types for better user interaction

  * Introducing Flexichains for the buffer implementation

  * Improving the documentation and synchronizing it with the code. 

  * Probably dozens of things that I can't think of right now.

Lower-priority things that need to be done:

  [Too many to enumerate]

Finally, thanks to Robert J. Macomber for the patch that enables the
user to delete the current note from the current cluster. 

If you have any questions or remarks with respect to this report,
please do not hesitate to let us know by sending mail to the
gsharp-devel mailing list. 

Robert Strandh

Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.

More information about the gsharp-devel mailing list