[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