|home||tune search||software||learn abc||discuss||about||blog||Starbound/LOTRO||contact|
[abc standard: home | current | route-map | updating | proposals]
This page contains the twelfth draft of a proposal to extend the transcription capabilities within abc. It involves only minor changes from the eleventh draft:
V:modifiers now combine with other modifiers in the same field (although fields still override previous fields)
+parameter introduced in the eleventh draft for combining
shift*changes is superfluous and has been removed
instrument=<note>;abc=concertis now a synonym for
instrument=<note>;abc=writtenis a synonym for
shift-sound=c<note> shift-score=cc- this means that when the
instrumentmodifier overrides, it overrides both
The important aspects of this proposal are the same as versions 10 & 11:
shift-soundoperators which allow the typeset score and playback to be modified independently
shift-sound, to give an intuitive specification for transposing instruments
shiftshorthand for combined score and sound transpositions
I have included some notes and comments at the end.
Additional text for section 4.6 Clefs and transposition
This section discusses support within abc for clefs and other features which affect the placement of the notes relative to the staff. It briefly mentions transposition, because the relevant syntax appears in the
V:voice fields, but this topic is discussed in full in section 13, Transposition.
Clef, transposing instrument and related indications appear as modifiers to the
V:voice fields; the possible modifiers are:
[clef=]<clef name>[<line number>][+8|-8] stafflines=<lines> octave=<number> shift-score=<note1><note2> shift-sound=<note1><note2> shift=<note1><note2> instrument=<note>;[abc=]concert|written
<…> denotes a value,
[…] denotes an optional parameter, and
| separates alternative values).
Within a given voice, the modifiers of each
V: field are inherited from the previous
V: field, unless overriden - see scope and inheritance of modifiers for more details.
… unchanged …
shift-score=<note1><note2>transposes the typeset score according to the specified interval (the playback is not affected) - for more information see transposition operators;
shift-sound=<note1><note2>transposes the playback according to the specified interval (the typeset score is not affected) - for more information see transposition operators;
shift=<note1><note2>is a shorthand for
shift-score=<note1><note2> shift-sound=<note1><note2>- for more information see transposition operators;
instrument=<note>;abc=concertis a synonym for
shift-score=<note>c shift-sound=cc- for more information see writing abc code for transposing instruments;
instrument=<note>;abc=writtenis a synonym for
shift-sound=c<note> shift-score=cc- for more information see writing abc code for transposing instruments;
… unchanged …
middle=<pitch>modifier of abc 2.0 and earlier has been compromised in terms of what it was supposed to do and how it has actually been implemented. It is therefore deprecated.
TODO: Update deprecated list.
… unchanged …
As a fundamental rule, within each voice, each successive
K: field inherits the modifiers of the previous
K: field, unless it specifically overrides them.
Note: in other words, within a voice
V: inherits from a
K: field as well as from another
V: field (and vice-versa).
Recommendation: In single-voice tunes these modifiers will normally be applied to the
K: field. In multi-voice tunes it is recommended that they are only applied to
V: fields (an additional
V: field can even be introduced if one of the modifiers needs to change at a
K: change). If a single-voice tune contains
V: fields (for example, if it is a part extracted from a multi-voice score), then it is recommended that modifiers are applied to the
V: field, modifiers may be arranged in any order and their effect is combined. In the specific case of
shift-sound modifiers mixed together with
instrument modifiers, replace the latter with their
shift-sound equivalents. For example,
shift=CG shift-score=GF becomes
shift-score=CG shift-sound=CG shift-score=GF and so the second
shift-score combines with the first to give
However, modifiers written in each successive
V: field override modifiers inherited from previous fields. For example,
[V:1 shift=CG][V:1 shift-score=GF] represent two different fields and so modifiers of the first are overridden by modifiers of the second. To evaluate their effects, first expand the
shift in the first field to give
[V:1 shift-score=CG shift-sound=CG][V:1 shift-score=GF]. The second field then inherits both modifiers but specifically overrides the
shift-score to result in
[V:1 shift-sound=CG shift-score=GF].
Finally note that there are two ways to specify octave shifts and, for example,
octave=1 is equivalent to
shift=Cc. However these operators can be used independently and so neither overrides the other.
The fundamental transposition operators are
shift-score which act as modifiers for
shift-score=<note1><note2>transposes the typeset score according to the specified interval (the playback is not affected)
shift-sound=<note1><note2>transposes the playback according to the specified interval (the typeset score is not affected)
Transpositions are applied to notes, grace notes, chords and key signatures.
The transposition interval is specified by two notes,
<note1> refers to the transcribed abc code and
<note2> refers to the rendered output (i.e. the typeset score in the case of
shift-score or the playback in the case of
Example: In the following the typeset score is raised by a fifth and is rendered the same as if the abc code was transcribed as
[K:D] efga. The playback is lowered by a tone and is rendered the same as if the abc code were
K:G shift-score=CG shift-sound=DC ABcd
Note: The interval system is clear with regard to enharmonics so, for example, the interval
_G is distinct from
^F. However, to compute transpositions it may be helpful to use the MusicXML concept of specifying the interval as a combination of diatonic steps and semitones. Both of these can be easily calculated and make it simple to work out what the resulting note is using the diatonic steps to give the letter and the semitones to indicate whether it is flat, natural or sharp.
^F is 6 semitones in 3 diatonic steps - C to D, D to E, E to F (as opposed to
_G which is 6 semitones in 4 diatonic steps). Using this interval:
_Ein abc code) transposes to A since A is 3 steps (letters) above E (in the cycle ABCDEFG) and the A is natural, since that note is 6 semitones above Eb
^cin abc code) since C is 3 steps above G and C# is 6 semitones above G
^^Fin abc code) since F is 3 steps above C and F## is 6 semitones above C#
Notes for developers:
You should correct any transposition which goes beyond the specified abc limits to available key signatures,
K:Cb (7 flats) to
K:C# (7 sharps), and double/triple accidentals. For example, in principle
K:C# shift-score=CG raises the key up to
K:G# (8 sharps), so to keep with the limits it should be rendered as
K:Ab (4 flats).
TODO (elsewhere in the standard): Limit the range of key signatures supported by abc to
K:Cb (7 flats) through to
K:C# (7 sharps). (Also limit accidentals - e.g. double sharp and double flat accidentals should be supported, but triples are entirely optional.)
To specify the same transposition for both score and sound, just use
shift=<note1><note2> as a shorthand.
Example: The following two
K:key fields are equivalent
K:G shift-score=CG shift-sound=CG K:G shift=CG
Transposing instruments sound notes at a different pitch to which they are written. For example, a C written on a Bb clarinet score would be sounded as a Bb (and similarly a written D would be sounded as a C).
This section uses written pitch (i.e. the pitch that is written on a transposing instrument's score) and concert pitch (i.e. the pitch that is actually sounded) to distinguish between the two.
Note: The term "concert pitch" is also used elsewhere in the musical lexicon to indicate "play A (above middle C) at 440Hz". However, here it refers to the pitches that transposing instruments actually sound.
There are two ways of writing abc code for transposing instruments:
shift-score=<note1><note2>modifiers used to transpose the typeset scores appropriately. If preferred the
instrument=<note>;abc=concertmodifier can be used as a synonym for
shift-score=<note>c shift-sound=cc. Here the
abc=is optional so this could be written
shift-sound=<note1><note2>modifiers used to transpose the playback appropriately. If preferred the
instrument=<note>;abc=writtenmodifier can be used as a alternative for
shift-sound=c<note> shift-score=cc. Again the
abc=is optional so this could be written
In both cases the typeset score is rendered at written pitch by default.
If a concert pitch score is required the
I:concert-score instruction can be applied, either in the file header or the tune header. For transcriptions at concert pitch this has the effect of cancelling all of the
shift-score modifiers (and the
instrument=<note>;abc=concert alternative). For transcriptions at written pitch it has the effect of altering
shift-sound modifiers (and the
instrument=<note>;abc=written alternative) to
Note 1: The
<note> in the
instrument=<note> syntax is a note and not a key (so that different octaves may be specified and so that the letter
b is not ambiguous). Therefore, for a Bb instrument you must write
instrument=_B and not
Note 2: The rationale for including
shift-sound=cc (which is in effect a transposition from a note to itself) as part of the synonym for
shift-score=cc as part of
instrument=<note>;abc=written is to completely cancel the previous transposing instrument setting, so that everything works when a voice switches from abc encoded at written pitch to abc encoded at concert pitch, or vice-versa.
The following example illustrates the principles of writing for transposing instruments.
Suppose a Bb clarinet player and a violinist wish to play the same piece which simply consists of the notes CDEF in the key of C.
Since the violin is not a transposing instrument, the violinist's part is written (and sounded):
V:1 name=violin K:C CDEF|
For the clarinet part, there is a choice. If, say, the composer of the piece prefers to work at concert pitch, the clarinet part can be transcribed as sounded, either using
V:2 name=clarinet shift-score=_Bc K:C CDEF|
instrument as a alternative:
V:2 name=clarinet instrument=_B;abc=concert K:C CDEF|
This will be rendered by abc typesetting software according to the shift (i.e.
[K:D] DEFG) but sounded as transcribed (i.e.
CDEF). If a concert pitch score is required it can be typeset by adding an
Alternatively, if the composer wants the abc code at written pitch, the same piece can be transcribed:
V:2 name=clarinet shift-sound=c_B K:D DEFG|
instrument as a alternative:
V:2 name=clarinet instrument=_B;abc=written K:D DEFG|
This will be rendered by abc typesetting software as transcribed (
DEFG) but sounded according to the shift (i.e.
CDEF). Again, if a concert pitch score is required it can be typeset by adding an
Note: Written pitch voices will almost always need their own
K: field to set the key correctly (which will be different from concert pitch voices).
The whole piece could then be transcribed at concert pitch as:
K:C V:1 name=violin CDEF| V:2 name=clarinet instrument=_B;abc=concert CDEF|
or at written pitch as:
K:C V:1 name=violin CDEF| V:2 name=clarinet instrument=_B;abc=written K:D DEFG|
In either case the typeset score will be rendered at written pitch (and the playback at concert pitch). To obtain a concert pitch score, add an
I:concert-pitch instruction in the file or tune header.
Finally, suppose that the clarinet player has fallen ill and is to be replaced by an alto sax player who now needs a transposed part to read. If the abc code has been transcribed at concert pitch this is extremely easy by replacing
instrument=_E;abc=concert in the clarinet part:
V:2 name="alto sax" instrument=_E;abc=concert CDEF|
If the abc code has been transposed at written pitch (in this case for a Bb instrument), it is a little harder.
instrument=_B;abc=written can remain, as it is adjusting the playback to concert and also will serve as a reminder that the part was originally transcribed at written pitch for a Bb instrument.
To adjust the score, consider that the Bb clarinet score is written a major second higher than it is sounded (so C is written D) whereas the alto sax is written a major sixth higher than it is sounded (so C is written A). Since the abc code is already transcribed a tone higher, it needs to be raised by a further fifth (i.e. a major sixth less a major second) and so one way to do it is to use
shift-score=DA if that is easier to think about). The resulting code is:
V:2 name="alto sax" instrument=_B;abc=written shift-score=CG K:D DEFG|
This can be thought of as a reminder that the part is encoded at written pitch for a Bb instrument but the score is additionally transposed a fifth higher (i.e. for an instrument a fifth lower).
Another way to express this is to use the fact that a second
V: field overrides parts of the first. In this following excerpt, the first
V: field shows details of the original transcription for clarinet, whilst the second shows the re-transposition adjustments for alto sax:
V:2 name=clarinet instrument=_B;abc=written V:2 name="alto sax" shift-score=CG K:D DEFG|
Depending on how you think about re-transposition, a further way to do this is to write:
V:2 name="alto sax" instrument=_E;abc=written shift=CG K:D DEFG|
This can be thought of as a reminder that the score is at written pitch for an Eb instrument but that the abc is encoded for an instrument a fifth higher.
Once again overriding can be brought into play - however, both new modifiers (
shift) are required for the re-transposition to work and so in fact the second
V: field completely overrides everything in the first:
V:2 name=clarinet instrument=_B;abc=written V:2 name="alto sax" instrument=_E;abc=written shift=CG K:D DEFG|
One final way to do this, if you consider that the
instrument modifier is ambiguous (the abc is encoded for a Bb instrument but the score will be typset for an Eb instrument) is just to use
V:2 name="alto sax" shift-score=CG shift-sound=c_B K:D DEFG|
However, these examples suggest that, all other things being equal, it is rather more flexible to transcribe the abc code at concert pitch rather than at written pitch.
Finally note that all of the transposing instrument information would normally be collected up in the tune header to make it more visible (it only needs to appear in the body if something changes halfway through, such as a switch from Bb clarinet to A clarinet). So the written pitch clarinet to alto sax re-transposition excerpt could be transcribed as:
T:Duet for violin and clarinet (actually played on an alto sax) V:1 name=violin V:2 name=clarinet instrument=_B;abc=written V:2 name="alto sax" shift-score=CG K:C V:1 CDEF| V:2 K:D DEFG|
The following table lists some example transposing instruments and the modifiers they would need
|abc at concert pitch||abc at written pitch|
|Instrument|| || ||
|piccolo|| || ||
|Bb clarinet|| || ||
|soprano sax|| || ||
|A clarinet|| || ||
|alto flute|| || ||
|cor anglais|| || ||
|alto sax|| || ||
|tenor sax|| || ||
To transpose an entire file, use the instruction
I:shift-sound <note1><note2> or, as a shorthand for both,
I:shift <note1><note2>. When placed in the file (or tune) header they have the the effect of adding the corresponding
shift= modifiers to every
V: field in the file (tune) which will then be combined with existing modifiers.
Example: The following excerpts are equivalent; in the former the
I:shift-score cC (downwards octave transposition) is applied to the
K: field and combines with the existing
shift-score modifier to give the latter.
I:shift-score cC K:C shift-score=_Bc CCCC|
K:C shift-score=_BC CCCC|
I welcome comments on all of the above proposal but in particular:
instrument=<note>;abc=written. A number of other suggestions have been made for the qualifier which specifies whether the abc is encoded at concert or written pitch including the following (I don't really mind which we end up with):
written-encoded- a little more verbose
written- perhaps a little too terse and open to being misinterpreted by a user as relating to the typeset score (although this proposal does allow for these as shorthand)
abcAsScore- personally I don't find these very intuitive (particularly because it means that
instrument=<note>;abcAsScoreis an alternative for
shift-sound=c<note>and vice-versa, and also because
abcAsWrittenScore, since the score can either be typeset at concert or written pitch)
octaveas a synonym for
octave=1is equivalent to
shift=Cc) and thus reduce the number of independent modifiers.
I:concert-scoreis present), that means we just need something like
concert-clef=treble(which would only apply when
I:concert-scoreis present) to handle this.
A recurring question is whether independent
shift-sound modifiers are actually necessary. I have discussed this separately in the independent-shift use-case.
Chris Walshaw, June 2014