Skip to main content

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - hmmueller

General Discussion / 10000
This thread had number 10000   :D

Object Plugins / NonFlowBar.hmm (0.1)
As an answer to more complicated flows (see e.g. this thread), here is a simple object that draws certain bar lines so that they do not have any "repetition logic". A desired control flow can then be created with tricky "endings", as e.g. Rick has shown in the thread linked above.

For connecting to non-flow bars in the following staff, the staff's "Bars Connected" flag is used. For connection with the staff above, one must check the object's "Connect upwards" flag. There is currently no StaffSig version for this, so one has to do it on every instance of the object - that could be improved, but with copy/pasting the bars around, it should not be really necessary (or is it?).

The object does not have any "bar logic", so there will be no line breaks at it; or a change of the bar counter. If this is desired, one can add hidden single bars before or after the object.

The symbols do not line up with "real" bars, but as I cannot see that one would want "flow logic" on one (visible) staff and "non-flow" on others, this should not be a problem.

One tiny flaw: Back-to-back close and open local repeats do not line up properly with font types MusikDingsSerif and MusikDingsSans - but as local repeats are not used that often, I did not repair this ... could be improved.

Positioning of the bar symbols is done "by brute number force" - if there is a better, "more analytic" way, which is maybe more resilient to some size changes (I did not do much testing), someone let me know so that I can change it.

NWC has some hard-wired rules how long notes are to be played, depending on the note's articulations. I am not always happy with these - e.g., tenuto bars can sometimes indicate "portato" articulation, where notes are played non-legato; marcato is sometimes used to indicate accented short notes, i.e., it implies a staccato; and, last but not least, equal notes immediately following each other often need a bit more of space between them.

The "TruncateMaestro.hmm" and "Truncate.hmm" plugins are a first experiment to create "note truncation rules" which affect the played length of a note. The sole example attached is for an initial part of R. Pearsall's "In dulci jubilo", where I needed a clearer separation of equal notes for rehearsal voices. I will add more examples in the future when I find time to play with this plugin; but maybe someone is interested in it right now.

Technically, the plugin sends MIDI note-offs which can truncate the notes earlier than NWC; but of course, the plugin cannot make the notes play longer than NWC allows. As a plugin can only send MIDI commands in a small vicinity (of 32 quarters - typically some 5 to 10 measures, depending on the time signature), one has to spread "Truncate" objects throughout the score to make all this work ...


P.S. I am not sure "Truncate" is a good name; the plugin was called "Cutoff" for some time - if anyone has an idea for a better name, please let me know!
Object Plugins / BarCounter.hmm 0.5
This is my replacement for the original BarCounter.nw object, with a few extended features I found necessary on large scores. I'm very grateful to NWC for the initial code for this plugin, which I only extended at a few places:

  • Hide the number at left margin: This is useful if a bar counter is used on a lower staff in a large (e.g. orchestral) score so that there are no numbers colliding with the vertical line connecting all staves at the left margin.
  • Every n-th bar: Scores for marching bands often have numbers at every other bar (I found this also helpful in our choral scores); some scores are numbered at every fifth bar.
  • Optional suffix: If a score's numbers must correspond with some existing voice or other scores, but e.g. a repeated section is expanded (e.g. to improve page handling; or for differing articulations), it is helpful to distinguish the now equally numbered bars somehow, e.g. with a suffixed "a".
  • Excluded numbers: Sometimes numbers collide with other signs (crescendos in choral scores are notorious for that, as they are usually shown above the staves); easily dropping one or a few numbers can be helpful.
  • Font: Font selector; default is "StaffBold".
  • Scale: Label sizing in percent; default 100%.
  • Check consecutive numbering: Check whether the numbers from a previous BarCounter object are continued at this object; this is helpful to check that bar numbering is correct on all staves; default is true.
  • Last, but not least, this plugin honors the "Exclude From Bar Count" checkbox on bars.

The first attached file shows a few demo cases and explains them. However, the real use of these feature can only be seen in larger scores. If someone is interested in such examples, please let me know. The second file shows the effect of a numbering error.

Here is a plugin that highlights notehead depending on their pitch. The most common use is to indicate notes falling outside a given range ("ambitus") of a voice. However, it can also be used to higlight notes inside a range, notes from a fixed list (a "scale") or notes outside a scale.

Each RangePitchMarker object requires one more subsequent chords ("range chords") which define the pitches of the range or scale to be highlighted. No items are allowed between the object and the range chords, with the exception of clefs. Typically, invisible grace chords are used as range chords.

Multiple RangePitchMarkers with different colors can be specified - then, the second RangePitchMarker only marks pitches not marked by the first; the next RangePitchMarker, only those not marked by the previous two; etc. In practice, using three colors red, amber, and green could be useful to highlight unacceptable, somewhat acceptable, and essentially ok pitches.
A marker with the same color replaces the previous specification for that color. The order of colors is not changed by this - it remains the same throughout the staff. Repeating a marker color which is immediately followed by an (invisible grace) rest will stop marking noteheads with this color.

For more and detailed uses, see the attached examples:

  • MarkRanges shows the standard use - both with multiple colors and with "interpolating" marks (this image shows what it looks like; it's also in the attachments);
  • SATB is a possible setup for a choir's ranges;
  • Ave Maria shows a use for the fixed scale of a "31er" crank organ.

"For technical reasons" (see below), RangePitchMarker objects must have class "Span".

A tale of programming this object

I just wanted to implement this "quickly" between other things to do - much music I have to write, and more work on my planned "complete introduction to NWC." However ... implementing this plugin was much harder than I thought - but, admittedly only because I wanted the plugin to work also in print mode. In that case, auto-inserted objects must do the duty of drawing the marker circles; but they still must visit all other RangePitchMarker plugins to find out for which pitches they are responsible. It took me a day or so to find out that only Span-class objects would work: "Standard" objects do not replicate down to subsequent staves on a print page, and hence cannot do drawing down there; "StaffSig" objects forcefully replace all previous objects of the same class, so that only the last marker color would arrive there. However, with Span objects, I had to calculate the span correctly up to the next plugin of the same color - having an infinite span would accumulate the objects on each staff, and I would not know which one is the last one of a certain color (trying this, I found a quirk: math.huge is not a valid span value - it works like 0; however, 1000000 - 1 million - does work; but I needed precise spans anyways). Anyway, these was only the beginning of troubles ...

... because then I found that the drawpos position of auto-inserted Span-class objects behaves quite strangely: It does not start at the auto-insert position (as with StaffSig-class ones), but at the original position. However, doing :find('next') will then jump to the object after the auto-inserted position - and a :find('prior') will jump back to the original position. Thus, with Span-class objects, one cannot iterate over the objects between the original and the auto-inserted position! - which I needed to find out whether other RangeMarkerObjects, of other colors, would claim some pitches. It took me a few hours (i.e., days, because I only have an hour or so per day for this hobby) to pinpoint down all this, which first looked more like a random jumping around. I feel this is a buggy, or at least, unexpected behavior - but by using spcific :indexOffset() values, I finally found a working algorithm. So it goes -

- but now all is fine (I hope).

Tips & Tricks / Keyboard cheat sheets
Here are three variants of a cheat sheet for Noteworthy 2.75a:
  • English, A4 format
  • English, letter format
  • German, A4 format
Additionally, I have also attached the source if someone wants to add an additional stave for another language.

On German keyboards, ^ is a dead key. Thus, adding or removing marcato signs is not as simple as on English keyboards. This has bugged me for years - but today, I researched (well ...) this problem and came up with the following solution:

Type ^ and then a key that does nothing. The two most useful combinations are, in my opinion:

  • ^ y if you want to use only the left hand;
  • ^ ö if you want to use both hands.

(No, ^ Space does not work, for whatever reason - I suspect NWC captures the space and wants to create a rest, but cannot do that with items selected, so it just ignores the combination ... or the like).

Does anyone have one? I looked in the Scriptorium, and googled ... but not to avail.
Of course, I'll write one if there is none - also in German for a pupil who wants to learn her first score editor (that's the actual reason - I hope I don't need one ...). But if anyone has got one that would nice - or a nice start ...

Object Plugins / CueStaff.hmm (0.6)
A cue staff object for NWC

Version 0.6 is a complete rewrite, which makes the object as feature-complete as I could imagine. This documentation has, on the whole, stayed as before, but many details have changed.

After @William Ashworth again mentioned cue staves in a posting, I thought I'd try to implement a full object. The CueStaff object is not easy to use, but it can create acceptable (I think) cue staves for some cases. It must be said that this is a "tricky object" - it puts notes at places you might not have expected, and it tries to undercut NWC at some places to get the desired result. A native NWC cue staff feature would be much easier to use, and create much more consistent results. However, as long as we do not have such a feature in NWC, this is the nearest I came to supplying a comparable functionality via a plugin.

Let me start immediately with the limitations of the CueStaff plugin:

  • Cue staves cannot be played (the notes sound all wrong). You need a separate playing staff to play them correctly.
  • Like the plugin, also a CueStaff uses NWC's beaming - which is of course too large for a cue staff. This is a compromise - otherwise, the plugin would have been much harder to implement; and harder to use.
  • Ties are not supported. You must, in general, simulate them with objects. However, in some cases, ties "do just the right thing".
  • Rests and double-stemmed chords are more complex than you'd believe.
  • Placement of accidentals and dots is not as sophisticated as NWC's. Still, it should be good enough in most cases.
  • Placement of clefs and key signatures works only by fiddling with various spacer sizes.
  • Handling of initial and final bars does not always work.

The features of the CueStaff object include:

  • Support for complete cue staves, i.e., the cue staff runs from the beginning to the end of the score (this is typically used in scores with solo instruments or voices), as well as cue segments, i.e., short staff segments above or below a main staff (this is typically used to indicate alternative musical lines, or explanatory notations e.g. for ornaments).
  • Support for single-stemmed and double-stemmed chords, rests, and rest chords.
  • Free scaling from 50% to 150%.
  • Arbitrary number of staff lines.
  • Additional "overhangs" on the left and right of cue segments.
  • Optional dashed or solid connection lines to bar lines on the next staff; transparent bars are not connected.
  • Optional clef and key signatures at the beginning of a cue staff or segment, and on each new system.
  • Separate CueStaffTimeSig object for scaled time signatures in a cue staff.
  • It is possible to suppress the staff scaling, so that only the items are scaled. This allows the placement of cue items of different sizes on a normal staff. An example for this is attached as "OverlaidCueSegment".

Here are four examples that show what can be done with this object (their NWC scores are added as attachments):


The following text tries to explain the concepts behind this plugin, and how to use it.

The current implementation is feature-complete - I believe -, but the placement of some elements is certainly not perfect. I am open to all suggestions on how to create a better-looking score.

Concepts of cue staff drawing

The main concepts behind this object are:

  • The main idea is to write "source items" (notes, chords, rests, bars) in NWC's normal size that are not (or only partially) visible. Instead, these source items control how the visible "cue items" are drawn.
  • The cue staff is overlaid over the source staff. For this to work, the source staff lines are set to zero. Typically, the center cue staff line lies exactly over the center source staff line (which is invisible, because of the zero lines). It is possible to offset the cue staff lines from the source staff lines; this is not used often, but the C.Ph.E.Bach example (in the next posting) shows that by using this feature, one can align the cue staff with a grand staff brace.
  • The source notes and chords are entered with blank noteheads ("Q B" on the keyboard), with invisible dots (-1 as "Extra Dot Spacing" in the note properties) and without any accidentals. However, stems and beaming of notes and chords are visible.
  • For a note, the cue notehead is shown "somewhere near" the invisible source head - I'll explain that in detail below, but the idea is that the visible stem goes almost to the cue notehead. A short line completes the missing stem piece.
  • If the note/chord needs accidentals and/or articulation, an invisible grace note/chord immediately to its left must carry this information (I call this the "grace companion" of the note or chord, which is the "cue chord").
  • The grace companion also carries the additional heads for double-stemmed chords and rest chords, if necessary. The cue chord itself must never have two stems, because the second stem would always be at a wrong place.
  • Invisible source rests create smaller cue rests at about the same position. However, as NWC does not always place invisible items at useful locations, these rests might end up at unexpected places. As a remedy, one can also enter rest chords with a blank head, a whole notehead (or stem length zero) and an invisible rest ("Show Rest" is unchecked), which are placed perfectly by NWC. But this does not work with dotted rests, as "Extra Dot Spacing" is not saved for rest chords (this is an NWC bug) - so in this case, invisible rests must be used.
  • At its start, a cue staff or cue segment can optionally have a clef and key signature. If the cue staff contains one or more system breaks, these elements are repeated at the start of each system.
  • There is a separate CueStaffTimeSig object, which creates a scaled time signature (it looks for a previous CueStaff object to find the scale). The CueStaffTimeSig does not support "common time" signatures.

In order to use this plugin, one must understand how notehead placement works. I'll explain this in a number of steps. The blue elements in this and the subsequent diagrams represent the source items, which are typically invisible in the resulting score (with the exception of stems); the red elements are the resulting items that are drawn by the user object. The examples show the creation of a cue staff of size 75% where the center lines are on the same height.
(I have added a zip of the images to the next posting, in case they are not reachable on my server)

In the first diagram, one sees the basic mapping of a source note:

<Image Link>

First, the position of a "virtual" cue notehead on the cue staff is computed; then, this notehead is moved away from the stem to the nearest valid position. The small gap between the stem's end and the notehead is filled by the plugin with an additional short line. One can see that the note stem is now typically too long - therefore, overriding the stem length with 6 or 5.5 is usually a good idea.

This mapping concept, however, leads to a problem: The possible note positions on the cue staff are denser than on the source staff - so, some cue staff positions apparently cannot be reached from source staff positions! The next diagram shows a five-note scale on the source staff - it ends up with two "holes" on the cue staff:

<Image Link>

The solution is an additional marker that allows a notehead to be mapped one step higher. In the next diagram, this marker is shown as a small blue arrow; for the plugin, one uses the "Tie Direction Downwards" selector of the note (remember that ties are not supported; so, the tie-direction information is "free" for being [mis]used for other purposes). One can see that it is now possible to create a five-note scale on the cue staff by using four different source notes with suitably chosen "shift" markers:

<Image Link>

The direction of a notehead shift is always away from the stem. The reason for this is of course that only then is it possible to add a small segment to complete the stem on the cue staff. However, this leads to the strange effect that merely flipping the stem direction on the source note alters the cue note's pitch, as can be seen in the following diagram:

<Image Link>

I found that I got used to this behavior quite quickly. One adjusts the note position of the note immediately afterwards (with Ctrl-Shift-Up or Ctrl-Shift-Down), and all is well.

Now, let us look at chords. Here, the rule is that, first, the "outermost" nodehead is mapped as described above (i.e., the highest note if the stem points downwards, and the lowest if the stem points upwards). Then, the intervals of the chord are faithfully replicated on the cue chord:

<Image Link>

Again, this will typically lead to overly long stems, so that their length must be overridden.

The stem-flipping effect is much larger for chords, as can be seen in the following example:

<Image Link>

Stem flipping changes the outermost note, and hence, the location of the whole chord on the cue staff varies considerably. Again, I found that moving the chord quickly to the right position is not a problem (of course, sometimes it is necessary to set the "Tie Direction" to "Downward" to place the chord on an otherwise unreachable position).

The rule for assignment of accidentals is: The actual positions of the noteheads on the grace companion are ignored; its noteheads are simply mapped one-by-one in order to the cue chord or note (this picture is wrong: The stems must point in the same direction; I'll repair it soon):

<Image Link>

Articulations (staccato, tenuto, etc.) are simply taken over from the grace companion to the resulting cue note or chord.

Last, one must understand how double stemmed chords (including rest chords) work. Like the accidentals and the articulations, they draw their information from the grace companion. The cue chord (with blank noteheads) only contains the noteheads for the shorter duration (and hence no second stem). The noteheads for the longer duration are copied over from the grace companion. The position of these noteheads is derived from the grace companion's position - this is the only case where its position is important. Rest chords work similarly: The cue chord is a (typically whole) blank notehead with a rest (with "Show Rest" unchecked); the noteheads are copied over from the grace companion.

When creating double stemmed chords or rest chords, ene must make sure that the stem directions of cue chord and grace companion agree, otherwise the results are disturbingly chaotic.

Practical considerations of cue staff writing

In practice, it is a good idea to follow these steps (a user tool might be useful to support the more mechanical steps - I have not yet written one):

  • First, completely write the source staff, and set all stem directions correctly.
  • Then, duplicate the whole staff so that you have (a) a valid source against which you can compare the resulting cue staff; and (b) a staff for playback if needed.
  • Now, create the necessary grace companions for accidentals and articulations. Either you copy the whole note or chord - the keyboard sequence for this is: Shift-Right/Left (to select); Ctrl-C Ctrl-V Ctrl-V (to copy); Shift-Right, = Alt-Enter Ctrl-Tab N Enter (to make it "grace" and then invisible); Right and again Shift-Right and then one or more of 9 8 7 , ' ^ _ (to clear all accidentals and articulations). Or you copy single helper notes (with an accidental, a staccato dot, ... - whatever you need) from some other part of the score or - better yet a "tool staff").
  • For rests, add a separate whole note to create a rest chord (using whole note avoids overriding the stem length with zero).
  • Select the complete staff or segment to be "cued", and (a) in tab "Notes", set "Extra Dot Spacing" to -1 everywhere and select "No Leger Lines"; (b) set all noteheads to blank noteheads ("Q B" on the keyboard does this).
  • Set the "Staff Lines" to zero.
  • Only now the CueStaff object should be inserted, with the intended scaling. Almost all notes and chords will now suddenly have jumped to (musically) wrong positions.
  • Therefore, all chords and notes must now be shifted (again) to their correct position - by simple selecting and shifting with Ctrl-Shift-Up/Down, and maybe additionally by setting the "Tie Direction". The duplicate staff made in step 2 above is very useful for this.
  • Also, accidentals and articulations might show up wrong if the grace companions are not correct - they need to be repaired now.
  • Notehead-dependent elements - slurs and triplets - may need additional position fine-tuning (using NWC "Markers").
  • Then, additional elements like tie-simulating slurs, dynamic-simulating texts etc. need to be placed correctly.
  • Finally, the spacers of the CueStaff object should be configured; usually, this requires checking the layout via "Print Preview" (Alt-F V on the keyboard).

For editing an existing cue staff, the following hints might help: An important NWC feature is the F11 button which toggles between
  • "edit mode" - where all invisible items are shown as grey outlines; which can be helpful, but also confusing -, and
  • "viewer mode" - where items are roughly laid out by NWC as on a print output.

Additionally, there is a "Show Source" flag on the CueStaff objects, which will show the source staff lines and note/chords instead of the cue items. This is mostly useful when correcting chords, where one has to see the original intervals.

Finally, Alt-F V (Print Preview) is your friend if you want to align the cue staff clef and key signature correctly - I have found no other way than to repeatedly play with the spacers and the left overhang and check with Alt-F V, + and cursor keys whether the alignment is good enough. There is a "Show Width" flag on the CueStaff objects which shows the room used by the clef and key signatures; it might help to place them better.

In the end, however, all this is still a kludge: Native cue staff support in NWC would be much easier to use.

Tips & Tricks / An experiment in tuplets
I did not want to call this "how to write tuplets", because my method has a few drawbacks. Still, it might be useful in one or another situation. Concepts:

  • Dots and double-dots are used as much as possible to distribute the note lengths roughly equally over the tuplet - then, with "extra dot spacing" -1, the dots are suppressed.
  • For some tuplet values, dotting does not work. In that case, tied invisible notes are prepended to the visible notes - prepended so that the ties are not visible; the first note, however, is never preceded by a tied note, because otherwise it would not line up with the beat.
  • And for some values, an invisible triplet spanning the whole tuplet allows a somewhat better distribution of the note values.
  • Drawing the beams is typically done with NWC's builtin beams. However, in a handful of cases, the new version 0.6 of the Beam.hmm object is needed to draw one beam less than the note values would usually request: For example, a septuplet in 3/4 time gets only one beam, even though the "eighths" are a little bit shorter than real eighths (and are therefore created mostly with double-dotted sixteenths).

Of course, this dot/double-dot/triplet combination method always leads to not perfectly divided tuplets when playing - but this is acceptable in many cases, I would say.

For the tuplet bracket, I have for the moment used the LineSpan.nw object, with a manually placed text. It would be nice if the LineSpan object could place a centered text - and place it in its line - out of the box ...

To use one of these tuplets in your scores, I suggest you download the attached NWC file, copy the tuplets to your score and move the notes up or down as needed. Tuplets that do not use 64ths can of course be shrunk by a factor of two (select, then press minus), those not using 32nds can also be shrunk by a factor of 4.


General Discussion / An idea
I have an idea: I'd like to write a book - "Writing scores with NoteWorthy Composer" - or - "The ultimate guide to writing music with NWC" - or - ....

... and it might be a website, not a book: But not just some random articles about some topics that might be of interest today, but a structured thing, with a plan on what's in there and where, and how it is interlinked, and a common style (e.g.: Many examples, less text; and/or with sidebars for explanations or not; and ... whatever ...).

Who should read it, and how? Everyone who might or does use NWC - it should help everybody over every hurdle that one encounters when using NWC (and there are many hurdles, and of many sorts). Well, not everybody and not every hurdle - but many, and many. So it would be more of a handbook: Not for sequential reading, but for lookup.

And therefore it should be "use-case driven" (not an "enhanced" copy of the manual): I.e. it should be organized by typical usage scenarios - copy an existing score verbatim (or more finegrained: copy an existing single-voice, piano, hymnbook, SATB, canon, ... score); copy a ... score with different size, pagination etc.; extend a score with additional voices; write a large orchestral score (which would include printing a director's score as well as instrument voices) etc. And each of this "for print", "for playback", and "for print and playback".

It would have to be honest: Explain what NWC can't do out of the box, and can't even do with user tools and plugins - and explain how to overcome the gaps and weirdnesses.

First question: Is this worthwhile at all?
Second question: Has anyone already done this - partially or fully?
Third question: Has anyone any suggestions, ideas, convictions, advice on what to include, what not, format, technology, whatever?

Oh yes, it would be a long-term project (years); it might take long and longer, it might fail, it might ... I don't know.

But - I thought I'd ask.

This is a companion user tool to the "Extend staff below with rests to cursor" user tool: If one adds new notation into the rest sequence, all elements behind are shoved back (as NWC does not have an overwrite mode). This tool allows the quick deletion of following rests of the same length as a selection.

Here is a short description:

This simple tool removes all rests and the "duration-less" objects between them after the selection for a duration that is equal to the selection's length.
This is helpful if you have added a stretch of notation in a run of rests, but actually did not want to move back everything behind your insertion; think of it as a remedy for NWC's missing "overwrite mode".
If the tool encounters an object with duration during its removal that is not a rest, it stops - it does not want to destroy parts of the score.
Finally, if the removed rests do not sum up to the exact length of the selection, the tool inserts a few small rests for compensation.

To install, download the attached lua file (wherever you want to store user tools), open some NWC score (e.g. a new one), go to "Tools --> User Tools", click "New" and add the following:
  • Group: Whatever you want to keep your user tools organized
  • Name: "Remove following rests of selection length"
  • Command: Browse to location where you saved the downloaded file
  • Input Type: File Text
  • Options: Returns File Text

I have also attached a weird test file to play around with this tool. For a first experiment, select the red notes (which are assumed to be a previous addition) and run the user tool - the following part of the staff should "move up" so that the bars, endings etc. again align nicely. Note that a new sixteenth rest had to be added after the red notes for this alignment.

I have written a small user tool that extends a staff with invisible rests - this is e.g. useful if a staff needs a layered staff late in the score.

Here is a short description:
This simple tool fills the staff below the active staff with invisible rests up to the cursor position.
The following items are copied down from the active staff while filling: All sorts of bars, flow controls, endings, time signatures, and keys. These copied objects keep the visibility from the active staff.
This is e.g helpful when a staff split for layering is necessary later in the score.
Right now, the tool never creates dotted rests.
If the staff below the active staff extends past the cursor position, or there is no staff below the active staff, the score is not altered.

To install, download the attached lua file (wherever you want to store user tools), open some NWC score (e.g. a new one), go to "Tools --> User Tools", click "New" and add the following:
  • Group: Whatever you want to keep your user tools organized
  • Name: "Extend staff below with rests to cursor"
  • Command: Browse to location where you saved the downloaded file
  • Input Type: File Text
  • Options: Returns File Text

I have also attached a weird test file to play around with this tool.

A companion tool "Remove following rests of same length" can help you if you want to insert new notation in the rest stretches, but want to re-align parts after the inserted pieces (NWC has no "overwrite mode", so inserting notation without disturbing the position of staff parts to the right is not possible "out of the box").

(I have not researched whether there are already other tools that can be used for this purpose ... I wanted a very simple tool, both from the viewpoint of usage - no options - and code - as short as possible, and I need to learn to write user tools in Lua anyway, so I took this as a first example).

The documentation says:

Hint: grace notes do not have duration.

But the following tool,
Code: [Select · Download]
local f = nwcut.loadFile()
for i = 1, #f.Staff do
  for j = 1, #f.Staff[i].Items do
    local item = f.Staff[i].Items[j]
    nwcut.warn(i ..'/'..j ..' --> '..(item:HasDuration() and 'true' or 'false')..'\n')
nwcut.status = nwcut.const.rc_Report
when called on a new staff with two grace notes, outputs
Code: [Select · Download]
1/1 --> true
1/2 --> true

I'll use
Code: [Select · Download]
item:HasDuration() and not item.Opts.Dur.Grace
instead - I think this is what the documentation means ...

Object Plugins / EditMark.hmm (0.2)
I'm afraid of ... no, not Virginia Woolf, but invisible NWC objects - really invisible objects that I would not see in the editor. There are at least two of them: Transparent bars; and whole notes with a blank head. So, I wanted a marker that shows where they are, and maybe also shows some text why I put in these invisibles. But of course, I do not want all this to show up in the printed staff. Thus, I wrote this ...

The EditMark.hmm can be used to add text and dashed marks that only show up in edit mode. This may be especially useful for invisible objects (like transparent bars), almost invisible objects (very small symbols), or just as remarks needed only during editing. The dashed marks are located at the next (presumably invisible) item. Of course, the plugin itself will never be invisible - if the text is empty, a standard symbol (derived from the following item) is shown.

The attached example file shows different uses of the plugin. You might want to check out its interesting print preview.

Some of us have wished that NWC would have an option to have (vertically) smaller staffs - I call them cue staffs, but they are used for multiple purposes (alternative notes for other instruments, or in different manuscripts; solo voices in piano scores; and some more).

I have played with the idea of writing a plugin that can, in some quite limited way, produce such staffs - see the (very incomplete) example in the attachment (produced by actual code - I can scale it, and the noteheads and accidentals already are plaed at about the right spots).

I would still heartily wish that NWC would have this as a built-in feature - but in the meantime (however long it will be), would such a plugin be useful? I ask because writing it would be lots of work - essentially, one has to mimic all the possible printing features of NWC - from chords and notes with their various durations (beamed and with tails) to accidentals, articulations, triplets, slurs, all the different bars, ... etc.

Would this be worthwhile??

Object Plugins / RepeatMark.test (0.5)
I have taken over Mike's code from that thread (

The main selection is the "Repeat Type", which can be
  • Single - for a one-bar "simile sign" (centered in the bar) and/or a counting label
  • Double - for a two-bar "simile sign" right over the bar line and/or also a counting label
  • Double with 2 - for a two-bar "simile sign" with a 2 above it (a counting label is possible, but confusing in this case)

The label can have one of two formats - either selected manually or automatically:
  • "Plain" shows the repetition label unadorned;
  • "Parentheses" shows it between (..);
  • "Default" is "Plain" for the two "Double" types and "Parentheses" for type "Single".

The label controls whether it and the sign are visible:
  • 0 - no label, sign is visible
  • > 0 - both label and sign are visible
  • < 0 - label shown (without the minus), but sign is invisible

Additionally, there are some more format options for the label.

For reference, those who have access to E.Gould's "Behind Bars" can look up the rules on pp. 233 and 578.

For convenience, there is a user tool with two "actions" Double and Single to quickly create repeat marks for multiple bars. The three following animated GIFs show three examples of working with the user tool; on the right side, you can see the keys I pressed (I do not use the mouse with NWC).

The GIFs might be a little confusing first, but if you watch them for a few rounds (they loop endlessly) and look at the pressed keys and maybe try them out in NWC, you'll find out how that works - and how quick it works.

There are three very useful initial label values for the user tool (which are all shown in the demos above):
  • 2 - this is useful when one wants customary marks that start with label 2; the selection is from the first repetition onwards.
  • -1 - this is useful when creating "B.B." style marks, i.e., where the initial segment gets label 1; the selection must include that initial segment.
  • 0 - if one does not want any labels (e.g. if the repeat count is only 2 or 3); the selection is from the first repetition onwards.
Other values might also be useful (see e.g. value -5 in one of the examples). There is no user-tool support for non-contiguous labels (e.g., only every second or fourth label); if you need that, just set the labels of some objects to zero afterwards.

Many thanks, of course, go to Mike for his previous version of this tool!; and to David for a long and ongoing list of comments - I believe that the current tool can do everything he wants, and rather quickly - but also everything to fulfil the "B.B." requirements.

... in a (Lua) user tool?

Thx for any enlightenment!

Object Plugins / Breve.hmm (0.5)
Here is a user object that helps with breve notes (double length of whole notes). The plugin should suffice to write the final chords of hymnbook melodies and chants, and maybe some more uses - the examples have some of them. However, it has its limitations, especially if one wants to use ties (not typical with breves), dots (not at all typical with breves), or when playing them.
(The BrevePlayExample needs the Mensurstrich.hmm object - breves go with old music, so this makes sense, I think).

To create a breve, first create two whole notes (semibreves), then place this object to the left of the first semibreve, and finally change the noteheads of both semibreves to blank heads (by selecting both and then e.g. pressing Q B on the keyboard). In the editor, two small vertical lines indicate the position of the now indiscernable two notes - which are, however, technically not "hidden": The reason for this is that NWC will do layouting with the two semibreves, and the breve notehead can be placed accordingly.

The second semibreve can also be a whole rest, or actually any item. The second item is only used by NWC to reserve space for the complete breve. Using a hidden rest as the second item is useful if the breve is tied to another note - however, the ties are not really placed nicely.

The drawing of the noteheads is controlled by available fonts and user selected options: If fonts from Lawrie Pardy's *Dings suites are installed, one can use square and "double bar" noteheads from them. By default, the plugin looks for the fonts MusikDingsSerif and then MusikDingsSans; if neither is found,

  • the double bar notehead is taken from the standard NWC font;
  • the single bar notehead is drawn as a semibreve (whole) notehead with a line on each side;
  • the square notehead is created by two Times New Roman letters 'I' that are rotated by 90 degrees (which makes the notehead a little too short).

It is also possible to have chords of breves, and even chords with two durations do somehow work.

Last, there is also some support for playing. By default, the object is muted, but it can be unmuted. In that case, the two blank semibreves should be muted. Playing does not work with chords with two duration and restchords. Performance marks like staccato etc. are not considered when playing.

This user object does not (yet?) work nicely with the object, because that object also uses blank note heads.

I'd like to write a transpose function that moves the staff position of my user object - but how can I change the staff position from inside the transpose method? Any help is appreciated ...

Object Plugins / Beam.hmm (0.9)
NWC is missing cross-staff beams, unison beams, more complex grouping (where some group have one running beam, others two), overhanging fractional beams, beam groups for speed variation, stemlets, single notes with beams, and double beams (double stem chords with beams on both sides). I thought this could be remedied by creating a versatile Beam object, which is attached to this posting.
In addition, there are ten example files, which mainly use examples from "Behind Bars":

  • "UnisonBeams" has three unison beam examples;
  • "CrossStaffBeams" has a percussion example and two piano examples; the last - an excerpt from a piece by Webern - is, I would say, quite interesting ...
  • "OppositeStemDirectionBeams" has some examples with stems in opposite directions (but the previous file also has some ...);
  • "ComplexGrouping" has a single example with different numbers of connecting beams - NWC cannot do this, but I doubt that this is really an important feature;
  • "FractionalBeams" shows an interesting way to indicate complex rhythms, which I have yet to see outside B.B.; and has single notes with beams.

The remaining examples are attached to the next posting.

The maximum span for a Beam object is 16 notes and rests. If a longer beam group is needed, two or more overlapping beam objects can be defined (see example in "ComplexGrouping.nwctxt").

Breaking beams at a line break does not work - you have to provide a separate Beam object for each line.

(If you possess "Behind Bars", I am interested in whether you see problems with my example scores; and if you have suggestions for interesting examples I could or should add).

I have written a fair amount of NWC scores in the last 18 years - there are about 2300 .nwc and .nwctxt files on my computer, ranging from a few notes to some 50000 items in the largest ones, and almost all of them contain music sketched, arranged or composed by me - for organ, organ and violin, choir and solo vocalists, brass band, flute ensemble, many many crank organ arrangements (for more than 10 years the main purpose why I used NWC) and very few piano pieces. Recently, I also tried my hand at a few user tools and user plugins. So, I think I'm allowed to sketch a few ideas about what I'd like to see in NWC in the years to come. The ideas are grouped into 3 sections, "score creation", "graphic elements", and "playing".
I would think that these features - which, admittedly, range from quite small to visionary - would make NWC more interesting to a wider audience.

Score creation

C-1. Multi-staff selection would be very helpful. Alt-Shift+up/down are not yet used and are easily reached, but this is of course the smallest problem. One needs a definition of how to select items that overlap the selection boundary on other staffs. My expectation would be that wherever the boundary on the staff selected at first is also present, the selection will begin/end exactly there (so that also items on staffs far apart - e.g. with multi-rest staffs in between) get selected "equivalently". For all other objects, I am tolerant what happens.
I would expect that with such a multi-staff selection, one could at least
  • delete it
  • copy it and paste it somewhere else (with accepted shaky semantics if boundaries at source or target location do not line up exactly)
  • change properties (as with current single-staff selections)
I think it is sufficient to have only multi-staff selection over contiguous staffs - especially if the following feature C-2 is also supported.
Layered staffs are hard - one would probably expect them to be "selected together" - but what should happen if e.g. their copy target is not layered in the same fashion? Maybe copying a selection covering layered staffs is only allowed to be copied to a similarly layered staff group ...

C-2. Moving sets of layered staffs up and down together. A simple checkbox e.g. on the Edit menu could control this - doing Alt-E X to switch the "together/not together" option is simple enough.

C-3. "Overwrite mode" - this is customary in many other score editors: The score is implicitly or explicitly filled with (probably invisible) rests; writing of a note replaces the rest (or, most of the time, part of it) with the note. The main reason for this feature is that notes present later in the staff are not shifted - this is extremely helpful for some use-cases like actually composing pieces. It also mimics the way one writes on paper.

C-4. Extend all staffs (or all visible staffs) with invisible whole rests to the cursor position on some other staff. The reason for this feature is the same as C-3 - "write notes anywhere". >> It might be possible to do this as a user tool.

C-5. Staff splitting and combining: Split a staff into two layered staffs, and recombine two layered staffs if possible. >> I think this can be implemented as user tools.

C-6. Staffsig-copying Ctrl-A: With more and more useful Staffsig plugins, setting up a staff becomes more and more cumbersome or even "magic", especially for newbies. "New staff" (Ctrl-A) should create a new staff immediately below the active staff and copy over all the leading Staffsig items (clef, key, and Staffsig plugins) to the new staff (this could be controlled by an option "old-style Ctrl-A" or, like 2. above, by a sticky "Edit" checkbox).

C-7. Factory templates with useful Staffsig plugins: I do not know what the factory-provided templates look like (I have overwritten all of them), but I would expect them to have a host of Staffsig plugins on each staff: PageTxt, Acciaccatura, CueHeads, and maybe more provide standard features needed for even semi-professional scores.

C-8. Better MIDI import: The MIDI Import feature is too limited compared with modern DAWs. I would expect note lengths to remain as in the original MIDI file even when chords are created; and also that triplets are recognized correctly. >> It seems that a completely separate program could be developed for this purpose - after all, the nwctxt format is open and could be created by an arbitrary program.

C-9. Score scanning - "everyone has it" >> Also here, a separate program is sufficient. One could even consider to write a scan-to-MIDI program, with some encoding of notation artifacts in some extendible MIDI event (like text), so that this could be used by other MIDI-reading programs also. And maybe someone has even done this ...

Graphic elements

G-1. Reduced-size staffs.

G-2. Beams between staffs for keyed instruments are not too rarely used. Not having them is, unfortunately, a "missing feature".

G-3. Breves.

G-4. Placing arbitrary images into a score.

G-5. Correct sizing of accidentals and performance marks for cue notes (this probably would mean to have cue heads as a built-in feature).

Scanning through "Behind Bars" will probably unearth a few more features that are expected of a modern score editor (like the small rectangle notation of multi-rests, or numbered simile marks as used in brass band voices).


P-1. An option to indicate that accidentals are not significant on other octaves ...

P-2. ... and an option to treat double bars like single bars for flow control.

P-3. A builtin option when grace notes start to sound (before the beat or on the beat).

P-4. Explicit control about how the playing duration of notes is computed.

P-5. An "artificial player" - what Wallander's NotePerformer can do with Sibelius. Ok - that's a wide leap; but I'm allowed to have a dream :)

That's it. I think all this is doable. C-1, C-3, G-1 and then P-4 would be my favorites.

Calling nwcItem:Get('ControllerName') on
Code: (nwc) [Select · Download]
|User|EnvelopeMaestro.hmm|Pos:-6.5|Class:StaffSig|Bottom:-6|Top:-1|ShowLocation:below|MinValue:60|Pen:dash|PenWidth:0.7|Controller:71|ShowAs:Blend|ControllerName:"Select by number"
yields '"Select by number"' - i.e., a string including the double apostrophes. As these are added by the serialization to the nwc or nwctxt file only for strings with spaces (the string '7:Volume', e.g., is serialized without double apostrophes), I would have expected that this "implementation detail" is not shown when calling :Get().

Also, an embedded \" is returned exactly like that in the string: as two characters, a backslash and a double apostrophe.

Altogether, right now I would have to do some postprocessing on :Get()'s result to get the actual value, wouldn't I?

Object Plugins / XText.hmm (0.92)
This is the plugin everyone has needed for a long time! ;)  Seriously, I wonder how I survived without this simple object that simply concatenates texts of different fonts. Here is a real world example:

<Image Link>

The plugin allows the concatenation of up to six texts. Additionally, the justification of the text can be selected. With justifications 'Left' and 'Right', there is a corresponding 'preserve width' option which is triggered by selecting 'Left and wide' or 'Right and wide'. For the non-wide justifications, there are boxed variants which draw a box around the text (if the box is too high, try to set a pinch value on StaffSymbols texts to reduce its height).

Multiline texts are supported: Just insert %br% or | (a vertical bar) in a text to indicate a line break. For some fonts, the line sizes get too large - try to increase the "pinch" value to reduce the size of such lines.

With the StaffSymbols or StaffCueSymbols fonts, a number of abbreviations are useful - they are replaced with the corresponding staff character:
  • dynamics: %ppp%, %pp%, %p%, %mp%, %mf%, %f%, %ff%, %fff%
  • notes: %1/2%, %1/4%, %1/8%, %breve%
  • clefs: %gclef%, %fclef%, %cclef%
  • accidentals: %sharp% or %#%, %natural% or %=%, %flat% or %b%, %##% or %x%, %bb%
  • rests: %rbreve%, %r/1%, %r/2%, %r/4%, %r/8%, %r/16%, %r/32%, %r/64%
  • others: %turn%, %tr%, %coda%, %segno%, %|% or %bar%

It is also possible to specify characters via decimal or hexadecimal codes:
  • decimal codes: e.g. %177%
  • hexadecimal codes: e.g. %0xf123%

Then, one can specify an arbitrary font installed in Windows for each segment by putting it between % and :% at the very beginning (in that case, the selected font class is ignored). This is helpful e.g. to use symbols like arrows from the WingDings fonts - and it does not use up one of the six NWC User font classes. See XTextExamples.nwctxt for examples (they need WingDings and WingDings 3 to be installed).

For "negative kerning" (moving the following text to the left), use %---...%. Each minus sign represents a little more than a quarter of a "left-moving" blank. This is useful to create e.g. an "fp" symbol, which can be done with the StaffSymbols text segment %f%%--%%p% (see XText_fp_sffffz_Examples.nwctxt).

Lst, it is possible to "jump back" to the start of a previous text with %-1%, %-2%, ..., or %-6%. This is useful to place text pieces above each other, e.g. for the numbers needed for figured bass or for piano fingering.

The name of the plugin, XText, allows quick selection via keyboard by pressing J X <down> <enter>. The X can be read as "extended" or simply as a reference (and reverence) to NWC's native texts, which are created from the keyboard with a simple X.

As special examples, I have added a score of two measures from Rachmaninov's Prelude in C sharp which is used in the German Wikipedia as a comparison example for score editors (however, the NWC output could not be added there, as only native features may be used, which excludes the "sffff" XText); and an excerpt from Diether de la Motte's "Harmonielehre", which explains the harmonic functions of the final six measures of Bach's famous Air in D. Of course, one can also write degree symbols using similar parameters.


I have a dream: That I can work with NWC as easily as with a DAW to create music that is fun to listen to.

In these times, this means - I believe - that one can control one or more virtual instruments from NWC, like simple sfz players, a Kontakt container with embedded Kontakt instruments or some standalone instruments. Besides the notes, such instruments need additional control to produce realistic sounds, which is accomplished by the following means:

a) velocity of note-on and note-off;
b) a few predefined commands like "pitch bend";
c) bank selection - I will not talk about this here.
d) 128 MIDI controllers, which can be used to send some arbitrary data to the MIDI channel (and hence the instrument). Some of these have a predefined semantics, like "volume" or "damper pedal", but many others are simply labelled "general purpose" or even "undefined" in the MIDI standard; and especially these are used more and more by virtual instruments to control "breath", "pan", "blend" and whatever terms the instrument designers use for various properties and effects. These are essential to capitalize on the more and more realistic sound production capabilities of such instruments.

