After studying the ABC standard a bit, I'm actually leaning more towards defining a new standard. ABC is very strongly focused on score notation while offering very little in terms of timbre control. It does actually provide most of what we need (there are tools for creating user-defined commands, macros, etc), but ultimately using those would cause quite a mess. Besides, it seems inconvenient for parsing. Furthermore, I kind of prefer having a traditional pattern structure, rather than long strings of commands.
In any case, using calls/macros is a good idea.
At the moment, I'm thinking something along these lines
:order // "order" would be a reserved keyword.
^intro // names could be freely chosen
(loop)
^1 // or short-handed by supplying only a number which will be expanded depending on context, ie. this will look for "pattern1"
...
// end directive is optional, as each block end can be determined by following :
:intro
A=a1 B=r C=c3 D=e3 CFG=^1,^2,^3 FX=none //note length fixed, ABCD=operator/channel, number after note name denotes octave
. //no changes in this row
A=a2 DUTY_A=#20
.
A=a1 B=a1-#1 // # denotes usage of immediate (hex) value instead of string literal
A=#800 FX=^1
:cfg1
GMIX=OR // so alternative notation for phaser would be: GMIX=#b0
:cfg2
PHASE_AB=#1000
PHASE_CD=#0
DUTY_A=#40
DUTY_B=#40
DUTY_C=#20
MIX_AB=OR
MIX_CD=XOR
:cfg3
DUTY_D=#20
SID_A=OFF
SID_B=OFF
ES_A=OFF
ES_B=#1
:cfg4
GMIX=XOR
:fx1
A=C2
.
(loop)
A=c3 CFG=^4
.
A=c4 CFG=^1
.
Admittedly, it's still quite a mess, and nothing more than a rough draft.
Regarding independant patterns per channel vs multi-channel patterns: There are certain benefits to having independant patterns per channel, but I think that with Phase Squeek, it would make things super messy, both for editing and for parsing.