[Tutor] comparing seqs by successive intervals

don arnold darnold02 at sprynet.com
Sun Jan 18 13:55:26 EST 2004


----- Original Message ----- 
From: "kevin parks" <kp8 at mac.com>
To: "don arnold" <darnold02 at sprynet.com>
Sent: Sunday, January 18, 2004 9:45 AM
Subject: Re: [Tutor] comparing seqs by successive intervals


> it would be used for comparing musical sequences to see if they are 
> related by transposition or inversion. Two musical sequences that have 
> different pitch classes are related by inversion or transposition if 
> their interval sequences are preserved. I would be using this to test 
> for that.

Interesting. Here's what I came up with:

def interval(seq):
    res = []
    for i in range(len(seq)-1):
        res.append((seq[i+1] - seq[i]) % 12)
    return res

def isEqual(seq1, seq2):
    int1 = interval(seq1)
    int2 = interval(seq2)
    
    numPlaces = min(len(int1),len(int2))
    if int1[:numPlaces] == int2[:numPlaces]:
        return True, int1[:numPlaces]
    else:
        return False, []
    
a = [5,7,8,11]
b = [1,3,4,7]
c = [1,3,4,7,15]
d = [1,3,4,8]
e = [2,4]

print 'a: %-20s  intervals: %s' % (a, interval(a))
print 'b: %-20s  intervals: %s' % (b, interval(b))
print 'c: %-20s  intervals: %s' % (c, interval(c))
print 'd: %-20s  intervals: %s' % (d, interval(d))
print 'e: %-20s  intervals: %s' % (e, interval(e))
print
print 'a == b : %d    match: %s' % isEqual(a,b)
print 'a == c : %d    match: %s' % isEqual(a,c)
print 'c == a : %d    match: %s' % isEqual(c,a)
print 'c == d : %d    match: %s' % isEqual(c,d)
print 'a == e : %d    match: %s' % isEqual(a,e)


[-- output --]

a: [5, 7, 8, 11]         intervals: [2, 1, 3]
b: [1, 3, 4, 7]          intervals: [2, 1, 3]
c: [1, 3, 4, 7, 15]      intervals: [2, 1, 3, 8]
d: [1, 3, 4, 8]          intervals: [2, 1, 4]
e: [2, 4]                intervals: [2]

a == b : 1    match: [2, 1, 3]
a == c : 1    match: [2, 1, 3]
c == a : 1    match: [2, 1, 3]
c == d : 0    match: []
a == e : 1    match: [2]

<snip>

HTH
Don




More information about the Tutor mailing list