home *** CD-ROM | disk | FTP | other *** search
- /* time expander/compresser over selected events */
- /* written by Joe Pearce (3-14-91) */
-
- Options results
-
- MXLABEL "Percentage"
- MXSLIDER " of Original:,1,200,100"
- MXREQUEST "Expand/Compress Time,DO IT"
- if result = 0 then exit
-
- MXVALUE 2
- timeadj = Result / 100
-
- GETBARDATA
-
- if BARDATA.SELECT == 'NONE' then do
- MXREPORT "No events selected or marked!"
- exit
- end
-
- MXPOINTER "sleepy"
-
- if BARDATA.SELECT == 'SELECT' then do
-
- i = 0
-
- BEGINSCAN 'selected'
- if result ~=0 then do forever
- NEXTEVENT
- if result == 0 then break
-
- EvtT.1 = EVENT.START.ticks
- if i = 0 then EvtT.0 = EVENT.START.ticks
- i = i + 1
- end
- ENDSCAN
-
- if i < 2 then do
- MXREPORT "Need at least two events selected!"
- MXPOINTER "normal"
- exit
- end
- end
- else do /* 'MARK' */
- EvtT.0 = BARDATA.START.BARS * BARDATA.MEASURE + BARDATA.START.CLOCKS
- EvtT.1 = BARDATA.STOP.BARS * BARDATA.MEASURE + BARDATA.STOP.CLOCKS
- end
-
- mode = 0
- delta = EvtT.1 - EvtT.0
-
- if delta = 0 then do
- MXREPORT "Time interval is zero."
- MXPOINTER "normal"
- exit
- end
-
- /* MXREPORT "Time delta:" delta */
-
- BEGINSCAN 'all'
- if result ~=0 then do forever
- NEXTEVENT
- if result == 0 then break
-
- gotstop = 0
- if EVENT.TYPE == 'NOTE' then gotstop = 1
- if EVENT.TYPE == 'TEMP' then gotstop = 1
- if EVENT.TYPE == 'MSEQ' then gotstop = 1
- if EVENT.TYPE == 'PSEQ' then gotstop = 1
- if EVENT.TYPE == 'SSEQ' then gotstop = 1
- if EVENT.TYPE == 'MTRK' then gotstop = 1
- if EVENT.TYPE == 'STRK' then gotstop = 1
-
- if mode = 0 then do
- if EvtT.0 <= EVENT.START.ticks then mode = 1
- end
-
- if mode = 1 then do
- if EvtT.1 <= EVENT.START.ticks then mode = 2
- c = (EVENT.START.ticks - EvtT.0) * timeadj + EvtT.0
- EVENT.START.CLOCKS = c // BARDATA.MEASURE
- EVENT.START.BARS = c % BARDATA.MEASURE
- if gotstop = 1 then do
- b = EVENT.STOP.ticks + c - EVENT.START.ticks
- EVENT.STOP.CLOCKS = b // BARDATA.MEASURE
- EVENT.STOP.BARS = b % BARDATA.MEASURE
- end
- REPLEVENT
- end
- else if mode = 2 then do
- c = (EVENT.START.ticks - delta) + (delta * timeadj);
- EVENT.START.CLOCKS = c // BARDATA.MEASURE
- EVENT.START.BARS = c % BARDATA.MEASURE
- if gotstop = 1 then do
- b = EVENT.STOP.ticks + c - EVENT.START.ticks
- EVENT.STOP.CLOCKS = b // BARDATA.MEASURE
- EVENT.STOP.BARS = b % BARDATA.MEASURE
- end
- REPLEVENT
- end
- end
- ENDSCAN
-
- MXPOINTER "normal"
-