Files
JazzTheory/main.py
Trance-0 f169b422af init
2025-11-18 15:11:12 -06:00

54 lines
1.7 KiB
Python

# minimal counting function used for review
chromatic_scale = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']
note_value = {e:i for i, e in enumerate(chromatic_scale)}
seven_chord_interval_name = {
'M7#5':(4,4,3),
'M7':(4,3,4),
'7':(4,3,3),
'mM7':(3,4,4),
'm7':(3,4,3),
'm7b5':(3,3,4),
'dim7':(3,3,3),
}
major_scale_intervals = [2,2,1,2,2,2,1]
def get_major_scale(root):
scale = []
scale.append(root)
root_index = note_value[root]
for interval in major_scale_intervals:
root_index = (root_index + interval) % 12
scale.append(chromatic_scale[root_index])
return scale
def get_number_of_half_steps(note1, note2):
return min(abs(note_value[note1] - note_value[note2]), 12 - abs(note_value[note1] - note_value[note2]))
def _construct_chord(root, interval_type=(4,3,3)):
chord = []
chord.append(root)
root_index = note_value[root]
for interval in interval_type:
root_index = (root_index + interval) % 12
chord.append(chromatic_scale[root_index])
return chord
words=""
while words != "quit":
words = input("Enter a note or chord: ")
notes = words.split(" ")
if notes[0][1:] in seven_chord_interval_name.keys():
# construct dominant 7 chord
chord = _construct_chord(notes[0][0],seven_chord_interval_name[notes[0][1:]])
print(chord,get_major_scale(notes[0][0]))
else:
# calculate the interval between notes
res=[]
for i in range(len(notes)-1):
if notes[i] not in note_value or notes[i+1] not in note_value:
print("Invalid note")
break
res.append(get_number_of_half_steps(notes[i], notes[i+1]))
print(res)