Controllers can be used to control effects on a very detailed level, e.g. increasing and decreasing the volume of an instrument in a continuous fashion. This finegrained control requires an intuitive user interface, which is typically provided in the form of "envelopes".

Here is a very simple musical piece as shown in the Reaper DAW:

<Image Link>

It consists of a single note, which is presented as a horizontal line; the green rollercoaster below it is the "volume envelope": It controls how the volume changes over time. The important thing here is that 
  • it is very easy to understand the envelope: It is immediately clear where the volume goes up or down, or where it remains constant.
  • Moreover, it is also very easy to change the envelope: In Reaper, as an example, you just shift-click on it somewhere and pull the line segments up and down with the mouse - "direct manipulation".

This is all fine and well, but for those of us who like to arrange and compose via traditional scores, using a DAW for envelopes does not really work. The problem is that arranging and composing are looping processes: There will always be "some more changes" to the score, and all the location-dependent post-processing in the DAW would be lost if a new version comes down from the score software, i.e., NWC. Thus, it is necessary to integrate these additional instructions into the NWC score. Now, NWC does have some support in the form of "Multi-point controllers" (MPCs), but these objects are, in my opinion, too limited: Not all 128 potential MIDI controllers are supported, and usability of MPCs is quite a lot worse than DAW envelopes.

