def test_transpose_alternate_chord_info():
    alternate_chord_info = "Em7"
    mapping = {"cis": "f1:m7", "d": "fis1:m7", "ees": "g1:m7", "e": "gis1:m7", "gis": "c1:m7"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(alternate_chord_info, pitch) == lilypond
    alternate_chord_info = "EM7"
    mapping = {"cis": "f1:maj7", "d": "fis1:maj7", "ees": "g1:maj7", "e": "gis1:maj7", "gis": "c1:maj7"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(alternate_chord_info, pitch) == lilypond
def test_transpose_chord_info_major7():
    chord_info = "CM7"
    mapping = {"cis": "cis1:maj7", "d": "d1:maj7", "ees": "ees1:maj7", "e": "e1:maj7"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond

    chord_info = "Cmaj7"
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond
def test_transpose_chord_info_dominant7():
    chord_info = "C7"
    mapping = {
        "cis": "cis1:7 cis1:7",
        "d": "d1:7 d1:7",
        "ees": "ees1:7 ees1:7",
        "e": "e1:7 e1:7",
        "aes": "aes1:7 aes1:7"
    }
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch, number_of_bars=2) == lilypond
    mapping = {"cis": "cis1:7", "d": "d1:7", "ees": "ees1:7", "e": "e1:7"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch, number_of_bars=1) == lilypond
def test_transpose_chord_info_major():
    chord_info = "C"
    mapping = {
        "cis": "cis1 cis1",
        "d": "d1 d1",
        "ees": "ees1 ees1",
        "e": "e1 e1",
        "aes": "aes1 aes1"
    }
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch, number_of_bars=2) == lilypond
    mapping = {"cis": "cis1", "d": "d1", "ees": "ees1", "e": "e1"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch, number_of_bars=1) == lilypond
def test_transpose_alternate_chord_info_lilypond():
    alternate_chord_info = "e1:m7 e1:9 e1:maj7"
    mapping = {"cis": "f1:m7 f1:9 f1:maj7",
               "d": "fis1:m7 fis1:9 fis1:maj7",
               "ees": "g1:m7 g1:9 g1:maj7",
               "e": "gis1:m7 gis1:9 gis1:maj7",
               "gis": "c1:m7 c1:9 c1:maj7"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(alternate_chord_info, pitch) == lilypond
def test_transpose_chord_info_lilypond_var_1():
    chord_info = "c1:m7 c1:9 c1:maj7"
    mapping = {
        "c": "c1:m7 c1:9 c1:maj7",
        "cis": "cis1:m7 cis1:9 cis1:maj7",
        "ees": "ees1:m7 ees1:9 ees1:maj7",
        "gis": "gis1:m7 gis1:9 gis1:maj7",
    }
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond
def test_transpose_chord_info_lilypond_progression():
    chord_info = "d2:m7 g:7 c1:maj7"
    mapping = {
        "d": "e2:m7 a:7 d1:maj7",
        "e": "fis2:m7 b:7 e1:maj7",
        "f": "g2:m7 c:7 f1:maj7",
        "g": "a2:m7 d:7 g1:maj7",
        "a": "b2:m7 e:7 a1:maj7",
        "b": "cis2:m7 fis:7 b1:maj7",
    }
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond
def test_transpose_chord_info_lilypond_dim():
    chord_info = "c2:9 d2:dim9dim5"
    mapping = {
        "c": "c2:9 d2:dim9dim5",
        "cis": "cis2:9 dis2:dim9dim5",
        "ees": "ees2:9 f2:dim9dim5",
        "fis": "fis2:9 gis2:dim9dim5",
        "gis": "gis2:9 ais2:dim9dim5",
        "aes": "aes2:9 bes2:dim9dim5",
    }
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond
def test_wrong_chord():
    chord_info = "Cm19aug12b3"
    with pytest.raises(Exception):
        transpose_chord_info(chord_info, "d")
def test_transpose_chord_info_minor():
    chord_info = "Cm"
    mapping = {"cis": "cis1:m", "d": "d1:m", "ees": "ees1:m", "e": "e1:m"}
    for pitch, lilypond in mapping.items():
        assert transpose_chord_info(chord_info, pitch) == lilypond
示例#11
0
def fix_exercise_chords(exercise):
    for item in exercise.riff_exercise_items:
        if item.riff.number_of_bars != item.number_of_bars:
            logger.info("Correcting number_of_bars for exercise_item",
                        item=item.order_number,
                        number_of_bars=item.riff.number_of_bars)
            item.number_of_bars = item.riff.number_of_bars

        # Disable check, and just re-generate them all
        new_chord_info = None
        # Check chord syntax
        # *Cm7 and Cm7 will be converted to c1:m7
        # new_chord_info = None
        # if item_chord_info:
        #     if item_chord_info.startswith("*"):
        #         item_chord_info = item_chord_info[1:]
        #     if item_chord_info[0].isupper():
        #         try:
        #             new_chord_info = transpose_chord_info(
        #                 item_chord_info, "c", number_of_bars=item.riff.number_of_bars,
        #             )
        #             logger.info(
        #                 "Correcting chord for exercise_item from item",
        #                 current_chord_info=item_chord_info,
        #                 new_chord_info=new_chord_info,
        #             )
        #         except ValueError:
        #             logger.warning("No repair possible based on current item chord_info",
        #                            current_chord_info=item_chord_info)
        #             pass

        # item_chord_info = item.chord_info
        # Do them all
        item_chord_info = None

        if new_chord_info is None and item_chord_info is None:
            if item.riff.chord_info:
                new_chord_info = transpose_chord_info(
                    item.riff.chord_info,
                    item.pitch,
                    number_of_bars=item.riff.number_of_bars)
                logger.info(
                    "Correcting chord for exercise_item from riff CHORD_INFO",
                    current_chord_info=item.riff.chord_info,
                    new_chord_info=new_chord_info,
                )
                # Correct it
                item.chord_info = new_chord_info
            elif item.riff.chord:
                new_chord_info = transpose_chord_info(
                    item.riff.chord,
                    item.pitch,
                    number_of_bars=item.riff.number_of_bars)
                logger.info(
                    "Correcting chord for exercise_item from riff CHORD",
                    current_chord_info=item.riff.chord,
                    new_chord_info=new_chord_info,
                )
                # Correct it
                item.chord_info = new_chord_info
            else:
                logger.error(
                    "No chord info found in riff: this shouldn't happen",
                    riff_id=item.riff_id)