samlletas / syxg50-control-panel

JSFX plugin for controlling the Yamaha S-YXG50 synth.
6 stars 1 forks source link

Overview page #11

Closed mkruselj closed 19 hours ago

mkruselj commented 1 month ago

This could be a neat v3 feature!

Make Overview the main page instead of Voice Catalog. This would be a 16 part mixer where you can adjust receive channel, volume, paning, transpose, FX sends and which patch is loaded in every part (this would probably have to be a sort of dropdown menu instead of something looking like the current Voice Catalog, I suppose gfx_showmenu() could be useful here). Could also show Bank Select MSB, LSB and Program Change numbers here too.

If there is room also put filter cutoff/resonance offsets, poly/mono, portamento and key/vel limits. Could be a really nice window into the whole thing. I would use a nice monospaced font here (Roboto Mono perhaps?).

EDIT: I suspect we will have to use the shorthand names here again, haha!

mkruselj commented 1 month ago

ASCII mockup incoming...

          PART  |    1     |    2     |    3     |    4     |    5     |    6     |    7     |    8     |    9     |    10    |    11    |    12    |    13    |    14    |    15    |    16    |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
  MIDI Channel  |    1     |    2     |    3     |    4     |    5     |    6     |    7     |    8     |    9     |    10    |    11    |    12    |    13    |    14    |    15    |    16    |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
          Name  | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno | GrandPno |
       Program  |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |
      Bank MSB  |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |
      Bank LSB  |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
          Mode  |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |   Poly   |
     Transpose  |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |
    Portamento  |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |   Off    |
    Porta Time  |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |    0     |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
      Key High  |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |    G8    |
       Key Low  |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |   C-2    |
      Vel High  |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |   127    |
       Vel Low  |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |    1     |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
   Reverb Send  | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider |
    Delay Send  | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider |
Variation Send  | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
           Pan  | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider | H Slider |
        Volume  | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider | V Slider |
                |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |          |
samlletas commented 1 month ago

Something like this would be amazing (it reminds me of the Sound Canvas VA plugin). I can see this being specially useful for people using a single S-YXG50 instance for the entire project, of even for layering multiple voices.

I would like to keep the Voice Catalog tab since a dropdown would make the process of selecting voices a bit slower, leaving the user the option to use either.

As for the monospaced font, I would suggest to use a font included in Windows so that users don't need to install anything else to use the control panel. And yeah we may need to bring back the shorthand names haha (or perhaps we could use the full names but split them by space over multiple rows).

The codebase might need some rework before this (e.g. table parsing code is coupled to GUI logic). My plan for the initial v3 release is to focus on breaking changes and improvements, but this could be a nice feature for a later v3.x release :)

mkruselj commented 1 month ago

Oh no no no of course Voice Catalog tab would stay! It's just, when on THIS page, you would select sounds with regular OS dropdown menu, since I think that's probably easiest to implement. Ofc if you wanted a custom menu (like what Saike does in Filther, say), no argument there, but it sounds like a lot more work tbh ^_^;

Regarding font, I was under the impression that we could bundle a free font along with JSFX and that it could open it on the fly. Not sure why, it would be very Cockos-like! But if that's not the case then, oh well.

samlletas commented 4 weeks ago

Ah got it! I misunderstood that the Overview tab would replace the Voice Catalog tab so my previous comment was more about keeping both voice selection options rather than a custom menu, I think that gfx_showmenu() might be the way to go too :)

Looks like gfx_setfont() only supports loading system fonts at the moment unfortunately.

mkruselj commented 4 weeks ago

No matter, we can render our own monospaced font as a sprite then, I suppose!

samlletas commented 3 weeks ago

I did a quick mockup on my image editor program:

overview-vertical

At the current window size (750x750) it looks a bit cramped (voice name barely fits and is too small), we could probably increase the window width or split the parts in two pages (1-8 and 9-16) but I think being able to see all 16 parts at once is nicer.

