Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
else:
chord_info['root'] = None
progression_chords.append(chord_info)
# For each input..
previous_pitches = []
for chord_index, chord_info in enumerate(progression_chords):
# Unpack object
chord = chord_info['notes']
# NO_OP
if chord == None:
bar=bar+1
continue
root = chord_info['root']
root_pitch = pychord.utils.note_to_val(notes.int_to_note(notes.note_to_int(root)))
# Reset internals
humanize_amount = humanize_interval
pitches = []
all_new_pitches = []
# Turns out this algorithm was already written in the 1800s!
# https://en.wikipedia.org/wiki/Voice_leading#Common-practice_conventions_and_pedagogy
# a) When a chord contains one or more notes that will be reused in the chords immediately following, then these notes should remain, that is retained in the respective parts.
# b) The parts which do not remain, follow the law of the shortest way (Gesetze des nachsten Weges), that is that each such part names the note of the following chord closest to itself if no forbidden succession XXX GOOD NAME FOR A BAND XXX arises from this.
# c) If no note at all is present in a chord which can be reused in the chord immediately following, one must apply contrary motion according to the law of the shortest way, that is, if the root progresses upwards, the accompanying parts must move downwards, or inversely, if the root progresses downwards, the other parts move upwards and, in both cases, to the note of the following chord closest to them.
root = None
for i, note in enumerate(chord):
# Sanitize notes
humanize_amount = humanize_interval
pitches = []
all_new_pitches = []
# Turns out this algorithm was already written in the 1800s!
# https://en.wikipedia.org/wiki/Voice_leading#Common-practice_conventions_and_pedagogy
# a) When a chord contains one or more notes that will be reused in the chords immediately following, then these notes should remain, that is retained in the respective parts.
# b) The parts which do not remain, follow the law of the shortest way (Gesetze des nachsten Weges), that is that each such part names the note of the following chord closest to itself if no forbidden succession XXX GOOD NAME FOR A BAND XXX arises from this.
# c) If no note at all is present in a chord which can be reused in the chord immediately following, one must apply contrary motion according to the law of the shortest way, that is, if the root progresses upwards, the accompanying parts must move downwards, or inversely, if the root progresses downwards, the other parts move upwards and, in both cases, to the note of the following chord closest to them.
root = None
for i, note in enumerate(chord):
# Sanitize notes
sanitized_notes = notes.int_to_note(notes.note_to_int(note))
pitch = pychord.utils.note_to_val(sanitized_notes)
if i == 0:
root = pitch
if root:
if root_lowest and pitch < root: # or chord_index is 0:
pitch = pitch + 12 # Start with the root lowest
all_new_pitches.append(pitch)
# Reuse notes
if pitch in previous_pitches:
pitches.append(pitch)
no_melodic_fluency = False # XXX: vargify
if previous_pitches == [] or all_new_pitches == [] or pitches == [] or no_melodic_fluency: