From: Jean-Francois Moine
>> Again the example makes this clear: the music is printed for bass voice
>> exactly the right pitch, and the provided midi file plays it correctly.
> The MIDI file has been generated with extra %%MIDI transpose commands
> which are not in the example of the ABC 2.0 specification.
Now I *am* confused. Are you saying that the midi file accompanying the
example in the standard has *not* been generated from the abc file shown
there?. If that is true it is not going to make interpreting the standard
very easy. But in any event, according to your interpretation, it would
leave the example with a bass part which sounds two octaves higher than
written: I can't believe it is supposed to do that.
>> I would want any MIDI play-back of the abc, to play the same notes as
>> get by printing the music as notation from the abc and giving it to the
>> player/singer it is intended for. Otherwise ABC is a fairly pointless
>> representation of the music.
> For that, you must use the octave= command which is understood by both
playing and typesetting programs.
NO! "I would want any MIDI play-back of the abc, to play the same notes as
you'd get by printing the music as notation from the abc and giving it to
the player/singer it is intended for."
Not abc written with some commands to work, and with others to be
inconsistent: I want *all* abc files (which are written in compliance
with the standard) to define the music so it plays the same notes on a
synthesiser, as the intended player would play on receiving the printed
music. Otherwise there is no point in having a standard.
Why should one distinguish between playing and typesetting programs? Files
with different standards for playing and typesetting are completely useless
to me: my program does both. It shows the music in a WYSIWYG window,
prints it, as shown, with the File/Print command and plays what is written
if you press F2. It does not store one set of music for playing and
another for printing.
> Again, middle= is a typesetting
command and transpose= .... is a playing
command. All ABC users and programmers know that, but you!<
I have essentially no problems with transpose= but it is used by my
software BOTH for playing and for typesetting. For playing it defines the
relationship between the pitch which is sounded, and that which is written
on a score presented at 'written pitch'. However I can also show (and
print) the score at 'concert pitch', in which case the transpose= is
necessary to define the typesetting.
I can't accept this division of the world's software into "playing programs"
and "type-setting programs" and the idea that a given abc file is only for
one or the other. I am surprised I'm the first, or only one, who can't.
And again, the abc2.1 standard *does* indicate with the example that the
same abc file will do both. But you say they've cheated and used different
abc files to get the picture and the midi? I find that idea extremely
>> If you want to print/play 'generic' music then it should be both written
>> played by default at concert pitch.
> There is no absolute concert pitch. ABC defines the music, then any
software may play or print it the way the users want.
Of course there's an absolute concert pitch. You can choose it within
limits, according to when the composer lived, where he lived, and what he
intended, but the A above middle C is at 440Hz or thereabouts: not 220,
and not 880.
Yes of course any software can do with the file what its user wants, but
mine is attempting to start with what the music in the file actually
represents. The user can then go to the menus and toolbars, transpose it,
re-instrument it, change the time signature, rearrange it, but when he opens
and abc file, he'll get what is written in the file, and that is defined by
a standard, and that standard is currently abc2.1
>> In the abc2.1
>> sample middle=d on the bass clef clearly does this, both for the
>> and the sample midi.
> Did you read the abcmidi documentation?
> abcmidi ignores middle=, as abcm2ps ignores transpose=.
Then all I can conclude is that abc2pms cannot write a concert pitch score
which includes transposing instruments, and abcmidi will play the bass
parts on the abc2.1 sample two octaves higher than they're supposed to
> I am beginning to appreciate (you'll know better than I) that abc software
> has come about with one program designed to play an abc file (or output a
> MIDI file) and another designed to produce a graphic image of the music
> via postscript).
> At the beginning, there was only one typesetting program (abc2mtex),
and, as the ABC notation was published, many programmers extended it.
The same thing happened to HTTP/HTML which was firstly rendered by a
simple Tcl/Tk script and which evolved up to the future HTML5 and many
tens of HTML browsers. The price to pay is some incompatible syntaxes
when concurrent developments occur at a same time. These problems are
reduced later by a precise and common definition of the language. So,
your erroneous understanding about the middle= command is just due to
the lack of precision in the standard.<
I am aware that many published abc files will not comply with the abc2.1
standard, just as older web sites don't comply with modern HTML standards.
Actually modern browsers are a lot less tolerant of what is (now) poor HTML
than the older ones were.
But again the Zocharti Loch example makes what might have been an ambiguous
definition of the effect of "middle" absolutely precise - as long as one
accepts that it is correct. And if, as you say, the accompanying MIDI file
should be playing the bass parts two octaves higher, it would clearly not be
what the composer intended. So it all looks completely consistent to me.
> Eventually, and I will stop this thread, I wonder why you are fighting
about middle=. This is a computer command. You may remove/ignore all
such commands from any ABC tune without changing the music (FYI, in K:
and V:, clef=, middle=, transpose= and stafflines= are computer
commands, while, on the contrary, octave= is a description which cannot
be ignored without altering the music). <
I am writing a music notation program, which wants to import music notation
from abc. I therefore need to know what the file means. I therefore need
a documented standard, and that standard is abc2.1. I am generating both
printed music and a sensible play-back of the music: not one or the other.
The 'music' to me is the set of printed notes, AND the sound they make; not
one or the other. I therefore (in principle) cannot ignore *anything* in
the abc file.
From the Zocharti Loch example in the standard, the only abc2.1
documentation I have to go on, middle= (and therefore, when middle is
present, also clef=) cannot be ignored for play-back or typesetting. And
neither can transpose= (because I can view scores at written pitch and at
If the abc2.1 standard *is* the standard then Zocharti Loch makes it very
clear than middle= *has* to be the way I'm interpreting it. (If abcmidi
plays it back differently, with bass parts 2 octaves high, then that cannot
be my worry.) If the abc2.1 standard is *not* the standard, then I have
nothing to work with.
( If the standard is amended when abc2.2 comes out, so that middle=d on the
bass clef explicitly introduces a two octave transposition in the printed
part, then I have no problem in Mozart, assigning the bass parts to a
fictitious instrument which sounds 2 octaves higher than written, but I
don't want to (a) because the standard does not tell me that I should, and
(b) the gar klein recorder is the only instrument I can think of which does
this, and the written bass clef notes would be out of its range anyway.)
Mozart Music Software
For discussion and support see