sorry about that - here you go - this one should work!
a = PtInterval(3, \major) + P(Interval(3, \major)
a.degree // 5
a.quality // \augmented
PtInterval {
classvar rawIntervals = #[0, 1.5, 3.5, 5, 7, 8.5, 10.5, 12];
classvar <perfectIntervalQualities, <imperfectIntervalQualities;
var <degree, <quality;
*initClass {
perfectIntervalQualities = (diminished:-1,perfect:0,augmented:1);
imperfectIntervalQualities = ('doubly-diminished': -2.5, diminished:-1.5,minor:-0.5,major:0.5,augmented:1.5,'doubly-augmented':2.5);
}
*new{ |degree quality|
^super.newCopyArgs(degree, quality)
}
semitones {
^( rawIntervals[ degree - 1 ] +
rawIntervals[ degree - 1].isInteger.if{
perfectIntervalQualities.at(quality)
}{
imperfectIntervalQualities.at(quality)
}
)
}
+ {|that|
var outSemitones, outDegree, outQuality, rawInterval;
outSemitones = this.semitones + that.semitones;
outDegree = that.degree + degree - 1;
rawInterval = rawIntervals[ outDegree - 1 ];
outDegree.postln;
rawInterval.postln;
outQuality = rawInterval.isInteger.if{
perfectIntervalQualities.findKeyForValue(( outSemitones - rawInterval ).asInteger )
}{
imperfectIntervalQualities.findKeyForValue(( outSemitones - rawInterval ).asInteger)
};
^PtInterval(outDegree,outQuality)
}
}