Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Chord root

by YuckFoo (Abbot)
on Aug 09, 2003 at 21:05 UTC ( [id://282483]=note: print w/replies, xml ) Need Help??


in reply to Chord root

benn

Thanks for your algorithm and the pointer to the original. Very interesting stuff. A couple of comments.

First, I think it was a poor choice to reorder your interval list from (0,0,5,0,8,5,10,0,2) to (0,0,0,2,5,5,8,10) (really the original interval list is (0,0,5,0,8,5,2,0,10)). Two reasons for this. The ordering of the harmonics useful information. It aids in understanding the problem. It might also be useful for processing. One way of improving the algorithm is to give more weight to the more important harmonics, those at the front of the list. When you reordered, you lost this. Also when you reordered, you dropped a '0', there are four '0's in the first eight harmonics, not three.

That's the little stuff. More importantly, I think you didn't implement a key aspect of the original algorithm. It is not simply a count of the most common note to occur in the table. It is important that the root note be found in each column of that table.

Regarding the example Tristan chord f b d# g#, Ernst's conclusion that the root is c# is based on c# occurring in each column, that is, f b d# and g# are all harmonics of c#.

When you just count notes in the table, you came to an erroneous conclusion that g# is an alternative root, at least with respect to the original algorithm. f and b do not occur as harmonics of g#, at least not in the harmonics you are considering.

You found that the algorithm has a problem with minor chords. Of course it does. The minor third interval that characterizes the chord does not occur in the root note's harmonic series, at least in the first 17 items!

To make the algorithm *seem* to work for minor chords, you added back the redundancy that Ernst removed, counting the '0' three times and the '5' two times. Really all this did was put more weight on the fifth, which might be justified, but is also led you to pick g# in the Tristan chord because it now is counted more.

By the way, I can not claim to do any better with this harmonic series approach. I tried many variations without much improvement. So that makes this just some ramblings of a critic. Again, I enjoyed the effort!

YuckRoot

Replies are listed 'Best First'.
Re: Re: Chord root
by benn (Vicar) on Aug 10, 2003 at 01:01 UTC
    YuckFoo - Thanks for the critique - lots of good points. To take them in order....

    OK - guilty as charged. My 're-ordering' of the array could be confusing to anyone wanting to understand this algorithm...it was sheerly a side effect of experimentation ("I wonder what happens if I stick an extra '0' in there..."), but I'm sorry and I won't do it again :) (Oh, and the missing '0' too was simply the result of experimentation.)

    Originally, I did implement the algorithm exactly as stated, checking for existence in all columns. And indeed, it worked beautifully for major chords - but not for minor ones, for exactly the reason you describe. So, being a hacker by nature, I played around with it until it worked for both.

    You say it "seems" to work. I'm not pretending that I understand why sticking the 'redundancy' back in and switching from a column-based count to a simple frequency count works, but it does - certainly for all the examples I've played around with. The original algorithm, given "a c e" produces a root of 'D', which is...well, I hesitate to say "plain wrong", because I suppose it could be considered a D9 with no root or 3rd, but I prefer to spell that 'A minor'. This version produces 'A', which is, in my eyes, better. The 'Tristan' example gives *both* the C#9 spelling *and* the G#m6 spelling - also 'correct'.

    I'd love to see a proof of why this works (or not, as the case may be) - I *only just* understood why the original worked, and this version is simply the result of a few hours idly hacking around. I may have jumped to a number of erroneous conclusions - but I'm happy with the result - while the original algorithm doesn't handle minor chords, this one does. Again, don't ask me *why* (my best guess is something to do with relative minors), but it certainly works for every 3/4 note chord I've tried, (other than a 4-note diminished, which understandably confuses the hell out of it :) ).

    Cheers,
    Ben.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://282483]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (4)
As of 2024-04-25 12:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found