Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Basic time signature support. Only some sigs supported and spacing is basic. Key and time signatures now share a staffwise-elements slot in the stave.
Work-in-progress hooks for drawing routines, used for now for tenuto and staccato articulation marks. The quality of the graphical rendering of the marks is not really up to scratch; horizontal placement seems to be off by somewhere between half and one pixel, and of course a note with both marks on at once gets an ugly graphical clash. As I say, "work in progress".
Patch allowing Gsharp to compile and start on OpenMCL again. Thanks to David Lichteblau.
I moved melody-related functionality from buffer.lisp to a new file.
Got rid of the print-character slot which was used in the old I/O mechanism.
Factored out lyrics from buffer.lisp to a new file.
Implemented a simplified I/O mechanism with less redundancy.
Support long ("lunga") notes and rests. It's a bit weird, because the lunga has the same notehead as a breve, but also has a stem; so having a NOTEHEAD of :long is a bit of a misnomer. Hey ho.
Allow clefs to be put on lines 0 and 8 of a staff. (Necessary for the Soprano C clef, found in early music). Note that key signature display code will probably have to be reworked to cater for such outlandish clefs.
Support for breves and breve rests.
Quick bandage for editing scores with non-fiveline (i.e. lyrics) staves: don't try to find a key signature. (When the number of staff types expands, we will need a better protocol...)
Alright, let's try this: more correct key signatures, I hope. The major change to the protocol is that REMOVE-ELEMENT takes as a required argument the bar as well as the element; this allows more symmetric methods to be written for the various stealth mixin bits of functionality. Key signatures are elements, as before, within a layer. However, they are also kept on a list sorted by sequence in a slot of the staff, and KEYSIG is responsible for checking the relevant staff for other key signature elements. Editing actions or commands are also responsible for maintaining this list sorted in the right order. New almost-correct function for testing the temporal-and-logical ordering of elements. Drawing code now computes the correct key signature for the each staff; linebreaking is done with a conservative assumption for how wide the key signature will be. Please test.
Completed implementation of quartertone playback for regular temperaments. Fixed keybinding bug for microsharper.
Support for semi/sesqui sharp/flat. * don't declare the type of the accidentals slot any more; we can put that back in a little, after we work out a declarative way of defining all properties of accidentals. * microsharpen and microflatten commands and functions; define sharpen and flatten in terms of those (and knowing which accidentals are the tonal ones). Keybindings for the commands. * a more declarative table-based system for kerning accidentals, along with the ability to specify a per-glyph default (and a default default). Choose a sensible default default; also alter the :sharp/:sharp table when +4 steps away, as the previous value was colliding a little too much. * support for playing the semi accidentals in equal temperament. No support in linear temperament, as I don't know what they mean. * glyphs defined with a little too much liberal cut'n'paste. Some FIXMEs note the essential differences between the related glyphs.
Added support for regular temperaments
Changed test.mid to /tmp/test.mid in play.lisp, removed code duplication calculating durations of bars
Make things a bit less likely to crash: only do the full readable printing if *print-circle* is true; otherwise just do a normal print-unreadable-object (which will handle the *print-readably* correct behaviour for us).
Fix for :name foo being printed before the class name in print-gsharp-object, reported by Brian Gruber.
Added a few comments
Turned print-gsharp-object into a generic function with (:method-combination :progn :most-specific-last), because that was how it was meant to work anyway. Turned #\] into a list-terminating character in the Gsharp readtables.
Untabify to make editing with Climacs easier.
Fixes for ESA changes from Troels Henriksen.
Merge keysigN patch, with all its attendant horribleness.
Make the tempo (for playback only, currently) a segment slot; add command-line UI for setting it.
Implement octaviated treble clefs. This isn't terribly general, I concede; the clef protocol might need to be rethought. However, it does capture functionality which was previously expressed in multiple places in the functions B-POSITION, F-POSITION and BOTTOM-LINE.
Save ties when writing a buffer to disk. (thanks to Christophe Rhodes)
Added a new package and a new file ESA-BUFFER allowing buffers to be named, to be associated with a file name, and to have a `needs-saving' and a `read-only' flag. Added a new package and a new file ESA-IO containing application-independent functionality to create buffers from files, and to save buffers to files. This package also supplies filename completion. Most of the code was adapted from Climacs. Abstracted out all Gsharp-specific I/O to ESA-IO. In particular, this means that we now have commands such as C-x C-s, and C-x C-w, which we didn't before. The old I/O code is still there. Cleanup is next.
Reorganized the command tables so that there are command tables that are specific to element types. Implemented find-applicable-gsharp-command-table that determines a command table based on the layer the cursor is in and (if any) the current element. Added `tie-left' and `tie-right' accessors to notes and lyrics elements and commands for modifying the ties. Ties are not rendered yet.
The default key signature of a staff is now represented by an instance of the new class `key-signature', rather than by just a vector. The commands `com-more-sharps' and `com-more-flats' now call new protocol generic functions on the key signature. I used the suggestion from the patch by Christophe Rhodes to introduce a new class `rhythmic-element' below `element' and move slots that have to do with duration to that new class (rbeams, lbeams, dots). The `key-signature' class does not inherit from `rhythmic-element', but instead directly from `element'. In order to avoid having to alter the external format yet again, the reader tests whether a vector was read as the key signature, and if so, replaces it by an instance of the new class. As a nice side effect, I was able to remove the symbol `invalidate-everything-using-staff' from the list of exported symbols of `measure.lisp', because it is now used by the :after methods on `more-sharps' and `more-flats', defined in the same package. What I haven't done (I'll let Christophe do it, unless he takes too long) is to incorporate the parts from Christophe's patch that make it possible to insert key signatures as elements into layers.
Embryonic key signature protocol.
Changed the external format for buffers. Instead of dispatching on a single letter we now put the full name of the class to instantiate in the external format. This modification will make it easier to extend the buffer with new kinds of objects, both for the Gsharp developers and (ultimately) for the advanced users. For that to happen, the buffer protocols will have to be documented, of course.
Removed some dead code. Prepared Gsharp for handling timelines and measures of zero duration. This conversion is not entirely finished yet, but there is not much left.
Fixed a bug reported by Christophe Rhodes. The symptoms were that the stems were not recomputed when the clef of the staff was changed. In fact, all elements that display on a staff need to be invalidated when the clef of the staff changes. Again, I used only the CLIM Desktop to accomplish this modification.
Patch to allow the current note to be deleted. (thanks to Robert J. Macomber)
added more comments to improve maintainability
rescue MAKE-LAYER: make the gui.lisp command call it with a list of one staff, and make the constructor functions &allow-other-keys. (Possibly the &a-o-k should instead be just an additional keyword argument NAME).
Improved on the constructors for buffer-related classes.
More constructors added.
Put back some more constructors. Two things need to be fixed ultimately: * Clefs should not be named objects. Instead, the exact type should probably be identified by subclassing * There is not compelling reason for bars to be subclassed. The distinction between melody and lyrics (and percussion, ultimately) is enough to enforce at the level of the layer.
Put back some of the constructor functions. Added more documentation about buffer protocols.
Removed the function MAKE-INITIALIZED-SEGMENT
Removed make-lyrics-element and make-empty-segment
Removed MAKE-CLUSTER and MAKE-REST in favor of MAKE-INSTANCE 'CLUSTER and MAKE-INSTANCE 'REST
Removed the function MAKE-LYRICS-STAFF in favor of MAKE-INSTANCE 'LYRICS-STAFF
Removed the function MAKE-FIVELINE-STAFF in favor of MAKE-INSTANCE 'FIVELINE-STAFF.
Removed MAKE-CLEF in favor of MAKE-INSTANCE 'CLEF
put back the lost type information, this time in the class definition
Removed the function MAKE-NOTE in favor of MAKE-INSTANCE 'NOTE
Got rid of ELEMENT-DURATION in favor of just DURATION by converting a :before method to an :around method.
Extracted midi-related computations to a new file: play.lisp Renamed notehead-duration to undotted-duration, which better reflects the intention.
Finished factoring out code to initialize parent slots from readers to :after methods of initialize-instance. Fixed a bug in numbering.lisp, where :after method specilized on layer instead of nlayer.
Removed support for V2 files. I do not think Gsharp is sufficiently widely used that we have to care about legacy scores. Started moving code for initializing parents of various buffer elements from the reader function to :after methods on initialize-instance. This move allowed some factoring of code to a common superclass.
Factored out named objects in a mixin class Cleaned up print-object by using method combination and a base class for all buffer objects.
Gsharp definitely has lyrics. When a lyrics layer is selected, the ordinary alphabetic keys append characters to the preceding lyrics element. use C-Space to insert a new lyrics element. Use C-h to erase the last character of a lyrics element. It's a bit clunky, but it works. I seriously doubt the full power of Goatee is needed to edit lyrics. I noticed that (probably unintentionally) McCLIM can handle Unicode texts in the form of vectors of integers to draw-text. It probably just passes them on to the port-specific functions, and it happens to work with clx. It probably won't work on all backends, but it would be nice if it did. The default font on my machine can probably only do character codes up to 255, but with a good font, it should be able to do up to 65535. But right now, I can get the German national characters, which are needed for Bach. Check out the new file Scores/bach181-lyrics.gsh. In it, you will also notice that there is one place in which words overlap. To fix that (which is not just a lyrics problem, but also happens with clusters with many accidentals) Gsharp must learn to compute how much extra room an element might need, and adjust spacing accordingly, Unfortunately McCLIM does not handle input from a US-international keyboard, so I actually had to put in the ü's manually, but it should work for others. With lyrics, MIDI file generation is most likely broken, but I haven't checked that yet. It should just skip lyrics layers.
These current modifications are not in a good state yet. Some of them are terribly kludgy, but I do not think anything is broken. New files: modes.lisp containing key bindings sequence-dico.lisp: a dictionary that searches for objects associated with sequences (lists really). Utilities: Added some horribly kludgy Unicode support. Buffer: New types: lyrics-staff, melody-element, lyrics-element, melody-bar, lyrics-bar, melody-layer, lyrics-layer Layers are no longer ordered. Cursor: Removed functionality that used layer ordering. Gui: Removed commands that used layer ordering. Added new commands to navigate, insert, and delete layers. Factored out and improved command processing. Some menus in menu bar work better. Added new presentation methods and types. Still no support for typing lyrics, but you can see them if they are already in a .gsh file. Input state: It no longer contains the staff. Instead the current staff is the first in the list of staves in the current layer. Drawing: We can now draw lyrics. Score pane: Now has a lyrics-staff presentation type.
Staff types, staves, and clef types are now presentation types. Add staff commands prompt for existing staff and name, type, clef types, etc. for staff to insert. We still do not verify that staff name is unique. We also need to add completion for staff names. Updated documentation and release notes to reflect changes.
General: removed presentation test code. in gui.lisp Staves as presentations: draw-staff now also takes a staff object as an argument so that we can use the CLIM present function inside draw-staff. added present method for a staff object on a textual view. modified com-inssert-layer-after to take no arguments, but instead to use accept to gather a staff object. Redisplay: pane is no longer cleared after each interaction, so redisplay is much smoother. Filename completion: added completable-pathname presentation type and an accept method for this type. The accept method uses a CMUCL-specific function (ext:ambiguous-files) to complete prefix pathnames. Contributions for other Lisp systems to make this work would be welcome. modified com-load-file and com-save-buffer-as to take no arguments, but instead to use accept to gather its file name. This modification probably should not have been necessary, as CLIM ought to use accept to gather unsupplied arguments, no?
Updates since 0.2 release.
import of 0.2
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|