Muscript is a language for typesetting music, and a Perl script and a Lua script which translate this language either into PostScript, or into Encapsulated PostScript, or into MIDI, or into MusicXML, and there is a script muscriptps2svg to translate muscript into SVG. Muscript was written by Peter Billam to typeset his own compositions and arrangements. This page describes its History of Recent Changes.
3.4h, 25jul2023, muscript_lua handles % in multiline text variables
3.4g, 05apr2023, muscript_lua stems-down with beams works same as muscript_pl
3.4f, 23sep2022, -xml works even when no midi channel is given
3.4e, 28apr2022, muscript_lua, handle bit operations under lua5.4
3.4d, 05apr2022, fixed important midi_general bug
3.4c, 24nov2021, muscript_pl rewritten without $[=1;
3.4b, 13nov2021, make bre a bit fatter
3.4a, 29oct2021, muscript_lua, for windows, use io.stderr not /dev/tty
3.3x, 04sep2021, muscript_pl, catch up with muscript_lua
3.3x, 04sep2021, muscript_lua, adjust the ticks for slide-11-0-100
3.3w, 14aug2021, muscript_lua, introduce slide-11-0-100
3.3v, 22mar2021, better stemlength of min or cro with tremolando
3.3u, 07mar2021, -x and -sx cross-head notes for non-percussion clefs
3.3t, 02feb2021, muscript_lua, variables handle "$F rest $FF"
3.3s, 27apr2020, better spacing of "\4 = 80 \4. = 80" texts
3.3r, 16feb2020, better placement of tremolandi on unbeamed quavers
3.3q, 15feb2020, tremolandi work also on beamed 8// and 16//
3.3p, 22jan2020, split ps_tails_or_beams into ps_ntails and ps_nbeams
3.3o, 19jan2020, text can contain rhythms eg: \4. = 72
3.3n, 13jan2020, tremolando working on unbeamed quavers
3.3m, 12jan2020, fix pitches B__ and A__ in midi
3.3l, 10jan2020, muscript_lua, split midi options correctly
3.3k, 29nov2019, add percussion clef and notes
3.3j, 15dec2018, muscript_lua, fix a crash with an empty "3 bars" line
3.3i, 18oct2018, muscript_lua, fix -I"sf" quoted note-options
3.3h, 16oct2018, muscript_lua, fix a nil bug in xml_transpose
3.3g, 10jul2018, muscript_lua, add zipf generator, and use randomseed
3.3f, 19may2018, muscript_lua, ps_pagenum converts explicitly to integer
3.3e, 09mar2018, muscript_lua, continued lines \$ and bend-3 work again in 5.3
3.3d, 09feb2018, quadruplet rhythms (eg: 164) work in xml
3.3c, 25jan2018, tripledotted rhythms work
3.3b, 19jan2018, muscript_lua, fixed current_bend()
3.3a, 23nov2017, muscript_lua, Istave must be a number
3.2z, 24jul2017, muscript_lua, defends against missing bars line
3.2y, 11jul2017, muscript_lua, defends against missing bar-spacing
3.2x, 08jun2017, muscript_lua, defends against nil Ytable lookup
3.2w, 04jun2017, muscript_lua, newstave defends against bad stave line
3.2v, 28may2017, muscript_lua, systems defends against missing staveheight
3.2u, 28may2017, #M and #P lines now work in multi-line variables
3.2t, 08may2017, muscript_lua, fixed -gs option under -xml
3.2s, 07may2017, muscript_lua, fixed undefined istave in line 3954
3.2r, 17aug2016, muscript_lua, fixed
midi global transpose
3.2q, 11jul2016, muscript_lua, when setting multi-line variables,
now handles empty lines
3.2p, 16apr2016, fixed ps_beam with stemup beams over accidentals
3.2o, 13apr2016, only raise the dot if its note is on a line
3.2n, 12apr2016, neater dotted bre and smb rests
3.2m, 09apr2016, handles 64 rest and septuplets in
english rhythm-syntax
3.2k, 07mar2016, helpful error message for
missing newbar ( | )
3.2j, 23jan2016, clefs within a bar are not left-spaced as far
3.2i, 11jan2016, fix a bug in large -cre90-dim90 options
3.2h, 09jan2016, a Lua translation introduced, and in consequence:
much tidying of the code, consistent GlobalVariable and local_variable
spelling adopted
3.2g, 19dec2015, various bug-fixes;
scoping error fixed for $accidental in ps_note()
3.2f, 24aug2015, in-bar barlines introduced
3.2e, 27may2015, play command introduced to play wav files
3.2d, 07may2015,
clefspace now takes the same space as clef if ibar>1
3.2c, 03dec2014,
the -pp pre-processor now preserves and expands
#P and #M lines, and preserves
# comments
3.2b, 27nov2014,
ties with cha1+2
(see 3.1v) now work with midi
3.2a, 21nov2014,
introduce
the midi-in-stave bend option
3.1z, 21jul2014,
introduce septuplets eg. 167 [G A G A G A G]
3.1y, 16jul2014, workaround: ignore -gs options in xml
3.1w, 29jun2014, bug fixed:
cc64=127
was incorrectly seen as "not a note"
3.1v, 16may2014,
Sos pedal fixed;
stave2channel => stave2channels, allowing
cha3+7+11
3.1u, 14may2014, bugs fixed in
midi cents
which can now be more than a semitone; and
the transpose option
allows transposition of all notes in a channel
3.1t, 06jul2014, StartedSlurs{istave} not {istave,stemup}
3.1s, 05jul2013, round the starttime in sub midi_event
3.1r, 04jul2013, the
title scales with the average maxstaveheight
3.1q, 01jun2013, midi-relevant
options work in midi on
rests
even when the rest is moved up or down with ' or ,
3.1p, 31may2013,
Una prints Una Corda,
Tre prints Tre Corde
3.1o, 20mar2013,
smq-s rests are printed small
3.1n, 19mar2013,
introduced
Sos, *Sos, Una and Tre pedal-options
3.1m, 13mar2013,
try to adapt to perl 5.14
3.1k, 04mar2013,
introduced patterns
random and
aaba
3.1j, 24jan2013,
bug fixed in the height2cross mechanism (see 2.8p)
3.1i, 11dec2012,
midi-options are respected on rest and blank,
e.g. "blank-P", and a bug-fix: variable-substitution in
generators
no longer gets forced.
3.1h, 20oct2012,
#M (if Midi) and
#P (if PS or Xml)
3.1g, 13sep2012, check
midi bank msb,lsb command
for syntax, and make lsb optional
3.1f, 08mar2012,
midi barlines on command,
for use by
midi2muscript
3.1e, 11feb2012,
fix bug in
rabbit; missing my @list
3.1d, 09oct2011,
64th-notes
are correctly spaced in Postscript output, and the piano
Pedal
is always printed beneath the note.
3.1c, 04sep2011,
no
substitution
is attempted in comment-lines
3.1b, 03sep2011,
back to the $VAR= syntax for
variable definition
3.1a, 02sep2011,
variables,
including recursively defined variables and
generator functions
3.0i, 23apr2011,
command-line option -pp to do
pre-processor
only, with
variable-setting and substitution,
and producing muscript output
3.0h, 20apr2011,
can invoke
a generator
with a new argument-list
3.0g, 18apr2011,
basic variable-setting,
including simple
generator-functions
3.0f, 22oct2010,
the ben55
midi-in-a-stave option
allows setting of pitch-bend
3.0e, 22jul2010,
the cc73=108
midi-in-a-stave option
allows setting of arbitrary
MIDI Contollers
3.0d, 14jun2010,
warning if there seems to be a slur or tie inside a
text-option
3.0c, 13jun2010,
comments within
midi-global commands are introduced
3.0b, 02apr2010,
the -P and -* midi-note-options are introduced
3.0a, 05feb2010,
rests
can be shifted up or down more than three steps
2.9z, 28dec2009,
handles unfinished
beams more gracefully,
and allows more space for fat
timesigs
2.9y, 23nov2009,
fix spacing of the lower voices with multiple voices with
0 keysigs on the same stave
2.9x, 9nov2009,
at last, perldoc is introduced
2.9w, 17sep2009,
bug in stem-down beam-stubs fixed
2.9v, 15sep2009,
64th-notes (hemidemisemiquavers) introduced,
and 32nd- and 64th-note beams keep clear also of their initial and final blobs
2.9u, 7sep2009,
use ps_tails_or_beams
to tidy 2.7v code
keeping beams on-staff and clear of ledger-lines
2.9t, 6sep2009,
smq and dsq beams
avoid their note-blobs more carefully
2.9s, 1aug2009,
midi gm,
midi temperament and
midi cents introduced; also the
in-a-stave 'pan' command
2.9r, 28jul2009,
midi bank msb,lsb
command introduced
2.9p, 3jul2009,
multiple vertical-shift of
ties and slurs
2.9o, 5jun2009,
accidentals before small notes (-s)
now get moved proportionately closer to their note
2.9n, 20may2009,
16-s
gets correctly mapped to smq-s, not to smb6-s
2.9m, 7may2009,
topmargin
is no longer ignored if there's just one system
2.9l, 4may2009,
global midi commands
are now ignored if $Midi_off
2.9k, 6apr2009,
the tremolando code rewritten;
now does brille-bass minims
2.9j, 29mar2009,
warns about unrecognised syntax,
and handles | =1...
in midi and xml as well as in PS
2.9i, 10mar2009,
handles utf8 OE and oe-ligatures (fr)
2.9h, 28jan2009,
bug fixed in total_chord_options
2.9g, 12jan2009,
when running off the end of the first page. the
title gets prepended to the innerheader
2.9f, 8jan2009,
new commands:
midi off and midi on
2.9e, 6jan2009,
leftfoot remembered correctly page-to-page
2.9d, 5jan2009, ps_note_options on beams gets correct $X argument
2.9c, 10nov2008, -blank-
note-option can be written -- again (see 2.7d)
2.9b, 2nov2008, handles utf8 encodings of the latin1 chars in
titles and headers,
words and
text-options
2.9a, 1nov2008, international
rhythm notation introduced
2.8z, 30oct2008, moved
note-options
at the end of a stem, to being horizontally centered
half-way between the stem and the centre of the blob
2.8y, 23sep2008, bug fixed; removed redundant barline calls
2.8x, 6sep2008, bug fixed in the code
keeping beams within the stave-lines
2.8w, 19jul2008, fixed the -p option
2.8v, 18feb2008, subroutine xml_transpose introduced,
and DOCYTPE specifies MusicXML version 1.1
2.8u, 13feb2008,
xml transpose
uses <transpose> not <alter>
2.8t, 12feb2008, beam rendered more correctly in xml output
2.8s, 3feb2008, unfinished
ties overhang the right margin
2.8r, 25jan2008, subroutine ps_is_stemless introduced
2.8q, 23jan2008, subroutine old_parse_note removed
2.8p, 22jan2008, much neater
leftward shifting of accidentals
on neighbouring notes
2.8o, 21jan2008, the
"0" keysig now works after a clef
2.8n, 27nov2007, omit SpaceRightOfClef after
a clef at the end of a bar
2.8m, 19nov2007, brackets escaped in PostScript
titles, headers and footers
2.8l, 18nov2007, eval eliminated from persistent
headers to cure a bug with single-quotes
2.8k, 7nov2007, the
boundarybox command generates EPS
2.8i, 27oct2007, unite the PS tieabove and
tiebelow routines into tie, and tidy the code
2.8h, 26oct2007, remove the useless PostScript stroke
from fill stroke in the quaver rest routines, and regularise the
argument order in the stave routine.
2.8g, 6oct2007, midi volume never falls below 1,
and consistent indication of line-numbers in error-messages
2.8f, 22sep2007, in midi, append a "final_barline" marker
to express any terminating rest
2.8e, 20sep2007, correct line-number displayed in error messages
2.8d, 14sep2007, removed spurious "reset 0" debug message
2.8c, 12sep2007, introduce the
keysig "0", to return to Cmaj
2.8b, 10sep2007, double-bars and repeat-marks
scale properly with staveheight
2.8a, 27aug2007, new stricter
note-format;
e.g. allows brackets in text-note-options
2.7y, 10aug2007, bug fixed in persistence of headers and footers
2.7x, 9aug2007, bug fixed in smq and dsq beams in stem-down notes;
and in beam gradients when beams are moved clear of ledger-lines
2.7w, 2aug2007, vertical spacing of
rests (e.g. rest'' and rest,,) is respected within chords
2.7v, 29jul2007, beams stay on the staff and clear of ledger-lines
for better clarity
2.7u, 26jul2007, stem-down smq-s and dsq-s beams spaced correctly
2.7t, 21jul2007, smb and min rests get ledger lines when they're
outside their stave
2.7s, 7jul2007, bracket thickness fixed, double-bar neater
2.7r, 6jul2007, barline thickness reduced slightly
2.7q, 3jul2007, barline thickness non-zero in page 1 system 1
2.7p, 30jun2007, dim and cre note-options take no space
2.7o, 21jun2007, barline notestem and bracket scale
with staveheight; and cut out a superfluous zero-length beam.
2.7n, 19jun2007, duplets, quadruplets, quintuplets and sextuplets
2.7m, 1jun2007, naming of subs xml*timesig improved,
-i"s"
note-options handled correctly,
and -i"s "
note-options placed correctly.
2.7k, 26may2007, dsq rest at last!
and a bug fixed: &ps_pagenum not &pagenum
2.7j, 21may2007, sub ps_finish_ties finishes slurs also
2.7i, 18may2007, subroutines all renamed midi_* or xml_* or ps_*,
and &round used instead of int(0.5+
2.7h, 16may2007, subroutines grouped by Midi/Xml/PostScript,
and several renamed midi_* or xml_* or ps_*
2.7g, 15may2007, the final barline can be absent, eg
bars |16|16|8
2.7f, 12may2007, Helvetica-Bold not HelveticaBold
in the PostScript of the -gs note-option
2.7e, 10may2007, fix missing newpath
in the PostScript of the -gs note-option
2.7d, 8may2007, -blank- note-option can be written --
2.7c, 29apr2007, fixed bugs in linenum after \,
and in midi rendering of ties changing from above to below, e.g. )1(2
2.7b, 23apr2007, -gs note-option for printing the
guitar-string number in a circle
2.7a, 16apr2007, -cre and -dim note-options
allow crescendo and diminuendo within a note
2.6v, 15apr2007, fixed bug in midi note-options
2.6u, 10apr2007, fixed cache-clobber bug in note-options
2.6t, 3mar2007, fixed spurious-warning bug in xml midi-new-bar
2.6s, 23feb2007, the
tra midi-in-stave command
is expressed in the xml <alter> element
2.6r, 18feb2007, blanks are expressed by xml <forward>,
and a bug fixed in the multiple-tempi-within-a-bar handling
2.6q, 17feb2007, xml handles multiple tempi within a bar
2.6p, 16feb2007, newsys cmd "/" doesn't need a following bars cmd
2.6o, 15feb2007, xml release note-attribute rounded to integer
2.6n, 15feb2007, xml dynamics note-attribute expresses
the emphasis option
2.6m, 15feb2007, xml transpose attribute expresses
the midi-in-stave transpose command
2.6k, 15feb2007, xml dynamics note-attribute expresses
the midi-in-stave volume command
2.6j, 15feb2007, xml tie element (for sound) as well as tied
(for notation), and the release note-attribute expresses the staccato option
2.6i, 14feb2007, xml release note-attribute expresses the
midi-in-stave legato command
2.6h, 11feb2007, xml title and credit (= leftfoot)
2.6g, 10feb2007, xml font-style adds italic to sub xml_text
2.6f, 9feb2007, xml tempo, and channels using <instrument>
2.6e, 6feb2007, xml midi channels, patches and pan
2.6d, 4feb2007, xml triplets, and beam number attribute,
and vertical positioning of rests with rest' and rest,
2.6c, 2feb2007, xml_text specifies default-y
2.6b, 1feb2007, xml_text uses @xml_cache, not just print,
and <staves> output only once unless it changes
2.6a, 1feb2007, xml{voice} re-zeroed every bar
2.5z, 31jan2007, xml barlines and repeats
2.5y, 30jan2007, xml timesig and keysig only specified once per stave
2.5x, 30jan2007, xml attributes output in correct DTD order
2.5w, 19jan2007, xml null keysig only output once per stave,
and display-step and display-octave for rest''
2.5v, 18jan2007, xml accidental introduced
2.5u, 18jan2007, xml spurious null keysig bug fixed,
tautologous clefs and keysigs suppressed at new-system time,
and display-step and display-octave for rest''
2.5t, 17jan2007,
xml <clef> specifies sign, for alto & tenor clefs
2.5s, 16jan2007,
for musicxml2ly's sake, xml <voice> specified for every note,
and a <key> specified even when there isn't one.
2.5r, 16jan2007, bad bug fixed in %xpart in PostScript output
2.5q, 16jan2007, xml text
2.5p, 13jan2007, xml note-options, clefs, timesigs, keysigs
2.5n, 12jan2007, first working
MusicXML output
2.5m, 24dec2006, in PostScript, the note kept as a hashref after
its 1st parse; 10% speed improvement
2.5k, 22dec2006, sophisticated vertical slur-and-tie-spacing
2.5j, 21dec2006, subs start_thing and end_thing allow a slur and
a tie to begin (or end) at the same note
2.5i, 18dec2006, sub parse_note now returns an assocary_ref
2.5h, 27nov2006, bug fixed with -s0 option
2.5g, 11oct2006, useless regexps removed from dypitch, ypitch
2.5f, 11oct2006, cacheing parse_line on
option strings saves several percent execution time
2.5e, 10oct2006, regexps involving \/ changed to m{}
2.5d, 7oct2006, fixed bug with a comma at the end of a text-option
2.5c, 17sep2006, more PerlBestPractices-conformant
2.5b, 17sep2006, fixed bug in the -blank option
2.5a, 12sep2006, vertical slur-and-tie-spacing with {'1 etc,
and more sophisticated vertical spacing of multiple options on a single note.
2.4p, sep2006, -up and -down note-options for up-bow, down-bow
2.4n, sep2006, adjustable chorus effect on MIDI channels
2.4m, sep2006, adjustable vibrato on MIDI channels and in stave
2.4k, sep2006, adjustable reverb on MIDI channels
2.4j, aug2006, fixed bug to really allow
spurious MIDI timesig events to be suppressed
2.4i, aug2006, comment appears as "marker" in MIDI mode
2.4h, jul2006, fixed spurious MIDI timesig events every newline,
and a bug with "midi channel 0" or "patch 0"
2.4g, jul2006, stereo panning of MIDI channels
2.4f, jun2006, fix longstanding PS stack leak in f_clef and g_clef
2.4e, apr2006, fix midi bug in multiply-tied notes e.g.
A(2 A)2(2 A)2
2.4d, apr2006, fix midi Segno bug
2.4c, mar2006, horizontal proportions take account of
SpaceAtBeginningOfBar
2.4b, jan2006, fix bug with ' in later-than-1st chord notes
2.4a, jan2006, new ".." syntax for text options,
and new {1 }1 syntax for slurs,
with the previous (1 )1 now being used only for ties.
2.3i, jan2006, fix midi startedslurs bug
2.3h, nov2005, more sophisticated beam gradient algorithm
2.3g, may2005, midi handles endslur and starttieorslur
on the same note
2.3f, may2005, midi handles minim beat in alla breve timesigs,
and accidentals persist if tied over from previous bar
2.3e, may2005, explicit clef with no keysig nulls the keysig,
and %ytable is needed in Midi to keep track of slurs
2.3d, may2005, fix div/0 bugs on empty stave (=1) lines
2.3c, apr2005, index.html not manual.html
2.3b, apr2005, leg & vol abbreviations; vol+ and vol- increments
2.3a, apr2005, -midi uses MIDI::Score to generate MIDI output
2.2g, mar2005, small notes handle 'x' and dot positioning
2.2f, mar2004, un-ended slurs end at nearest :|| , else EOL
2.2e, aug2003, bug fix in clef placement at BOL with a repeat mark
2.2d, aug2003, clef at start of bar respects repeat-mark
and double-bar
2.2c, aug2003, doubleflat bug fixed, and doublesharp introduced
2.2b, aug2003, un-begun slurs start at nearest double-bar, else BOL
2.2a, jul2003, segno now supported
2.1k, may2003, clefspace 'not a note' bug fixed
2.1j, mar2003, compromise & auto PageSizes introduced;
default now a4 again
2.1h, feb2003, bug fixed with spaceatstart{1} being double-counted
2.1g, feb2003, by default will autodetect US Letter pagesize
2.1f, jan2003, barline spacing respects timesigs and keysigs
2.1e, dec2002, horiz spacing above first stave in system now fixed
2.1d, nov2002, smb-s supported; smb can be small
2.1c, sep2002, breve rests are now supported
2.1b, sep2002, "bre" breves are now supported
2.1a, jul2002, "r0.4 gloop .75 gleep" horizontal spacing of text
2.0p, jul2002, rest,,, and rest''' and min-s; 8va rewritten
2.0n, may2002, infinite loop bug fixed if a < bracket
is left open, and "x" in a text option is now handled correctly
2.0m, apr2002, -I{some text} option introduced
2.0k, mar2002, clefspace at BOL, & keysig memory bug fixed,
options work on rest and blank which now use print_event like notes do
2.0j, sep2001, retain previous clef and keysig on new systems,
regenerates bars, systems and headers, add mordent option,
centreshow adjusts y as well (needed for options)
2.0g, sep2001, expand also 6 bars |8|
2.0f, sep2001, autoincrement pagenums, and systems expansion
2.0e, sep2001, ties at eol improved,
text options added, x and r on smbs consistent with other notes
2.0d, aug2001, bugs fixed with smb//, with &y_below_note,
with tremolando on stemup chords, and with ( or ) first char in a string
2.0c, aug2001, smb <ar g> works
2.0b, aug2001, fermata printed upside down if beneath stave
2.0a, aug2001,
top gaps can be reserved above the first system;
ties go to midline of notes by default,
have a maximum gradient and are neater when squeezed;
small notes have small stems and beams; the blank option is available.
1.8n, 3aug2001,
bugs fixed in dsq beams and small stems
1.8m, 1aug2001,
refine spacing of keysig
1.8l, 3jul2001,
attach stems to small crochets
1.8j, 6apr2001,
options below staff seem to work,
fix bug with smq. [d dsq c qua B] beams,
first try at -s small notes,
-s makes accidentals small too,
fix keysig spacing in midline
1.8i, 4apr2001,
highestsmb calculated correctly,
first try at options beneath note,
try to get options below beams working
1.8h, 5mar2001,
does -emph note option,
fix hangover repeat at BOL bug
1.8g, 4jan2001,
allows f~~ .. A__ pitches,
add -ten tenuto option,
fix bug with barcount if || doublebar
1.8f, 20aug2000,
x shifts accidental, multiple r rightshifts
1.8e, 2may2000,
does -p and -s, beginning of sub words,
beginning of tremolandi, eg smb//,
tremolandi seem to be working
1.8d, 1mar2000,
does start-repeat marks at BOL
1.8c, 7feb2000,
trn, [< can intermingle, ties can be at end
1.8b, 15jan2000,
add tr# and trb options
1.8, 16nov1999,
spaces multiple options vertically,
options printed correctly over stemup beams,
"r" correctly shifts blob as well as stem
Back to the top . . .
See also: gitlab.com/peterbillam/muscript and pjb.com.au