<> <> <> <> <> <<>> DIRECTORY MusicDefs USING [EventPTR, KeySignaturePTR, MeasurePTR, MetronomePTR, NotePTR, ScorePTR, Staff, StavesPTR, SyncPTR, Time, TimeSignaturePTR]; Event: CEDAR DEFINITIONS = BEGIN OPEN MusicDefs; Draw: PROC[score: ScorePTR, event: EventPTR]; Invisible: PROC[score: ScorePTR, index: CARDINAL, leftEdge: Time] RETURNS[BOOLEAN]; -- Hidden GetScoreIndex: PROC[score: ScorePTR, event: EventPTR] RETURNS[index: CARDINAL]; <> <<************************************************>> <> <<************************************************>> Sync: PROC[event: EventPTR] RETURNS[SyncPTR] ~ INLINE { RETURN[WITH event SELECT FROM e: SyncPTR => e, ENDCASE => NIL]; }; Staves: PROC[event: EventPTR] RETURNS[StavesPTR] ~ INLINE { RETURN[WITH event SELECT FROM e: StavesPTR => e, ENDCASE => NIL]; }; Measure: PROC[event: EventPTR] RETURNS[MeasurePTR] ~ INLINE { RETURN[WITH event SELECT FROM e: MeasurePTR => e, ENDCASE => NIL]; }; Metronome: PROC[event: EventPTR] RETURNS[MetronomePTR] ~ INLINE { RETURN[WITH event SELECT FROM e: MetronomePTR => e, ENDCASE => NIL]; }; TimeSignature: PROC[event: EventPTR] RETURNS[TimeSignaturePTR] ~ INLINE { RETURN[WITH event SELECT FROM e: TimeSignaturePTR => e, ENDCASE => NIL]; }; KeySignature: PROC[event: EventPTR] RETURNS[KeySignaturePTR] ~ INLINE { RETURN[WITH event SELECT FROM e: KeySignaturePTR => e, ENDCASE => NIL]; }; <<************************************************>> <> <<************************************************>> Octava: PROC[event: EventPTR] RETURNS[BOOLEAN] ~ INLINE { RETURN[WITH event SELECT FROM ev: StavesPTR => ev.staves IN[octava1..octava2], ENDCASE => FALSE] }; <<>> Clef: PROC[event: EventPTR] RETURNS[BOOLEAN] ~ INLINE { RETURN[WITH event SELECT FROM ev: StavesPTR => ev.staves=clef, ENDCASE => FALSE] }; GetOctava: PROC[score: ScorePTR, octava: StavesPTR] RETURNS[other: StavesPTR]; SetStave: PROC[score: ScorePTR, oldS, newS: StavesPTR]; -- copy info from old to new GetStaff: PROC[staves: StavesPTR, staff: CARDINAL] RETURNS[Staff]; <<************************************************>> <> <<************************************************>> AddNote: PROC[score: ScorePTR, sync: SyncPTR, note: NotePTR]; RemoveNote: PROC[score: ScorePTR, sync: SyncPTR, note: NotePTR, free: BOOLEAN _ FALSE]; <> Adjust: PROC[score: ScorePTR, s: SyncPTR]; -- space the notes so they don't overlap NewSync: PROC[score: ScorePTR, length: CARDINAL _ 12] RETURNS[sync: SyncPTR]; Free: PROC[score: ScorePTR, event: EventPTR]; <> <> AddTimes: PROC[event: EventPTR, time, toc: Time]; << = INLINE { -- add times to notes>> <> <> <> <> <> <> Grace: PROC[sync: SyncPTR] RETURNS[BOOLEAN]; <<{FOR j: CARDINAL IN [0..sync.length) DO>> <> <> <> InVoice: PROC[sync: SyncPTR, voice: CARDINAL] RETURNS[BOOLEAN]; <<{FOR j: CARDINAL IN [0..sync.length) DO>> <> <> <> END.