summaryrefslogtreecommitdiff
path: root/macros/musixtex/doc/musixdoc/transposition.tex
blob: 4fc9e9d609647c801eb9a71d1d9fb5f5a8b10161 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
 \chapter{Transposition and Octaviation}\label{octaviation}
Two different subjects are discussed in this section. First, there
are commands that cause notes to be printed at different pitches than
entered. We shall refer to this as \ital{logical} transposition.
Second, there are notations for octaviation that do
not otherwise alter the appearance of the score, which we'll call
\ital{octaviation lines}.

\section{Logical transposition and octaviation}

Logical transposition is controlled by an integer-valued \TeX\ register
\keyindex{transpose}. Its default value is $0$. If you enter
\verb|\transpose=|$n$ outside of notes commands, then all subsequent pitches specified by
letters will be transposed by $n$ positions. Normally this method would be
used to transpose an entire piece. Pitches specified with
numbers will not be affected, so if you think you will ever want to
transpose a piece, you should enter all note pitches with letters.

One way to transpose up or down by one octave would be to increase or decrease
\keyindex{transpose} by $7$.
A more convenient way to transpose locally up or down by one octave
makes use respectively of the characters
\verb|'| (close-quote, interpreted as an \itxem{acute accent}) and \verb|`| (open-quote, interpreted as
a \itxem{grave accent}),
placed immediately before the letter specifying the pitch. So
for example \verb|\qu{'ab}| is equivalent to \verb|\qu{hi}| and
\verb|\qu{`kl}| is equivalent to \verb|\qu{de}|. These characters have
cumulative effects; thus,
for example, \verb|\qu{''A'A}| and \verb|\qu{''A}\qu{'A}| are both equivalent to \verb|\qu{ah}|.
Alterations to the value of
\verb|\transpose| in notes commands are \emph{local}: when changing to a different staff or
instrument or encountering \verb|\en|, \verb|\transpose|  will be reset to the
value it had before the accents were used. (That value is stored in
another register called \keyindex{normaltranspose}). Another way to localize
changes to \verb|\transpose| is to create an explicit \TeX\  ''group'' by enclosing commands in \verb|{...}| braces.

At any point it is possible to reset the \verb|\transpose| register
explicitly to the \verb|\normaltranspose| value 
by prefacing a pitch indication with
``\verb|!|''. Thus \verb|\qu{!a'a}| always
gives the note \verb|a| and its upper octave \verb|h|, shifted by the
value of {\Bslash normaltranspose}, 
regardless of the number of grave and
acute accents earlier in that group.

 \section{Behavior of accidentals under logical transposition}\label{transposeaccids}
 The above processes indeed change the vertical position of the note heads
and associated symbols (e.g., stems and beams), but they don't take
care of the necessary changes of accidentals when transposing. For example,
suppose an F$\sharp$ occurs in the key of C major. If the piece is
transposed up three steps to the key of F, the F$\sharp$ should logically
become a
B$\natural$. But if all you do is set \verb|\transpose=3|, the note will
be typeset as a B$\sharp$. In other words, \musixtex\ will interpret the~\verb|\sh|
or~\verb|^| to mean ``print a $\sharp$''.

Naturally there is a solution, but it requires the typesetter to plan
ahead: To force accidentals to behave well under transposition, they
must be entered according to the \ital{relative
accidental convention}. To alert \musixtex\ that you are using this
convention to enter notes, you must issue the command
\keyindex{relativeaccid}. Once you have done this, the meaning of
accidental macros and characters (accents) in the input file is changed.
Under the convention, when for example a
\verb|\sh| is entered, it indicates a note that is supposed to sound
\ital{one half step higher than what it would normally be under the
current key signature}. Flats and naturals on entry similarly indicate
notes one half step lower or at the same pitch as what the key signature
dictates. \musixtex\ will take account of the key signature, and print
the correct symbol according to the modern notational convention,
provided you have explicitly entered the transposed key signature using
for example \verb|\generalsignature|.

Many people have a difficult time understanding how this works, so
here are two simple examples in great detail. Consider the case already mentioned
of the F$\sharp$ in the key of C major. With
\verb|\relativeaccid| in effect, it should still be entered as \verb|\sh f|, and
with no transposition it will still appear as F$\sharp$. With
\verb|\transpose=3| and \verb|\generalsignature{-1}| it will appear
(correctly) as B$\natural$. Conversely, suppose you want to enter a
B$\natural$ when originally in the key of F. With \verb|\relativeaccid| in effect, it
should be entered as \verb|\sh i|. (That's the part that people
have the most trouble with: ``If I want a natural, why do I have to enter a sharp?'' Answer:
``Go back and re-read the previous paragraph very carefully.'') With no transposition, it will be
printed as B$\natural$. Now to transpose this to C major, set
\verb|\transpose=-3| and \verb|\generalsignature0|, and it will appear
as F$\sharp$.

If you have invoked \verb|\relativeaccid| and then
later for some reason wish to revert to the ordinary convention,
enter \keyindex{absoluteaccid}.

\section{Octaviation lines}
The first kind of notation for octave transposition covers a
horizontal range that must be specified at the outset. The sequence

\medskip
\begin{music}\nostartrule
\startextract
\NOTEs\octfinup{10}{3.5}\ql{!'a}\ql b\ql c\ql d\en
\zendextract
\end{music}
\noindent can be coded as
\verb|\NOTEs\octfinup{10}{3.5}\qu a\qu b\qu c\qu d\en|.
\zkeyindex{octfinup}
Here, the dashed line is at staff level 10 and extends \verb|3.5\noteskip|.
Conversely, lower octaviation can be coded. For example

\begin{music}\nostartrule
\startextract
\NOTEs\octfindown{-5}{2.6}\ql j\ql i\ql h\en
\zendextract
\end{music}
\noindent is coded as
\verb|\NOTEs\octfindown{-5}{2.6}\ql j\ql i\ql h\en|.
\zkeyindex{octfindown}
 To change the text that is part of these notations, redefine one of
the macros \keyindex{octnumberup} or \keyindex{octnumberdown}. The reason for
the distinction between up and down is that, traditionally, upper octaviation
only uses the figure
``8'' to denote its beginning, while lower octaviation uses a more
elaborate indication such as \hbox{\ppffsixteen8$^{va}$\kern 0.2em\eightit bassa}. Thus

\bigskip
\begin{music}\nostartrule
\startextract
\NOTEs\def\octnumberup{\ppffsixteen8$^{va}$}\octfinup{10}{2.5}\qu c\qu d\qu e\en
\zendextract
\end{music}
\noindent is coded

\noindent\verb|\NOTEs\def\octnumberup{\ppffsixteen8$^{va}$}\octfinup{10}{2.5}\qu c\qu d\qu e\en|

\noindent while

\begin{music}
\startextract
\NOTEs\def\octnumberdown{\ppffsixteen8$_{ba}$}\octfindown{-5}{2.5}\ql l\ql
k\ql j\en
\endextract
\end{music}
\noindent is coded as
\begin{quote}\begin{verbatim}
\NOTEs\def\octnumberdown{\ppffsixteen8$_{ba}$}%
  \octfindown{-5}{2.5}\ql l\ql k\ql j\en
\end{verbatim}\end{quote}

The foregoing constructions have the drawbacks that (a) the span must be
indicated ahead of time and (b) they cannot extend across a line break.
Both restrictions are removed with the use of the alternate macros \keyindex{Ioctfinup},
\keyindex{Ioctfindown} and
\keyindex{Toctfin}.

{\Bslash Ioctfinup}~$np$ indicates an upward octave transposition line with reference number
$n$ and with dashed line at pitch $p$. 
By default $n$ must be in the range $[0,5]$, but 
you can specify a larger maximum number 
directly with \keyindex{setmaxoctlines}\verb|{|$m$\verb|}| 
where $7<m\leq 100$\footnote{This may require e-\TeX.}; the
reference number will be in the range between $0$ and $m-1$.
\label{musixmad_setmaxoctlines}

Usually $p$ will be numeric and $>9$,
but it can also be a letter.
{\Bslash Ioctfindown}~$np$ starts a lower octave transposition line at pitch $p$
(usually $p<-1$). Both extend until terminated with {\Bslash Toctfin}. The
difference between {\Bslash Ioctfinup}~$n$ and {\Bslash Ioctfindown}~$n$ is
the relative position of the figure ``8'' with respect to the dashed line, and
the sense of the terminating hook As shorthand, \keyindex{ioctfinup} is equivalent to
\verb|\Ioctfinup 0| and \keyindex{ioctfindown} is equivalent to
\verb|\Ioctfindown 0|.

For example,

\medskip
 \begin{music}\nostartrule
\instrumentnumber{1}
\setstaffs12
\setclef1{6000}
%
\startextract
\notes\wh{CDEFGH}|\wh{cde}\Ioctfinup 1p\wh{fgh}\en
\bar
\notes\Ioctfindown 2A\wh{IJKLMN}|\wh{ijklmn}\en
\bar
\Notes\wh{NMLKJI}|\wh{nmlkji}\Toctfin1\en
\bar
\Notes\wh{HGFED}\Toctfin2\wh C|\wh{hgfedc}\en
\zendextract
\end{music}
\noindent is coded as
\begin{quote}\begin{verbatim}
\begin{music}\nostartrule
\instrumentnumber{1}
\setstaffs12
\setclef1{6000}
%
\startextract
\notes\wh{CDEFGH}|\wh{cde}\Ioctfinup 1p\wh{fgh}\en
\bar
\notes\Ioctfindown 2A\wh{IJKLMN}|\wh{ijklmn}\en
\bar
\Notes\wh{NMLKJI}|\wh{nmlkji}\Toctfin1\en
\bar
\Notes\wh{HGFED}\Toctfin2\wh C|\wh{hgfedc}\en
\zendextract
\end{music}
\end{verbatim}\end{quote}
 %\check

 The elevation of octaviation lines may be changed in midstream using
\keyindex{Liftoctline}~$n$$p$, where $n$ is the reference number of the
 octave line, and $p$ a (possibly negative) number of
\keyindex{internote}s (staff pitch positions) by which elevation of the dashed line should be changed.
This may be useful when octaviation lines extend over several systems and the
elevation needs to be changed in systems after the one where it was initiated.