#include <stdint.h>
extern unsigned char RootNote;
extern const unsigned char * Scale;
extern unsigned char BassNtfTime;
extern unsigned char BeatInPlay;
extern unsigned char PlayFlags;
extern unsigned char ChordPlayCnt;
extern unsigned char Sustain;
extern unsigned char GtrStrings[6];
extern unsigned char VelCurve;
extern unsigned char ChordBoundary;
extern unsigned char ChordTrigger;
extern unsigned char Sensitivity;
extern const unsigned char MidiChansDef[5];
#if defined(DEBUG_GUILOCK) || defined(DEBUG_GUIWINSIGNAL)
const char * getThreadName(register unsigned char);
#endif
unsigned char apply_vel_curve(register unsigned char);
void start_play(register unsigned char, register unsigned char);
void stop_play(register unsigned char, register unsigned char);
void play_beat(register unsigned char, register unsigned char);
unsigned char lockPlay(register unsigned char);
void unlockPlay(register unsigned char);
void release_chord(void);
unsigned char lockChord(register unsigned char);
void unlockChord(register unsigned char);
void advance_midiclock(void);
unsigned char is_midiclock(void);
uint32_t pickChord(register unsigned char, register unsigned char, register unsigned char);
uint32_t getCurrChord(void);
void set_clock_type(void);
uint32_t get_current_clock(void);
void songChordChange(register unsigned char, register unsigned char);
uint32_t clearChord(register uint32_t);
unsigned char set_bpm(register unsigned char);
unsigned char get_prev_bpm(void);
void set_PPQN(register unsigned char);
void set_ritard_or_accel(register unsigned char, register unsigned char duration);
void initBeatThread(void);
void endBeatThread(void);
void signalBeatThread(register unsigned char);
uint32_t mute_robots(register unsigned char, register unsigned char);
uint32_t mute_playing_chord(register unsigned char);
uint32_t midiChordTrigger(register unsigned char, register unsigned char);
uint32_t eventChordTrigger(register unsigned char, register unsigned char, register unsigned char);
uint32_t allNotesOff(register unsigned char);
unsigned char setTranspose(register unsigned char, register unsigned char);
unsigned char setConfigTranspose(register unsigned char);
unsigned char setMidiSendChan(register uint32_t, register unsigned char);
unsigned char * saveAccompConfig(register unsigned char *);
int loadAccompConfig(register unsigned char *, register unsigned long);
#ifdef DEBUG_GUILOCK
unsigned char lockGui(register unsigned char, const char *);
void unlockGui(register unsigned char, const char *);
#define LOCKGUI(a, b) lockGui(a, b)
#define UNLOCKGUI(a, b) unlockGui(a, b)
#else
unsigned char lockGui(register unsigned char);
void unlockGui(register unsigned char);
#define LOCKGUI(a, b) lockGui(a)
#define UNLOCKGUI(a, b) unlockGui(a)
#endif
void checkStartPadNotes(void);
unsigned char setChordSensitivity(register unsigned char);
unsigned char lockTempo(register unsigned char);
void unlockTempo(register unsigned char);
// PlayFlags
#define PLAYFLAG_STOP 0x01
#define PLAYFLAG_FILLPLAY 0x02
#define PLAYFLAG_FINAL_PTN 0x04
#define PLAYFLAG_CHORDSOUND 0x08
#define PLAYFLAG_FILLDONE 0x10
#define PLAYFLAG_ACCEL 0x20
#define PLAYFLAG_RITARD 0x40
#define PLAYFLAG_END_FADE 0x80
// BeatInPlay
#define INPLAY_STOPPED 0x00
#define INPLAY_RUNNING 0x01
#define INPLAY_USERMUTEBASS 0x02
#define INPLAY_USERMUTEGTR 0x04
#define INPLAY_USERMUTEPAD 0x08
#define INPLAY_TURNING_OFF 0x10
#define INPLAY_RESTORE_TEMPO 0x20
#define INPLAY_WAITING_DRUM 0x40
#define INPLAY_WAITING_BASS 0x80
#define PPQN_VALUE 24