RFC: working on making chord naming/chordList more consistent

I'm ashamed to say I stepped away from this conversation once I realised how complex it was!

As a practical suggestion that leverages existing work, an adaptation of the Lilypond syntax looks good to me. I can't find much there that is musically contentious, and it covers the basics well. There could be some aliases as well, so that something like the very common half-diminished (minor seven flat five) chord is easier to write.

The biggest problem for practical music making I'd say is to do with extended stacks of thirds. In the abstract, a dominant 13th chord contains seven different notes. In practice, this is hardly ever the case: typically a 13th chord would appear as one of quite a small number of idiomatic voicings of four or maybe five notes.

What's really really missing from chord scale theory – and this is a bigger question than just naming chords – is any sense of voice leading: the horizontal connection between notes in chords. I used to spend a lot of time explaining to students the right and wrong way to move between C, F and G:

Screenshot 2021-01-12 at 09.19.35

I think that it is worse than that because the predictibility and rigidity of chord-scale theory is now engrained in some musical genres because most musical systems from the 1980-2000 era were using them as an easy way to allow the user to harmonize stuff and do music intuitively without thinking about the subtleties of voice-leading. I'm thinking about all these wonderful machines like grooveboxes (Korg Electribes and so on) or early user-friendly musical sequencers. As of today, digital audio workstations regularly get patches and updates adding a scale module, a chord generator module, and so on. The trend of exploring microtonality is also very often a matter of exploring even more scales and rigid structures.

A lot of Tidal users, including myself, are now in love with these harmonic textures that consist in ramping up and down a scale, superposing them, arpegiators and all that stuff. It is part of the sound of electronic music as a genre and that's great (Laurie Spiegel - The Expanding Universe || Kraftwerk - Das Model). It is absolutely necessary for making techno or rave music. Sometimes, these scales or ready-made chords are also cool to explore harmony as a "timbre generator".

However, I guess that the door should stay open for a computer language that can speak about voice leading and horizontal thinking of music. Tidal is already pretty good for that. It is almost a Counterpoint-Ready Machine (think about retrograde, arithmetic transposition, speeding up or down, etc..). You can already talk about notes as single entities (hello c3). It is now just a matter of text-as-interface or end-user representation of musical things.

Sorry for the long message, I find this subject very pleasing to discuss as it unravels a lot of things both important for music theory and computer representation of things, ahahaha.

4 Likes

Yeah I've been thinking about this a bit too - the voicing problem I think could be solved in a brute force fashion by just naming/writing them.
I'm not a pianist, but I expect we could get a decent set of <quality><extension>ov (ov=open voicing) named chords without too much difficulty
Similarly, we could do a brute force set of <quality><extension>sv (sv=shell voicing) chords which would copy common guitar patterns

So I misread this initially, thinking you meant missing from tidal - now I don't have any tertiary (or particularly formal) music training of any kind, so I can't comment on what's in and out of syllabus' - voice leading is covered very early on in all the jazz bass books I read though.
For anyone else wondering about this in a tidal context, it's doable, and relatively trivial:

d1 $ note "<[c'major'iii, c4] [f'major'ii, f3] [c'major'iii, c4] [g'major, g3]>" # s "superpiano"

As per above, I think that for this particular example, tidal is already in great shape to do that - of course you need to understand the mechanics of voice-leading in order to write it - but this is no different from having to do it on a piano or guitar.

No apology necessary (for me at least!), my training is mostly informal and it's excellent to have input from people such as yourself with a much broader scope of knowledge.

My only concern is that I find this notation to be very hard to parse mentally on-the-fly while improvising. It should be alright for pre-composed pieces, but I do not see myself using that for thinking in the flow.

c'major'iii can be shortened by its literal description: g3c4e4. By doing this, you see the bundle as well as its content, and there will be no black box anymore. It also opens up the possibility to change the octave quickly or to add any note or extension you can think about.

This solution is also faster to type, and less prone to errors on some keyboards (symbols always end up in crazy places on non qwerty keyboards).

I think that cognitive load should be taken into account for live music notation, and music theory abstractions cost brain activity time.

2 Likes

Yep, great point

As someone without musical training, I know what to expect from c'major'iii but g3c4e4 means little to me. I know they're notes but no idea how they work together

Both systems could cohabit. One for describing chords as a "bundle" (c'major'iii) as it is now and one for describing chords as "notes tied together" (g3c4e4) that would allow to think the details of voice leading. This should be able to accommodate everyone accordingly to their music theory fluency.

Doing so would also lower the burden of naming complex chords. If you really wish to use that crazy Stravinskian chord you've seen in an orchestral score, it is safe to bet that you also know how to spell it.

EDIT: this bipartition can also be justified by the cultural aspect I've mentioned earlier. We need to use crude major seventh chords if we wish to improvise house music flavor, etc...

2 Likes

To be devil's advocate, just so I can understand this better (I don't know what voice leading is).. If you're going to write out individual notes by hand, why use an algorithmic music system?

1 Like

voice leading has to do with taking two chords, and rearranging the order of notes in the second chord so that the chord tones in the first chord move to the closest (pitched) chord tones in the second chord - you can see in @tedthetrumpet 's example, the top stave has each subsequent chord jumping up and down the stave, the second (labelled "Right") has all the same tones in each chord as the first stave, but all the chord tones are pitched very close to each other (minimal movement to each subsequent chord).

ie The way the first chord is "voiced" leads you to a voicing for the second chord.

This is something that a computer should be able to calculate...

This is a very difficult question to answer because I don't think that there is a simple answer. Voice-leading is not about writing every note by hand, but a bunch of techniques used to write the smoothest possible transitions from chord A to chord B. Every music genre have its own kind of "best practices" for doing so, and there is always the fact that "voicing" chords in your own way is a part of developing a personal style (e.g. the voicings of McCoy Tyner on this very famous record, the voicings of Debussy, etc..).

While working with "raw" chords has its own set of advantages, writing bespoke chords is also incredibely valuable for algorithmic music. Let say that I want to play around with a very specific note cluster I found or with a very unlabelled chord I like. Tidal can allow me to write it down and pattern it in unexpected ways like we already do for other chords. I could arpegiate it, destroy it, mash it, repeat it, strum it, reverse it, and the list goes on. That's not something I would have been able to do if I had to figure out how (if possible) what is the closest matching chord from a huge list.

The point is that I'm not proposing to turn Tidal into a staff notation tool, but to add syntactic sugar for something that is already possible to do but not yet that smooth to write on the spot. It is currently possible to write what I propose with just a few extra spaces and commas here and there.

This notation is not about writing every note in the piece but more likely selecting the best flowers out there and making them sing by feeding them to the machine.

Edit: oh, and also because there so much more you can express by using an algorithmic system. Exploratory programming, firing thousands of notes, playing around with repetitions, transformations, patterns, etc...

3 Likes

accurate, lovely and disturbing at the same time

1 Like

yeah, i support this perspective. many interesting results come from unexpected combinations and/or happy accidents.

I'd like to think about the points in this discussion more carefully later but i thought I'd share my two cents: There's this idea of pitch class sets in the music theory community that encompasses unique chords and scales. There are a few ways two chords can be considered unique: under transpositional equivalence, under reflection equivalence, under octave displacement, or combinations of all three. I (and many others!) have done a combinatorial enumeration of all of them under transpositional equivalence and octave equivalence in 12-tone equal temperament; here is my list, all 351 unique chords and scales: https://github.com/TylerMclaughlin/the_turnip/blob/master/data/twelve_tone_pitch_class_sets_enumerated.csv
I gave a lot of them chord class names that make sense to me. These chords could be named more officially and comprehensively (algorithmically?) using Forte numbers, which is a standard that preserves all the information about pitch class sets.
https://en.wikipedia.org/wiki/List_of_pitch-class_sets.

2 Likes

OK this thread is one of my favorites ever. Especially with theses being written on the topic @jwaldmann and all that code-based investigation @xinniw . I'm particularly inspired by @Raph's acknowledgment of how chord presets in electronic music hardware instruments helped define the sound of genres of music like rave and house!

OK. I'm going to try to break the topic into four parts to make this easier to discuss.

  • User-friendly chord synonyms that symbolize collections of notes.

Lilypond chord names are nice for this because they're an established set of common names from a widely known standard for computer-based composition. However, these should probably just be symbolic 'starting points' because voicing and voice leading are key elements for composing. I think music written with lilypond chords in root position would be pretty terrible sounding most of the time. :shushing_face:

  • A consistent and expressive 'grammar' of synonyms,

By consistent, I mean such that if min7 exists, min9 exists. By expressive, I mean writeable but also modifiable: one would want to modify chords by adding extensions, removing notes, inverting, octave displacements. :slight_smile: What tidal already has in place is cool and does a lot of this.

  • A standard, comprehensive, and unambiguous representation of chords

Forte numbers and pitch class sets are comprehensive and unambiguous. They are not user-friendly but would make a "mathematically complete" backend for generative composition in twelve tone equal temperament at least. Synonyms like lilypond chord names could point to inverted versions of these pitch class sets.

  • An algorithmic way to do voice leading, without having to manually write out the notes.

@tedthetrumpet's 'Wrong' vs 'Right' post nails this point. Voice leading is basically 'economy of motion' meaning that most of the time, notes aren't jumping great distances. People like this I think because it simulates a human choir in which singers sing only within a range of pitches (e.g., bass, tenor, alto, soprano, google "blob opera" for a fun illustration). I have a few ideas for this that i'll inevitably code in python to maybe generate TidalCycles code, but to do this in Haskell is far beyond my abilities.

BTW if you like math and harmony and you don't know Dmitri Tymoczko's work on voice leading, you are seriously missing out: http://dmitri.mycpanel.princeton.edu/voiceleading.pdf. He even got a Science paper out of it!

Thanks for reading my lengthy and dense post!!! Looking forward to your thoughts. I'm happy to help in the ways i can.

7 Likes

This is a common-practice classical theory book way of seing things, and it's mostly valid in an academical context. The goal is most likely to learn the "spirit" or the "way of thinking" behind that rule. That's how we teach music in the western hemisphere but based on a very selective corpus of musical works from the mid XVIII to late XIXth century. Even if it is taught as the prescriptive way to do it, it will have consequences on the musical output you got if you follow the rules you've learned in class. There are nice books documenting this way of teaching/thinking the music (the name of Lydia Goehr is the one that comes to my mind). @tedthetrumpet was right to teach that because it's part of teaching musicians a common language they can share with others, but I don't think that the end-goal was to teach personal expression or stylistic development (correct me if I'm wrong!). Delegating voice-leading to an algorithm will more than often result in grammatically correct but very poor voice-leading choices (anyone remember the shitty Google counterpoint landing page a few months ago?). David Cope did some interesting works in that direction by spending decades trying to teach composition to computers, but it was by force-feeding already composed pieces (and already made compositional choices) to the computer. When people use that kind of voice-leading algorithm, it is often needed to ask a human to select the most musical results. In my opinion, that is something that would not work well with Tidal, because we need liveness and immediacy.

Tymozcko did great work with his work on voice-leading. It's really a breath-taking analytical framework that is really helpful to link together various fields of musical analysis (pop-music/jazz and art music for instance). However, I don't see that kind of framework as something that could apply well to Tidal. It's very mathematical, very abstract, and needs basically a lot of cognitive power to be manipulated with some success. Of course, I'm saying that as my personal opinion, but I think that the syntax should stay simple and transparent, with unambiguous words and symbols (everyone intuitively knows what fast or superimpose means and we can experience that by playing the pattern and get some idea). The transformational rules layed down by Tymozcko are quite hairy but dementially effective. I don't see how a syntax could be written for them though...

It's almost the same for Allan Forte numbers. They are exhaustive, comprehensive and unambiguous but basically really hard to reason about. They are sometimes used by jazz musicians as a way to dive into uncharted harmonic territories, so I guess that Tidalists could use them with the same intent in mind. I've already seen talented musicians shout out a pitch-class set in a jam session and it ended up alright. The cool thing is that they already have tiny, short and frightnening names (hello 6-z25B). If I remember well, Tymozcko proved that they are not exhaustive or could be refactored in a nicer way. They are also really easy to implement because they are just a bunch of numbers smashed into a list.

Again, just my opinion. No we shouldn't write out all the notes, only the ones that matter. Smooth voice-leading is most of the time just manually sliding one note to another for great effect, and the rest will turn out fine by the magical rules of harmony. I guess that doing live-coding is sometimes acknowledging that we can do better than the algorithm if we are inside the algorithm, tweaking it for fun and glory. It might be my way of imagining live-coding, but I like the fact that it is some kind of "manual override" inside an algorithmic process that can't do nothing without you pressing the keys. I would be terrified by an algorithmic automatic flute solo or transition chord I never wanted.

I have nothing to add on the other sub-topics you've mentioned.

EDIT: concerning automatic voice-leading. I learned a lot when my harmony teacher pointed out why Bach broke all the rules and went full crazy in bar 5 because it sounded better than the rules he totally mastered and helped to define. Also, like I've mentioned in a post a few days ago, jazz and contemporary music are most often not about economy of movement in voice-leading, but more about the textural quality of harmony (contrasts, oppositions, etc..).

EDIT2: diving into the chord naming rabbit hole :building_construction:

2 Likes

I think, reading all of this, I'm changing my mind. It seems to me that something not so far from what we have now, a set of what @RTylerMclaughlin calls 'user-friendly chord synonyms that symbolize collections of notes' is good enough for Tidal.

I'm not sure that Tidal needs to be able to work out voice leading and idiomatic voicings. I'm prepared to let go of the fact that 'c13' is going to have seven notes in it, and that simple triads are going to jump around in root position. If I want to do something better then I can think about it, and write out the needed pitches in the right octave. Which is already possible:

d1 $ slow 2 $ note "[g2, f, a, c, f5] [g2, f, af, b, e5] [c2, e, a, b, g5]@2" # s "superpiano"

(Aside: there is a similar problem with using 'dorian' or 'pelog' to refer to mere collections of notes. The latter in particular is a travesty of Javanese musical thinking.)

Given that we can already notate any set of pitches that we want, I'm not sure that the Forte notation adds much useful. Forgive my ignorance, but isn't that just about pitch class, ignoring octave? If so, pretty useless for writing conventional harmony. Still… might be fun to have I guess? I quite like the cryptic quality.

Thanks for posting the Tymoczko: I didn't know this. And, I can't follow any of it! I take it that, in principle, there may exist algorithms that would automagically give me nicely laid out chords that move smoothly. I'd love to have access to something like that to play with, not just in Tidal, but in, say, SuperCollider or MuseScore: a separate tool, perhaps? (Probably exists already: iReal Pro manages to busk chord voicings that are not terrible.)

@Raph, To use a bit of a 'snowflake' word, I was slightly 'triggered' by your characterisation of voice leading as being an academic concept only applicable to Western art music. I actually learned about the concept it through jazz – 'guide tones'. My understanding of the way notes move between chords is an embodied part of my musical practice, and that is the sense in which I wanted my students to understand it. BUT I absolutely agree that a rigid application of inappropriate classical voice leading rules can lead to a mistake in jazz: in the chord progression I gave above, the seventh falls, but the leading note doesn't rise.

Gosh, another long and perhaps edgy sounding post, sorry! I hope this is useful.

1 Like

To get started with that kind of things in a "general" and approachable way, there is a ton of applications that allow you to play around with a tonnetz which is a nice geometrical representation of harmonic space. If you feel that you like it, reading other books like Tymozcko's one will be a rewarding journey.

I wasn't trying to be rude or anything @tedthetrumpet! Sorry if I sounded harsh.. English is not my first language so I'm sometimes a bad judge for how I sound like. It looks like we have the same musical background: trained both in classical and jazz music. I do think that voice leading is central to most western art music and western music theories in general. The fact that we speak about "voice" is not innocent either. It is the legacy of applying those theories for the writing of polyphonic vocal music (liturgical to be more precise). Bach chorales for instance are the de facto standard for classical voice-leading. There is a notion of voice-leading in jazz but it is slightly different: people often talk about "guide tones", which is a nice way to name what jazz is doing. Suggesting notes, and building a rich world around them. Thelonious Monk used to play with both types of voice-leading. Take for example Monk's music. The first track is Abide with me, and the album name is a pun playing around the monkness of it all.

That's also my opinion. The only thing I would add is the glued notes syntax I suggested earlier.

1 Like

@Raph It's fine! I think we are very much in agreement here.

1 Like

Excellent content and ideas for discussion folks, thank you very much!

I'm quite short on time at the moment so trying to get a few things moving in my lunch hours at work. As such, I'm going to leave the feature discussion alone for the moment (consume that when time allows) and focus on sorting through a base set of chords which I will ask for a quick validation on shortly (hopefully) :slight_smile:

1 Like

First pull request is in, summary of changes:

chord review - sort, remove non-chords, tidy dupes
fix duplicated entries
add set of dominant extensions
add "addN" extension chords
add missing maj13 chord
remove non-chords, tidy dupes
name major chords consistently
name minor chords more consistently

It's a start... I've had some ideas about some chord helper functions and soforth that I'm going to explore now I think ... updates as I go (if I actually get anything working)