# key actions

key_octave = {}

key_octave[90] = 0
key_octave[83] = 0
key_octave[88] = 0
key_octave[68] = 0
key_octave[67] = 0
key_octave[86] = 0
key_octave[71] = 1
key_octave[66] = 1
key_octave[72] = 1
key_octave[78] = 1
key_octave[74] = 1
key_octave[77] = 1
key_octave[81] = 1
key_octave[50] = 1
key_octave[87] = 1
key_octave[51] = 1
key_octave[69] = 1
key_octave[82] = 1
key_octave[53] = 2
key_octave[84] = 2
key_octave[54] = 2
key_octave[89] = 2
key_octave[55] = 2
key_octave[85] = 2
key_octave[73] = 2
key_octave[57] = 2
key_octave[79] = 2
key_octave[48] = 2
key_octave[80] = 2

value_scan = {}

value_scan[90] = "C "
value_scan[83] = "C#"
value_scan[88] = "D "
value_scan[68] = "D#"
value_scan[67] = "E "
value_scan[86] = "F "
value_scan[71] = "F#"
value_scan[66] = "G "
value_scan[72] = "G#"
value_scan[78] = "A "
value_scan[74] = "A#"
value_scan[77] = "B "
value_scan[81] = "C "
value_scan[50] = "C#"
value_scan[87] = "D "
value_scan[51] = "D#"
value_scan[69] = "E "
value_scan[82] = "F "
value_scan[53] = "F#"
value_scan[84] = "G "
value_scan[54] = "G#"
value_scan[89] = "A "
value_scan[55] = "A#"
value_scan[85] = "B "
value_scan[73] = "C "
value_scan[57] = "C#"
value_scan[79] = "D "
value_scan[48] = "D#"
value_scan[80] = "E "

note_scan = {}
note_scan[90] = "06"
note_scan[83] = "07"
note_scan[88] = "08"
note_scan[68] = "09"
note_scan[67] = "10"
note_scan[86] = "11"
note_scan[71] = "00"
note_scan[66] = "01"
note_scan[72] = "02"
note_scan[78] = "03"
note_scan[74] = "04"
note_scan[77] = "05"
note_scan[81] = "06"
note_scan[50] = "07"
note_scan[87] = "08"
note_scan[51] = "09"
note_scan[69] = "10"
note_scan[82] = "11"
note_scan[53] = "00"
note_scan[84] = "01"
note_scan[54] = "02"
note_scan[89] = "03"
note_scan[55] = "04"
note_scan[85] = "05"
note_scan[73] = "06"
note_scan[57] = "07"
note_scan[79] = "08"
note_scan[48] = "09"
note_scan[80] = "10"

cpsval = {}
cpsval['C '] = "06"
cpsval['C#'] = "07"
cpsval['D '] = "08"
cpsval['D#'] = "09"
cpsval['E '] = "10"
cpsval['F '] = "11"
cpsval['F#'] = "00"
cpsval['G '] = "01"
cpsval['G#'] = "02"
cpsval['A '] = "03"
cpsval['A#'] = "04"
cpsval['B '] = "05"

octave = 4

# return a note corresponding to this key at this octave, nicely formatted for display
def get_value(scancode):
	return value_scan[scancode] + "-" + str(key_octave[scancode] + octave)

# check whether we have a display for this key
def has_value(scancode):
	return value_scan.has_key(scancode)

# get a note formatted for Csound interface corresponding to this key and this octave
def get_note(scancode):
	return str(key_octave[scancode] + octave) + "." + note_scan[scancode]

# check whether we have a note at this key & octave
def has_note(scancode):
	return note_scan.has_key(scancode)

# go up one octave
def octave_up():
	global octave
	if (octave < 12):
		octave = octave + 1
	return 1

# go down one octave
def octave_down():
	global octave
	if (octave > 0):
		octave = octave - 1
	return 1
	
# set our new octave
def set_octave(new_oct):
	global octave
	if (new_oct < 13) & (new_oct >= 0):
		octave = new_oct
	return 1

def get_octave():
	return octave
