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.
Export make-key-signature, key-signatures from gsharp-buffer
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".
Remove name conflict from gsharp package; now gsharp loads. (It can't yet handle entering notes; fix in mcclim forthcoming.)
Fixed name conflict.
Add MusicXML support. Initial work from Brian Gruber (funded by Google's Summer of Code); subsequent development by Christophe Rhodes. It's far from perfect now, but it needs checking in so that people can play with it. It adds dependencies (puri and cxml) to gsharp; if this is a problem, we could make gsharp-mxml a separate system. Git logs (from git tree at <http://www-jcsu.jesus.cam.ac.uk/~csr21/git/gsharp-mxml/.git>) follow: commit 994cd15ec9f480be41515e699f22e7de1687d0ca Author: Christophe Rhodes <email@example.com> Date: Mon Sep 24 13:19:41 2007 +0100 Add a restart to the same-duration case. It's not good enough, but it allows interactive fixing key signatures in the middle of the bar. commit cdc2098fac5399303e9515bc81ea65020ec8f109 Author: Christophe Rhodes <firstname.lastname@example.org> Date: Wed Sep 19 11:07:28 2007 +0100 Only add durations from rhythmic elements. commit acc6cb410cd55dfe59eb30fe608b101a62651ae9 Author: Christophe Rhodes <email@example.com> Date: Wed Sep 19 10:45:12 2007 +0100 Whoops. Fix export of notes with no displayed accidentals (from overzealous alteration of CASE -> ECASE commit dd8d72cac434a8c5a1932aa46db6447e08d9b6ad Author: Christophe Rhodes <firstname.lastname@example.org> Date: Wed Sep 19 10:41:09 2007 +0100 Support for longs in MusicXML (import and export) commit eab440b56b086e766dbd405a3fea44d9976f1a1f Author: Christophe Rhodes <email@example.com> Date: Wed Sep 19 09:16:07 2007 +0100 Long ("lunga") patch from HEAD commit 8cb34a4879ebb4dce06d8b99da761dfa6ad24cf9 Author: Christophe Rhodes <firstname.lastname@example.org> Date: Tue Sep 18 15:43:51 2007 +0100 Support semi- and sesqui- accidentals commit 6ba8208d1f8475552a95f35a5e896248110b0efd Author: Christophe Rhodes <email@example.com> Date: Tue Sep 18 15:25:16 2007 +0100 Really support breves (and breve rests) -- on output too. commit a9c36278de0145c12f34123a29815809030b97c2 Author: Christophe Rhodes <firstname.lastname@example.org> Date: Tue Sep 18 15:17:09 2007 +0100 Slightly batched commit (several changes). * support :breve noteheads * better stringcase macro (and use it) * temporarily hack in "full" = "breve" for Goldsmiths use * use ECASE in one or two places to remove compiler warnings. commit 3a3b980576f0d09ddee4de12f6f7b260932a5552 Author: Christophe Rhodes <email@example.com> Date: Tue Sep 18 15:14:54 2007 +0100 Slightly friendlier (with friends like this...) Import and Export commands. Sets the filepath and name of the buffer on import; sensible export default pathname. commit 7d72a2a4a28f9668271189ebaf862518ada34877 Author: Christophe Rhodes <firstname.lastname@example.org> Date: Tue Sep 18 15:13:31 2007 +0100 Whitespace commit b497d6f5111f20f5e8ac9a059578d3caaab1b832 Author: Christophe Rhodes <email@example.com> Date: Mon Sep 17 21:33:29 2007 +0100 space requirements fix from HEAD commit 65d173efbcfa78e5edaf1adb9bceb0f7d619002d Author: Christophe Rhodes <firstname.lastname@example.org> Date: Mon Sep 17 12:04:08 2007 +0100 Update to Brian Gruber's version of 17th September commit 91d98d9e2a8d69418edd264ab6293a2f1dbc5a9f Author: Christophe Rhodes <email@example.com> Date: Mon Sep 17 11:54:53 2007 +0100 Brian Gruber's patch of August 20th
Printing to file. It's still somewhat hacky, but the worst of it is gone: * light glyphs ink is taken from the view, so we can construct a dark ink for light glyphs; * code to draw a single page is shared between the printing and screen-drawing routines; * new-page is called the right number of times; * the user is prompted for a filename (with a sensible default). Remaining stuff to do: * factor out a little bit more shared code between draw-buffer and print-buffer; * when creating the view, copy the current view; * be cleverer about the medium transformation.
Gave the stealth mixin code the right name. Removed unused variable to remove a compiler warning.
Added support for regular temperaments
Depend on external version of midi.lisp rather than bundling it.
Dots! Specifically, augmentation dots. Get their x- and y- positions more right, which sometimes entails not drawing a dot at all, sometimes adjusting the position for a dot downwards, and (when a flag is drawn or there is a suspended note in a flag-up situation) involves shifting the entire column of dots rightwards. Add an example score full of things we got wrong.
Display page numbers in the info pane.
Implemented commands to go to the beginning and to the end of the score, bound to M-< and M-> respectively.
Page break modifications.
Removed references to old font system, including the file gf.lisp.
Removed code (which was not used anyway) for drawing stacks of notes. I intend to do that differently anyway, by having special versions of glyphs for individual noteheads that have other noteheads above or below. Removed references to old GF glyphs of the form +glyph-xxx+. Removed the file charmap.lisp that contained glyph numbers in GF file.
Removed entry "glyphs.lisp" which contained glyphs from Common Music Notaion and that we are now sure that we will not need. Removed entry "postscript.lisp" because we are now sure that we will not need it.
The new font-rendering code is now in there, but is not yet being used. The reason for that is that I still have not managed to get output recording for designs right. Once that problem is fixed, I am planning to gradually move to the new system, debugging the glyphs one at a time. The code for the glyphs has been tested in a separate context, but there might be unforeseen problems. The new system allows designs to be drawn in any color and transformation by being rendered to anti-aliased pixmaps, so there is no need to use special gray pixmaps. It might be worthwhile thinking about moving beam drawing to this new system one day. This font rendering system should be easy for PostScript output, but I haven't attacked that problem yet.
Make Gsharp use the external ESA.
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.
Make rotate-notehead work again for rests. (thanks to Christophe Rhodes).
The code for drawing ties is basically done (score-pane.lisp). The code in drawing.lisp that actually decides how to call the tie-drawing functions is only rudimentary (only upward ties are drawn at the moment).
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.
The code for drawing ties is almost finished. However, since I don't have my copy of Ross handy, I don't know the rules for the placement of ties, so for now, only a blue line between the tied notes is drawn. This is obviously wrong, but makes it possible to verify that the code works. Also, we don't draw a tie if the tied notes are on different lines.
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.
The conversion to allow Gsharp to deal with elements (and thus timelines) and measures of zero duration should now be complete. Of course, there might still be some issues, since I haven't really tested it with elements of zero duration.
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.
Added new generic functions to the SDL package to deal with beam offsets for a particular font. The plan is to modify the beam-drawing functions so that they use these new generic functions, and so that they draw beams relative to the vertical reference point, just like other drawing functions.
Prepared Gsharp for multi-buffer, multi-frame, and multi-view features. This modification involved getting rid of the frame-global `buffer' and `cursor' slots. Now, a new class `gsharp-pane', a subclass of score-pane, contains a slot for a view. The idea is that a pane has a particular view on display, and the view contains the buffer and the cursor to be displayed in the pane. Eventually C-x b will be used to change the view on display in the current pane, C-x k will kill the view (and if it is the last view that displays a certain modified buffer, the user will be asked to confirm), C-x 2 will clone the view into a new top-level window. There will also be commands to alter the class of the current view to obtain parts views etc. At least, this corresponds to my current thinking. This modification was obtained without using Emacs (except for typing this message). Instead I used the CLIM Desktop. Specifically, I used Climacs for editing source code with Swine for incremental compilation and calling Closure to read CLHS documentation, and the CLIM Listener to compile and execute Gsharp. While Climacs and the other tools still have some quirks, I must say I am VERY impressed with what they can already do.
Removed the cursor-drawing code from the score-drawing functions. Instead we now store the x and y positions and the width of each bar. Cursor drawing is now implemented as looking up those stored values and draing the cursor based on them.
Fixed a bug in the computation of the timelines. Added elasticity.lisp to gsharp.asd. Prepared the MEASURE class for holding an elasticity function.
More code towards a better spacing algorithm
Move the computation of final relative accidental x offsets from drawing.lisp to measure.lisp.
moved the computation of the final accidental (determine whether one should be displayed or not according to the key signature) from drawing.lisp to measure.lisp.
moved the computation of relative x offsets of notes from drawing.lisp to measure.lisp. This required some reorganization of packages.lisp and gsharp.asd as well.
moved computation of final stem direction from drawing.lisp to measure.lisp
Moved some more code from drawing.lisp to measure.lisp
Patch to allow the current note to be deleted. (thanks to Robert J. Macomber)
Started moving code from drawing.lisp to measure.lisp in order to prepare for computing physical widths earlier.
Sync esa with climacs. Implement FIND-APPLICABLE-COMMAND-TABLE.
Improved on the constructors for buffer-related classes.
remove the numbering stuff in favor of just calling POSITION each time. We are likely going to change the representation of sequences from lists to something more elaborate anyway (where it matters), so the numbering will not be relevant in the future.
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
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.
Improve and rename main entry point to `gsharp'. Export that symbol from the gsharp package.
Extracted midi-related computations to a new file: play.lisp Renamed notehead-duration to undotted-duration, which better reflects the intention.
Really make gsharp and climacs coexist
fixed some minor problems
Climacs is now an ESA (Emacs-style application) using the new package that was abstracted out of Climacs.
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.
added preseentation types for staff and clef in score pane. score pane is no longer `use'd by other packages, exported symbols from score pane are explicitly prefixed by client code. removed presentation type for staff-line in score pane.
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.
Unclean! Unclean! Sanitize the packages so that we can refer to types called REST and functions called NUMBER without violating ANSI 220.127.116.11.2. Also define a "compatibility layer" for our new symbols.
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|