output_file = open("translated.txt", "w")
input_file = open("megalocania.txt")
raw_input_data = input_file.read()
work_data = raw_input_data.splitlines()
result = []
#output_file = open("result.txt", "w")
def main():
for a in work_data:
temp_time = time_finder(a)
if result == []:
result.append(str(temp_time) + ",")
if on_off_finder(a):
result[-1] += set_bit(True, note_finder(a))
elif not on_off_finder(a):
result[-1] += set_bit(True, note_finder(a))
elif time_finder_comm(result[-1]) == temp_time:
result[-1] = str(temp_time) + "," + set_bit_prev(on_off_finder(a), note_finder(a), -1)
elif time_finder_comm(result[-1]) != temp_time:
result.append(str(temp_time) + "," + set_bit_prev(on_off_finder(a), note_finder(a), -1))
for b in result:
output_file.write(b)
output_file.write("\n")
output_file.close()
def set_bit(On, note):
#Takes boolean for if it is on or not, and note number.
#Generates bit
if(note >= 21 and note <= 28 and On):
return str(2**(note - 21)) + ",0,0,0,0,0,0,0,0,0,0"
elif(note >= 29 and note <= 36 and On):
return "0," + str(2**(note - 29)) + ",0,0,0,0,0,0,0,0,0"
elif(note >= 37 and note <= 44 and On):
return "0,0," + str(2**(note - 37)) + ",0,0,0,0,0,0,0,0"
elif(note >= 45 and note <= 52 and On):
return "0,0,0," + str(2**(note - 45)) + ",0,0,0,0,0,0,0"
elif(note >= 53 and note <= 60 and On):
return "0,0,0,0," + str(2**(note - 53)) + ",0,0,0,0,0,0"
elif(note >= 61 and note <= 68 and On):
return "0,0,0,0,0," + str(2**(note - 61)) + ",0,0,0,0,0"
elif(note >= 69 and note <= 76 and On):
return "0,0,0,0,0,0," + str(2**(note - 69)) + ",0,0,0,0"
elif(note >= 77 and note <= 84 and On):
return "0,0,0,0,0,0,0," + str(2**(note - 77)) + ",0,0,0"
elif(note >= 85 and note <= 92 and On):
return "0,0,0,0,0,0,0,0," + str(2**(note - 85)) + ",0,0"
elif(note >= 93 and note <= 100 and On):
return "0,0,0,0,0,0,0,0,0," + str(2**(note - 93)) + ",0"
elif(note >= 101 and note <= 108 and On):
return "0,0,0,0,0,0,0,0,0,0," + str(2**(note - 101))
else:
return "0,0,0,0,0,0,0,0,0,0,0"
def set_bit_prev(On, note, index):
#Same as set_bit but previous aware
temp = result[index]
temp = temp[(temp.find(",") + 1):]
if(note >= 21 and note <= 28):
local_temp = temp[0:temp.find(",")]
if(On):
return str(int(local_temp) + (2**(note - 21))) + temp[temp.find(","):]
if(not On):
return str(int(local_temp) - (2**(note - 21))) + temp[temp.find(","):]
elif(note >= 29 and note <= 36):
local_temp = temp[(temp.find(",") + 1):indexTh(temp, ",", 2)]
if(On):
return temp[0:temp.find(",") + 1] + str(int(local_temp) + (2**(note - 29))) + temp[indexTh(temp, ",", 2):]
if(not On):
return temp[0:temp.find(",") + 1] + str(int(local_temp) - (2**(note - 29))) + temp[indexTh(temp, ",", 2):]
elif(note >= 37 and note <= 44):
local_temp = temp[(indexTh(temp, ",", 2) + 1):indexTh(temp, ",", 3)]
if(On):
return temp[0:indexTh(temp, ",", 2) + 1] + str(int(local_temp) + (2**(note - 37))) + temp[indexTh(temp, ",", 3):]
if(not On):
return temp[0:indexTh(temp, ",", 2) + 1] + str(int(local_temp) - (2**(note - 37))) + temp[indexTh(temp, ",", 3):]
elif(note >= 45 and note <= 52):
local_temp = temp[(indexTh(temp, ",", 3) + 1):indexTh(temp, ",", 4)]
if(On):
return temp[0:indexTh(temp, ",", 3) + 1] + str(int(local_temp) + (2**(note - 45))) + temp[indexTh(temp, ",", 4):]
if(not On):
return temp[0:indexTh(temp, ",", 3) + 1] + str(int(local_temp) - (2**(note - 45))) + temp[indexTh(temp, ",", 4):]
elif(note >= 53 and note <= 60):
local_temp = temp[(indexTh(temp, ",", 4) + 1):indexTh(temp, ",", 5)]
if(On):
return temp[0:indexTh(temp, ",", 4) + 1] + str(int(local_temp) + (2**(note - 53))) + temp[indexTh(temp, ",", 5):]
if(not On):
return temp[0:indexTh(temp, ",", 4) + 1] + str(int(local_temp) - (2**(note - 53))) + temp[indexTh(temp, ",", 5):]
elif(note >= 61 and note <= 68):
local_temp = temp[(indexTh(temp, ",", 5) + 1):indexTh(temp, ",", 6)]
if(On):
return temp[0:indexTh(temp, ",", 5) + 1] + str(int(local_temp) + (2**(note - 61))) + temp[indexTh(temp, ",", 6):]
if(not On):
return temp[0:indexTh(temp, ",", 5) + 1] + str(int(local_temp) - (2**(note - 61))) + temp[indexTh(temp, ",", 6):]
elif(note >= 69 and note <= 76):
local_temp = temp[(indexTh(temp, ",", 6) + 1):indexTh(temp, ",", 7)]
if(On):
return temp[0:indexTh(temp, ",", 6) + 1] + str(int(local_temp) + (2**(note - 69))) + temp[indexTh(temp, ",", 7):]
if(not On):
return temp[0:indexTh(temp, ",", 6) + 1] + str(int(local_temp) - (2**(note - 69))) + temp[indexTh(temp, ",", 7):]
elif(note >= 77 and note <= 84):
local_temp = temp[(indexTh(temp, ",", 7) + 1):indexTh(temp, ",", 8)]
if(On):
return temp[0:indexTh(temp, ",", 7) + 1] + str(int(local_temp) + (2**(note - 77))) + temp[indexTh(temp, ",", 8):]
if(not On):
return temp[0:indexTh(temp, ",", 7) + 1] + str(int(local_temp) - (2**(note - 77))) + temp[indexTh(temp, ",", 8):]
elif(note >= 85 and note <= 92):#error here
local_temp = temp[(indexTh(temp, ",", 8) + 1):indexTh(temp, ",", 9)]
if(On):
return temp[0:indexTh(temp, ",", 8) + 1] + str(int(local_temp) + (2**(note - 85))) + temp[indexTh(temp, ",", 9):]
if(not On):
return temp[0:indexTh(temp, ",", 8) + 1] + str(int(local_temp) - (2**(note - 85))) + temp[indexTh(temp, ",", 9):]
elif(note >= 93 and note <= 100):
local_temp = temp[(indexTh(temp, ",", 9) + 1):indexTh(temp, ",", 10)]
if(On):
return temp[0:indexTh(temp, ",", 9) + 1] + str(int(local_temp) + (2**(note - 93))) + temp[indexTh(temp, ",", 10):]
if(not On):
return temp[0:indexTh(temp, ",", 9) + 1] + str(int(local_temp) - (2**(note - 93))) + temp[indexTh(temp, ",", 10):]
elif(note >= 101 and note <= 108):
local_temp = temp[(indexTh(temp, ",", 10) + 1):]
if(On):
return temp[0:indexTh(temp, ",", 10) + 1] + str(int(local_temp) + (2**(note - 101)))
if(not On):
return temp[0:indexTh(temp, ",", 10) + 1] + str(int(local_temp) - (2**(note - 101)))
def indexTh(in_string, find_this, th):
#Takes String, string to find, and order to find string to find at that order
#returns index
order = 1
last_index = 0
while(True):
temp = in_string.find(find_this, last_index)
if(temp == -1):
return -1
if(order == th):
return temp
order += 1
last_index = temp + 1
def time_finder(in_string):
#Takes a string and finds time, returns it as an int
time_end = in_string.index(" ")
return int(in_string[0:time_end])
def time_finder_comm(in_string):
#Takes a string and finds time, returns it as an int comma
time_end = in_string.index(",")
return int(in_string[0:time_end])
def note_finder(in_string):
#Takes a string, looks for n=, returns n value as an int
num_start = in_string.index("n=") + 2
num_end = in_string.index("v=") - 1
return int(in_string[num_start:num_end])
def on_off_finder(in_string):
#takes a string, looks for On or Off, return true if On
start = in_string.index(" ") + 1
end = in_string.index("ch=") - 1
if in_string[start:end] == "On":
return True
elif in_string[start:end] == "Off":
return False
main()
Comments