To overcome these shortcomings, I started to write a new object plugin that would provide as much as possible of the envelope functionality.

NWC envelopes

The concept is as follows:
  • At the beginning of the score, an "EnvelopeMaestro" object defines up to 10 value ranges with their own names (this is useful for showing "ppp"..."fff" for a volume controller - see examples) and some presentation parameters for a controller.
  • The value of each controller is set by "Envelope" objects along the score that define the current value and possibly a value step.
  • The value line is visibly shown, like with DAW envelopes.
  • The value and the step are manipulated directly: The value is derived from the staff position (which can be changed conveniently with ctrl-shift-up and ctrl-shift-down), and the span is controlled by the built-in spinner, i.e., the + and - keys.
  • As a special feature, a step can be "inclined" a little so that the value changes not to abruptly; this so-called "attack" can be changed directly
    with the , and . keys.

Here is a screenshot from NWC of a "single note" piece with varying volume:

<Image Link>

The important feature here is that it is very easy to see and modify the envelope - I repeat this because it is the whole point of the plugin: The following change was accomplished by just selecting the envelope object, pressing ctrl-shift-up about 6 times; and + and then . a few times:

<Image Link>

NWC's GUI immediately shows these changes, and they can be heard when playing the score next time.

Here are two pictures that show the properties of the EnvelopeMaestro and Envelope objects:

