Last active
September 23, 2023 14:15
-
-
Save Preinfarction/11f92e449d4486116c1381bf250c2f77 to your computer and use it in GitHub Desktop.
Name Interval Coordinates Expressed In The Rank-6 Lilley-Johnston Basis
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import re | |
| from fractions import Fraction | |
| def ordinal_to_suffix(degree): | |
| ds = str(degree) | |
| if ds[-1] == "1": | |
| if len(ds) > 1: | |
| if ds[-2] == "1": | |
| return "th" | |
| return "st" | |
| if ds[-1] == "2": | |
| if len(ds) > 1: | |
| if ds[-2] == "1": | |
| return "th" | |
| return "nd" | |
| if ds[-1] == "3": | |
| if len(ds) > 1: | |
| if ds[-2] == "1": | |
| return "th" | |
| return "rd" | |
| else: | |
| return "th" | |
| def interval_name_to_english(interval_string): | |
| interval_string = re.sub(r"Sp", r"super-", interval_string) | |
| interval_string = re.sub(r"Sb", r"sub-", interval_string) | |
| interval_string = re.sub(r"Ac", r"acute ", interval_string) | |
| interval_string = re.sub(r"Gr", r"grave ", interval_string) | |
| interval_string = re.sub(r"m", r"minor ", interval_string) | |
| interval_string = re.sub(r"d", r"diminished ", interval_string) | |
| interval_string = re.sub(r"M", r"major ", interval_string) | |
| interval_string = re.sub(r"Pr", r"prominent-", interval_string) | |
| interval_string = re.sub(r"Re", r"recessed-", interval_string) | |
| interval_string = re.sub(r"P", r"perfect ", interval_string) | |
| interval_string = re.sub(r"De", r"descendant-", interval_string) | |
| interval_string = re.sub(r"As", r"ascendant-", interval_string) | |
| interval_string = re.sub(r"A", r"augmented ", interval_string) | |
| return interval_string | |
| def tune_interval_in_comma_basis(interval): | |
| a, b, c, d, e, f = interval | |
| ratio = Fraction(81, 80) ** a * Fraction(25, 24) ** b * Fraction(128, 125) ** c * Fraction(36, 35) ** d * Fraction(33, 32) ** e * Fraction(65, 64) ** f | |
| return ratio | |
| def pprint(interval_string): | |
| interval_string = re.sub(r"dP", r"d", interval_string) | |
| interval_string = re.sub(r"AP", r"A", interval_string) | |
| interval_string = re.sub(r"DeP", r"De", interval_string) | |
| interval_string = re.sub(r"SbP", r"Sb", interval_string) | |
| interval_string = re.sub(r"AsP", r"As", interval_string) | |
| interval_string = re.sub(r"SpP", r"Sp", interval_string) | |
| interval_string = re.sub(r"GrP", r"Gr", interval_string) | |
| interval_string = re.sub(r"PrP([0-9]+)", r"Pr\1", interval_string) | |
| interval_string = re.sub(r"ReP", r"Re", interval_string) | |
| interval_string = re.sub(r"AcP", r"Ac", interval_string) | |
| interval_string = re.sub(r"dm", r"d", interval_string) | |
| interval_string = re.sub(r"AM", r"A", interval_string) | |
| return interval_string | |
| def interval_difference(interval1, interval2): | |
| interval_difference = (e1 - e2 for (e1, e2) in zip(interval1, interval2)) | |
| return tuple(interval_difference) | |
| def interval_sum(interval1, interval2): | |
| interval_sum = (e1 + e2 for (e1, e2) in zip(interval1, interval2)) | |
| return tuple(interval_sum) | |
| def interval_to_quality(interval): | |
| a, b, c, d, e, f = interval | |
| if c >= 7: | |
| return interval_to_quality(interval_difference((a, b, c, d, e, f), (3, 12, 7, 0, 0, 0))) | |
| if c < 0: | |
| return interval_to_quality(interval_sum((a, b, c, d, e, f), (3, 12, 7, 0, 0, 0))) | |
| base_interval_to_quality = { | |
| (0, 0, 0, 0, 0, 0): "P", | |
| (0, 1, 1, 0, 0, 0): "m", | |
| (0, 2, 1, 0, 0, 0): "M", | |
| (1, 3, 2, 0, 0, 0): "m", | |
| (1, 4, 2, 0, 0, 0): "M", | |
| (1, 5, 3, 0, 0, 0): "P", | |
| (2, 7, 4, 0, 0, 0): "P", | |
| (2, 8, 5, 0, 0, 0): "m", | |
| (2, 9, 5, 0, 0, 0): "M", | |
| (3, 10, 6, 0, 0, 0): "m", | |
| (3, 11, 6, 0, 0, 0): "M", | |
| } | |
| c_to_natural_gravity = { | |
| 0: 0, | |
| 1: 0, | |
| 2: 1, | |
| 3: 1, | |
| 4: 2, | |
| 5: 2, | |
| 6: 3, | |
| } | |
| if interval in base_interval_to_quality: | |
| return base_interval_to_quality[interval] | |
| if f < 0: | |
| return "Re" + interval_to_quality((a, b, c, d, e, f + 1)) | |
| if f > 0: | |
| return "Pr" + interval_to_quality((a, b, c, d, e, f - 1)) | |
| if e < 0: | |
| return "De" + interval_to_quality((a, b, c, d, e + 1, f)) | |
| if e > 0: | |
| return "As" + interval_to_quality((a, b, c, d, e - 1, f)) | |
| if d < 0: | |
| return "Sb" + interval_to_quality((a, b, c, d + 1, e, f)) | |
| if d > 0: | |
| return "Sp" + interval_to_quality((a, b, c, d - 1, e, f)) | |
| natural_gravity = c_to_natural_gravity[c] | |
| gravity_difference = a - natural_gravity | |
| if gravity_difference < 0: | |
| return "Gr" * abs(gravity_difference) + interval_to_quality((a - gravity_difference, b, c, d, e, f)) | |
| if gravity_difference > 0: | |
| return "Ac" * gravity_difference + interval_to_quality((a - gravity_difference, b, c, d, e, f)) | |
| if c == 0: | |
| if b < 0: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 0: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 1: | |
| if b < 1: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 2: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 2: | |
| if b < 3: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 4: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 3: | |
| if b < 5: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 5: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 4: | |
| if b < 7: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 7: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 5: | |
| if b < 8: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 9: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| if c == 6: | |
| if b < 10: | |
| return "d" + interval_to_quality((a, b + 1, c, d, e, f)) | |
| if b > 11: | |
| return "A" + interval_to_quality((a, b - 1, c, d, e, f)) | |
| def name_rank_6_interval(interval): | |
| (a, b, c, d, e, f) = interval | |
| ordinal = interval[2] + 1 | |
| name = interval_to_quality(interval) + str(ordinal) | |
| name = pprint(name) | |
| return name | |
| intervals = [ | |
| (3, 10, 6, 0, 0, 0), | |
| (3, 10, 6, 1, 0, 1), | |
| ] | |
| for interval in intervals: | |
| name = name_rank_6_interval(interval) | |
| frequency_ratio = tune_interval_in_comma_basis(interval) | |
| frequency_ratio_string = str(frequency_ratio.numerator) + "/" + str(frequency_ratio.denominator) | |
| #ordinal = interval[2] + 1 | |
| #english_name = interval_name_to_english(name) + ordinal_to_suffix(ordinal) | |
| print(name, "=", list(interval), "#", frequency_ratio_string, "=", float(frequency_ratio)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment