la-jarre-a-son / midi-jar

MIDI Jar is a tool box for musicians, learners, streamers, that want to route MIDI message between devices, and display a piano or chords while playing, and integrate it on a video or on a Twitch stream.
http://midi-jar.ljas.fr/
MIT License
65 stars 7 forks source link

Rootless voicing quiz? #36

Open l0ren opened 5 months ago

l0ren commented 5 months ago

Hi, great work on this! I'd love it if there was a way to support a quiz for rootless voicings common in jazz, and would be happy to try to help implement. Change would be to recognize the four expected intervals but not expect the root, during the quiz. Taking a quick look it seems like the "complexity" is used to filter chord types for the quiz, so adding a new type of quiz with a different subset of chord types might be more complicated than just adding a new list of intervals -- curious to know if you have considered this and have any advice for potential implementation.

Change might look something like this, in terms of the chord data, with the parentheses indicating that the root is implied. This seems like it would be reasonably straightforward to implement for the quiz but of course would not work for the chord recognition mode.

// '' Rootless Major 7th chords ['(1P) 3M 5P* 7M 9M', 'rootless major seventh added eleventh', 'maj7 M7 Δ7'],

// '' Rootless Minor 7th chords ['(1P) 3m 5P* 7m 9M', 'rootless major seventh added eleventh', 'maj7 M7 Δ7'],

// '' Rootless Dominant 7th chords ['(1P) 3M 5P* 7m 9M', 'rootless major seventh added eleventh', 'maj7 M7 Δ7'],

ArTiSTiX commented 5 months ago

Hello @l0ren !

Having new chord quiz modes is indeed in my mind and I already thought of this rootless mode (where it automatically implies the root is played). Another mode I would like to have is a way to train chord inversions (by requiring all chords to be played in a random inversion, or a specific one). Those modes would not require to change the dictionary (all chord have roots so, adding a « imply / root less mode » should be trivial). I just need to change the quiz to be less permissive, forcing specific inversions, disallowing omissions, and disallowing extensions of chords (and not granting points for partial chord). In my plans to improve the quiz, I would like to track the scoreboard (with a summary of a game), toggling off the « infinite games » to have an end screen after each play, and also adding a mode where you are forced to play the chord correctly before going to the next. And a time component to the gameplay could be interesting.

I paused a bit MIDI jar development to take some distance with the issue with the chord detection algorithm not giving satisfying results, but I think chord quiz improvements could be the next milestone.

Thanks for your suggestion, I’ll take some time to plan this for the future.

ArTiSTiX commented 5 months ago

Also, I have started to think about Chord Voicings in general for both the chord dictionary and the chord quiz modules.

Tonaljs includes a module dedicated to voicings but I did not dig into it yet. I think this could be something interesting to have a way to list/generate voicings for all the chords in the dictionary, and then having a way to train a specific voicing in the quiz. One possibility also, if the tonal module does not fits the need for voicing, would be to have some way to create your own voicings and train them specifically.

Something like [1, 7, 1, 9, 3, 5, 7] that could be mapped to voicings for any 9th chords. That’s an idea I am starting to think about.

Also, I may add a newbie mode for quiz, displaying the notes to be played on a keyboard, and a notation mode where only a staff chord is displayed, but I’m reluctant to do so without a proper handling of voicings.

Don’t hesitate by the way to tell me what you think about the inversions displayed in the chord dictionary module, because I found very limited examples of inversions for complicated chords (and some websites does not seem to show 3n+ inversions in a very useful way)

l0ren commented 5 months ago

Very cool! Thanks for the quick reply and let me know if I can help out once you decide on a direction. One potential easy change would be to just add a toggle for "rootless" in the quiz mode, and have it assume the root - that would get a good portion of the way towards having a functional quiz. The notation for the jazz voicings is different -- e.g. rootless jazz "seventh" chords have the ninth -- but that's not super important in terms of being able to practice the quiz.

ArTiSTiX commented 5 months ago

@l0ren yes, I suppose In jazz you don’t bother to always differentiate all alterations as you can go with anything you like that fits the melody or the emotions you want to express. So any m7 is a poor m9. That’s also why the chord quiz is very permissive on added alterations, currently if you are asked for a m7, you can play anything that has a m3 and a m7 (I don’t even remember if I disabled omissions or not), and progressively build upon that to reach maximum score. Currently the scoring grants higher score for chords with more additional intervals, and repetitions, and with the correct bass, it was not intended to encourage inversions, and specific voicings, it’s more oriented to encourage exploration, and self discipline. It’s a tool, not a method nor a reference. In fact I initially thought the chord quiz module as a random chord suggestion system that could be a support for improvisation, but it lacks logic to create meaningful chord progressions so I did not want to force all chords to be played correctly, as my own way to play it is to just try to play something cool with the suggestions (by forcing a key signature, otherwise it’s just random shit, completely unplayable in « hardest » modes…).

Next update should diversify this, as I am willing to work my voicings too.

sreich commented 5 months ago

I'd also be interested in this feature, and more jazz oriented quiz accomodations, as I progress further into that study 😄

I also like the idea of improv quiz practice too and other things that I can hit up in my daily practice to really challenge but guide me, as a beginner

l0ren commented 1 month ago

Hi @ArTiSTiX, I'm taking a crack at this enhancement, have made some good progress so far. I am curious if you have any tips on development/debug setup for this project - I'm currently using VSCode and am not finding it very helpful when there are issues -- would appreciate any tips that you have. As an example, I've made a change that breaks things and the UI loads but then is stuck with "Game will start" message, but I can't seem to get VSCode to break or to get log output working.

Best regards, loren