def create_primary_templates(tonal_function): domain_tones = tonal_function.domain_tonality.annotation[:len( tonal_function.domain_tonality.annotation) - 1] range_tones = tonal_function.range_tonality.annotation[:len( tonal_function.range_tonality.annotation) - 1] tonal_order_template = list() tonal_interval_map = dict() for t in domain_tones: tonal_order_template.append( range_tones.index(tonal_function[t]) if tonal_function[t] in range_tones else None) key_pure_dist = Interval.calculate_pure_distance( domain_tones[0], t) if tonal_function[t] is not None: value_pure_distance = Interval.calculate_pure_distance( range_tones[0], tonal_function[t]) else: value_pure_distance = None tonal_interval_map[key_pure_dist] = value_pure_distance return tonal_order_template, tonal_interval_map
def create_extension_interval_template(tonal_function): domain_tones = tonal_function.domain_tonality.annotation[:len( tonal_function.domain_tonality.annotation) - 1] range_tones = tonal_function.range_tonality.annotation[:len( tonal_function.range_tonality.annotation) - 1] extension_interval_map = dict() ext_map = tonal_function.extension_map if ext_map is None: return extension_interval_map for t in tonal_function.map.keys(): if t not in domain_tones: key_pure_dist = Interval.calculate_pure_distance( domain_tones[0], t) if tonal_function[t] is not None: value_pure_distance = Interval.calculate_pure_distance( range_tones[0], tonal_function[t]) else: value_pure_distance = None extension_interval_map[key_pure_dist] = value_pure_distance return extension_interval_map
def test_pure_distances(self): dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('E'), DiatonicToneCache.get_tone('C')) assert dd == 5 assert cc == 8 dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('Ab'), DiatonicToneCache.get_tone('B')) assert dd == 1 assert cc == 3 dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('C'), DiatonicToneCache.get_tone('B')) assert dd == 6 assert cc == 11 dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('B'), DiatonicToneCache.get_tone('C')) assert dd == 1 assert cc == 1 dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('Ebb'), DiatonicToneCache.get_tone('A#')) assert dd == 3 assert cc == 8 dd, cc = Interval.calculate_pure_distance(DiatonicToneCache.get_tone('A#'), DiatonicToneCache.get_tone('Ebb')) assert dd == 4 assert cc == 4 end_tone = Interval.end_tone_from_pure_distance(DiatonicToneCache.get_tone('C'), 4, 6) assert 'Gb' == DiatonicTone.to_upper(end_tone.diatonic_symbol) end_tone = Interval.end_tone_from_pure_distance(DiatonicToneCache.get_tone('G'), 2, 5) assert 'B#' == DiatonicTone.to_upper(end_tone.diatonic_symbol) end_tone = Interval.end_tone_from_pure_distance(DiatonicToneCache.get_tone('Gb'), 4, 6, False) assert 'C' == DiatonicTone.to_upper(end_tone.diatonic_symbol) end_tone = Interval.end_tone_from_pure_distance(DiatonicToneCache.get_tone('B#'), 2, 5, False) assert 'G' == DiatonicTone.to_upper(end_tone.diatonic_symbol)