Date: Wed, 14 Aug 1996 14:02:13 -0700 To: tghack-list@cpac.washington.edu From: David Shadoff X-Software: MLF v2.3, Copyright 1995, 1996 by Bt X-Original-Id: <199608142102.RAA04154@gold.interlog.com> Subject: Develo Music Language Hi again... OK... after this post, it should be possible to compose music tracks (background music, 'accomplishment' trills, etc.) for use in any upcoming game/demo. Note to anyone who may wish to help in this effort: Tools for editing/compiling/test-running these scores would be very much appreciated. I will continue to post information as it becomes available, and I will be available to clarify any ambiguities to assist in the effort (if I am able). Here's a sample of some develo music notation... The develo system no doubt comes with its own music compiler/simulator. I have attempted to document it as completely as possible. (I am only reprinting excerpts of the original notation; only enough to demonstrate the crux of each concept.) .START1=T075 P15,15 V17 @03 @E3 @D0 O3 /CH1/* ; ; (similar lines were here for .START2-6) ; ; The above block specifies various attributes for all 6 available ; voices. This is really an 'initialize voice' string of codes. ; ; In the original shift-JIS document, it stated that ; voices 1-4 were 'chords', while voice 5 was 'bass', and ; voice 6 was 'melody' ; ; T075 = tempo = 75 ; P15,15 = pan volume 15 left, 15 right (perhaps right/left) ; V17 = volume (on this voice) = 17 ; @03 = "o n tsu yo ku" - not sure ; @E3 = envelope 3 ; @D0 = 'de chi yu-n' 0 ; 03 = octave #3 ; /CH1/ = jump to label CH1 (actual music) ; * = end of data for this line ; ; This turns to byte code: ; DB 4B DD FF DC 11 E5 03 E6 03 EC 00 D3 EF xx xx FF ; ; where 'xx xx' = address of CH1 (LSB first) ; A1=L8C.R16D4C'* ; 12 3 4 567 8 ; ; (There were lines here for A2-5, but they were unneccessary ; to duplicate) ; ; L8 = default tone length = 1/8 note ; < = down octave ; A = 'A' (1/8 note) ; A = 'A' (1/8 note) ; > = up octave ; C. = 'C' (1/8 note + 1/16 note, due to presence of '.') ; R16 = rest, 1/16 note ; D4 = 'D' (1/4 note) ; C = 'C' (1/8 note) ; < = down octave ; A = 'A' (1/8 note) ; > = up octave ; ' = return ; * = end of data for this line ; ; This turns to byte code: ; D9 A0 18 A0 18 D8 10 24 00 0C 30 30 10 18 D9 A0 18 D8 F1 FF ; A6=L8C D&E&DCC RCCC DEG&G+16&A. R'* ; 12 3 4 5 67 812 3 4 56 781 234 5 6 78 1 234 5 6 78 ; ; In this slightly more complex example, the '&' is a 'tie' which ; translates to byte-code $DA (and the G+ is a G-sharp) ; ; I won't bother translating the byte-code for this section ; B1=L8R16..C.R16D4 RR64'* ; 1 2 3 4 56 8 ; ; This was followed by B2-6, which I decided was unnecessary to duplicate ; ; L8 = default tone length = 1/8 note ; R16.. = rest, 1/16 note + 1/32 note + 1/64 note (note the two '.'s) ; < = down octave ; A = 'A' (1/8 note) ; > = up octave ; C. = 'C' (1/8 note + 1/16 note, due to presence of '.') ; R16 = rest, 1/16 note ; D4 = 'D' (1/4 note) ; R = rest, 1/8 note ; R64 = rest, 1/64 note ; ' = return ; * = end of data ; ; This translates into byte-code: ; 00 15 D9 A0 18 D8 10 24 00 0C 30 30 00 18 00 03 F1 FF ; CH1=(A1)(B1) /CH1/* ; ; This was followed by CH2-CH6, which were unnecessary to duplicate ; ; (A1) = 'gosub' sequence A1 ; (B1) = 'gosub' sequence B1 ; /CH1/ = 'goto' sequence CH1 ; * = end of data for this line ; ; This translates into byte-code: ; F0 xx xx F0 yy yy EF zz zz FF ; ; where 'xx xx' = address of A1 sequence (LSB first) ; 'yy yy' = address of B1 sequence (LSB first) ; 'zz zz' = address of CH1 sequence (LSB first) ;