Ejemplo n.º 1
0
    def test_book_examples(self):
        # Interval Creation
        interval = Interval(5, IntervalType.Perfect)
        print(interval)
        interval = Interval.parse("m:10")
        print(interval)
        interval = Interval.create_interval(DiatonicPitch.parse("a:3"), DiatonicPitch.parse("f#:4"))
        print(interval)

        # Interval Addition/Subtraction
        i1 = Interval(5, IntervalType.Perfect)
        i2 = Interval.parse("M:3")
        interval = i1 + i2
        print(interval)
        interval = i1 - i2
        print(interval)
        interval += i2
        print(interval)
        interval -= i2
        print(interval)

        # compute end and start
        interval = Interval(5, IntervalType.Perfect)
        pitch = interval.get_end_pitch(DiatonicPitch.parse("F#:5"))
        print(pitch)
        pitch = interval.get_start_pitch(DiatonicPitch.parse("C:5"))
        print(pitch)
Ejemplo n.º 2
0
    def test_lower_pitch(self):

        pitch = DiatonicPitch(4, 'C')
        for i in range(1, 13):
            for interval_type in TestInterval.INTERVAL_TYPES:
                if i == 1 and interval_type == IntervalType(IntervalType.Diminished):
                    continue
                if i == 1 or i == 4 or i == 5 or i == 8 or i == 11 or i == 12:
                    if interval_type == IntervalType(IntervalType.Minor) or \
                       interval_type == IntervalType(IntervalType.Major):
                        continue 
                else:
                    if interval_type == IntervalType(IntervalType.Perfect):
                        continue
                try:
                    interval = Interval(i, interval_type)
                    p = interval.get_start_pitch(pitch)
                except Exception:
                    e = sys.exc_info()[0]
                    print('exception {0} for interval i={1} interval={2} pitch={3}'.format(e, i, interval_type, pitch))
                    raise Exception('exception {0} for creating interval i={1} type={2} pitch={3}'.format(e, i,
                                                                                                          interval_type,
                                                                                                          pitch))

                print(p)
                assert p.diatonic_distance() == 4 * 7 + 0 - (i - 1)
Ejemplo n.º 3
0
    def test_create_interval(self):
        pitch_a = DiatonicPitch(4, 'C')
        pitch_b = DiatonicPitch(5, 'C')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Perfect)
        assert interval.diatonic_distance == 7
        
        pitch_a = DiatonicPitch(4, 'C')
        pitch_b = DiatonicPitch(5, 'Cb')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Diminished)
        assert interval.diatonic_distance == 7

        pitch_a = DiatonicPitch(4, 'C')
        pitch_b = DiatonicPitch(5, 'Dbb')        
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Diminished)
        assert interval.diatonic_distance == 8
        
        pitch_a = DiatonicPitch(4, 'C')
        pitch_b = DiatonicPitch(5, 'Cb')        
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Diminished)
        assert interval.diatonic_distance == 7
        
        pitch_a = DiatonicPitch(4, 'C')
        pitch_b = DiatonicPitch(4, 'B#')        
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Augmented)
        assert interval.diatonic_distance == 6
        assert not interval.is_negative()

        pitch_a = DiatonicPitch(5, 'C')
        pitch_b = DiatonicPitch(4, 'Bb')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Major)
        assert interval.diatonic_distance == -1
        assert interval.is_negative()
        
        interval = Interval(9, IntervalType(IntervalType.Diminished))
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Diminished)
        assert interval.diatonic_distance == 8
        
        interval = Interval(3, IntervalType(IntervalType.Minor))
        pitch = interval.get_start_pitch(DiatonicPitch(4, 'E'))
        print(pitch)
        assert str(pitch) == 'C#:4'
Ejemplo n.º 4
0
    def test_negative_intervals(self):
        interval = Interval(-3, IntervalType.Major)
        assert interval.diatonic_distance == -2
        assert interval.chromatic_distance == -4
        assert str(interval) == '-M:3'
        print(interval)
        
        interval = Interval.parse('-P:5')
        assert interval.diatonic_distance == -4
        assert interval.chromatic_distance == -7
        assert str(interval) == '-P:5'
        print(interval)
        
        pitch_a = DiatonicPitch(5, 'C')
        pitch_b = DiatonicPitch(4, 'C')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Perfect)
        assert interval.diatonic_distance == -7
        
        pitch_a = DiatonicPitch(5, 'C')
        pitch_b = DiatonicPitch(4, 'Cb')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Augmented)
        assert interval.diatonic_distance == -7
        assert str(interval) == '-A:8'
        
        pitch_a = DiatonicPitch(5, 'C')
        pitch_b = DiatonicPitch(4, 'C#')
        interval = Interval.create_interval(pitch_a, pitch_b)
        print(interval)
        assert interval.interval_type == IntervalType(IntervalType.Diminished)
        assert interval.diatonic_distance == -7
        assert str(interval) == '-d:8'

        pitch_a = DiatonicPitch(5, 'C')
        lower_pitches = [DiatonicPitch(4, i) for i in list('CDEFGAB')]
        answers = ['-P:8', '-m:7', '-m:6', '-P:5', '-P:4', '-m:3', '-m:2']
        for (p, a) in zip(lower_pitches, answers):
            interval = Interval.create_interval(pitch_a, p)
            assert str(interval) == a
          
        lower_pitches = [DiatonicPitch(4, i) for i in 'Cb,Db,Eb,Fb,Gb,Ab,Bb'.split(',')]
        answers = ['-A:8', '-M:7', '-M:6', '-A:5', '-A:4', '-M:3', '-M:2']
        for (p, a) in zip(lower_pitches, answers):
            interval = Interval.create_interval(pitch_a, p)
            assert str(interval) == a

        lower_pitches = [DiatonicPitch(4, i) for i in 'C#,D#,E#,F#,G#,A#,B#'.split(',')]
        answers = ['-d:8', '-d:7', '-d:6', '-d:5', '-d:4', '-d:3', '-d:2']
        for (p, a) in zip(lower_pitches, answers):
            interval = Interval.create_interval(pitch_a, p)
            assert str(interval) == a

        interval = Interval.parse('-M:3')
        p = DiatonicPitch(4, 'Ab')
        end_p = interval.get_end_pitch(p)
        print(end_p)
        assert str(end_p) == 'Fb:4'
        
        interval = Interval.parse('-P:5')
        p = DiatonicPitch(4, 'D')
        end_p = interval.get_end_pitch(p)
        print(end_p)
        assert str(end_p) == 'G:3'

        interval_strs = ['-P:1', '-M:2', '-M:3', '-P:4', '-P:5', '-M:6', '-M:7', '-P:8', '-M:9', '-M:10',
                         '-P:11', '-P:12', '-M:13', '-M:14', '-P:15']
        intervals = [Interval.parse(i) for i in interval_strs]
        p = DiatonicPitch(4, 'G')
        answers = ['G:4', 'F:4', 'Eb:4', 'D:4', 'C:4', 'Bb:3', 'Ab:3', 
                   'G:3', 'F:3', 'Eb:3', 'D:3', 'C:3', 'Bb:2', 'Ab:2',
                   'G:2'
                   ]
        end_ps = []
        for interval in intervals:
            end_p = interval.get_end_pitch(p)
            print(end_p)
            end_ps.append(end_p)
        for end_p, answer in zip(end_ps, answers):
            assert str(end_p) == answer
            
        # Negation tests
        interval_strs = ['P:1', 'M:2', 'M:3', 'P:4', 'P:5', 'M:6', 'M:7', 'P:8', 'M:9', 'M:10', 'P:11',
                         'P:12', 'M:13', 'M:14', 'P:15',
                         '-P:1', '-M:2', '-M:3', '-P:4', '-P:5', '-M:6', '-M:7', '-P:8', '-M:9', '-M:10', '-P:11',
                         '-P:12', '-M:13', '-M:14', '-P:15']
        intervals = [Interval.parse(i) for i in interval_strs]
        count = 1
        for interval, i_str in zip(intervals, interval_strs):
            neg_interval = interval.negation()
            if count <= 15:
                assert str(neg_interval) == ('-' if count > 1 else '') + i_str
            else:
                assert str(neg_interval) == i_str[1:]
            count += 1
            
        interval_strs = ['-P:1', '-M:2', '-M:3', '-P:4', '-P:5', '-M:6', '-M:7', '-P:8', '-M:9', '-M:10', '-P:11',
                         '-P:12', '-M:13', '-M:14', '-P:15']
        intervals = [Interval.parse(i) for i in interval_strs]
        p = DiatonicPitch(4, 'G')
        answers = ['G:4', 'A:4', 'B:4', 'C:5', 'D:5', 'E:5', 'F#:5', 
                   'G:5', 'A:5', 'B:5', 'C:6', 'D:6', 'E:6', 'F#:6',
                   'G:6'
                   ]
        end_ps = []
        print('+++++')
        for interval in intervals:
            end_p = interval.get_start_pitch(p)
            print(end_p)
            end_ps.append(end_p)
        print('-----')
        for end_p, answer in zip(end_ps, answers):
            assert str(end_p) == answer