Another option could be to use a horizontal layout (1 row per part) similar to how Sound Canvas, XG Manager and XG Works do it. With an horizontal layout it may not even be necessary to bring back the shorthand voice names.

samlletas commented 3 weeks ago

Mockup for horizontal layout:

overview-horizontal

I think both have their pros/cons, vertical looks nicer and has better spacing between parameters, and horizontal has enough space for full voice names.

samlletas commented 3 weeks ago

A third option could be to mix both like Midi Quest, horizontal for voice names and vertical for everything else:

image

EDIT: Giving it a bit more thought, I really like the vertical layout with full names split in multiple rows, e.g:

overview-vertical-full

mkruselj commented 3 weeks ago

My vote goes for horizontal layout like Sound Canvas! Don't get me started on the UX sins of MIDIQuest 😛

But yes, I think we should add a bit more width to the whole GUI, because those columns are a bit cramped, there should be a bit more margin around the numbers (and I'm not sure if the longest voice names would fit in that area). For example I doubt C#-2 would fit in the alloted area. There needs to be more width. 780 px probably enough? Worth a shot.

I would also use horizontal sliders for pan, for nicer visualization of where things are in the stereo field.

And voice names should be left aligned there, I'd say.

Pretty cool mockups!

samlletas commented 2 weeks ago

Is Midi Quest that bad? Haha! I found it when looking for references of other similar plugins and thought it was interesting how they mixed horizontal/vertical layouts.

Yeah having a bit of extra space for the columns in the horizontal layout would make sense, with more space we could use a bipolar slider for pan. The longest voice name "Detuned Percussive Organ" barely fits there so more pixels wouldn't hurt.

What do you think about having two switchable modes? "Mixer" and "Performance" with different columns each, e.g:

Mixer could have: Part | Channel | Name | Cutoff | Resonance | Attack | Decay | Release | Reverb | Chorus | Variation | Pan | Volume

And Performance: Part | Channel | Name | Mode | Portamento | Porta. Time | Transpose | Detune | Key Low | Key High | Vel Low | Vel High

I would suggest to remove Program | MSB | LSB columns for extra space, personally I see not much use for those since the voice can be changed with the dropdown menu anyways :)

mkruselj commented 2 weeks ago

Yeah we could remove Prog/MSB/LSB columns, they are not super important for the end user.

Good thinking there on Mixer/Performance views, that would also spare us some columns and make things easier on the eye. Agreed!

samlletas commented 1 week ago

Note: the commit above is unrelated and was referenced by mistake (looks like there is no way to undo it).

samlletas commented 3 days ago

All right, so I really liked the idea of the overview tab and looks like it will be included in v3 :)

The voices menu was causing CPU spikes (menus stall the gfx thread and the plugin was deadlocking), it should already be fixed but please let me know if you run into issues.

Oh by the way, increasing the window size was not necessary thanks to the switchable Mixing/Performance views!

mkruselj commented 2 days ago

Man, this is absolutely freaking fantastic! The overview page is so good :)

Maybe one thing I could mention as a slight UX annoyance is when you switch between Mixing and Performance veiws, the voice column shifts around. Not ideal... Maybe the Part column could be swapped with Chan column in Performance page? That could be good...

Another thing, and this is just managing redundancy. You have Vib Rate Vib Depth Vib Delay next to each other (spread across two rows). It would look nicer if we did it like so:

------ Vibrato ------
Rate    Depth   Delay

And then do the same for Key Low/High, Vel Depth/Offset and Porta Active/Time.

This could be carried over to Mixing page by adding Filter, Envelope and FX sections in there. Make sense?

samlletas commented 1 day ago

Glad to hear you like it!

And yes, both of your suggestions make sense, I pushed two commits attempting to address them.

mkruselj commented 1 day ago

That works! Two things: I would also put Dry under the FX section, and for Portamento I would say Active instead of Switch. Opened a PR for that :)

samlletas commented 19 hours ago

Merged, many thanks :)