示例#1
0
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
示例#2
0
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)
示例#3
0
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
示例#4
0
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"))
示例#5
0
def quality_semitones_filter(chord):

    quality = quality_filter(chord)
    quality_semitones = quality_to_semitones(quality)

    return quality_semitones