<> <> <> <> <<>> <> <<>> DIRECTORY FinchSmarts USING [Procs], Rope USING [ROPE], VoiceRopeDB USING [Handle]; VoiceRope: CEDAR DEFINITIONS = { <<>> <> <<>> VoiceRope: TYPE = REF VoiceRopeInterval; VoiceRopeInterval: TYPE = RECORD [ ropeID: Rope.ROPE, start: INT, length: INT ]; <<>> Interval: TYPE = RECORD[start, length: INT]; IntervalSpecs: TYPE = LIST OF Interval; <<>> <> Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [ -- Used to be opaque, but changed for now procs: FinchSmarts.Procs_NIL, vdbHandle: VoiceRopeDB.Handle, Complain: PROC[complaint: Rope.ROPE] ]; Open: PROC [voiceRopeDBName: Rope.ROPE _ NIL, voiceRopeDBInstance: Rope.ROPE _ NIL, localName: Rope.ROPE _ NIL, Complain: PROC[complaint: Rope.ROPE] _ NIL] RETURNS [handle: Handle]; <> <> Record: PROC[handle: Handle_NIL] RETURNS [voiceRope: VoiceRope]; <> Play: PROC[handle: Handle_NIL, voiceRope: VoiceRope, queueIt: BOOL_TRUE, failOK: BOOL_FALSE, wait: BOOL_FALSE]; <> < play after all other record/playback requests are satisfied.>> < playing is optional; leave connection open if tune doesn't exist.>> < wait until things appear to be started properly, or have failed.>> <> Stop: PROC[handle: Handle _ NIL]; <> <<>> <> Retain: PROC [ <> <> handle: Handle _ NIL, voiceRope: VoiceRope, refID: Rope.ROPE, refIDType: Rope.ROPE ]; Forget: PROC [ <> <> handle: Handle _ NIL, refID: Rope.ROPE, refIDType: Rope.ROPE ]; <> Cat: PROC [handle: Handle _ NIL, vr1, vr2, vr3, vr4, vr5: VoiceRope _ NIL] RETURNS [new: VoiceRope]; <> Substr: PROC [handle: Handle _ NIL, vr: VoiceRope, start: INT _ 0, len: INT _ LAST[INT]] RETURNS [new: VoiceRope]; <> Replace: PROC [handle: Handle _ NIL, vr: VoiceRope, start: INT _ 0, len: INT _ LAST[INT], with: VoiceRope _ NIL] RETURNS [new: VoiceRope]; <> Length: PROC [handle: Handle _ NIL, vr: VoiceRope] RETURNS [len: INT]; <> <> DescribeRope: PROC [handle: Handle _ NIL, vr: VoiceRope, minSilence: INT _ -1] RETURNS [noise: IntervalSpecs]; <<>> <> }. <> <> <> <> <> <> <> <> <> <> <>