/*   ECHO   */
/* © Dick Doyle */



options results
MXCOLUMN 1

MXSLIDER         'Delay Amount ,0,768,0'
MXLABEL ''
MXLABEL            'NOTE VALUES'
MXLABEL      '192 = ¼ note'   
MXLABEL      '384 = ½ note'   
MXLABEL      '576 = ¾ note'   
MXLABEL      '768 = 1 note' 

MXCOLUMN 2
MXSLIDER "Nº of Repeats,1,99,1"
MXLABEL ''

MXLABEL 'ATTACK VELOCITY SLOPE'
MXLABEL ''
MXRADIO 'Falling,Ascending,Level'
MXREQUEST "ECHO,YES"
if result == 0 then exit
MXPOINTER "sleepy"  

MXVALUE 8
times = result
MXVALUE 1
z = result
MXVALUE 12
i = result

if i = 0 then
SIGNAL FAL

if i = 1 then
SIGNAL ASC

if i = 2 then
SIGNAL LEV







FAL:	
GETBARDATA
if BARDATA.SELECT == 'NONE' then do
	MXREPORT "You must select some notes!"
	exit
	end
BEGINSCAN 'selected'

if result ~= 0 then do forever		
  
NEXTEVENT				
  if result == 0 then break

V = (EVENT.ATTACK - 1)/times
if EVENT.TYPE == 'NOTE' then 
do i = 1 to times 	
EVENT.START.CLOCKS = EVENT.START.CLOCKS + z
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS + z
         EVENT.ATTACK = (EVENT.ATTACK - V)

ADDEVENT
if EVENT.START.CLOCKS > BARDATA.MEASURE then do
EVENT.START.BARS = EVENT.START.BARS + 1
EVENT.START.CLOCKS = EVENT.START.CLOCKS - BARDATA.MEASURE
if EVENT.STOP.CLOCKS > BARDATA.MEASURE then do
EVENT.STOP.BARS = EVENT.STOP.BARS + 1
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS - BARDATA.MEASURE
end
END
end
end
ENDSCAN

MXPOINTER "normal"

EXIT



ASC:
GETBARDATA
if BARDATA.SELECT == 'NONE' then do
	MXREPORT "You must select some notes!"
	exit
	end
BEGINSCAN 'selected'

if result ~= 0 then do forever		
  
NEXTEVENT				
  if result == 0 then break
Q = (127 - EVENT.ATTACK)/times

if EVENT.TYPE == 'NOTE' then 
do i = 1 to times 	
EVENT.START.CLOCKS = EVENT.START.CLOCKS + z
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS + z
EVENT.ATTACK = (EVENT.ATTACK + Q)

ADDEVENT
if EVENT.START.CLOCKS > BARDATA.MEASURE then do
EVENT.START.BARS = EVENT.START.BARS + 1
EVENT.START.CLOCKS = EVENT.START.CLOCKS - BARDATA.MEASURE
if EVENT.STOP.CLOCKS > BARDATA.MEASURE then do
EVENT.STOP.BARS = EVENT.STOP.BARS + 1
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS - BARDATA.MEASURE
end
END
end
end
ENDSCAN

MXPOINTER "normal"

EXIT

LEV:
GETBARDATA
if BARDATA.SELECT == 'NONE' then do
	MXREPORT "You must select some notes!"
	exit
	end
BEGINSCAN 'selected'

if result ~= 0 then do forever		
  
NEXTEVENT				
  if result == 0 then break


if EVENT.TYPE == 'NOTE' then 
do i = 1 to times 	
EVENT.START.CLOCKS = EVENT.START.CLOCKS + z
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS + z


ADDEVENT
if EVENT.START.CLOCKS > BARDATA.MEASURE then do
EVENT.START.BARS = EVENT.START.BARS + 1
EVENT.START.CLOCKS = EVENT.START.CLOCKS - BARDATA.MEASURE
if EVENT.STOP.CLOCKS > BARDATA.MEASURE then do
EVENT.STOP.BARS = EVENT.STOP.BARS + 1
EVENT.STOP.CLOCKS = EVENT.STOP.CLOCKS - BARDATA.MEASURE
end
END
end
end
ENDSCAN

MXPOINTER "normal"

EXIT