def get_chord_single(chord, quality): remaining_extensions = remaining_extension_filter(chord, quality) quality_semitones = quality_to_semitones(quality) first_semitone_revision, remaining_extensions = suspension_scanner( remaining_extensions, quality_semitones) final_semitone_revision = extension_scanner(remaining_extensions, first_semitone_revision, quality) if final_semitone_revision is None: pass elif repeated_interval_filter(final_semitone_revision) is not True: final_semitone_strings, semitone_indices_to_replace = \ extension_replacement_scan( semitones_to_strings(final_semitone_revision), chord) final_semitone_revision = remove_element_by_index_scan( final_semitone_revision, semitone_indices_to_replace) return chord, final_semitone_revision, final_semitone_strings
def get_chord_in_line(): final_input = user_input() if final_input is None: return root, quality, remaining_extensions = final_input root_position = root_position_filter(root) quality_semitones = quality_to_semitones(quality) first_semitone_revision, remaining_extensions = suspension_scanner( remaining_extensions, quality_semitones) final_semitone_revision = extension_scanner(remaining_extensions, first_semitone_revision, quality) if final_semitone_revision is None: return interval_indices = semitones_to_indices(final_semitone_revision, root_position) final_intervals = indices_to_notes(interval_indices, root) semitone_strings = semitones_to_strings(final_semitone_revision, False) print(final_intervals, " ", semitone_strings)
def extension_scanner(remaining_extensions, first_semitone_revision, quality, multi_scan=True): """Scans remaining chord string for extensions and adds / replaces them in the final semitone list Args: remaining_extensions: a string of all unused elements of original user input (string) first_semitone_revision: a list of all required semitone jumps after the suspension scan (integers) quality: user input chord quality (string) multi_scan: Returns: final list of required quality semitone jumps (integers) """ quality_semitones = quality_to_semitones(quality) final_semitone_revision = first_semitone_revision if remaining_extensions == "": return final_semitone_revision extension_semitones = [ extensions().get(i) for i in extensions() if i in remaining_extensions ] for i in extensions(): if i in remaining_extensions: remaining_extensions = remaining_extensions.replace(i, "") tail_extensions = [] if remaining_extensions != "": print("These chord extensions not recognized: " + remaining_extensions) return None elif remaining_extensions == "": for i in extension_semitones: tail_extensions.append(i) tail_extensions.sort() final_semitone_revision += tail_extensions final_semitone_revision.sort() if multi_scan is False: final_semitone_revision = list(dict.fromkeys(final_semitone_revision)) return final_semitone_revision elif multi_scan is True: if len(list(dict.fromkeys(final_semitone_revision))) != len( final_semitone_revision): return None else: return final_semitone_revision
def get_chord_multiple(): chord_inputs = open("COMBINED_PRE_QUALS.txt", "r") for i in chord_inputs: stripped_chord = i.replace("\n", "") quality = quality_filter(stripped_chord) remaining_extensions = remaining_extension_filter( stripped_chord, quality) quality_semitones = quality_to_semitones(quality) first_semitone_revision, remaining_extensions = suspension_scanner( remaining_extensions, quality_semitones) final_semitone_revision = extension_scanner(remaining_extensions, first_semitone_revision, quality) final_output_template = [] if final_semitone_revision is None: pass elif repeated_interval_filter(final_semitone_revision) is not True: final_semitone_strings, semitone_indices_to_replace = \ extension_replacement_scan(semitones_to_strings( final_semitone_revision), stripped_chord) final_semitone_revision = remove_element_by_index_scan( final_semitone_revision, semitone_indices_to_replace) final_output_template.insert(0, final_semitone_strings) final_output_template.insert(0, final_semitone_revision) final_output_template.insert(0, [stripped_chord]) print(final_output_template, file=open("database.txt", "a"))
def quality_semitones_filter(chord): quality = quality_filter(chord) quality_semitones = quality_to_semitones(quality) return quality_semitones