tonaljs / tonal

A functional music theory library for Javascript
https://tonaljs.github.io/tonal/docs
3.78k stars 218 forks source link

Voicing method names #229

Open felixroos opened 3 years ago

felixroos commented 3 years ago

Let's use this issue to discuss the naming of the methods for https://github.com/tonaljs/tonal/pull/224

Voicing

VoicingDictionary

VoiceLeading

Eventually, a name for https://github.com/tonaljs/tonal/issues/228 is also needed:

=> name should be the same for each package that implements one.

I picked most of the above names by intuition, without really considering general naming conventions of tonal. I would need some feedback which names would need a change.

danigb commented 3 years ago

Great summary! Thanks.

First of all, I don't understand clearly your distinction between voicing and voice-leading package. Why topNoteDiff function can't be inside voicing package?

In a high overview, what I imagine from your list of functions is something more close to:

felixroos commented 3 years ago

First of all, I don't understand clearly your distinction between voicing and voice-leading package. Why topNoteDiff function can't be inside voicing package?

Mainly, I separated them because you told me to. But it could also easily be a part of voicing. On the other hand, I imagine having a lot more voice-leading strategies later. I also would not underestimate the complexity that hides here. One example: Voice allocations. If we transition between chords with a different number of notes (e.g [C, E, G, B], [D, G, B]), how do we know which voice should be dropped? Questions like these are really worth knowing when creating tight voice leading. As a possible use case I see autogenerated arrangements for specific constellations. Generally I see voicing as the umbrella package that brings all the other voicing related packages together ☂️

VoiceDictionary: a dictionary of voices (get, all, add, remove)

I don't know if typo or not, but I think it should be called VoicingDictionary, because a Voice is just a single note inside a voicing. Agree with get instead of lookup. I guess add / remove is only temporary for the session?

VoiceChords or ChordVoices: given a chord, find chord voicings (including: search, get... although still don't get why we need two functions)

I think both functions have a valid use case:

VoiceAnalysis: analysis of single note voices in context (the ones you mentioned above)

Also typo here?! Nevertheless, I think Voicing.analyze sounds more catchy than VoiceAnalysis.analyze ..

VoiceLeadingAnalysis: analysis of transition of voices (same)

Just realized that we also could use VoiceLeading.analyze here.. Note so sure if we should create that many exports..

VoiceLeading: create transition of voices (leadTopNoteDiff)

Do we really need to use the word "lead" twice?

I don't want to be picky, just giving you my thoughts. In the end I am happy to have the functionality as part of this lib, no matter how it's called specifically. Nevertheless, I would be happy if we could agree on something

danigb commented 3 years ago

Sorry, busy week! A quick update:

Mainly, I separated them because you told me to. But it could also easily be a part of voicing.

Yes, now I don't see the point of creating a new package (sorry for the mess). I thing we can keep everything under voicing until it get's too big.

I don't know if typo or not ...

Not exactly a typo. I was trying to create an idiom. I think it would be useful to differentiate between the voicing shape (the intervals) and the actual chord voicing (the voice notes for a specific chord).

I think both functions have a valid use case

Yes, agree. I just want to find a good naming (and I think the above ☝️ would help)

I don't want to be picky, just giving you my thoughts.

Sure!, please keep them coming 👍

felixroos commented 3 years ago

Yes, now I don't see the point of creating a new package (sorry for the mess). I thing we can keep everything under voicing until it get's too big.

Okay, I'll move voice-leading the voicing package.

I was trying to create an idiom. I think it would be useful to differentiate between the voicing shape (the intervals) and the actual chord voicing (the voice notes for a specific chord).

What about just calling it VoicingShape? We might even call it Shape, as a set of intervals can also represent the shape of a melody if played as a sequence. Btw, how are the interval sets of the chords called?