<Image Link>

<Image Link>

Here are some suggestions for using the Envelope object:
  • Put each controller on a separate staff with a single line. This allows muting of each staff, which disables the controller; and it allows for more graphical control. On the other hand, the "Staff range", "Line Type" and "Line Offset" options allow placing two or more controllers on a single staff to save "GUI real estate". Last, it is also possible to put the envelope objects into a note staff, e.g. by setting the "Staff range" high above the notes.
  • Use half and eighth rests on the controller staffs to allow for coarser and finer spans. Quarter rests take up a lot of space and are visually more disturbing. Hidden rests do not really work, as they huddle together at the left side of the bars and therefore distort the span slopes.
  • When copying envelopes to another staff, make sure that their Maestros have similar range definitions so that the effect rates do not change.
  • Don't use a volume controller with piano, harpsichord, guitar and other instruments where the volume cannot be arbitrarily changed after note started.

A user tool 'Shift' allows shifting a group of selected envelopes of the same controller. The first Envelope or EnvelopeMaestro in the selection defines the controller to be shifted.

Hi -

I wat to go a little bit more into better sound rendering. So I have a purchased Soundiron's Olympus Choir Micro - and there, one can "do some things" with MIDI controllers 71 to 81 (e.g. "blend" with CC 71 or "offset" with CC 78 & 79).

