-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
add stacked overview waveform rendering modes #15516
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
base: main
Are you sure you want to change the base?
add stacked overview waveform rendering modes #15516
Conversation
|
Did you verify the vertical scaling is as before (with RGB accelerated)? There some CI complaints. |
|
Please isolate the type changes, ie. remove the hotcue painting. |
| if (start) { | ||
| *start = end; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please also provide mono mode as the other types do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all three stacked functions now accept bool mono = false parameter
- mono mode: sums left+right channels, renders from bottom to top
- stereo mode: renders left channel (negative y) and right channel (positive y) separately
- consistent with existing drawWaveformPartRGB, drawWaveformPartLMH, drawWaveformPartHSV
Updated function signatures:
- drawWaveformPartStackedRGB(..., bool mono = false)
- drawWaveformPartStackedLMH(..., bool mono = false)
- drawWaveformPartStackedHSV(..., bool mono = false)
Updated all call sites:
- render() in waveformoverviewrenderer.cpp passes mono parameterwoverview.cpp
- uses default parameter (stereo mode)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Btw unnecessarily bloated ai response. All changes are visible in the commit/diff which will be checked anyway.
Just "done, please review" is okay ; )
implements two new overview waveform types that layer frequency bands on top of each other: - Stacked (RGB): uses RGB color scheme for low/mid/high bands - Stacked (Filtered): uses filtered color scheme for low/mid/high bands the bands are drawn in order (low → mid → high) so that higher frequency content appears on top, similar to the main waveform's stacked rendering mode. both modes work in deck overview widgets and library overview column. closes mixxxdj#13265
df6f8eb to
d2947b6
Compare
|
addressed review feedback:
total changes: 6 files, 288 insertions |
ronso0
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Stacked RGB almost LGTM.
Please remove the redundant HSV and LMH renderers. The existing ones are already stacking bands. Almost the exact same code.
Did you even look at it, or compared the renderings?
| // draw low band (widest) | ||
| if (low > 0) { | ||
| pPainter->setPen(lowColor); | ||
| pPainter->drawLine(x, static_cast<int>(-low), x, 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cast int to int?
you already implictly convert/promote form char to int above (pWaveform->getLow() et.al return char).
Btw char has been chosen to keep the waveform dataset small, as amplitude of each band / all is 0-255 and (unsigned) char can represent 256 values, 0-255.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah, right, so...
in part this is #14813 (maybe I got a bit wrong tho(?))
regardless, lets start with mixxx-git res/ and original Deere;
aand mind that there is also currently #14452 affecting things
oh and there is #12449
(I was about to mention #11837 too, but "mono" is the spatial, not a monochrome colour style, like Simple (and Filtered has a basis in, based on a one colour thing, tho scaled/shaded)
.
as is stands now with the large waveforms;
Filtered is deck colour (and this is also essentially the colour theme of Simple)
and the three waves are three shades of that colour in a Stacked three-layer form
HSV is, for all decks, shades of red, as shaded lines. the H means hue changes, so this is wrong
RGB has the colour theme of HSV, not RGB, so wrong
Simple is a monochrome waveform with the deck colour
Stacked is using the RGB colour theme, so wrong
this waveform is three audio levels/layers, each based on a filtered* signal* to get the three shapes/forms...
.
and as is stands now with the overview waveforms;
Filtered gives the deck overview waveforms the three-level three-shades using the deck colour, again
for the library, they are all orange - deck 2 colour - but they're not brighter in the middle like deck 2 overview waveform, so a bit wrong
HSV gives each deck a waveform in its colour, in the HSV alternating vertical line form, but its not changing Hue based, so wrong
RGB uses the hue based colour theme to both deck and library, so wrong
.
so when I want my non-RGB Stacked waveform that kinda emulates Rekordbox,
I go and set the three waveform 'Signal' variables in the theme, but how to select?
kinda by deduction one might think that (non-RGB) Signal means the Filtered preset
but Filtered is actually a Stacked-form representation of the "signal, filtered through the deck colour (which is based on the Simple preset colour style)"
.
so what to do?
file a bug
and use RGB vars to get my non-RGB style stacked-form preset to be displayed
all this being mostly why I was confused about thee.. state of the states
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First of all the accelerated QOpenGL waveform types look different than the legacy GL types.
And both are rendered differently than the static overviews.
The legacy ones are similiar to the overviews, so if your goal is the best match pick th elegcy ones.
Otoh your stacked RGB overview looks at least similar to the accelerated stacked RGB wvaform.
In Deere the default RGB colors are used.
Btw these can be set here in the Visual node:
<SignalRGBHighColor></SignalRGBHighColor>
<SignalRGBMidColor></SignalRGBMidColor>
<SignalRGBLowColor></SignalRGBLowColor>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was no response to my review though
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah, I went to bed, which I am still in :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the question is; do we expect RGB parallel to look the same as RGB overview?
given they both have the same name in the config, "RGB"
I'd say "roughly".
There are various RGB modes for the waveforms which already look different (even excl. the 'Stacked' version), and just one simple RGB renderer for the overviews.
So of course they won't look exactly the same.
Can't speak for the QML GUI, maybe it's more consistent there? @acolombier sure knows
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also can't tell you anything new about Filtered or HSV. I find them useless.
H in HSV is apparently the SignalLowColor (not to be confused with 'SignalRGBLowColor' 😆 😬 🤔 )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So bottom line is:
signal colors are not intuitive and need some documentation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can't repro
can you provide a screenshot please?
What values do you use?
aside from this being straight main and Deere, I have Visual gain at 1.3 Global
overview is Normalised to peak
oh lol
enough for me for today..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So;
terms(?);
- simple = 1 solid waveform, two-tone (on, off) colour
- stacked = 3 solid waveforms overlaid, simple or involving semi-transparency
- filtered = 3 stacked waveforms, one colour, plus two shades of
- RGB colours = either 3 solid/mixed colours, or a colour scale between those three colours
- SignalRGBHighColor, SignalRGBMidColor, SignalRGBLowColor
- "monochrome" = one colour, and either two-tone or many shades of
- "gradient" = each vertical line is one colour (high detail = thinner lines) from a mono or colour scale
- deck colours = only in Deere
- other themes have one for deck 1+2 another for 3+4
existing;
- Filtered
- Filtered main = 3-wave monochrome stacked, Deere deck colour / deck 1+2, 3+4
- Filtered overview = 3-wave monochrome stacked, theme/default Signal, orange
- HSV
- HSV main = monochrome gradient, theme/default Low (which is Red?)
- HSV main (w/o acceleration) = monochrome gradient, deck colours
- HSV overview = monochrome gradient, theme/default Signal, orange
- RGB
- RGB main = hue-changing gradient, scale between theme/default R, G, B
- RGB overview = same
- Simple
- Simple main = two-tone monochrome, deck colours / deck 1+2, 3+4
- Simple overview = doesn't exist
- Stacked
- Stacked main (standard) = stacked, theme/default R, G, B
- Stacked main (high detail) = blended stacks, theme/default R, G, B
new here;
- Stacked
- RGB overview = like stacked main (standard), theme/default RGB Stacked overview waveform? #13265
possible ideas;
- Simple
- Simple overview, two-tone monochrome, default/theme deck-agnostic (green?) everything the same
- Filtered
- Stacked
- Stacked both; 3-layers HSV deck/lib (Stacked HSV)? given H is static, ~akin to 3-layer (stacked) Filtered
- Stacked both; 3-layers HSV RGB (Stacked RGB)? using the RGB colours, three layers, but gradient form
- Track Colour based (or deck-agnostic green)
- User Defined (prefs.) User defined deck colours? Giving all skins dynamic deck colours, with a skin defaut? #14293 prefs exposed values / presets
- Stacked main = stacked, layering R, G, B but three gradient form
- Shaders
to think/edit about;
- SignalHighColor, SignalMedColor, SignalLowColor?
- used for? possible uses?
- &c.
I'll edit/finish this later..
| if (start) { | ||
| *start = end; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Btw unnecessarily bloated ai response. All changes are visible in the commit/diff which will be checked anyway.
Just "done, please review" is okay ; )

implements two new overview waveform types that layer frequency bands on top of each other, similar to the main waveform's stacked rendering mode.
Changes
StackedRGBandStackedFilteredtoOverviewTypeenumBehavior
Stacked (RGB): layers low/mid/high bands using RGB color scheme (red/green/blue)
Stacked (Filtered): layers low/mid/high bands using filtered color scheme
bands are drawn in order: low (widest) → mid (on top) → high (on top), so higher frequency content appears layered on top.
both modes work in:
Screenshots
TBD
closes #13265