// ** Transposition proposal - summary: ** // This page contains the ninth draft of a proposal to extend the transcription capabilities within abc (following hundreds of messages on the abcusers mailing list in Sep 2011, Dec 2011 - Feb 2012 and Aug 2012). It is based on numerous comments, suggestions and proposals from lots of contributors. The important aspects of this proposal are: * Two complementary systems for transposition: * the instrument-centric version offers the high-level (closer to the musician) ''instrument'' modifier that operates on the ''K:key'' and ''V:voice'' fields and provides syntax for transposing instruments reminiscent of standard transposing instrument terminology * the music-centric version offers the low-level (closer to the music) ''I:transpose'' instructions which provide arbitrary transposition of the sound and / or the typeset score * The option of transcribing abc code for transposing instruments either at written pitch or at concert pitch (or even both in the same score) with an easy way of switching the output from one to another * A pragmatic version of enharmonic indicators, meaning that ''I:transpose'' follows an identical syntax (I think) to the ''%%transpose'' directive available in abcm2ps, so that they are effectively interchangeable * A change of structure within the standard: in previous versions, I was planning to include the entire transposition topic within section 4.6, because much of the relevant syntax appears in the ''K:key'' and ''V:voice'' fields. However, it now seems preferable that 4.6 should just discuss clefs, and that transposition should appear as a separate chapter 13 (with the existing chapters 13 Examples and 14 Appendix moving up to 14 and 15 respectively). Although consensus was close back in Feb 2012, I temporarily stopped work on this proposal because of long-running arguments which I found difficult to keep up with. Since then I have introduced what I hope is a more robust system for updating the standard and other proposals have been published. I have therefore published this ninth draft, an updated and simplified version of the previous one. This ninth draft is a moderate change from the eighth and omits the complex overloading of the instrument operator to cope with temporary changes in transposing instrument. These can easily be dealt with using the low-level operators (indeed, this is a good justification for including both low- and high-level systems). In addition I have been convinced by the arguments that abc should be WYSIWYG as far as possible and so in this version the instrument modifiers are declarative only with regards to the typeset score. (That is not true for playback, but since there is no merit in ever having playback at written pitch, this means the proposal is WYSINNWYH - what you see is not necessarily what you hear - in other words, the playback is always at concert pitch even if the abc code is transcribed at written pitch). // ** Corrections: ** // This proposal was first published on 22nd Aug 2012. Since then a couple of minor changes have been made including: * I have clarified that the [[#modifier scope - extended example]] is just referring to concert pitch transcription. * I have extended further the [[#transposing instruments - extended example]] to show possible ways that the whole tune might be transcribed. * It was pointed out that ''%%score'' and hence ''I:score'' already exist (which I knew very well but had temporarily forgotten) and therefore conflict with ''I:score=concert-pitch'' and ''I:score=written-pitch''. Although Marc Sabatella also pointed out that the existing setting might well be a good place to specify concert / written pitch, the precise syntax is not crucial at this stage and I don't want to complicate the proposal, so I have changed the settings to ''I:concert_pitch_score'' and ''I:written_pitch_score''. ---- ==== 4.6 Clefs and key/voice parameters ==== // Additional text for [[abc:standard:v2.1#clefs_and_transposition|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 some of the relevant syntax appears in the ''K:key'' and ''V:voice'' fields, but this topic is discussed in full in [[#transposition|section 13, Transposition]]. Clef, transposing instrument and related indications appear as modifiers to the ''K:key'' and ''V:voice'' fields; the general syntax is: [clef=][][+8|-8] [stafflines=] [instrument=[]] [octave=] (where ''<...>'' denotes a value, ''[...]'' denotes an optional modifier, and ''|'' separates alternative values). Within a given voice, unless overriden the modifiers of each ''K:'' or ''V:'' field are inherited from the previous ''K:'' or ''V:'' field - see [[#scope and inheritance of modifiers]] for more details. // ... unchanged ... // * ''instrument=[]'' is used when [[#writing abc code for transposing instruments]] (see below); // ... unchanged ... // // Note: // * the ''transpose='' modifier of [[abc:standard:v2.1#clefs and transposition|abc 2.1]] and earlier is now deprecated (and replaced by the ''I:transpose-sound '' instruction - see [[#transposition of a tune or file]]). * the ''middle='' modifier of [[abc:standard:v2.1#clefs and transposition|abc 2.1]] 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 ... // === 4.6.1 Scope and inheritance of modifiers === // TODO: // This section needs thorough checking and probably some discussion (although it is based on how abcm2ps currently propagates modifiers from one field to another). The modifiers may be arranged in any order but there must be no more than one of each modifier in the same field. Within a given voice, unless overridden the modifiers of each ''K:'' or ''V:'' field are inherited from the previous ''K:'' or ''V:'' field. // Recommendation: // In single-voice tunes these modifiers will normally be applied to the ''K:key'' field. In multi-voice tunes it is recommended that they are only applied to ''V:voice'' fields (an additional ''V:voice'' field can even be introduced if one of the modifiers needs to change at a ''K:key'' change). If a single-voice tune contains ''V:voice'' 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:voice'' fields. In a tune which just contains ''K:'' fields, a single rule applies: * each successive ''K:'' field inherits the modifiers of the previous one (unless it specifically overrides them). // Example: // In the following, the notes after the ''K:G'' are set in the bass clef as the modifier is inherited from the ''K:C'' field. K:C clef=bass CDEF| K:G CDEF| In tunes which contain ''V:'' fields (either multi-voice or single-voice), two rules apply: * each voice is left unchanged if all of the other voices are removed; * in each voice, each successive ''V:'' or ''K:'' field inherits the modifiers of the previous ''V:'' or ''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). == Modifier scope - extended example == To make the modifiers absolutely explicit at any point in the tune, you could just propagate them throughout the ''K:'' and ''V:'' fields for each voice. Consider the following multi-voice tune (for the purposes of this example, assume that everything is transcribed at concert pitch): V:violin V:clarinet instrument=Bb K:C [V:violin] CDEF| [V:clarinet] CDEF| [V:violin] [K:A]ABcd| [V:clarinet instrument=A] [K:A]ABcd| [V:violin] dcBA| [V:clarinet instrument=Bb] dcBA| Firstly, the clarinet voice should be left unchanged if the violin voice is removed, so the clarinet voice is equivalent to the following: V:clarinet instrument=Bb K:C [V:clarinet] CDEF| [V:clarinet instrument=A] [K:A]ABcd| [V:clarinet instrument=Bb] dcBA| Finally to make the modifiers completely explicit, you could just propagate them through the voice, making the above equivalent to the following: V:clarinet instrument=Bb K:C instrument=Bb [V:clarinet instrument=Bb] CDEF| [V:clarinet instrument=A] [K:A instrument=A]ABcd| [V:clarinet instrument=Bb] dcBA| ===== 13 Transposition ===== ==== 13.1 Writing abc code for transposing instruments ==== 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. To write abc code for a transposing instruments, each transposing instrument's voice has an ''instrument'' modifier and which indicates how the abc code should be interpreted. Typically these appear in the ''V:'' field although they may also be used in the ''K:'' field (for example, in a tune transcribed for a single voice). Abc code written for transposing instruments is always rendered by playback software at concert pitch. By default typesetting software will render it as transcribed (so abc code transcribed at concert pitch produces a typeset score at concert pitch). However, instructions can be used to typeset a concert score from abc transcribed at written pitch and vice-versa (see [[#extracting a score in concert written pitch|extracting a score in concert/written pitch]]). The following example illustrates the principles, which are then discussed in more detail below. === 13.1.1 Transposing instruments - extended example === 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: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: V:clarinet instrument=Bb;concert K:C CDEF| This will be rendered by abc typesetting software as transcribed (''CDEF''). If a written pitch score is required it can be typeset by adding a ''I:written_pitch_score'' instruction (see [[#extracting a score in concert written pitch|extracting a score in concert/written pitch]]). Alternatively, if the clarinet player wants the abc code at written pitch, the same piece can be transcribed: V:clarinet instrument=Bb;written K:D DEFG| This will be rendered by abc typesetting software as transcribed (''DEFG''). If a concert pitch score is required it can be typeset by adding a ''I:concert_pitch_score'' instruction (see [[#extracting a score in concert written pitch|extracting a score in concert/written pitch]]). // 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). In both cases, the abc code will be rendered by abc playback software as the notes ''CDEF'' (i.e., in the case of written pitch abc code, transposed down two semitones). The whole piece could then be transcribed at concert pitch as: K:C V:violin CDEF| V:clarinet instrument=Bb;concert CDEF| Alternatively to transcribe the clarinet part at written pitch the whole piece could be written any one of a number of ways including the following three excerpts. The first sets up headers as they are required, the second sets up defaults in the file header and the third additionally compresses the abc code with inline headers. K:C V:violin CDEF| V:clarinet instrument=Bb;written K:D DEFG| V:violin V:clarinet instrument=Bb;written K:C V:violin CDEF| V:clarinet K:D DEFG| V:violin V:clarinet instrument=Bb;written K:C [V:violin] CDEF| [V:clarinet][K:D] DEFG| === 13.1.2 The instrument modifier === The ''instrument'' modifier specifies the "key" of the transposing instrument (closely mimicking typical language used by musicians who play such instruments) together with an abc-pitch setting which indicates whether the abc code is transcribed at written or concert pitch. Optionally the abc-pitch can be omitted and an ''I:abc-pitch'' instruction used instead (see [[#the abc-pitch instruction]]) to instruct software to treat every transposing instrument voice as either ''concert'' or ''written'' pitch (much in the same way that a typeset score may have the words "concert pitch" or "written pitch" at the top). // Example: // Abc code transcribed at //concert pitch// for a Bb instrument can be indicated as follows. In these two excerpts, which are equivalent to each other, the settings are purely declarative and would have no effect (unless used in conjunction with a ''I:written_pitch_score'' instruction - see [[#extracting a score in concert written pitch|extracting a score in concert/written pitch]]): V:clarinet instrument=Bb;concert I:abc-pitch=concert V:clarinet instrument=Bb // Example: // Abc code transcribed at //written pitch// for a Bb instrument can be indicated as follows. In these two excerpts, which are equivalent to each other, the settings mean that playback would be transposed down two semitones from the abc code. However for typesetting they are purely declarative and would have no effect (unless used in conjunction with a ''I:concert_pitch_score'' instruction - see [[#extracting a score in concert written pitch|extracting a score in concert/written pitch]]): V:clarinet instrument=Bb;written I:abc-pitch=written V:clarinet instrument=Bb == The "key" setting == Available key settings match those of existing transposing instruments (for a list of typical transposing instrument keys and their transpositions in semitones see the [[#instrument transposition table]] in the appendices). For high and low transposing instruments, the instrument key can be followed by a ''+'' or ''-'' together with the number of octaves. // Examples: // * The tenor saxophone is a low Bb transposing instrument and so the abc code would have the modifier ''instrument=Bb-1''. For a low Bb instrument, if the abc is transcribed at written pitch, the playback is transposed down by an octave and two semitones (i.e. 14 semitones). * The sopranino saxophone is a high Eb transposing instrument and so the abc code would have the modifier ''instrument=Eb+1''. For a high Eb instrument, if the abc is transcribed at written pitch, the playback is transposed up by 3 semitones. * The piccolo is a high C transposing instrument and so the abc code would have the modifier ''instrument=C+1''. For a high C instrument, if the abc is transcribed at written pitch, the playback is transposed up by 12 semitones (i.e. an octave transposition). == The abc-pitch setting == The abc-pitch (i.e. the pitch at which the abc code is transcribed) is set by appending either '';concert'' or '';written'' after the "key" to indicate that the abc code is transcribed at concert or written pitch, respectively. === 13.1.3 The abc-pitch instruction === Optionally, the ''I:abc-pitch'' instruction can be used to set a default abc-pitch for a tune (or file) and thus to instruct software how the ''instrument'' modifiers are to be interpreted. If either of the following instructions is inserted in the tune (or file) header it is applied to all voices in the tune (or file) containing an ''instrument'' modifier. I:abc-pitch=concert I:abc-pitch=written // Example: // In the following excerpt, both voices are treated as if the abc code is transcribed at written pitch: I:abc-pitch=written V:clarinet instrument=Bb V:sax instrument=Bb-1 The ''I:abc-pitch'' only indicates how the ''instrument'' modifiers are to be interpreted; it has no effect on any voice that does not contain an ''instrument'' modifier, so voices written for non-transposing instruments are completely unchanged by it. An abc-pitch setting contained in the ''instrument'' modifier overrides the ''I:abc-pitch'' instruction. This override only lasts until the next ''K:'' or ''V:'' field (in the same voice) that contains an ''instrument'' modifier. // Example: // The following excerpt alternates between concert and written pitch: I:abc-pitch=concert V:clarinet instrument=Bb % concert pitch - the "I:abc-pitch" setting is applied V:clarinet instrument=A;written % written pitch - the "I:abc-pitch" is now overridden to "written" V:clarinet instrument=A % concert pitch - the override is cancelled and the "I:abc-pitch" applies once more However, this is not recommended and if it is desired to switch between concert and written pitch in an abc transcription, for clarity it is recommend that the abc-pitch should be made completly explicit using the ''instrument'' modifier. // Example: // For clarity, the previous excerpt could be written: V:clarinet instrument=Bb;concert V:clarinet instrument=A;written V:clarinet instrument=A;concert The ''I:abc-pitch'' instruction may not appear in the tune body and if more than one applies (e.g. if there is one in the file header and one in a tune header), the latter overrides the former. If the abc-pitch setting is omitted from the ''instrument'' modifier and no ''I:abc-pitch'' instruction is in force, the default abc-pitch is assumed to be ''concert''. However, it is recommended that the abc-pitch should always be set explicitly. // Example: // The following voice regarded as being transcribed at concert pitch. V:clarinet instrument=Bb // Comment: // Legacy tunes transcribed prior to the introduction of the ''abc-pitch'' and ''instrument'' syntax, are sometimes transcribed in written pitch (with a ''transpose'' modifier to change the playback output). However, since they will not have an ''instrument'' modifier, and since the ''transpose'' modifier is not affected by ''abc-pitch'', the default to ''concert'' pitch will not affect them. === 13.1.4 Extracting a score in concert/written pitch === If one or more voices in a tune are transcribed for transposing instruments parts are produced at written pitch, but the conductor score can be printed either at written or concert pitch. Since playback is always at concert pitch, the following instructions affect only typesetting software. The ''I:concert_pitch_score'' instruction can be used in the tune header (or even the file header) to typeset a tune (or even all the tunes in a file) at //concert pitch//. The ''I:concert_pitch_score'' instruction has the following effects: * for voices transcribed at concert pitch, ''I:concert_pitch_score'' ignores any ''instrument'' modifiers; * for voices transcribed at written pitch, ''I:concert_pitch_score'' has the effect of applying the transposition, indicated by the key setting of the ''instrument'' modifier, to the typeset score. For example, a Bb instrument transcribed at written pitch has its typeset score transposed down by two semitones from the transcribed abc code (since Bb is two semitones below C). Conversely the ''I:written_pitch_score'' instruction can be used in the tune header to typeset a tune (or even all the tunes in a file) at //written pitch//. The ''I:written_pitch_score'' instruction has the following effects: * for voices transcribed at written pitch, ''I:written_pitch_score'' ignores any ''instrument'' modifiers; * for voices transcribed at concert pitch, ''I:written_pitch_score'' has the effect of applying the transposition, indicated by the key setting of the ''instrument'' modifier, to the typeset score. For example, a Bb instrument transcribed at concert pitch has its typeset score transposed up by two semitones from the transcribed abc code (since C is two semitones above Bb). === 13.1.5 Enharmonic alternatives for transposing instruments === // 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.) In general the written key signature is specified precisely by the instrument "key" and so transposing instruments should not need to choose an enharmonic alternative: specifically, in terms of steps through the cycle of fifths, the relationship between the concert key and the written key is the same as the relationship between the instrument key and C. // Example: // For a Bb instrument there are two steps up through the cycle of fifths to C, therefore a concert key signature of Cb is transposed to a written key signature of Db (not C#) and concert B is transposed to written C# (not Db). However, this is limited by the range of available key signatures, so a concert key signature of F# is transposed to written Ab (since G# is not supported) and C# is transposed to Eb (since D# is not supported). Although not recommended, it is possible to get the enharmonic alternative using an ''I:transpose'' instruction with zero semitone transposition and an appropriate enharmonic indicator (see [[#enharmonic alternatives for transposition]] and [[#transposition for transposing instruments]]). // Example (esoteric): // The following excerpt would be typeset in ''K:C#'' rather than ''K:Db'' because of the enharmonic indicator in the ''I:transpose-score'' instruction: I:written_pitch_score K:Cb instrument=Bb;concert I:transpose-score 0# === 13.1.6 Temporary changes to transposing instruments === Sometimes it is necessary to change, temporarily, the transposition in a voice to that for a different transposing instrument. This can be achieved using the low level ''I:transpose'' operators - see [[#transposition for transposing instruments]]. === 13.1.7 Clefs for transposing instruments === // TODO: // Here or elsewhere, clarify how the ''instrument'' modifiers affect the clef - see messages [[http://tech.groups.yahoo.com/group/abcusers/message/6316|6316]] and [[http://tech.groups.yahoo.com/group/abcusers/message/6324|6324]]. ==== 13.2 Transposition of a tune or file ==== Many abc software tools offer transposition facilities - either by modifying the output (so that the typeset score and/or the playback is output at a different pitch from the abc transcription), or even by writing or displaying a transposed version of the abc music code. However, there are often occasions when it is preferable to record the transposition as (semi-permanent) change in the abc tunebook. For example, the tunebook might record how the tune was originally transcribed but a band may wish to play it in a different key. The following syntax allows this without the need to generate an additional transposed duplicate of the abc code. Transposition can be specified within the abc code using the following ''I:transpose'' instructions: * ''I:transpose '' - transpose both the typeset score and the playback by the indicated number of semitones (positive numbers transpose up, negative down); * ''I:transpose-score '' - transpose the typeset score by the indicated number of semitones (this setting does not affect playback); * ''I:transpose-sound '' - transpose the playback by the indicated number of semitones (this setting does not affect the typeset score). These instructions describe how abc software must treat the abc code in order to produce the required output and provide an arbitrary way of transposing the typeset score and the playback either independently or together. They can even be used for [[#transposition for transposing instruments|transposing instruments]] as a lower-level alternative to the ''instrument'' modifier, although this is not recommended. // Example: // The following excerpt would be transposed up a fifth (7 semitones) from C into G. I:transpose 7 K:C CDEF| The [[#semitone transposition table]] (in the appendices) shows the number of semitones required to achieve any transposition between every key from ''K:Cb'' (seven flats) through to ''K:C#'' (seven sharps). === 13.2.1 Scope and inheritance of transpose instructions === The following rules apply to ''I:tranpose'' instructions: * an ''I:transpose'' instruction in the file header is applied to all tunes in the file; * an ''I:transpose'' instruction in the tune header is applied to all voices in the tune; * an ''I:transpose'' instruction in the tune body is applied to the current voice from where it appears to the end of the tune. Each ''I:transpose'' setting overrides the score and / or sound transposition individually as follows: * an ''I:transpose-score'' instruction overrides any existing ''I:transpose-score'' instruction, but leaves ''I:transpose-sound'' unchanged; * an ''I:transpose-sound'' instruction overrides any existing ''I:transpose-sound'' instruction, but leaves ''I:transpose-score'' unchanged; * an ''I:transpose '' instruction is equivalent to ''I:transpose-score '' and ''I:transpose-sound ''. // Example 1: // If both ''I:transpose'' instructions are of the same type then second simply overrides the first. Thus the following two lines are considered identical (spaces added for easy comparison): [K:C] CDE| [I:transpose 7]CDE| [I:transpose 5]CDE| [K:C] CDE| GAB| FGA| // Example 2: // If the ''I:transpose'' instructions are different then the override is carried out indiviudally by sound or score. Thus the following two lines are considered identical: [I:transpose 7][I:transpose-sound 5] [I:transpose-score 7][I:transpose-sound 5] // Recommendation: // The examples above are somewhat esoteric, provided for the purpose of explaining the scoping rules and not to demonstrate typical usage. Indeed, an abc tune is difficult to read if it contains more than one ''I:tranpose'' instruction and so it is recommended to keep them to an absolute minimum, either once in the file header or in individual tune headers or possibly at the start of specific voices. === 13.2.2 Enharmonic alternatives for transposition === The transposition produced by ''I:tranpose'' instructions is always to the enharmonic key with the smallest number of sharps or flats. In the one ambiguous case, ''K:F#'' (6 sharps) is the default, rather than ''K:Gb'' (6 flats). Enharmonic alternatives are possible, within the range of supported key signatures (a maximum of 7 flats, ''K:Cb'', through to a maximum of 7 sharps, ''K:C#''), and to get an enharmonic key: * add a ''#'' after the '''' indicator to get a sharp key; * add a ''b'' after the '''' indicator to get a flat key; * add a ''*'' after the '''' indicator to get a choice; in this case transposition from a flat key gives a flat enharmonic and transposition from a sharp key gives a sharp enharmonic (transposition from ''K:C'' defaults to the enharmonic key with the smallest number of sharps or flats). The enharmonic indicators have no effect if the resulting key does not have an enharmonic equivalent within the supported range. // Examples: // The following examples demonstrate the enharmonic rules in full (the comments show the resulting key): [I:transpose 2] [K:D] % K:E [I:transpose 2b][K:D] % K:E despite the enharmonic indicator, as K:Fb is outside the range of supported key signatures [I:transpose 2] [K:A] % K:B [I:transpose 2b][K:A] % K:Cb because of the enharmonic indicator [I:transpose 2] [K:E] % K:F# because of the default [I:transpose 2b][K:E] % K:Gb because of the enharmonic indicator [I:transpose 2] [K:B] % K:Db because it has 5 flats whereas K:C# has 7 sharps [I:transpose 2#][K:B] % K:C# because of the enharmonic indicator [I:transpose 2*][K:B] % K:C# because of the enharmonic indicator (the * gives a sharp enharmonic rather than a flat one) [I:transpose 2#][K:F#] % K:Ab despite the enharmonic indicator, as K:G# is outside the range of supported key signatures Note that enharmonic indicators apply to playback and typesetting alike, although they will only make a difference to the playback if the software can handle non-equal temperaments (since in equal temperament a Gb, say, will sound exactly the same as an F#). === 13.2.3 Transposition for transposing instruments === Generally, the low-level ''I:transpose'' instructions should not be used alongside the high-level ''instrument'' modifiers as they represent different approaches to transposition (included in the abc specification to support the diversity of views when the topic was discussed). However, they can be used together if the need arises to transpose a piece which contains one or more voices transcribed for transposing instruments. The result of transposition applied to transposing instrument voices is, in effect, the same as if all the high-level ''instrument'' modifiers were to be translated into low-level ''I:transpose'' instructions and then combined with the ''I:transpose'' setting. They are combined by adding their semitone values together and ignoring the enharmonic indicator implied by the ''instrument'' modifier. The [[#instrument transposition table]] (in the appendices) lists the standard transposing instrument "keys" together with their corresponding ''I:transpose'' values together with implied enharmonic indicators. // Example: // Consider the following excerpt: I:written_pitch_score V:clarinet instrument=Bb;concert I:transpose 7 K:C CDEF| The ''I:transpose 7'' instruction is equivalent to applying ''I:transpose-score 7'' and ''I:transpose-sound 7''. Meanwhile the ''instrument=Bb;concert'', together with the ''I:written_pitch_score'' is equivalent to ''I:transpose-score 2*'' (see the [[#instrument transposition table]]). Once the semitone values are added together, the excerpt above is equivalent to the following: V:clarinet I:transpose-score 9 I:transpose-sound 7 K:C CDEF| // Recommendation for developers: // As this section indicates, high-level and low-level systems can be combined by converting all the high-level modifiers to low level instructions. Also ''I:transpose '' is equivalent to ''I:transpose-score '' and ''I:transpose-sound ''. Therefore to support both transposing instruments and arbitrary transposition, it suffices to write code which internally converts the ''instrument'' modifiers to ''I:transpose'' instructions (as per the [[#instrument transposition table]]). Once the conversion is done, typesetting software need only implement ''I:transpose-score'' and playback software need only implement ''I:transpose-sound''. ===== Appendix ===== ==== Transposition tables ==== === Interval and semitone equivalences === A list of intervals and their corresponding semitones equivalences can be found at [[http://en.wikipedia.org/wiki/Interval_(music)#Main_intervals|Wikipedia]]. == Semitone transposition table == The following table shows the upward semitone transpositions (i.e. transposing //up// from the original key to the required key) to be used with the ''I:transpose'' instructions (see [[#transposition of a tune or file]]) for every key from ''K:Cb'' (seven flats) through to ''K:C#'' (seven sharps). | ^ key required ^^^^^^^^^^^^^^^ ^ original key ^ Cb ^ Gb ^ Db ^ Ab ^ Eb ^ Bb ^ F ^ C ^ G ^ D ^ A ^ E ^ B ^ F# ^ C# ^ | ''K:Cb'' | 0b | 7b | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2# | | ''K:Gb'' | 5b | 0b | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7# | | ''K:Db'' | 10b | 5b | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0# | | ''K:Ab'' | 3b | 10b | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5# | | ''K:Eb'' | 8b | 3b | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10# | | ''K:Bb'' | 1b | 8b | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3# | | ''K:F'' | 6b | 1b | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8# | | ''K:C'' | 11b | 6b | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1# | | ''K:G'' | 4b | 11b | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11 | 6# | | ''K:D'' | 9b | 4b | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4 | 11# | | ''K:A'' | 2b | 9b | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9 | 4# | | ''K:E'' | 7b | 2b | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2 | 9# | | ''K:B'' | 0b | 7b | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7 | 2# | | ''K:F#'' | 5b | 0b | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0 | 7# | | ''K:C#'' | 10b | 5b | 0 | 7 | 2 | 9 | 4 | 11 | 6 | 1 | 8 | 3 | 10 | 5 | 0# | To calculate downward transpositions, look up the number in the table and subtract 12 from it (leaving the enharmonic indicator unchanged). // Example: // To transposing up from ''K:C'' to ''K:G'' (the row headed ''K:C'' and the column headed ''G'') is a positive transposition of 7 semitones and hence ''I:transpose 7'' is used. Transposing down from ''K:C'' to ''K:G'' is (7 - 12) = -5 semitones and hence ''I:transpose -5'' is used. The transposition can also go beyond an octave. // Example: // ''[I:transpose 19][K:C]'' would transpose the tune up an octave and a fifth from ''K:C'' to ''K:G'' (i.e. the note ''C'' is transposed to the note ''g''). The enharmonic indicators, ''#'' and ''b'', are shown (if required) in order to select the enharmonic alternative - see [[#transposition of a tune or file]] for more details. Note that even though they are not specifically mentioned in the table, the semitone transpositions also work for minor and modal keys, provided that both original and required key signatures are both minor or both in the same mode. // Example: // To transpose up from ''K:Cmin'' to ''K:Gmin'' is a positive transposition of 7 semitones (the same semitone transposition as for ''K:C'' to ''K:G''). === Instrument transposition table === The following table lists the standard transposing instrument "keys" (see [[http://en.wikipedia.org/wiki/Transposing_instrument|Wikipedia]] for a full list) together with their corresponding ''I:transpose'' values when going from concert to written pitch or vice-versa. Here the enharmonic indicator, ''*'', clarifies which enharmonic alternative should be chosen although, since most key signatures don't have enharmonic equivalents, it would be superfluous in most cases. ^ ^ ''abc-pitch'' ^^ ^ ^ ''instrument'' ^ ''concert'' to ''written'' ^ ''written'' to ''concert'' ^ example ^ | ''instrument=C'' | ''I:transpose-score 0*'' | ''I:transpose 0*'' | | | ''instrument=Bb'' | ''I:transpose-score 2*'' | ''I:transpose -2*'' | Bb clarinet | | ''instrument=A'' | ''I:transpose-score 3*'' | ''I:transpose -3*'' | A clarinet | | ''instrument=Ab'' | ''I:transpose-score 4*'' | ''I:transpose -4*'' | | | ''instrument=G'' | ''I:transpose-score 5*'' | ''I:transpose -5*'' | alto flute | | ''instrument=F'' | ''I:transpose-score 7*'' | ''I:transpose -7*'' | cor anglais | | ''instrument=E'' | ''I:transpose-score 8*'' | ''I:transpose -8*'' | | | ''instrument=Eb'' | ''I:transpose-score 9*'' | ''I:transpose -9*'' | alto sax | | ''instrument=D'' | ''I:transpose-score 10*'' | ''I:transpose -10*'' | | | ''instrument=Db'' | ''I:transpose-score 11*'' | ''I:transpose -11*'' | | // Example: // The following two excerpts indicate the same transposition: I:written_pitch_score [V:clarinet instrument=Bb;concert] [V:clarinet][I:transpose-score 2*] For instruments in high and low keys, the ''I:transpose-score'' equivalent has 12 //subtracted// from it for each octave the instrument is raised and 12 //added// for each octave it lowered. Similarly the ''I:transpose-sound'' has 12 added for each octave it is raised and 12 subtracted for each it is lowered. // Examples: // * The tenor saxophone is a low Bb transposing instrument and so the abc code would have the modifier ''instrument=Bb-1''. The ''I:transpose'' equivalents are therefore ''I:transpose-score 14*'' (= 2 + 12) to transpose a concert pitch transcription to written pitch and ''I:transpose -14*'' (= -2 - 12) to transpose a written pitch transcription to concert pitch (for both the typeset score and the playback). * The sopranino saxophone is a high Eb transposing instrument and so the abc code would have the modifier ''instrument=Eb+1''. The ''I:transpose'' equivalents are therefore ''I:transpose-score -3*'' (= 9 - 12) to transpose a concert pitch transcription to written pitch and ''I:transpose 3*'' (= -9 + 12) to transpose a written pitch transcription to concert pitch (for both the typeset score and the playback).