**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:**
* 'transpose' has been changed to 'instrument' to make it compare with Chris's proposal
* 'shift' has been changed to 'abc' to make it less like a verb, and to try to make its purpose more intuitive (which is difficut)! It represente the pitch of the abc-encoding.
* voice parameter macros have been introduced to simplify defining duplicate instruments on scores, and possibly as a way to bring in those with other ideas of modelling instrument transpositions.
* Clefs and transpositions have been separated, by popular request, into different sections.
----
**THE PROPOSAL:**
====== 4.6 Clefs and key/voice parameters ======
===== 4.6.1 Syntax =====
Clef and transposition information may be provided in the K: key and V: voice fields. The general syntax is:
[clef=][][+8 | -8][instrument=] [stafflines=] [octave=] [abc=]
(where <…> denotes a value, […] denotes an optional parameter, and | separates alternative values)
The abc2.1 standard also included [middle=] but this is now deprecated and [transpose=] which is now superseded – see deprecated syntax.
The values (see below for valid choices) associated with the various parameters are defined as
* is the name of a clef
* is a whole number
* is an interval (encoded in one of a number of optional ways)
The options are:
* '''' - may be treble, alto, tenor, bass, perc or none. perc selects the drum clef. clef= may be omitted.
* ''[] '' - 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=]'' – 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=]'' - defines the number of lines in the staff. The default is 5.
* ''[octave=]'' - 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=]'' - 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)
===== 4.6.2 Clef examples =====
V: clef=treble
V: clef=alto5 %C-clef on the top line
V: clef=bass-8 %Bass clef with an 8 underneath - see also sect 13.
V: 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''.
===== 4.6.3 Voice or Key? =====
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.
===== 4.6.4 Clef changes in a 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, |
===== 4.6.5 Conflict resolution =====
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).
===== 4.6.6 Deprecated syntax =====
**middle**
The abc2.1 standard and earlier allowed a clef definition to be accompanied by
''middle=''
where '''' 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='' 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.
======= 13 Transposition =======
====== 13.1 Intervals ======
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=][][+8 | -8][instrument=] [stafflines=] [octave=] [abc=]
defined two parameters (''instrument'',''abc'') whose values are //intervals//. These can be encoded by one of the following methods:
-
- :
-
where and are numbers, and is the name of a note.
===== 13.1.1 Intervals specified by semitones =====
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:
* All major, minor, and perfect intervals can be represented just by a semitone count.
* All semitone counts, except 6 - the tritone - define major, minor, or perfect intervals.
* With the exception of 6, the intervals defined by n and 12-n are complementary: they add to a perfect octave.
===== 13.1.2 Intervals specified by semitones:steps =====
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.
===== 13.1.3 Intervals specified by a note =====
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.
====== 13.2 The abc encoding pitch ======
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.
====== 13.3 Transposition parameters in voice and key fields ======
The clef/transposition parameters of the V: and K: fields are
[clef=][][+8 | -8][instrument=] [stafflines=] [octave=] [abc=]
clef, stafflines, and octave, are defined in Sect 4.6
Now that intervals are defined, ''+8'',''-8'', ''instrument'', ''abc'' can be discussed.
===== 13.3.1 Parameters +8 and -8 =====
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.
===== 13.3.2 instrument =====
The definition ''instrument='' defines thet the voice is for an instrument which transposes by the supplied interval. The "" 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.
===== 13.3.3 instrument, +8, -8 combinations =====
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.
===== 13.3.4 Conflict resolution =====
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).
===== 13.3.5 The ''abc'' parameter =====
The ''abc'' parameter enables abc-encoding to be at a pitch other than the instrument's written pitch.
==== 13.3.5.1 ''abc''=concert ====
''**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.)
==== 13.3.5.2 abc=written ====
''**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.
==== 13.3.5.3 abc= ====
''**abc=**'' 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 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''.
==== 13.3.5.4 octave and abc together ====
''octave'' and ''abc'' should not both be used in the same V: field. If they are, their effects add.
==== 13.3.5.5 abc and transposing instruments ====
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= abc=
in the case where ''interval_2 = -interval_1'' is identical to, and defines
instrument= abc=concert
==== 13.3.5.4 Why have the keyword ''abc'' ? ====
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.
====== 13.4 Showing scores at concert pitch ======
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.
===== 13.4.1 Instruction to produce a score at concert pitch (and other pitches) =====
The instructions
I:concert_pitch [8]
I:written_pitch
I:transpose_score
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
* reproduce all parts in C (those with instrument set to zero or a multiple of 12) exactly as they are at written pitch, complete with clefs.
* produce all other parts choosing bass or treble clef as it finds most convenient for minimising leger lines. Parts on treble and bass clef may be shown an octave lower or higher (respectively) than sounding, if that reduces the occurence of leger lines. [Examples: a Db piccolo part may be shown an octave lower than sounding; an Eb contrabass saxophone part may be shown on bass clef, an octave higher than sounding.]
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 ''**
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 .
If ''I:written_pitch'' is in force, the score will be printed as a written pitch score, but transposed by .
===== 13.4.2 Control of clefs on a concert pitch score =====
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 [+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.
===== 13.4.3 A useful trick for vocal quartets =====
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''.
====== 13.5 Illustrations ======
This section presents some illustrations of transposing instruments
===== 13.5.1 Sax quartet in concert C =====
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!
//
====== 13.6 Rhythm voice ======
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.
====== 13.7 Voice parameter macros ======
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=][][+8 | -8][instrument=] [stafflines=] [octave=] [abc=]
and then
V: #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.
====== 13.8 Notes on the design philosophy ======
The keywords ''+8/-8 instrument octave pitch'' (and not others) are defined as they are, for very specific reasons. Importantly:
* apart from the new ''abc'', all are from abc2.1 (but with ''instrument'' replacing the ''transpose'' of abc2.1);
* all requirements of transposed parts are met by combining them;
* different combinations do not readily yield nonsensical abc (though use of ''abc'' can render it non-transparent, and this keyword should be employed only if absolutely necessary).
In general there are three pitches of interest:
* The pitch at which the abc is represented **(abc)** ;
* The pitch at which the music is written **(the dots)** (specifically at //written pitch//);
* The pitch at which the music sounds **(sound)** .
and therefore three relationships connecting them, of which any two imply the other.
* **abc -> dots** is controlled by the ''octave'' or ''abc'' parameters, which leave the //dots->sound// relationship unchanged.
* **dots -> sound** is controlled by the ''+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?
* The relationship **abc->dots** is the essence of abc; as a notation format it is different from MIDI which encodes only sounding pitches.
* The relationship **dots->sound** is a fundamental property of the score on which you're working: it defines the //instrumentation// (albeit incompletely).
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//).
======= Proposer's comments =======
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.
===== My objectives here: =====
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 :. [MusicXML fans will see that it owes much to the definitions of transpositions in that format.] Intervals specified by 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.