The question is, of course, how can send such commands from NWC?

  • As I see it, the multi-point controller does only support a predefined list of controllers (1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 91, 92, 93, 94, and 95, according to the documentation)
  • So the only way to send a CC 71 etc. seems to be via an object that calls nwcplay.midi(#offsetSPP,'Command',#midiData1,[#midiData2]). The documentation does not indiciate that there are any limits to the sent data, so by using 'controller' as Command, 71 as #midiData1 and some value which the "choir instrument" understands as #midiData2, I should be able to do what I want, shouldn't I?

Is this correct - and if yes, is there already some sort of "generic MIDI controller object" which would support such scenarios?

Thanks for any enlightenment!

There was a question about this in the General Forum; and I have felt the need for this also quite a few times. Of course, NWC does not have the concept of a "vertical selection", and it would be hard to define this in general, because there are no obvious "vertical lines" in NWC (and also not in music in general).

What my tool, therefore, does is to place the burden on the score writer: One has to add markers on each staff that delineate the segments. In practice, this can be done very quickly by putting the marker on the top score, copying it with Ctrl-C, and then repeating PgDn and Ctrl-V for all staffs (I do this with rehearsal markers and various dynamics for 2...4...8...20 staffs all the time). Of course, if one hits a "non-aligning object" (an extrem case is a multibar rest), the marker will - and all below - will suddenly land more or less offset to the left or right - that's just as it is. But markers near bars tend to align vertically nicely.

So ... the attachment contains the user tool and an example file. The user tool should be added to nwc2UserTool.ini with three lines, as follows (of course, you must replace the path so that it points to the directory where you store the user tool):

Code: [Select · Download]
C Copy segments=14,php\php.exe C:\Private\MyMusic\MusicalHelpers\hmm_CopySegment.php copy
D Delete segments=14,php\php.exe C:\Private\MyMusic\MusicalHelpers\hmm_CopySegment.php delete
R Reset segments=14,php\php.exe C:\Private\MyMusic\MusicalHelpers\hmm_CopySegment.php reset

Usage is as follows:
  • C copies the segment; two texts .S and .E delineate the segment; .I is the point where the segment is copied to (only the first .I is "seen" by the tool). When the segment is copied, it will be marked with .O at the end (in the same font/color as .I). The script is still a little buggy if the segment is copied to the left of its insertion point - the markers get confused
  • D deletes the segment marked by .S and .E
  • R removes all the markers (.S, .E, .I, .O)
The idea is that you can make the markers really stand out (see the example), so that you do not get confused afterwards what went where even if the segments do not longer line up well.

Unfortunately, Ctrl-Z does not work over the boundary of a user tool (even though NWC recognizes that the score has changed) - if the copying creates something wrong, one has to go back to a saved version.

What do you say? Might this - or something along these lines - be a solution or at least acceptable crutch until NWC gets "vertical selections and copy/pastes" somewhen?

Harald M.

// Edit: Rewritten script in OO way ... now seems to be bug-free  :D
Hi -

after having written my first plugins, I think that I would like a function that says whether an item's visibility would make it visible in the current print (depending on whether a single staff/multiple staffs are printed, or it is the top staff).
Is there any chance that such a function would be added in the future?


Problem: In a choral score, you do not want bar lines connecting the staffs, because they interfere with the lyrics. But you want connected bar lines at the end of the staffs, as they help to group the staffs optically. Also, sometimes (e.g. at double bars or at a repetition), you need connected bars in between. See the attached pdf from Durante's Magnificat for an example.

Solution: Unselect "Bars Connected" for all staffs; and use this plugin to connect the bars at each line end and at specific places.

Details: Based on @Lloyd 's simple "ConnectBarlines" code, I have now written a user plugin that connects barlines automatically and with the correct lengths even in the presence of boundary objects that change the size or collapse staffs. The object can be used in two modes:

  • StaffSig - in this mode, the bar line at the end of each printed staff is connected up with the lines below/and or above (as indicated by the selector "Staff Location" with values "Top/Middle/Bottom Staff");
  • Standard - in this mode, the next bar line is connected.

For connecting bars to collapsing staffs, there is a flag "Active after next break" which mimicks the behavior of a "Boundary collapse" (which also collapses the staff after the next break). It's a little hard to explain - the demo score shows how it is used.

The demo score added is a "synthetic example" that shows all the features - it has no musical relevance whatsoever (as it does not contain a single note ...).
Of course, the plugin will automatically connect bars at NWC's automatic line breaks - you do not need a "line break staff" in your score as in the example (I only added it to produce a deterministic behavior for the collapsing section).

Thanks to
- @Lloyd for giving the initial basic solution to my problem; and encouraging the development along the way;
- @Mike for explaining the two iterator types - with that, it suddenly made "click" in my mind how I could do what I wanted;
- NWC, which has an interesting API that makes things possible and even not too difficult I didn't think would be possible.

I have also uploaded a .zip of all the test cases, for anybody who wants to modify the code and needs tests. In each test, it is expected that exactly the double bars are extended; and those going down from the first test staff must extend exactly to the "ending" line marking the boundary of the staff below.

Object Plugins / Mensurstrich.hmm (0.4)
Here is a plugin that allows for "mensurstrich" bar lines (see e.g. this explanation in the Wikipedia). The plugin builds on code by @Lloyd and me for the "ConnectBarlines.hmm" plugin.

There are three examples attached:

  • Mensurstrich.hmm.Demo is a demo score that shows that the plugin works with boundaries; what to do about collapsing staffs; and how to switch off Mensurstriche.
  • DomineNeInFuroreBeginning shows how to set the first set of lines from Josquin des Prez's "Domine, ne in furore", as shown in this score at WikiMedia (without the handwritten initial symbols).
  • EtExsultavitBeginning shows how to add Mensurstriche to a single voice score. The example is the first line of the first score in a German PDF available here (as of September 2017).

The history list ("Alt-F H") is now always empty when I start NWC ... It worked on my old Win8.1 laptop - but I think it already crumbled when I upgraded there to beta12 or beta14 ... Anyway, now, on my new (company) Win10 laptop, it is always empty when I start NWC  :'( 

User Tools / Grace notes in adp_Parts
"Grace chords" are not modified by adp_Parts, as line 530 is
Code: [Select · Download]
elseif ($oType == "Rest" || !timeTaken($o))        // don't filter on rests or grace notes
For splitting my particells into orchestral voices, this is a small nuisance. I just changed the line to
Code: [Select · Download]
elseif ($oType == "Rest")        // don't filter on rests
... so far it seems to do what I want. Does anyone know whether there is some problem with this change (e.g. wrong computation of durations? ... but I will never have grace rest chords, I promise)


In my NWC version 2.75a Beta 10 (mhm ... I might not have a really good version ...), pressing Ctrl-P for printing sometimes(!) marks the file with the little asterisk for "changed".
Selecting File->Print does not do this, and the asterisk cannot be removed with Ctrl-Z, and there is also no save confirmation when closing the file.
I just record this in case it is still there in newer versions.
I have attached a score where this happens.

Ist there any way to get the bars like in the attached example, i.e.
  • unconnected inside the staffs, but
  • connected at the staff ends?
I would also be satisfied if only the closing bar of the whole piece were connected.

(I tried a few tricksy things with a layered staff with transparent connected bars, where the whole staff is collapsed up to the end, and only the last closing bar is after a "cancel collapse"; but if I put this staff above the real staff, the connect does not work (it connects to the next logical staff, i.e. the one on which the hidden one is layered); and if it is below, the layered staff somehow "inherits" the "connect bar lines" property from the one below, so that once again, all bar lines are connected  :( ).

Did I overlook something obvious, or something not so obvious?

I just wanted to show you an example of writing a larger score with NWC; and writing a large score from which one can produce both a conductor's score as well as voices.
Here are links to the relevant files - I put them all in public domain, you can use them as you like (including performing them :-)); but you must cite me as original creator of the music and the files - somuch for the "legalese"):

