Chords, a Plomp-Levelt analysis
Status: draft.
We’re hoping to analyze chord consonance/dissonance using the ideas behind Plomp-Levelt curves.
Plomp-Levelt analysis shows sounds are perceived as dissonant when tones, including harmonics, are “near-misses” of each other. If many tones land right on top of one another, then the overall sound is “consonant”. If many tones land near each other, then the overall sound is “dissonant”.
So we can analyze chords as if they were “polyrhythms in frequency”, because each harmonic note “beats” an evenly-spaced (in frequency domain) of tones. Since Plomp-Levelt have shown that dissonance and consonance arise from clashing near-misses of tones, we should expect more consonant chords have more “notes” hitting at the same time.
Basics: intervals
Octaves: (“2:1 polyrhythm”)
Fifths (3:2 polyrhythm)
Fourth, 4:3:
Major third, 5:4:
Minor third, 6:5:
Chords
Triads
Major triad. A 5:4:z and x:6:5. That’s 15:12:10 overall:
Major triad, first inversion. A 4:3:z and x:5:4. That’s 20:15:12 overall:
Major chord, second inversion. A 6:5:z and 5:y:3. That’s 30:25:18 overall:
Major chord as root-fifth-tenth. 3:2:z and x:5:3, overall 15:10:6. Fewer “notes” than basic major triad. Less rich, but more consonant?
Minor chord. A 6:5:z and a 3:y:2. That’s 6:5:4 overall.
Diminished chord. Messy, depends on choice of tritone! Here, 6:5:z and 36:y:25, overall 36:30:25. We don’t show that far.
Sevenths
Dominant seventh, 5:4:z:w, 3:y:2:w, 9:y:z:5. That’s 45:36:30:25, (matching the dimished chord and adding a 45:36 = 5:4 on top). We don’t show that far.
Major seventh, 5:4:z:w, 3:y:2:w, 15:y:z:8. That’s 15:12:10:8. Compare this to the dominant seventh, and the difference is quite clear.
Minor seventh, 6:5:z:w, 3:y:2:w, 9:y:z:5. That’s 18:15:12:10. Again a much simpler ratio than the dominant seventh. This seems a decent explanation for why people think the major and minor sevenths are “stable” and the dominant seventh wants to be resolved somewhere.
Resolutions
V7 -> I in first inversion:
Appendix
Code
Code
function makeDiagram(chords, xMax)
{= xMax || 1500;
xMax const svg = html`<svg width=100% viewBox="0 0 990 ${chords.length * 30 + 30}"></svg>`;
.select(svg).append("rect")
d3.attr("width", 990).attr("height", 30 * chords.length).attr("fill", "#eee");
const chordGroups = d3.select(svg)
.selectAll("g")
.data(chords)
.enter()
.append("g");
const x = d3.scaleLinear().domain([50, xMax + 50]).range([0, 990]);
const y = d3.scaleLinear().domain([-0.5, chords.length - 0.5]).range([30 * chords.length, 0]);
chordGroups.append("line")
.attr("x1", 0).attr("x2", 990)
.attr("y1", (d, i) => y(i)).attr("y2", (d, i) => y(i))
.attr("stroke", "gray");
const markGroups = chordGroups
.selectAll("g")
.data((d, i) => d3.range(1, 50).map(x => ({ x: x * d, y: i }))) // 30 harmonics
.enter()
.append("g");
markGroups.append("circle")
.attr("r", 2)
.attr("fill", "black")
.attr("cx", d => x(d.x))
.attr("cy", d => y(d.y));
return svg;
}
Notes
Discouraging: most of this ends up just being “simple ratios sound consonant”. We now have an explanation for why, but the thing itself was already known.
So maybe we need to include even temperament here since they’re not simple ratios but they can get close enough to just that our ears can’t tell. This will require taking the actual Plomp-Levelt curve into account for each note.
We can also take the Pythagorean tuning and predict how chords using wolf intervals will sound dissonant.
Maybe we can do this analysis with closed-tube wind instruments, since they produce a different overtone series? And then we compare that to fully-harmonic instruments?
TODO: compute clashes among tone pairs.
Ideas
What happens if instead of a harmonic sound, we play a super “fat” sound by including a large amount of non-harmonic tones very near one another, so that a dissonance is “lost”? Hmmm…