DIRECTORY Lark USING [ Tone ], Rope USING [ROPE]; LarkPlay: DEFINITIONS = { Tone: TYPE = Lark.Tone; ToneSpec: TYPE = REF ToneSpecRec; ToneList: TYPE = LIST OF Tone; ToneSpecRec: TYPE = RECORD [ repeatIndefinitely: BOOL_TRUE, -- else play just once volume: CARDINAL_0, -- "WaveTable": entire sequence played at one volume tones: LIST OF ToneList_NIL ]; PlayString: PROCEDURE [music: Rope.ROPE, file: BOOLEAN _ FALSE, volume: CARDINAL] RETURNS[tones: ToneSpec]; MergeToneSpecs: PROCEDURE [t1, t2: ToneSpec, t2Divisor: NAT_1, t2Delay: NAT_0, volumeIncrement: NAT_0] RETURNS [ts: ToneSpec]; }. âLarkPlay.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Last Edited by: Pier, May 4, 1984 11:58:31 am PDT Last Edited by: Swinehart, January 13, 1985 10:29:04 am PST <> music is either a rope of musical characters encoded via the Play encoding or, if file=TRUE, the name of a file to read for such a musical encoding. Volume is a default: can be overridden in tune. It should be specified first, though, and be constant throughout. Divisor and delay apply to the second tune. Delay is an additional rest applied to the beginning of t2; divisor is used to change its frequency downward (designed to be used with values 1 and 2). This is specifically designed to deal with Thrush ring tunes, where the caller's tune is to be delayed by a measure and dropped an octave. Volume of result is volumeIncrement + volume of first tune, or something. ts.repeatIndefinitely _ t1.repeatIndefinitely ÊV˜Jšœ ™ šœ Ïmœ1™