home | tune search | software | learn abc | discuss | about | blog | Starbound/LOTRO | contact |
[abc standard: home | current | route-map | updating | proposals]
AUTHOR'S CLARIFICATION:
If this proposal, or its motivation, is unclear in any respect, some of the philosophical notes appended may help. The structural aspects are more important than the precise syntax, as long as the latter comprehends abc2.1.
Changes from v3:
THE PROPOSAL:
Clef and transposition information may be provided in the K: key and V: voice fields. The general syntax is:
[clef=]<clef name>[<number>][+8 | -8][instrument=<interval>] [stafflines=<number>] [octave=<number>] [abc=<interval>]
(where <…> denotes a value, […] denotes an optional parameter, and | separates alternative values)
The abc2.1 standard also included [middle=<pitch>] but this is now deprecated and [transpose=<n>] which is now superseded – see deprecated syntax.
The values (see below for valid choices) associated with the various parameters are defined as
The options are:
<clef name>
- may be treble, alto, tenor, bass, perc or none. perc selects the drum clef. clef= may be omitted.[<number>]
- following a clef name defines the staff line on which the clef is written. Defaults are: treble: 2; alto: 3; tenor: 4; bass: 4; perc: 3.[+8 | -8]
- draws '8' above or below the staff. This also introduces an octave transposition - see Sect 13 for details.[instrument=<interval>]
– defines the voice to be for a transposing instrument, and the interval specifies the difference in pitch between its written music and its sound. This is explained in Sect 13: (Transposition). The default is an instrument whose music is writen at sounding pitch (a non-transposing instrument). [stafflines=<number>]
- defines the number of lines in the staff. The default is 5.[octave=<number>]
- redefines the meaning of abc notation by the indicated number of octaves. The default is zero. Example: the abc-note for middle-C is (c C C,) for octave = (-1, 0, 1) both for drawing and play-back. This usage can help to avoid the need to write lots of apostrophes or commas for high or low notes. Example octave=-2 makes d the fall on the middle line of a bass stave.[abc=<interval>]
- redefines the meaning of abc notation by the indicated interval. The effect is the same as for octave, but any interval is possible. This is explained in section 13 (Transposition). The default is no abc adjustment. Two special values are also defined: abc=concert
and abc=written
, and with either of these the 'abc=' can be omitted. See also Sect. 13 (Transposition)V:<id> clef=treble V:<id> clef=alto5 %C-clef on the top line V:<id> clef=bass-8 %Bass clef with an 8 underneath - see also sect 13. V:<id> clef=bass octave=-2 %Bass clef music encoded with d on the middle line to avoid commas.
More examples are given in Sect 13 ('Transposition') which explains keywords instrument
and abc
, and gives more details of +8, -8
.
For abc tunes consisting of a single voice, the various clef and transposition parameters can be collected in the K: field.
For abc tunes with multiple voices, they should be put in each V: field for each voice.
An in-line V: field may be used to change a clef in mid tune, without repeating the voice ID. In this case the 'clef=' must be included.
Example:
V:piano treble C B, A, G, | [V: clef=bass] F, E, D, C, |
If two voices are placed on the same staff, then their clefs must match at all points in the tune. If they don't, then the clef, and other parameters requiring a match, are taken from the voice mentioned first in the I:score definition (which assigns voices to staves).
middle
The abc2.1 standard and earlier allowed a clef definition to be accompanied by
middle=<note>
where <note>
is a note in the abc syntax.
This is now deprecated for a number of reasons. New abc files should not use it.
One of its main purposes was to avoid commas in bass clef writing (which is now achieved with octave
– see above). The abc2.1 standard suggests clef=bass middle=d
is a good way to achieve it. The play-back pitch of the note d on the middle line of the bass clef, is not explicitly discussed, and one might assume either (a) that the relationship between played pitch and abc-notation is unaffected, or (b) that the relationship between the played pitch and the drawn music (the dot) is unaffected. Much (popular) software assumes (a); the abc2.1 standard resolves the ambiguity in the example ‘Zocharti Loch’ making it clear that it means (b). [This is musically more elegant than (a) in that it does not produce by default a bass clef part sounding two octaves higher than written.] The discrepant interpretations have been around since well before the abc2.1 standard, and there is no real hope of a resolution.
The syntax middle=<note>
might also be used to put a clef on a different line – eg clef=treble middle=d
might be used to produce a French Violin clef. (This is now achieved by clef=treble1
.) But this gives two degrees of freedom – where to put the clef, and which octave to draw the notes – for one parameter.
Some values for the keyword must be nonsense – eg clef=treble middle=c
.
And when it comes to the use of transposing instruments, and indeed to the new abc
keyword, the existence of (now unneeded) middle
just makes things impossibly difficult. Therefore it is now deprecated.
transpose
abc2.1 used a transpose
parameter to change the sounding pitch of abc encoded at written pitch. This is now superseded by instrument
- see sect 13 (Transposition) - because of possible conflicts with use of similar keywords used differently by various software. transpose
should no longer be used as a voice/key parameter.
Before abc's approach to transposition (in various contexts) can be defined, it is necessary to define how the intervals are encoded, through which transposition may occur. In Sect 4.6, the general encoding of voice/key parameters:
[clef=]<clef name>[<number>][+8 | -8][instrument=<interval>] [stafflines=<number>] [octave=<number>] [abc=<interval>]
defined two parameters (instrument
,abc
) whose values are intervals. These can be encoded by one of the following methods:
where <semitones> and <steps> are numbers, and <note> is the name of a note.
Semitone counts in the range 0 to 11 correspond to upward intervals as follows
semitones | Interval | Example |
---|---|---|
0 | perfect unison | C to C |
1 | minor 2nd | C to Db |
2 | major 2nd | C to D |
3 | minor 3rd | C to Eb |
4 | major 3rd | C to E |
5 | perfect 4th | C to F |
6 | tritone* | |
7 | perfect 5th | C to G |
8 | minor 6th | C to Ab |
9 | major 6th | C to A |
10 | minor 7th | C to Bb |
11 | major 7th | C to B |
and adding/subtracting multiples of 12 correspond with ading/subtracting an octave. Example: -9 is a major 6th downward.
*The tritone interval can be considered a diminished 5th (C to Gb) or an augmented 4th (C to F#) as desired. If a specific choice is needed, then use one of the other methods of defining the interval.
This assignment has the following properties:
For intervals which are not definable (by the above assignment) in terms of semitones alone, the method semitone:steps is available and can define all intervals.
Example: 3:2
Starting from C, 2 steps takes us to E, and 3 semitones takes us to D# or Eb or Fbb. the step count resolves the ambiguity in the semitones, and the result is Eb.
Include Alan's table here!
Example: 6:3 and 6:4 These define an augmented 4th (C to F#) and a diminished 5th (C to G) respectively.
Modern woodwind an brass instruments have names like trumpet in Bb, clarinet in Bb, clarinet in A, alto sax in Eb, alto flute in G, and in these cases it means thay are so-called transposing instruments. This means that their music is written at a different pitch from that at which it sounds. In particular, when these instruments read a C, the note which sounds is that in their name. In all the examples quoted immediately above, the note which sounds is below the written one, but less than an octave below. Because of this naming system, it is convenient to allow an interval to be defined by a note name, and signifying the interval downward from C to the named note. An appended number can adjust the octave. Here are enough examples, together with examples of instruments which transpose through the given interval, to define this system
interval | semitones | Example instrument |
---|---|---|
C | 0 | Violin, flute |
B | -1 | |
Bb | -2 | Bb clarinet, trumpet |
A | -3 | A clarinet |
Ab | -4 | |
G | -5 | alto flute |
F | -7 | french horn, cor anglais |
E | -8 | |
Eb | -9 | alto sax, alto clt. |
D | -10 | |
Db | -11 | |
In Higher Octaves: | ||
Eb+1 | 3 | Eb clarinet, Eb flute |
C+1 | 12 | Piccolo, descant recorder |
Db+2 | 13 | Db piccolo (now rare) |
C+2 | 25 | Garklein recorder, glock. |
In Lower Octaves: | ||
C-1 | -12 | Guitar, double bass |
Bb-1 | -14 | Tenor sax, bass clarinet |
Eb-1 | -21 | Bari sax, contralto clt |
Bb-2 | -26 | Contrabass clarinet |
Eb-3 | -33 | Contrabass sax. |
Synonyms: a single octave modifier may be abbreviated to + or -. Example: Bb- is the same as Bb-1; C+ is the same as C+1.
The abc notes are written, by default, in each voice at the written pitch of the instrument, and not the pitch at which it sounds (concert pitch).
Alternatives are discussed below, but for the moment let us focus on written pitch encoding.
The clef/transposition parameters of the V: and K: fields are
[clef=]<clef name>[<number>][+8 | -8][instrument=<interval>] [stafflines=<number>] [octave=<number>] [abc=<interval>]
clef, stafflines, and octave, are defined in Sect 4.6
Now that intervals are defined, +8
,-8
, instrument
, abc
can be discussed.
The keywords +8 or -8 define the voice as being for an instrument which sounds one octave higher or lower than its written pitch music. They define also that an 8 is drawn above/below the clef respectively.
Example: (written pitch encoding)
K:C V:piccolo clef=treble+8 C D E F |
defines a piccolo sounding one octave higher than written. The written notes start at middle C and move up. They sound one octave higher. A little 8 is drawn above the treble clef.
The definition instrument=<interval>
defines thet the voice is for an instrument which transposes by the supplied interval. The "<note>" method is the most covenient way of defining the interval, but the other methods may also be used.
Example: instrument=Bb
may be used for a Bb clarinet, Bb trumpet, or soprano sax voice. The syntax instrument=-2
or instrument=-2:-1
is entrirely equivalent, though less mnemonic.
With written pitch encoding:
K:C V:clarinet clef=treble instrument=Bb [K:D] D E F G |
defines a Bb clarinet reading D E F# G and the notes sounding a tone lower as C D E F.
Example:
K:C V:Piccolo clef=treble instrument=C+ C D E F |
defines the same piccolo part as in 13.2.1, but no 8 is drawn over the clef.
Enharmonic resolutions: it can occur that a score in a given concert key can result in parts which would be outside the permissible key range of 7 flats to 7 sharps (for example a score in concert B major would put Eb instruments in G# major). In this case software printing the music should make an automatic enharmonic adjustment (in this case to Ab major). For music encoded at written pitch, this will usually be explicit in the ABC encooding:
V:flute clef=treble V:sax clef=treble instrument=Eb K:B [V:flute] B C D E | [V:sax] [K:Ab] A B C D |
but later other encodings will be defined, where an automatic enharmonic transposition may be required.
Only one of instrument
, +8
, -8
should be used in any voice field. If more are present their effects add. An 8 should only be drawn by a clef if the net instrument transposition is exactly one octave.
Voices which share a staff must have the same instrument, +8, -8 value. (Exceptionally they may be a perfect octave apart.) Any conflicts must be resolved as in the case of clefs (Sect 4.6).
The abc
parameter enables abc-encoding to be at a pitch other than the instrument's written pitch.
abc=concert
is a special value which specifies that the following abc-notes are encoded at concert pitch - ie as they sound. The "abc=" is optional in this case: just the word 'concert' will do.
Example:
K:C [V:flute clef=treble] CDEF [V:clarinet clef=treble instrument=Bb concert] CDEF
defines a flute and clarinet sounding CDEF in unison. If a writen pitch score is desired however (see below), the clarinet part will be printed in D a tone higher.
Enharmonic resolution: if a written pitch score is printed from a concert pitch abc-encoding, then any voices which would end up outside the key range 7 flats to 7 sharps must be transposed enharmonically. To force an enharmonic transposition where it is possible but not necessary, replace the instrument with an enharmonic equivalent - eg instrument=A#
instead of instrument=Bb
. (It would be polite to include a comment if you do this, as it is non-standard.)
abc=written
is a special value defining written pitch encoding (which is the default). If present, the "abc=" is optional in this case: just the word 'written' will do.
abc=<interval>
redefines the meaning of abc, in the same way as octave
does, but now it can be through any interval. For example abc=-12
redefines the abc-notation convention so that c representes middle C, just as does octave=-1
. Sprecifically in this example c represents middle C at the written pitch of the instrument. But now other intervals are available: eg abc=-2 redefines the abc-note D to represent middle-C at the written pitch of the instrument. In general the abc-encoded note must be moved through <interval> to obtain the note at the written pitch of the instrument.
Examples:
abc=0
the default (synonym abc=written
) signifies that the following abc is at the written pitch of the instrument defined in the voice.
abc=2
implies that the instrument's written pitch notes are two semitones (a major 2nd) higher than the abc encoding.
K:C [V:xxx clef=treble abc=2][K:C]C D E F
means that the encoded notes will be printed on the music as D E F# G in the key of D at the instrument's written pitch. Furthermore, in the absence of an instrument
statement, the instrument is non-transposing and the notes will also sound as DEF#G.
K:C [V:xxx clef=bass abc=-24] c d e f
means that the notes c d e f will be written and sound as C, D, E, F, and the d will be drawn on (and sound as) the middle line of the bass clef. This example is identical to
K:C [V:xxx clef=bass octave=-2] c d e f
emphasising the close relationship beteen octave
and abc
.
octave
and abc
should not both be used in the same V: field. If they are, their effects add.
It is important that abc
distances the abc-code from the instrument's written
pitch. It never affects the instrument's transposition.
A special case is when the abc
interval is exactly opposite to the instrument
interval. Example:
K:C [V:clt clef=treble instrument=Bb abc=2][K:C] C D E F
or equivalently
K:C [V:clt clef=treble instrument=-2 abc=2][K:C] C D E F
In this case, the abc=2
parameter implies that the written pitch abc would be a tone higher than the abc-encoding:
[K:D] D E F G
and the instrument parameter implies that the concert pitch abc would be
[K:C] C D E F
Thus in this case the abc encoding is at concert pitch.
Quite generally (assuming 8,-8,octave
are absent)
instrument=<interval_1> abc=<interval_2>
in the case where interval_2 = -interval_1
is identical to, and defines
instrument=<interval_1> abc=concert
It has to be said that abc
looks (a) pretty horrible and (b) usually unnecessary! However if you copy from a transposing instrument's written pitch abc, and paste into that of another instrument, then adjusting the instrument and abc parameters of the inserted section is the only way to make it print and sound in the recipient voice at the correct pitch. It might be wise to avoid doing this if possible, and then abc
will never be needed.
If no indication to the contrary is present, software will print scores or parts showing instruments' notes at written pitch. Play-back will be at concert pitch.
Sometimes, however, it is desirable, to present a concert pitch score (in which all parts are shown either at concert pitch or one or two octaves from it). This section deals with that situation.
The instructions
I:concert_pitch [8] I:written_pitch I:transpose_score <interval>
may be placed in the file header or any tune header. They tell software what overall score type is needed.
By default all scores will be printed at written pitch.
I:concert_pitch [8]
is an instruction to print at concert pitch.
If no further information (see below) is included about how such a score is to be constructed, software should
If the optional parameter 8
is specified, then any part shown an octave from concert pitch will be marked with an 8 by the clef (and correspondingly 15 or 22 for parts two or three octaves from sounding pitch).
I:written_pitch
If I:concert_pitch
it is present in the file header, it may be rescinded in an individual tune by I:written_pitch
.
I:transpose_score <interval>
is an instruction to print the score at a different pitch from that indicated by the voices.
If I:concert_pitch
is in force, the score will be printed as a concert pitch score, but transposed by <interval>.
If I:written_pitch
is in force, the score will be printed as a written pitch score, but transposed by <interval>.
All of the instructions in this section are ignored when a written pitch score is being constructed. They apply only to concert pitch scores, generated by the presence of I:concert_pitch
.
It is standard practice to leave parts in C on a concert pitch score exactly as they are on a normal, written pitch score. But further control of the production of concert pitch scores, especially with other transposing instruments, is available in the form of the following instructions.
I:score_concert ….
assigns parts to staves for a concert score, with exactly the same syntax as I:score
. This enables a compressed concert score to be produced. If this instruction is absent then I:score
defines the assignment.
I:clef_concert <clef-name>[+8|-8]
defines clefs and clef changes on the concert score. These must be synchronised in voices on the same stave (according to I:score_concert
or if that is absent according to I:score
). Conflicts will be resolved as described in Sect 4.6, but using I:score_concert (if present) to determine priorities.
A score for vocal quartet can be defined including
I:score [soprano alto tenor bass]
I:score_concert [(soprano alto) (tenor bass)]
[V:tenor clef=treble-8][I:clef_concert bass]…
and an open or closed score will be produced according to the absence of presence of I:concert_pitch
.
This section presents some illustrations of transposing instruments
X:1 T:Sax Quartet in Concert C M:4/4 L:1/4 I:score [ sop | alto | tenor | bari ] V:sop clef=treble instrument=Bb V:alto clef=treble instrument=Eb V:tenor clef=treble instrument=Bb- V:bari clef=treble instrument=Eb- K:C [V:sop] [K:D]D E F G |... [V:alto] [K:A]A B c d |... [V:tenor][K:D]D E F G |... [V:bari] [K:A]A B c d |...
In each voice the abc is encoded at written pitch. The alto sounds in unison with the soprano, with the tenor and bari each sounding an octave lower.
X:1 T:Sax Quartet in Concert C M:4/4 L:1/4 I:score [ sop | alto | tenor | bari ] I:score_concert [ (sop alto ) | (tenor bari) ] % I:concert_pitch V:sop clef=treble instrument=Bb concert V:alto clef=treble instrument=Eb concert V:tenor clef=treble instrument=Bb- concert V:bari clef=treble instrument=Eb- concert K:C [V:sop] [I:clef_concert treble] [V:alto] [I:clef_concert treble] [V:tenor][I:clef_concert bass] [V:bari] {I:clef_concert bass] [V:sop] C D E F |... [V:alto] C D E F |... [V:tenor] C, D, E, F, |... [V:bari] C, D, E, F, |...
is another encoding of the same 'piece' this time with all voices encoded at concert pitch.
The I:score_concert
line and the I:clef_concert
lines do nothing as it stands, and the same written-pitch score will be printed. But if the I:concert_pitch
line is uncommented (or an equivalent direction issued n a command line) the I:score_concert
line and I:clef_concert
will kick in to print a reduced concert pitch score.
More illustrations to go here! Need to be able to include pictures of scores!
A rhythm voice is one which contains no notes at all, but is designed to show chord names. By this means a part, eg for rhythm guitar or banjo, can be put in a separate voice. The voice may contain hidden rests to position the changes within the music. Uniquely, a rhythm voice need not have the same transposition as voices with which it shares a staff. Example:
... T:clarinet and guitar ... V:gtr clef=treble V:clt clef=treble instrument=-2 I:score (clt gtr) K:C [V:gtr] "C"x2 "C"x2 "C"x2 "C"x2 |"G7"x2 "G9"x2 "Gmaj7"x2 "Gsus4"x2 | [V:clt][K:D] D2 E2 F2 G2 | D2 E2 F2 G2 |
In this case the chord symbols are drawn above the single staff. [The clarinet voice is mentioned first in the I:score
as this makes it the controlling voice from which the key signature on the staff is obtained; the chords are always drawn above the staff, and the music lines are ordered in this example to reflect this.]
A rhythm voice may contain an instrument
parameter. For example instrument=2
would indicate a capo at the 2nd fret. The chord names would be printed as supplied, but play-back would sound a tone higher.
The parameters in a V: field may be represented by a macro in the header. The macro excludes the voice id, but must otherwise define all required voice parameters, and not just some of them. It is recommended that the macro name begin with # to make it clearly distinguishable.
Syntax:
m:#mymacro [clef=]<clef name>[<number>][+8 | -8][instrument=<interval>] [stafflines=<number>] [octave=<number>] [abc=<interval>]
and then
V:<voice-id> #mymacro
In this way a transposing instrument can be refered to by name without repeating its transposition characteristics.
Having a macro in a V: statement as well as explicit voice parameters is an error. In this case software should accept only the macro and reject all explicit voice parameters.
Example 1
m:#clarinet clef=treble instrument=Bb m:#bass-clarinet clef=treble instrument=Bb- V:clt1 #clarinet V:clt2 #clarinet V:bclt #bass-clarinet
Example 2
% For recorders: % Note the the # in the macro names distinguishes them from clef names! m:#descant clef=treble+8 m:#treble clef=treble m:#tenor clef=treble m:#bass clef=bass+8 octave=-1 V:de1 #descant V:de2 #descant V:tr1 #treble V:tr2 #treble V:te1 #tenor V:te2 #tenor V:ba1 #bass V:ba2 #bass
For those who don't think of instrument transpositions in the standard orchestral way, and the keyword instrument
therefore feels a bit strange, then this macro facility allows you to define #my-instrument (and variants on it) only once, and thereafter your V: statements can use any mnemonic #my-instrument you like for the instrument transposition.
The keywords +8/-8 instrument octave pitch
(and not others) are defined as they are, for very specific reasons. Importantly:
abc
, all are from abc2.1 (but with instrument
replacing the transpose
of abc2.1);abc
can render it non-transparent, and this keyword should be employed only if absolutely necessary).In general there are three pitches of interest:
and therefore three relationships connecting them, of which any two imply the other.
octave
or abc
parameters, which leave the dots→sound relationship unchanged.+8,-8
or instrument
parameters, whch leave the abc→dots relationship unchanged.The abc→sound relationship is implied in both cases, and importantly there are no parameters which define this explicitly. Why not?
If you know which written notes the abc represents, and you know your instrumentation, then you know where they sound. Suppose you wanted to change the abc→sound relationship directly. Then at least one of the other two relationships must change: if it keeps the instrumentation, then it redefines the meaning of the abc in terms of written notes; if it keeps the meaning of the abc notes, then it changes the instrumentation (and instrument transpositions will no longer be gven by the instrument parameter). Both of these must be considered 'side effects' of such an operation, and such are undesirable. Therefore the abc→dots and dots→sound relationships are considered as the two fundamentally important ones and abc→sound is implied.
Because of the addition properties of intervals, this does not mean it is difficult to write play-back software. The interval from the encoded abc to the playback sound is just the sum of the intervals given by instrument (or +8, -8) and abc (or octave).
My name is David Webber. I am the author of the music software 'Mozart' and am currently working hard to make it import and export abc - sticking rigorously, at the moment, to the published abc2.1 standard. As I do this, I am gradually acquiring (perforce) a deepening understanding of abc and what it can and can't do, so I thought it would be worthwhile to contribute here.
This proposal contrasts in some ways with that of Alex Scheutzow. (But in some areas I am stealing his ideas wholesale: I hope he accepts the latter as 'Schmeichelei' - nothing to do with goalkeepers!).
I play saxophones, clarinets, ukulele, and recorders (in that order of frequency) and so I am passionate about the inclusion of 'transposing instruments' in abc.
1) Conciseness, legacy, and sustainability. In fulfilling the objectives below I am trying to do it by introducing the minimum number of new keywords and with minimal changes to the old ones.
2) abc2.1 knows about transposition intervals only as a number of semitones. If abc is to be able to handle transposing instruments better, it needs to be able to handle transpositions better. This proposal details a method of defining detailed transpositions in such a way that anything other than the semitone count will never be needed for transpositions through major, minor and perfect intervals.
The result is a very simple extension of the transpose=
syntax, (which will almost never be needed) by defining intervals as <semitones>:<steps>. [MusicXML fans will see that it owes much to the definitions of transpositions in that format.] Intervals specified by <semitones> only are defined preceisely. The note-name synonym (where Bb = -2 = -2:-1) is introduced to enable instrument transpositions to be coded in natural language.
3) abc2.1 only allows you to write abc code at the instrument's written pitch. This means you can't copy and paste a flute part, and make it a Bb clarinet part. Being able to do that would be useful. It also means you can't type in your abc at concert pitch for transposing instruments and see the harmonies in a nice simple fashion. It would be nice to be able to do that too.
Actually you can do it in abc2.1 for the special case of octave transposing instruments - eg with a +8 and then octave=-1.
The objectives here are achieved by the introduction of a single new keyword 'abc' which is precisely analogous to the 'octave' keyword but allows an 'abc pitch renormalisation' through any interval, not just a number of octaves.
The existence of abc
allows, as a special case, abc for transposing instruments to be encoded at concert pitch. The special value abc=concert is introduced to make this more intuitive. People have discussed 'high level' and 'low level' keywords in the past. This proposal makes no such distinction apart from in abc=concert
where the actual value of the abc
depends on the accompanying instrument transposition. (In particular interval definitions are alternative syntaxes with precisely defined equivalence; thy can be used interchangeably according to taste.)
4)abc2.1 can only output 'written pitch' scores. A method is needed to write concert pitch scores. My instruction to write a concert pitch score "I:concert_pitch" is identical to Alex's "I:concert_score" but renamed for a reason. I have also taken on board Alex's "I:clef_concert" with the same meaning (having grilled him mercilessly about it), and I wanted to use the …_concert keyword suffix in the same way for I:score_concert which allows a different assignment of voices to staves when producing a concert pitch score. I renamed I:concert_score to try to avoid confusion.
Importantly, everything in (2) and (3) here is aimed at producing the dots at the instrument's written pitch (even though the abc-code can be at other pitches). (4) is extra stuff which is unneeded (unused) in that case but allows production of concert pitch dots. I think this was Alex's motivation too.