Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Voicing method names #229

Open
felixroos opened this issue Nov 15, 2020 · 4 comments
Open

Voicing method names #229

felixroos opened this issue Nov 15, 2020 · 4 comments

Comments

@felixroos
Copy link
Contributor

felixroos commented Nov 15, 2020

Let's use this issue to discuss the naming of the methods for #224

Voicing

  • search: find all possible voicings for a chord
  • get: get best voicing for a chord (with voice leading to lastVoicing, if any)
  • analyze: analyze a single voicing for some helpful properties
    • notes (all notes)
    • topNote (highest note)
    • bottomNote (lowest note)
    • midiAverage / midiMedian (sum of each notes midi divided by number of notes)
    • spread (interval from bottom to top)
    • intervals structure of intervals (like in dictionary)
    • averageDistance (average of all intervals between notes)
    • allIntervals (intervals from each note to each other) => there is some name for this I cannot remember
  • analyzeTransition / analyzeVoiceLeading
    • topNoteDiff (difference between top notes in semitones or intervals or both)
    • bottomNoteDiff (difference between bottom notes in semitones or intervals or both)
    • midiAverageMovement abs of midiAverage difference

VoicingDictionary

  • lookup (TODO: not documented yet) get the interval sets for a given chord symbol (alias support)

VoiceLeading

  • topNoteDiff lead to the voicing with the smallest top note movement

Eventually, a name for #228 is also needed:

  • VoicingDictionary.generator (get function that can generate voicings)
  • e.g. VoicingPermutation.generator as another generator

=> 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
Copy link
Collaborator

danigb commented Nov 15, 2020

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:

  • VoiceDictionary: a dictionary of voices (get, all, add, remove)
  • VoiceChords or ChordVoices: given a chord, find chord voicings (including: search, get... although still don't get why we need two functions)
  • VoiceAnalysis: analysis of single note voices in context (the ones you mentioned above)
  • VoiceLeading: create transition of voices (leadTopNoteDiff)
  • VoiceLeadingAnalysis: analysis of transition of voices (same)

@felixroos
Copy link
Contributor Author

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:

  • search gives all possible voicings (could be used for chord detection or just a listing for education)
  • get combines search with voiceLeading. Essentially just sugar, but simplifies generating multiple harmonious voicings in a row + is more friendly for beginners or users who just want a voicing

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
Copy link
Collaborator

danigb commented Nov 19, 2020

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
Copy link
Contributor Author

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants