Thanks! The yamaha bit is hilarious, hadn’t known about that either. But I have seen that before in French material, where Do 3 = middle C. I’ll go look that up in more serious sources at one point (currently I don’t have access to a decent online library).
Also occasionally I’ve seen (I think around max/msp, possibly the bach extension; maybe it’s more widespread in computer music?) an octave shift the other way around, where C5 = middle C = midi 60, which I guess makes sense if you want midi 0 to be C0… this is also mentioned in that dorico thread you posted.
I think for this it would make sense to decouple the octave designation (middle c = 3, 4, or 5) from the pitch class designation (e.g., is it c or do)…
Anyway the question would also be how exactly to include this in sc without a quark. Would be cool if they could be made into literals, so one wouldn’t have to enclose them in quotes, like it is possible for scale degree already (see scdoc, literals)… but I haven’t been able to figure out where in the code these literals are defined. Also, defining new literals might cause a bunch of trouble.
If I remember correctly, the middle C in CakeWalk was C5.
I also learnt the same in my teenage years, but recently I read what a French young wrote, they learnt middle C as do4. Strange… I can’t go any further because I can’t read French or Italian.
Is there a reason that I haven’t noticed to give the user freedom to define other types of chords? Wouldn’t it be as simple as modifying the dictionary?
I haven’t been that rigurous about it but I’ve mostly gotten my music theory from Schoenberg’s books as well as Steven Geoffrey Laitz’s “Complete Musician” book.
Hi, the user has all the freedom in the world to do that if using the Pharmony object instead of PChordProgression. PChordProgression is just a convenience class to easily make chord progressions. If you use PHarmony and define your own harmonies using semitone offsets, symbols (from the chord dictionary) or whatever then you can be as specific and custom as you want.
Here’s how to make a chord progression using intervals,
(
var harmony1 = [0, 4, 7, 11].asHarmony;
var harmony2 = [7, 11, 14, 18].asHarmony;
var harmony3 = harmony2.withInversion(\first);
var harmony4 = harmony2.withInversion(\second);
s.waitForBoot{
Pbind(
\ctranspose, Pseq([
PHarmony(harmony1),
PHarmony(harmony2),
PHarmony(harmony3),
PHarmony(harmony4),
], inf),
\dur, 0.25,
).play
}
)
Yeah you’re right but for exactly that reason I’m limiting the design of this package to classic western music theory for now because that’s what I personally need it for.
I’m not sure what you mean about accidentals here though? All code in the harmony toolkit works with semitones so you can easily make sharps and flats if that’s what you mean?
Yeah that’s beyond the scope of this package as mentioned above. I don’t have any intentions for making such a system. As I said this is for western music theory based stuff because that’s what I’m using it for.
But maybe it would not require too much change. Imagine that as a user passing a “color theme” to a program at runtime, and use those colors. You demonstrated that the implementation already allow something in this direction.
The problem is to make sure the theme will be enough to deal with all the syntax/symbols. That is, the theme must be a valid one. In Haskell that would mean a Kind Signature. With Patterns, one can leave this responsibility to the user, or figure out a way to do a basic test before using it (?).