On Sun, 28 Sep 2008 16:37:11 +0200
"Mr.SpOOn" <mr.spoon21@gma il.comwrote:
Sounds interesting. Will this be Open Source?
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?"
The other advantage here is that the notes can be given as numbers and
octaves (middle C would be (1, 3, 0) in the key of C for example) and
you can transpose by changing the argument when instantiating the class.
Couldn't the note class simply have a list of all the notes and have a
simple method calculate the actual pitch?
Seems easy given the pitch location indeces. Subtract the two and do a
lookup into a list of intervals. E.g: ["Unison", "Semi-tone",
"Second", "Minor third", Major third", ...]
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_n ame[higher - lower]
Note that lower and higher could be a note object that you have to
convert to integers first.
Hope this gives you some ideas.
--
D'Arcy J.M. Cain <darcy@druid.ne t | Democracy is three wolves
http://www.druid.net/darcy/ | and a sheep voting on
+1 416 425 1212 (DoD#0082) (eNTP) | what's for dinner.
"Mr.SpOOn" <mr.spoon21@gma il.comwrote:
Hi,
I'm working on an application to analyse music (melodies, chord sequences etc.)
I'm working on an application to analyse music (melodies, chord sequences etc.)
I need classes to represent different musical entities. I'm using a
class Note to represent all the notes. Inside it stores the name of
the natural version of the note (C, D, E, F...) and an integer to
calculate the accidentals.
class Note to represent all the notes. Inside it stores the name of
the natural version of the note (C, D, E, F...) and an integer to
calculate the accidentals.
'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?"
The other advantage here is that the notes can be given as numbers and
octaves (middle C would be (1, 3, 0) in the key of C for example) and
you can transpose by changing the argument when instantiating the class.
Then I have a class Pitch, to represent the different 12 pitch
classes, because different notes, such as C# and Db, belong to the
same pitch class.
classes, because different notes, such as C# and Db, belong to the
same pitch class.
simple method calculate the actual pitch?
In these classes I also have some arithmetic method to perform
additions or subtractions between pitches and integers.
>
I also need to represent intervals between notes. An interval must
have a degree (first, second, third), that may be represented with a
simple integer and a size counted in semitones. Then, with these
informations it can retrieve its name, for example: perfect fifth.
additions or subtractions between pitches and integers.
>
I also need to represent intervals between notes. An interval must
have a degree (first, second, third), that may be represented with a
simple integer and a size counted in semitones. Then, with these
informations it can retrieve its name, for example: perfect fifth.
lookup into a list of intervals. E.g: ["Unison", "Semi-tone",
"Second", "Minor third", Major third", ...]
The degree is calculated between natural notes. So the degree of
Interval(C, E) is "third", or 3. This may be simple, if I put the
notes in an ordered sequence. But, when I have to calculate, for
example Interval(E, C). It should count till the end of the sequence,
so if I have:
>
C D E F G A B
>
after the B it should continue with C. I'm not sure how to implement
this. Is there a suitable data structure for this purpose?
Interval(C, E) is "third", or 3. This may be simple, if I put the
notes in an ordered sequence. But, when I have to calculate, for
example Interval(E, C). It should count till the end of the sequence,
so if I have:
>
C D E F G A B
>
after the B it should continue with C. I'm not sure how to implement
this. Is there a suitable data structure for this purpose?
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_n ame[higher - lower]
Note that lower and higher could be a note object that you have to
convert to integers first.
Hope this gives you some ideas.
--
D'Arcy J.M. Cain <darcy@druid.ne t | Democracy is three wolves
http://www.druid.net/darcy/ | and a sheep voting on
+1 416 425 1212 (DoD#0082) (eNTP) | what's for dinner.