We've been over this before, but back when BarFly was the only application to support both parts and multi-voice playback. So maybe other implementations have moved on enough to merit a re-run.
The following is my way of representing a piece in book 6 of Aird's collection. Aird used a da capo, but ABC doesn't have that (printing the words does not a control construct make), so I used the standard P: construct to represent it. BarFly displays this nearly how I want it: each part gets a label in a sensible place, though the playing order is not printed. X:1 T:Drink to me only. T:2 Flutes. M:6/8 L:1/8 Q:3/8=60 P:ABA K:A P:A [V:1] ccc d2d|(ed)c (Bc)d|(eA)d c2B | HA6 :| [V:2] AAA B2B|(cB)A (GA)B|(Ac)B A2[EG]|[HC6HA6]:| % P:B [V:1] e|ece a2e|(ec)e e2e | f2e d2c | (c3 B2):| [V:2] c|cAc c2c|(cA)c c2c | d2c B2A | (A3 G2):| The intuition behind the P: construct, to me, is that you are splicing separate chunks of music together to form a larger piece. So this is not really a playback issue at all. The semantics of P: is given by a source-to-source operation (which a staff notation program could also implement), and the above must be equivalent to this: X:2 T:Drink to me only. T:2 Flutes. M:6/8 L:1/8 Q:3/8=60 K:A [V:1] ccc d2d|(ed)c (Bc)d|(eA)d c2B | HA6 :| [V:2] AAA B2B|(cB)A (GA)B|(Ac)B A2[EG]|[HC6HA6]:| % [V:1] e|ece a2e|(ec)e e2e | f2e d2c | (c3 B2):| [V:2] c|cAc c2c|(cA)c c2c | d2c B2A | (A3 G2):| % [V:1] ccc d2d|(ed)c (Bc)d|(eA)d c2B | HA6 :| [V:2] AAA B2B|(cB)A (GA)B|(Ac)B A2[EG]|[HC6HA6]:| Now, BarFly isn't having the syntax of ex.1 at playback time, you get silence. Its syntax requires that I write more verbosely, like this: X:3 T:Drink to me only. T:2 Flutes. M:6/8 L:1/8 Q:3/8=60 P:ABA K:A [V:1] [P:A] ccc d2d|(ed)c (Bc)d|(eA)d c2B | HA6 :| [V:2] [P:A] AAA B2B|(cB)A (GA)B|(Ac)B A2[EG]|[HC6HA6]:| % [V:1] [P:B] e|ece a2e|(ec)e e2e | f2e d2c | (c3 B2):| [V:2] [P:B] c|cAc c2c|(cA)c c2c | d2c B2A | (A3 G2):| which plays as written (the glitch in the anacrusis is Aird's responsibility, his da capo isn't meant literally), but doesn't display right: each voice gets a separate part label. The implication appears to be that part boundaries don't have to coincide across voices: you only get one P: line in the header so the sequence has to be the same, but if you are *not* going to syntactically enforce coincidence of part boundaries across voices, they ought to be allowed to drift, yes? So let's try it, even though I can think of no conceivable reason why you'd want to write something like this: X:4 T:test P:ABAB V:1 V:2 M:none L:1/4 K:C [V:1] [P:A] GG [P:B] BBBB|| [V:2] [P:A] DDDD [P:B] GG|| What BarFly displays gives no indication of where the part boundaries in each voice are, and it doesn't play any sound. So it doesn't look like this extra flexibility has been implemented. Nor do I want it to be. Please can we have the simpler option as in my first example, where parts are played as complete chunks of music, no matter how many voices they've got, and without me having to do "Simon says the viola starts playing the coda here too" with redundant in-line fields? ----------------------------------------------------------------------------- Jack Campin: 11 Third Street, Newtongrange, Midlothian EH22 4PU; 0131 6604760 <http://www.purr.demon.co.uk/jack> * food intolerance data & recipes, Mac logic fonts, Scots traditional music files, and my CD-ROM "Embro, Embro". ------> off-list mail to "j-c" rather than "abc" at this site, please <------ To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html