Guido Gonzato's abcpp is text preprocessing software primarily designed for use with abc music typesetting but may, as outlined by the author, also be utilized with other text based music typesetting software like MusiXTeX / PMX / M-Tx.
The abcpp software and documentation is available from the Abc Plus project web site.
An abcpp key features is macros. A macro is declared with an uppercase name optionally followed by a definition:
#define VOICEOOHS "54"
Another important feature is conditional expressions:
#ifdef MIDI Octave: 4 4 3 3 #else Octave: 4 4 4 3 #endif #ifdef MIDI %%It140iVOICEOOHS:VOICEOOHS:VOICEOOHS:VOICEOOHS #endif
If the macro MIDI
has been declared then the line(s)
following the #ifdef
expression are processed; else the line(s)
following an optional #else
clause are processed.
An abcpp source files consists of text interspersed with conditional expressions and macros which are processed by the abcpp preprocessor.An abcpp command line must include the name of the abcpp source file followed by the name of the preprocessing result file. The filename arguments may be preceded by command line options (see the abcpp manual) and macro declarations (a macro name prefixed by a dash):
abcpp -MIDI ihrl.mtp ihrlmid.mtx
The result of abcpp preprocessing a file, ihrl.mtp
,
containing the lines above would be:
Octave: 4 4 3 3 %%It140i54:54:54:54
Among the usages of these facilities is extraction of separate parts from a score. For instrumental music the PMX part extraction utility scor2prt does that excellently, but it fails to handle lyrics of vocal music properly. In such cases abcpp can be helpful. Take as an example the typesetting source of a four part hymn setting, Ihr lieben Kinder freuet euch by Joachim a Burgk.
All M-Tx music- and lyrics paragraph lines have been
prefixed with a macro expression like "S_"
. The value of these
macros is set to an empty string if the lines should be typeset or else it is
set to a comment plus a space ("% "
). For example for generating
the M-Tx file of the Diskant part the macro
"S_"
prefixing the music- and lyrics lines of the upper part is
set to an empty string while all other prefix macros (e.g. "A_"
)
are set to "% "
. Notice that the value of the macro
"S_"
is defined to an empty string also when the macros
"SCORE"
and "MIDI"
are declared because we need the
music of the Diskant part for the full score and for the MIDI
output.
#ifdef SOP SCORE MIDI #define S_ "" #else #define S_ "% " #endif
Some M-Tx preamble clauses should differ depending on the kind of score
extracted from the typesetting source. For example for generating the
Baß part we'll be typesetting a single staff score with a bass clef.
We must also adapt the M-Tx lyrics vertical offset, which we
accomplish by means of the macro BOFFS
the value of which
depends on which score type we're generating:
#ifdef BASS Pages: 1 Systems: 4 Style: MyBass Octave: 3 Name: Ba\ss. #define BOFFS "+5" #endif
For generating the various M-Tx source files (for typesetting a full score or a separate) out of the abcpp master source file we launch abcpp on the abcpp master source file ihrl.mtp with the appropriate macro definitions, for example for generating the full score:
abcpp -SCORE ihrl.mtp ihrlsc.mtx
and end up with ihrlsc.mtx, a source file ready
for M-Tx processing a full score. We get corresponding
M-Tx source files for typesetting the Diskant-, Alt-, Tenor- and Baß parts using the command line macro
declarations -DISKANT
, -ALT
, -TENOR
and -BASS
. For achieving MIDI output we use the macro -MIDI for
generating the M-Tx source file ihrlmid.mtx. As
usual we get MIDI output from the PMX stage of the
M-Tx processing of that file.