The score is organized as follows:

  • The group "Skizze" ("sketch") is used (if at all) for writing the first ideas for melodic and harmonic lines (before that, there's usually writing by hand into a small music notebook)
  • The group "Dirigent" ("conductor") contains the "particell", i.e., all voices in "functional groups".
  • From this, single voices are extracted into "Score in C" ("Score in C-" are instruments not needed in the piece); when this is completed, a first MP3 is produced. I heavily use the great adp_Parts user tool for this.
  • Then, the transposed voices for score printing are created in "Standard" (again, "Standard -" are instruments not needed).
  • Finally, I might create special staffs for playback/MP3s in group "Sound".

Some groups contain "Kopierzeile" ("copy-over") staffs to help with transporting and transposing from one group to the next.

From the "Standard" group, I can actually easily print both a conductor's score as well as voices - I am very impressed that this works with NWC features alone, without any additional tooling.
Here are the requirements:
  • The conductor's score (containing all instruments) must have staff labels on each page; and have all (or all odd) measures numbered between the staff groups that have connected bars; must have rehearsal letters above the top staff; must be scaled so that all staffs fit on one page.
  • The single voices must not have staff labels, but instead an instrument name in the left upper corner; must have measure numbers at the beginning of each line; must of course also have rehearsal letters; must be printed on as few pages as possible; must have a staff size of 6 to 6.5mm (17..19pt), preferably equal over all voices; and - peculiar, but so be it - voices must always fill complete pages. The last requirement produces quite condensed voice scores with 14 staffs, whereas a score with 15 staff is split over two pages with staffs very far apart.

All of the switching between the two layouts (conductor vs. voice) can easily be done with "Single Staff Prints" and "Multi Staff Prints" visibility. A separate empty "Top" contains elements only necessary in the conductor's score. It is layered with the top-most voice (piccolo flute, in the example).

To switch between the printings, I have only to do the following in the "Page Setup" dialog:
  • for conductor's score: in "Contents", select "Standard"; in "Fonts", change font size to 11.5pt; in "Options", set "Staff Labels" to "All Systems" and "Measure Numbers" to "None
  • for individual voices: once, in "Fonts" set size to 17pt; in Options, "Staff Labels" to "None" and "Measure Numbers" to "Plain"; in "Contents", select the single instruments (no, I don't have a tool for that; writing the music takes maybe 20 to 40 net hours for a simple march; iterating through the voices is a leisure job of maybe 30 minutes, including a little bit of reviewing ... I won't automate this!)

I found a single feature (with endings) that irritates me a little - I'll post my wish how I'd like to have it changed in another thread.

Right now, I have no instrument that needs more than one staff for its "voice score" - examples would be piano, drums notated on more than one (single-line) staff, or maybe layered staffs in a single-staff notation. Therefore, the "Single" vs. "Multi Staff Prints" selector works perfectly. WHen I need such instruments I think working with "Top Staff Only" and maybe inserting a separate empty staff above such "multi-staff instruments" should do the trick ...

My staff system evolved over a few months, so there might be old elements in there no longer needed - probably not everything makes sense now. But cleaning up is not my first priority - rahter I'd like to write much more music ...


P.S. Just that you don't think I am a "single march composer", here are links to MP3 and score of another one:, ... but yes, right now, just learning to do instrumentation for wind orchestra, I (have to, says my teacher) keep closely to a single style and form. Next year, hopefully, I can/will get more creative :-)

... is there any way to get them?

I need them for "1st Flute\n(not oblig.)" or "2nd Flute\n(= Eb Clarinet)" etc.

I only need them on the first page, so a little trickery with Text objects would be ok, but they should all nicely have the same line width, orientation etc., both when I print a full score and for a few (or single) voices.

... might be too much what I ask for ...

Problem: (Learning) arranging for brass band. I need articulations for two purposes:
  • listening to the result (which is of course always an approximation; but it should come close to reality)
  • printing the score (voices and full score)
However, the playing lengths I get from NWC are not what a (German) brass band would do with the articulation signs: non-slurred notes are played somewhat shorter; the "tenuto" bar is interpreted as a "portato", which means that notes are taken shorter than if non-marked ("between a staccato and a legato"); and the "marcato mark" implicitly is a shortening to a "not too short staccato".

As far as I know, NWC uses the articulations to multiply the note length by some factor - for staccato it's 0.75, for others longer than that. Now, it would be great if one could, in the options, specify the factors for "no sign" and all the various articulations, and maybe also for some important combinations (dot+slur is common); and that, moreover, that "shortening" factor could also be overridden per note (if a note is played, in some context, differently from what the naked sign means).

(Edit: Special wish: It should be possible to assign a separate factor to "Last note under slur", as it is quite common that such notes have an assumed (not too short) staccato dot on them).

If my model (that every note is simply shortened by a factor, without taking into account the note's context) is too simplistic, then maybe still one or two numbers per articulation (and special cases like last under slur; and combinations) could be provided to control that more complicated formula that says when the NOTE OFF occurs ...

The flow control signs for coda have fixed text on them, the one starting the coda says "Coda" (which is still language neutral for latin-character using languages), the one going to the Coda says "To Coda" - not nice in a German score. There, instead, a simple coda sign is used at both places, and it is implicitly understood which one is the "go to point" and which one the "landing point" (see attachment for an example).

For some reason, it took me a year to find the obvious way to repair that: Make the flow controls invisible, and add a coda sign from the "Staff symbols" font at both places.

Maybe this tip helps someone who has the same problem.


P.S. I wanted to paste the two pieces of NWC code here - but this seems not possible: The coda character is at the font position of the ligature "fi", and it seems it is impossible to paste a "|Text|..." segment with such a character here - or is it?

// Edit: Added typical gap before coda in attachments.
Unfortunately, H is missing from the list of note (or chord) names. It is commonly used in German-speaking countries, but also e.g. in Denmark. Now I recognize that the "H" position in all the chords fonts is already taken - but I wouldn't care if this letter would be at any other place ...
Or is there a possibility that I can do that myself?

A boundary offset, in NWC 2.75, does not work as one would expect: If you insert a boundary effect with exactly the upper and lower offsets of the staff, the effect is not nothing - rather, lyrics are moved in some strange way.

Now, probably all of you know that, and I could accept that as "that's how it works".

The problem is that when I want to use boundary offsets to increase the staff heights at a few places where there are two lyrics lines; and return to the standard size where there is only one lyric line, then the two lines
  • in print are nicely tiled downwards
  • whereas in the staff - where I compose and hence need at least a somewhat legible score - the stacked lyrics are tiled upwards, into the notes and staff, which makes it impossible to read the notes there.

Does anyone have an idea how to overcome this problem? (If I should add an example, I'd like to add my complete arrangement instead of creating a "demo example" - would that be ok?)

User Tools / "Compactify rests"?
The Parts user tool is helpful, but it leaves rest sequences like the following when a voice is completely deleted:

Code: (nwc) [Select · Download]

(from this:

Code: (nwc) [Select · Download]

Is there an easy way (read: a tool) to rewrite these rest sequences (and, more generally, also sequences of identical notes and chords) to the shortest possible rest/note/chord?

(Additional "possible hiccup": Musically, it is not ok to span a note over a "beat boundary", e.g., the 4th and 5th eighth in a 4/4 measure - they must be written as two tied eights. But then again, in some rhythms - e.g. when the 4/4 measures are split into 3+3+2 eighths -, it is ok to write a single quarter note. I do not know which and how many additional parameters one would need to control this - a string of the form "2+2/4" for a standard 4/4 time signature or "3+3+2/8" with semantics "no note spanning the boundaries indicated by +" might be the most versatile ...

//Edit: No, this is not enough; one needs such a string for each subdivision: 1/1, 2/2, [none for /4], 3+3+2/8, 2/16 as a shortcut for the repeated group 2+2+2+2+2+2+2+2/16, meaning that no eights can start at an odd sixteenths; etc.

// Edit^2: I think this is about the 3rd or 4th time I invent this, isn't it?? - including the Edit^2 idea :) ... I should use "search" more often and not invent so many things ...).

Thanks for help!
Hello all -

I urgently need (well ... I would like to have) a tool that creates single voices from chords ... and I'll write it myself (already started), but I found that I have a few questions:

a) I write it in PHP, because I also wrote my previous tool in it - but I must say I hate the language and am not fluent in it (whatever here is the cause and what the effect, I do not know). Which other language could I use which gives me a sensible object model for items, like the one in lib/ (yes, I could write my own string splitter - but I rather would not).

b) What I need is actually a little more than single voices: I want to extract some voices from chords, according to some heuristics (e.g., in a chord with 3 notes, "take voices 1 and 2" will select the upper most two notes, whereas "voices -1 and -2" will take the lowermost; and with rules for what to take when there is chord with 2 notes or a single note; etc...). So, I sometimes have to rewrite RestChords to Chords or Notes or Rests ... and for that, I would like to have an overview over the options I have to copy into the new object. In the attachment is my current draft of such a model - but: Is there one documented and more complete somewhere around?

c) And last but not least: Is there already such a tool around - or something near it which I could modify according to my ideas?

Thanks a lot!
Harald M.
I've wanted to write something about the "big picture" for some time now - the discussion about enharmonic audit has finally pushed me to do so. Maybe it stirs up some discussion - but maybe, we get some answers or thoughts from the "Noteworthy product drivers".

With 2.75's objects, big possibilities have arrived - as can be seen from the contributions. I have now gotten my most important wish via the "CueHeads" object, and I feel now more confident that I can create the scores I wish with acceptable effort.
However, we have now, I believe, a quite foggy vision of what Noteworthy Composer actually is or wants to be. With version 2.51, I thought I would offer my hand to create a German version - I find the product so much better and easier to use than other competing "not so high cost" score programs (Cappella is the main one used here in Germany) that this seemed a worthwhile undertaking.

However, when I saw 2.75, I dropped that idea: The reason is that NWC now suddenly looks like a "hodge-podge of features," which might be hard to explain. And with a currently non-existing German [added later - sorry] user community (save for me and maybe a few others), explaining various tricks to a typical user might be hard. Here are some examples:
  • CueHeads is great, but why can't you choose smaller heads (maybe even of the fixed 70% size) from the standard notehead menu? The "shape" noteheads are, certainly, much less useful than cue noteheads ...
  • The slurs have been an ongoing topic for years - now we have even more of them in objects (which, as far as I can see, do not interact in the standard way with lyrics), but still the standard ones.
  • The recent discussion about a "better enharmonic audit" also shows that there are tools around that try to improve NWC functions, but run into problems because at least some users feel unhappy about the double built-in vs. user tools world (and now, I would believe, even more so about the three-pronged built-in vs. user tools vs. objects world).
  • The "extra note spacing" is still restricted to integral (and therefore too coarse) values, but there are tricks with empty-head, empty-stem grace notes that move notes a little bit.
  • And there are, it seems, a host of other spacing tricks which are totally unobvious to the typical user.
  • Striked-through grace notes ("Vorschläge") require a combination of built-in grace notes and a user plugin, instead of a simple checkbox on some grace note options.

Instead of considering all these features and their problems, the question behind all this is, in my opinion, more fundamental: Namely, "Where does NWC want to go?" (with regards to score printing - there is another topic which is playback, which I'll briefly touch below).

Possible answers to the "quo vadis" question are, in my opinion:

(A) NWC is now, and remains an environment for plugins where some interested people can provide many good solutions to various problems of score printing; with the assumption that users will work on their understanding of these plugins (be it user tools or objects).
  • Some tools introduce new functionalty (e.g., CueHeads).
  • Some replace existing NWC functions. When they are (much) better (more versatile, with better results, etc.), they should become "best practice", i.e. override built-in functions "almost always" - see the new copyright and other PageTxt objects, which can do (with quite some hassle for the setup) everything NWC can do and more. The same might be true for the various slur solutions.

(B) NWC continues to strive to be a compact (and also in the future very affordable) and efficient (from the point of the user) program. In this case, the "hodge-podge" resulting from the user tool and (NWC and user provided) objects is, in my opinion, unacceptable. E.g., looking for "slurs" in the documentation would not give average users a good solution, because better objects exist outside the core program. Looking for "cue heads" wouldn't give users a solution at all, because the only way to get them is via the CueHead object; similarly, users would not find out how to print repeated copyright notes. But, to give objects and - to a lesser extent? - user tools their credit (very much so!), the "community approach" to improving the functions might be part of a valuable and - to say it loud - cost-effective process which, after some users have praised a certain plug-in (user tool or object), might lead to a quick integration into the Noteworthy program, thereby using (a) the knowledge about what is a valuable addition; and (b) the algorithmic knowledge in the plug-in (if the author of the plug-in agrees).

(C) NWC strives to become a feature-complete program, which can do e.g. everything along the lines of Elaine Gould's "Behind Bars." For the first time, this seems to be possible - but the big question is whether NWC actually should try to accomplish this. New feature blocks that would be needed for this would probably be concepts for "multi-score printing" (printing of large works consisting of several movements or pieces or "sections"), which would probably require that almost every option could be enabled/disabled per section. I fear that such a "can-do-all vision" would lead to (a) increased pricing - which would probably kill NWC because there are other companies and programs out there occupying the "next higher price range" successfully - and (b) worse usability, because many more options would become necessary.

My heartful hope is that (B) is the way to go. This might lead to the effect that each new NWC version has "no new functionality at all", because all which is in (say) 2.85 already was provided by 2.75 plug-ins. Yet, the new 2.85 would be much better integrated and hence still worth it.

Finally, a few remarks on playback: Almost all of us NWC users need MIDI file export, i.e., "rendering the score" into a useful MIDI file. My attempts to think about how to play trills in another thread lead me to the conclusion that also there, some features are missing. For example, grace notes currently take their time off the following note (start playing on the beat), whereas in many cases (since 1820 or so), playing them as a "Vorschlag" - before the beat - would be preferable. Also here, one can ponder whether (a) the necessary features should be included in NWC; or (b) they are provided by plugins (e.g. the Trills object). In contrast to the "score features", I would opt here for "plugin-ing:" Those users who do not want plugins can do everything by meticuously writing hidden "playback staffs". Other users can use plugins that render printed score features like trills or arpeggions into acceptable or even perfect sounds.

Returning to the overall picture: With (B) above - i.e., NWC continues to try to integrate new features into the core program, even if they are provided satisfactorily or even perfectly via plugins -, I might again be tempted to create that German version (if this is technically possible at all) - i.e., continue to consider NWC as the great tool it has been for me for the last 15 years!

Harald M.
On compound chords, an accidental is, IMHO, printed too far to the left - see attachment.
Code: (nwc) [Select · Download]

Harald M.
A few months ago, I had three wishes. One of them was already possible back then (tightening the notes somewhat by spacers), one is possible with the PageTxt/Maestro object (copyright on each page).

One is still open: Small staffs.

And I have a new (last?) one: Grace notes that are striked through. Although it is possible to create them with careful placement of a dash (text) over the grace note, this is a nuisance; and almost impossible for grace chords or multiple grace notes that would need a longer or differently angled strike-through line. Striked-through grace notes have been a standard musical notation "since ever," so I would very much like to see them ...

Harald M.
General Discussion / Q re MIDI import
Sometimes, I want/have to import MIDIs that play "everything" (a choir arrangement; or a piano piece) on a single channel. Usually, there are of course overlapping notes in the different voices in such pieces, which NWC cannot import with correct length - it cuts off some notes (see attached example MIDI and import). I would be happy with a quite crude import which would place notes on quite a few staffs with simple heuristics - I would have to copy around snippets between staffs afterwards, of course, but at least the input would be correct. I even thought about writing a (more or less) simple tool reading in MIDI and producing nwctxt ... but before I do that, I try to summarize my question as follows:

Is there some facility for importing MIDI which
  • guarantees to keep the note lengths as in the original MIDI and
  • puts the notes into staffs "somewhat reasonably" (so that one can copy "longer" stretches of notes and move them around in after-editing)?

Harald M.
After running the upgrade exe, I found that on my Win7 laptop, the two links to NWC on the desktop and in the program folder structure had vanished. I could easily repair this ("copy as link" to both places as admin), but others may see this as more of a problem ...

Harald M.
As a long time user of NWC, I'm very happy with it - I use it to compose music (without a connected MIDI keyboard - I mostly think in musical notation), arrange for our choir and for crank organs, sketching snippets in forums, and rewrite clumsy parts for easier playing or singing.

Many features that others may need I am happy without: This keeps the tool small and efficient. And I'm not very concerned about the perfect beauty of the result - for example, I had no great complaints about those slurs which curve "in interesting ways".

But there are three things I'd dearly need, in descending order of importance:

1. Smaller scales - almost all instrument parts need either a few stretches or full staffs of cue notes. Currently, I use normal staffs with diamond note heads (which look a little bit like smaller note heads). But a vertical scaling is very much needed.

2. Finer-scaled "Extra Note Spacing" that takes tenths instead of only integral values; and negative values up to maybe minus 1. Sometimes, in a little more complex chords assembled on 2 layered staffs, just shifting over a note "a little bit" would make the chord really readable. And, sometimes, I'd like to push notes together a little bit, usually in a scale or a repetitive acc. pattern: This might save that unncessary fourth page where just 2 measures spill over, and still keep the score perfectly readable.

3. Printing fixed text on each page would also be great - for copyright purposes, but more for title and instrument remarks. I usually prepare all the different printouts (instruments, singers, conductor's score) by creating PDFs on my laptop during my (train) commute. Then I print all of the PDFs together - so inserting different paper is no option. But maybe I have to look into some batch tooling that adds footers into PDFs easily.

If I got these features (only two, maybe only the first), I'd happily pay for a new complete license - NWC has paid itself over so many times that I would not complain about another bunch of $ (or €) for that!

Harald M.

P.S. Off-topic, but not really - it shows again what can be done with NWC: For an example of a recent piece I wrote: (generated with Reaper and 'Sonatina Symphonic Orchestra' Soundfonts), score at A score with my current "cue notes" is at ...
Hi all -

I have written a small tool that helps to visualize notes on a system that are outside a given range.

I'd like to post a link to its description and download area here - however, I get a message that I cannot post links here ... so if someone is interested, please leave me a PN (and if anyone could tell me how to "upgrade" my membership so that I can post links, that would be nice).

By using the nwc2clips PHP library, the tool handles arbitrary clefs adn accidentals; and can visualize multiple ranges at one time by chaning note colors or noteheads. In my scores, I usually use two ranges,
  • one smaller "convenient" (for singing or playing) range
  • and one larger "full" range, which can be played or sung with some effort.
The tool thus helps to find quickly areas where one might have to revise an arrangement for easier playing/singing.

If the tool is useful for anybody, and/or if anyone would like to remark on it, point out bugs or possible improvement, I'd be happy!

Best regards
Harald M. Müller
Sorry if this has been asked before ...
I just upgraded to 2.51, and now there is no place where I can set the template folder. Under Tools/Options/Folders, I see only 5 entries:

Song Files
Backup Files
Config Files
Auto Save/Recovery
Instrument Trees

As my Templates reside at a specific place, I'd need to point there ...

Thanks for any help!