Music knowledge representation
mr.spoon21 at gmail.com
Mon Sep 29 20:29:44 CEST 2008
On Mon, Sep 29, 2008 at 6:49 PM, D'Arcy J.M. Cain <darcy at druid.net> wrote:
> On Sun, 28 Sep 2008 16:37:11 +0200
> "Mr.SpOOn" <mr.spoon21 at gmail.com> wrote:
>> I'm working on an application to analyse music (melodies, chord sequences etc.)
> Sounds interesting. Will this be Open Source?
Well, yes, I think.
> Have you considered having the object take a key option with default to
> 'C' so that you don't have to mark as many accidentals - or, more
> correctly, mark actual accidentals rather than always marking the
> "black keys?"
Well, one of the analysis task would consist in finding a possible
tonality from a set of note. Or, more useful, give a set of playable
notes over certain given chords.
> Couldn't the note class simply have a list of all the notes and have a
> simple method calculate the actual pitch?
That's not really how it works. There exists just 12 octave
independent pitch classes. This means that there is a pitch class C
with all possible Cs. There ambiguities with accidentals, because
different named notes fall in the same pitch class. The difference is
important for the musical theory, because C# and Db belongs to the
same pitch class (actually they are the same note, they sounds
completely identical -- because on the piano you play them pressing
the same key), but in a scale they have a very different role.
For example, the interval C F# is an "augmented fourth", because what
really matters are the natural note (C and F), and their distance if
4. Then it is augmented due to the #-
But the interval C Gb (Gb is the same as F#) is a "diminished fifth".
So I can't list all pitches.
> def interval(self, lower, higher)
> if lower > higher:
> # uncomment one of the two following lines depending
> # on the behaviour you want
> #lower,higher = higher,lower
> #higher += 12
> # could use some error trapping
> return self.interval_name[higher - lower]
> Note that lower and higher could be a note object that you have to
> convert to integers first.
I can't estabilish which note is higher, because all the analysis part
is octave independent. Anyway thanks for the ideas.
I think itertools is what I need.
More information about the Python-list