Mar-08-2020, 06:10 PM
Let me first start this off by stating that I am a complete beginner to coding and my attempts to fix this have been limited. I am trying to follow this Arduino controlled piano robot. It takes a textified midi file and uses python to translate it into 8-bit.
After running the code I get a text output file as expected however it is blank and I get a few errors:
After running that updated file through the code I got a similar erorr
output_file = open("translated.txt", "w") input_file = open("C:\\Users\\nby20\\Downloads\\megalovania.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()This link to the textified midi file was used. before running the code I changed the input_file = open to text file path like so,
input_file = open("C:\\Users\\nby20\\Downloads\\megalovania.txt")I am not sure if this is correct but I think it works.
After running the code I get a text output file as expected however it is blank and I get a few errors:
Traceback (most recent call last): File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 184, in <module> main() File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 23, in main result[-1] = str(temp_time) + "," + set_bit_prev(on_off_finder(a), note_finder(a), -1) File "C:\Users\nby20\Downloads\python_code_for_translation.py", line 178, in on_off_finder end = in_string.index("ch=") - 1 ValueError: substring not foundI found that anything except for the lines containing actual data for the notes was not readable by the code and I deleted those portions and ended up with this updated file.
After running that updated file through the code I got a similar erorr
Traceback (most recent call last): File "C:\Users\nby20\Downloads\python_code_for_translation (1).py", line 184, in <module> main() File "C:\Users\nby20\Downloads\python_code_for_translation (1).py", line 12, in main temp_time = time_finder(a) File "C:\Users\nby20\Downloads\python_code_for_translation (1).py", line 161, in time_finder time_end = in_string.index(" ") ValueError: substring not foundAny suggestions on how to fix this would be greatly appreciated.