// Put on an empty track. 
// Record-arm the track.
// Enable input monitoring only.

// Sends a CC message when recording.
// Useful for external devices, when needed a trigger signal.
// Configure the track Midi hardware output.
// Use Mid Yoke or something to send the signal.

desc: Read info...

slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>--MIDI Channel
slider2:3<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}
>--CC message

filename:0,punch_lightgfx/stop.png
filename:1,punch_lightgfx/play.png
filename:2,punch_lightgfx/pause.png
filename:3,punch_lightgfx/record.png
filename:4,punch_lightgfx/recordpaused.png

in_pin:none
out_pin:none

@init
gfx_a = 1;

CC_MESG_MIN = 176; // a CC message on MIDI channel 1
BYTE_SIZE = 256; // size of an 8-bit byte
offset = 0; // sample offset for midisend
last_value = 0; // last known CC value
send_cc = 0;
NOTE_ON = 9;

@slider
channel = slider1;
cc = slider2;
value = 127;
( value != last_value )? send_cc = 1;

@block
rstate = play_state;

(play_state == 5) ? // only change while recording
(
// send the message
msg1 = channel + CC_MESG_MIN;
msg23 = cc + ( value * BYTE_SIZE );  
midisend( offset, msg1, msg23 ); 

// clean up
send_cc = 0;
last_value = value;
)

@gfx 597 474
rstate >= 0 ? (
gfx_file = rstate;
rstate >= 5 ? gfx_file-= 2;
gfx_x = gfx_y = 0;
gfx_blit(gfx_file,1,0);
);
