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

Scale/Mode Meta #2020

Open
pikurasa opened this issue Jan 8, 2020 · 3 comments
Open

Scale/Mode Meta #2020

pikurasa opened this issue Jan 8, 2020 · 3 comments

Comments

@pikurasa
Copy link
Collaborator

pikurasa commented Jan 8, 2020

This is what I would like to tackle this year. Perhaps, it is a GSoC project, but first let's try and come to agreement on a design.

Of all of Music Blocks features, I am least satisfied with our current design for scale and mode. I have spent much time thinking of why that is and will start here by breaking the problem into pieces.

I have identified three different categories of features that benefits Music Blocks as a visual programming language for music.

  1. Utility to assist user in making code in a particular key. Right now we have many examples in C major mainly because it is the easiest key to code. A feature such as the one proposed in Choose Key in Menu; Changes Central Options in Pitch Pie Menus #1957 would help users code in other keys just as easily as they currently are in C major.

  2. As a framework. Like our "Meter" block does nothing on its own, it would be nice to have a block that specifies a simple key choice** but does nothing else by itself. This does a few things: a) it allows the user to state "This piece (or section) is overwhelmingly in this key center", and b) specifies a framework from which a utility could be implemented.

For meter block, for example, we have "on strong/weak beat do" which creates utility from the framework specified by the meter block.

For example, #1705 would listen to the key block at this level.

Also, Lilypond output would only be affected by the key block at this level.

** I say "simple key choice" because I think it should be limited only to common 7 note keys.

  1. As a utility in and of itself.

Our current mode/key block does a good job of this. It changes the behavior of the pitches -- whether they be "Scale Degree" or "Solfege" with "Movable Do", or "Step Pitch".

In fact, when I think of it, we may even have created a kind of "advanced transposition" feature. It works very nicely when creating sequences like the one in the second half of this do-re-mi example where a simple transposition feature does not properly reframe the notes (but the shape is otherwise the same). However, its output in Lilypond is overstated as the key has not actually changed -- it does not sound "outside of C major".

Possible Solutions:
For 1, it is its own feature yet to be implemented.
For 2 and 3, I am tempted to say that we need two blocks: a "key block" that is simple with only the common 7 note scale choices; and an "advanced transposition" block that is used to transpose snippets of music in a more nuanced way. The latter can have all the functionality of our current mode block. Perhaps it is a clamp like our "invert" block.

I think there is more work and research to do (e.g. implications for mode widget) to come to an agreeable design, but hopefully I have identified something important we can work from.

This issue is related to #1223

@pikurasa
Copy link
Collaborator Author

pikurasa commented May 8, 2020

@aviral243 Please read this issue and the issues linked inside (if you have not done so already)

@aviral243
Copy link
Member

@pikurasa I gave this a shallow read before. I'll read it again in light of new information.

@pikurasa
Copy link
Collaborator Author

It might help if we agree to think of "scalar" and "modal" differently. So far, my best definitions are:

Scalar Modal
Degrees 1-7 are all defined without "overskewing" Possibly a subset or superset of scale (or just the common "church modes", which overlap completely with scalar).

This may need some tweaks, but below is a chart of all the systems that have to scale (fixed/movable) and mode ("modal", which is inherently movable). I hope that this will help to keep us organized as we work on this issue.

Block(s) Fixed Movable Modal
Alphabet Pitch Alphabet Not movable Modal can be defined (after) for modal blocks functionality
Solfege Fixed Do Default for Solfege Modal can be defined (after) for modal blocks functionality
Solfege and Movable Do N/A (Movable Do) Specified via "movable" block set to Do Modal can be defined (after) for modal blocks functionality
Solfege and Movable La N/A (Movable La) Specified via "movable" block set to La Modal can be defined (after) for modal blocks functionality
n^th modal pitch N/A N/A Notes chosen by specified mode (from "set key" block)
Scale Degree N/A (needs some reference, otherwise defaults to default reference of c major) Works just like Movable Do Modal can be defined for modal blocks functionality
Scalar Step --> "Modal" Step** N/A N/A Modal motion up and down (or 0) by number
Scalar Interval --> "Modal" Interval** N/A N/A Modal interval up and down (or 0) by number
Scalar Inversion --> "Modal" Inversion N/A N/A Modal inversion around a specified axis

**We may consider renaming these. We do not need different "scale degree" versions of these, as the issue with "scale degree" and "movable do" had more to do with the input not matching the output which is not an issue with these blocks.

For these charts, I am ignoring "pitch number". I think that all the blocks and functionality for "pitch number" has been well-defined and we have not confused any nomenclature/functionality.

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

No branches or pull requests

3 participants