Muse2ps feature requests and bug reports
This page list feature requests and bug reports for muse2ps which is a command-line typesetting program for MuseData.
Bugs
Text starting with a digit
Lyric text cannot start with a digit. It would be useful for displaying analytical data if lyric text can start with a digit. Example data:
Header Record 1: optional copyright notice Header Record 2: optional file identification TIMESTAMP: MAR/19/2011 [md5sum:0d0a:d18c08728833c68ab4d3dc6687fe95bd] 03/19/2011 C. Sapp WK#:1 MV#:1 Header Record 6: source Header Record 7: work title Header Record 8: movement title Header Record 10 Group memberships: score score: part 1 of 1 $ Q:1 C:4 C4 1 1 q a D4 1 1 q 2 E4 1 1 q c3 /END /eof // |
The current output from muse2ps for this data is:
But it would be preferred that the second note (D4) have a "2" shown below it.
Chord text
Lyric text attached to chords has to be placed on the last note listed in a chord. However, it seems more logical to place the text on the first note of the chord. In any case, the position of the text in the chord data is not specified in the MuseData stage2 specification.
Header Record 1: optional copyright notice Header Record 2: optional file identification TIMESTAMP: MAR/21/2011 [md5sum:0d0a:d26153bf39ade160d1aaeafc54a33b39] 03/21/2011 C. Sapp WK#:1 MV#:1 Header Record 6: source Header Record 7: work title Header Record 8: movement title Header Record 10 Group memberships: score score: part 1 of 1 $ Q:1 C:4 C4 1 1 q a1 E4 1 1 q a2 G4 1 1 q a3 D4 1 1 q b1 F4 1 1 q b2 A4 1 1 q b3 E4 1 1 q c1 G4 1 1 q c2 B4 1 1 q c3 /END /eof // |
The above MuseData generates the following notation:
A related bug pertains to the vertical positioning of text under chords. The following example places lyric text incorrectly at Y0.
Header Record 1: optional copyright notice Header Record 2: optional file identification TIMESTAMP: MAR/21/2011 [md5sum:0d0a:588c1efb9cfeb7c13fc6e13d88751cf6] 03/21/2011 C. Sapp WK#:1 MV#:1 Header Record 6: source Header Record 7: work title Header Record 8: movement title Header Record 10 Group memberships: score score: part 1 of 1 $ Q:1 C:4 G4 1 1 q d F5 1 1 q d A B4 1 1 q d G5 1 1 q d C D5 1 1 q d B5 1 1 q d E F5 1 1 q d D6 1 1 q d G /END /eof // |
which generates this graphical notation:
If there is a lyric text indicated on the first note of any chord in this example (which will not be printed), then the text will be placed in a better vertical position. Any single note with text attached to it will generate the proper vertical positioning, so some part of the code which assigns the vertical position is not triggered when the text is attached to the last note of a chord (which is the necessary location at the moment).
Placing a dummy marker on the first note of any chord in the above exmaple will cause the vertical position of the text to be corrected:
Header Record 1: optional copyright notice Header Record 2: optional file identification TIMESTAMP: MAR/21/2011 [md5sum:0d0a:588c1efb9cfeb7c13fc6e13d88751cf6] 03/21/2011 C. Sapp WK#:1 MV#:1 Header Record 6: source Header Record 7: work title Header Record 8: movement title Header Record 10 Group memberships: score score: part 1 of 1 $ Q:1 C:4 G4 1 1 q d dummy text F5 1 1 q d A B4 1 1 q d G5 1 1 q d C D5 1 1 q d B5 1 1 q d E F5 1 1 q d D6 1 1 q d G /END /eof // |
Tilde and newline conflict in =C option
When a n-tilde is needed in the Compser's name, the escape sequence "\n1" is neede for creating the character ñ. However, the escape sequence "\n" marks a newline for a secondary line underneath the composer (used for an opus number, for example). Therefore, some other method of indicating a newline is needed to replace "\n".
Spacing of dummy time signatures
When a time signature is not given at the start of the music, the space between the clef and the first note is good. When a dummy time signature is given (such as T:9/0), there is extra space added between the clef and the first note which appears to be the width of a cut-time metrical sign. It would probably be a good idea to set the width of a dummy time signature to 0. Illustration of the extra space and comparing between the various time signature settings:
MuseData for example: sanctustimesig.md2.
Systembreak interaction with editorial accidentals
When an editorial accidental is placed on a note which is tied over a system break, a regular-style cautionary accidental is placed on the tied note on the next system. This cautionary accidental should instead be in the same style as the editorial accidental.
MuseData for example: editorialbreak.md2.
Feature Requests
Echoing initial comment lines with =M
It would be useful to echo comments from the start of the muse2ps input data (which are commonly used to store muse2ps formatting options) into the data comments created with the =M option. In addition, any text after the /END> line (or /FINE line, but before the /eof line should be echoed into the PostScript comments related to the =M option. This feature is needed to preserve muse2ps options with the embedded MuseData, as well as transmit page footer information to programs further down the command pipeline.
Exmaple Data:
@muse2psv1==z21 @Another comment & A multi line comment & Header Record 1: optional copyright notice Header Record 2: optional file identification TIMESTAMP: MAR/06/2011 [md5sum:0d0a:ecbfb55db87913926a9e309fdfcef99d] 03/06/2011 C. Sapp WK#:1 MV#:1 Header Record 6: source Header Record 7: work title Header Record 8: movement title Header Record 10 Group memberships: score score: part 1 of 1 $ K:0 Q:4 T:4/4 C:4 C4 16 1 w mheavy2 /END Here is some text after the end of the data in the partfile which should be preserved. /eof //
Current results of =M:
%=BeginMuseData: 1 %=Header Record 1: optional copyright notice %=Header Record 2: optional file identification %=TIMESTAMP: MAR/06/2011 [md5sum:0d0a:ecbfb55db87913926a9e309fdfcef99d] %=03/06/2011 C. Sapp %=WK#:1 MV#:1 %=Header Record 6: source %=Header Record 7: work title %=Header Record 8: movement title %= %=Header Record 10 %=Group memberships: score %=score: part 1 of 1 %=$ K:0 Q:4 T:4/4 C:4 %=C4 16 1 w %=mheavy2 %=/END %=EndMuseData: 1
Desired output of =M
%=BeginMuseData: 1 %=@muse2psv1==z21 %=@Another comment %=& %=A multi line comment %=& %=Header Record 1: optional copyright notice %=Header Record 2: optional file identification %=TIMESTAMP: MAR/06/2011 [md5sum:0d0a:ecbfb55db87913926a9e309fdfcef99d] %=03/06/2011 C. Sapp %=WK#:1 MV#:1 %=Header Record 6: source %=Header Record 7: work title %=Header Record 8: movement title %= %=Header Record 10 %=Group memberships: score %=score: part 1 of 1 %=$ K:0 Q:4 T:4/4 C:4 %=C4 16 1 w %=mheavy2 %=/END %=Here is some text after the end of the data in the partfile which %=should be preserved. %=EndMuseData: 1
Empty first line in =C option
When the first line in a multi-line =C option is given, an error is produced by muse2ps:
=C^\nSecond line^
Run-time error: string subscript 1 of variable: is out of bounds subscript = 15, current length = 14
It would be preferable if muse2ps could handle an empty string on the first line of a =C option, or less preferable in this specific case, print a more user-friendly error message as to the cause of the error. A similar error message will occur if ^ markers are not matched in options. An error message such as "unmatched ^ marker for option T on line xxx would be useful.
Clef/key/time signature suppression at indented line breaks
It would be useful to create a print suggestion which suppresses printing of cautionary time singature, key signature or clefs at the end of a line, particularly when an indented line break code is used. Alternatively, suppression of cautionary symbols at the end of systems before an indented line break could be a hard-coded default (similar to the repetition of the instrument names at the start of the system at indented line breaks). In the following example, it is desired to suppress printing of the region marked in red.
MuseData for example: indentsuppress.md2.
Initial measure number
For short examples which do not start at measure 1, it would be useful to allow adding a bar number at the start of the music.
Stage 1 preprocessing of data
It would be useful to add components of the stage1 → stage2 process: (1) have an option which turns on automatic determination of stem directions, (2) have an option which turns on automatic determination of beaming. These would preferably be separate options, since it is more likely that input data from other sources would have beaming information, but not stemming information.
Finished features and fixed bugs
Independent barline styles
MuseData for example: polybar.md2.
Invisible time signatures
Allow for "invisible" time signatures.
MuseData for example: notime.md2.
Invisible barlines
Allow for "invisible" barlines (such as ending a short example with an incomplete barline).
Here is an example of an implicit invisible barline which is created by not placing a barline at the end of the music:
MuseData for example: nobaratend.md2
And here is an example of an explicit invisible barline which is created by inserting an invisible barline in the data:
MuseData for example: invisible_barline.md2
Paper size in PostScript DSC comments
Add the following line at the end of the DSC comment header in the PostScript output:
%%DocumentPaperSizes: Letter
For example:
%!PS-Adobe-3.0 %%BoundingBox: (atend) %%HiResBoundingBox: (atend) %%HiResSystemBox: 59.76 95.76 552.00 722.64 %%Creator: muse2ps 1.0 %%CreationDate: Thu Dec 23 10:48:53 2010 %%Orientation: Portrait %%Pages: 1 %%PageOrder: Ascend %%DocumentPaperSizes: Letter %%EndComments
Reference: http://en.wikipedia.org/wiki/Document_Structuring_Conventions