Each channel in AddMusicK should have its own default octave and note length. In other words, the following two pieces of MML should output the identical music data:
(this example is taken from
Bach's Chorale 1)
Code#0 @1 l2 o5 #0 @1 l2 o5
#1 @1 l4 o4 #0 d c4 <b4 a g
#2 @1 l4 o3
#3 @1 l4 o2 #1 @1 l4 o4
#1 d e f+ g2 f+ d2
#0 d c4 <b4 a g
#1 d e f+ g2 f+ d2 #2 @1 l4 o3
#2 a b >c d e d8 c8 <b2 #2 a b >c d e d8 c8 <b2
#3 f+ g a b >c d <g2
#3 @1 l4 o2
#3 f+ g a b >c d <g2
However, in the first snippet, AddMusicK uses "l4 o2" for all channels that follow. As far as I know,
none of the MML dialects allows any of these commands to have global scope across channels.
---
I should also request two purely syntactical constructs that are commonly found in other MML dialects:
1. The "#" command should allow multiple channel indices. That is to say, the following MML:
should expand to:
Code#0 ; any data
#1 ; any data
#2 ; any data
If such a command is not found, the target channel should still be set to "#0" by default rather than "#01234567".
2. Key signatures may be added anywhere with scope limited to the current channel(s), such that sharp and flat signs are automatically applied to each note that does not provide its own accidental sign. For example, the following MML:
Code_{+fcgdae} ; F# Major / D# Minor, melodic scale
d e f g a b+ > c++ d
_{=fcgdae} _{-bea} ; Eb Major / C Minor, melodic scale
c d e f g a= b= > c
should expand to:
Coded+ e+ f+ g+ a+ b+ > c++ d+
c d e- f g a b > c
This syntax is taken from PMD, a dialect for the PC-98's YM2608 chip. NSD.lib, a dialect for the NES, uses "K{...}". The first character within the braces indicates the type of accidental to apply to all note names that follow it. In particular, "=" stands for the natural sign; because the equality character is never used outside replacement macros and special commands beginning with "#", no ambiguity should arise while parsing. If a note has an accidental sign, then the key signature command may be ignored for that note (as in "a= b=" above).
This also introduces double accidentals, which AddMusicK does not currently handle. They should as well be allowed since the N-SPC engine does not store the octave and pitch of each note separately.
(The compile-time transpose command "h" is not an intuitive solution; snippets like "h2 efgab" make sense only when one uses solfege names, e.g. "h2 mi fa so la ti".)