Skip to content

Instantly share code, notes, and snippets.

@Preinfarction
Last active August 30, 2023 01:25
Show Gist options
  • Save Preinfarction/72ecf07cec8832ac7576310bed15f39a to your computer and use it in GitHub Desktop.
Save Preinfarction/72ecf07cec8832ac7576310bed15f39a to your computer and use it in GitHub Desktop.
Get names for rank-2 musical intervals
import re
def pprint(interval_string):
interval_string = re.sub(r"dP", r"d", interval_string)
interval_string = re.sub(r"dm", r"d", interval_string)
interval_string = re.sub(r"AP", r"A", interval_string)
interval_string = re.sub(r"AM", r"A", interval_string)
return interval_string
def interval_to_quality(interval):
A1, d2 = interval
if d2 >= 7:
return interval_to_quality((A1 - 12, d2 - 7))
if d2 < 0:
return interval_to_quality((A1 + 12, d2 + 7))
if interval in [(0, 0), (5, 3), (7, 4), (12, 7)]:
return "P"
if interval in [(1, 1), (3, 2), (8, 5), (10, 6)]:
return "m"
if interval in [(2, 1), (4, 2), (9, 5), (11, 6)]:
return "M"
if d2 == 0 and A1 < 0:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 0 and A1 > 0:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 1 and A1 < 1:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 1 and A1 > 2:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 2 and A1 < 3:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 2 and A1 > 4:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 3 and A1 < 5:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 3 and A1 > 5:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 4 and A1 < 7:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 4 and A1 > 7:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 5 and A1 < 8:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 5 and A1 > 9:
return "A" + interval_to_quality((A1 - 1, d2))
if d2 == 6 and A1 < 10:
return "d" + interval_to_quality((A1 + 1, d2))
if d2 == 6 and A1 > 11:
return "A" + interval_to_quality((A1 - 1, d2))
def interval_to_name(interval):
A1, d2 = interval
ordinal = str(d2 + 1)
quality = interval_to_quality(interval)
name = quality + ordinal
name = pprint(name)
return name
print(interval_to_name((25, 12))) # Returns "AAAA13".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment