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

Manual: explain what the different waveform types are? #603

Open
mxmilkiib opened this issue Oct 27, 2023 · 4 comments
Open

Manual: explain what the different waveform types are? #603

mxmilkiib opened this issue Oct 27, 2023 · 4 comments

Comments

@mxmilkiib
Copy link

mxmilkiib commented Oct 27, 2023

Feature Description

I really don't understand the differences.

I'm autistic and blindly trying to figure this all out has been making me rather disregulated. I have just realised though this has been in part due to the bug mixxxdj/mixxx#12226, which has made trying to interpret the states quite the logic puzzle..!

Related: mixxxdj/mixxx#11915, mixxxdj/mixxx#11838, mixxxdj/mixxx#11615, mixxxdj/mixxx#6428

@Swiftb0y
Copy link
Member

Here's a simple summary for the parallel waveforms:

  • Empty: show no waveforms (might increase performance if your GPU is slow).
  • Simple: Draw the amplitude of the entire track in a single color
  • Filtered: draw the amplitude of each frequency band in its respective color (high: blue, mid: green, bass: red). Then overlay these separate per-band waveforms on top (high being on the top and low on the bottom).
  • HSV: I don't know to be honest. I've never used them and I don't really understand them.
  • RGB: Draws the waveform based on the amplitude of the entire signal but then colors each bar according to the amplitude of each frequency band.
  • RGB L/R: not sure, haven't analyzed the code much. @m0dB probably knows.
  • RGB Stacked: from waht I can tell, its like the filtered waveforms, but they're per-band waveforms have transparency so the top waveforms don't obstruct the information of the below waveforms.

The additional attributes (legacy, GLSL) just specify the technology the waveforms are using. Generally once you have chosen your preferred style, you should select the non-legacy GLSL waveforms as they should be the fastest. Those might not work on your hardware, which is why the legacy and non-GLSL waveforms are still provided. Those are usually more robust, but also more expensive to run since they deliberately don't make use of the same acceleration possibilities.

Does that summary make sense to you? Do you have suggestions before we add something like this into the manual?

@m0dB
Copy link

m0dB commented Oct 27, 2023

Some suggestions: use signal instead of track (entire track has the connotation of time), maintain the order of R G B, low instead of bass, mention L channel = up , R channel is down. Plus some changes for clarity / grammar (abusing quote):

  • Simple: Draw the amplitude of the entire signal in a single color, with the height of each bar showing the maximum amplitude of the samples corresponding to each pixel, based on the horizontal zoom. Draw the left channel upwards from the center axis (amplitude 0), draw the right channel downwards.

  • Filtered: Draw the amplitude of each frequency band in its respective color (red for low, green for mid and blue for high) and overlay these separate per-band waveforms on top of each other (low on the bottom, high on top)

  • RGB: Draw the amplitude of the entire signal but color each bar by combining the red, green and blue color components corresponding to the amplitude of each frequency band.

  • RGB L/R: Like RGB, but calculate the color value of the left and right channel individually, based on the frequency band amplitudes of each channel.

  • HSV: Represent the amplitude of the low and high frequency band by using saturation and brightness: if the high frequency band amplitude increases, the color goes towards grey (less saturation), if the low frequency band amplitude increases, the color goes towards black (less brightness). The mid frequency band is not used. The hue is fixed.

I think you are right about RGB Stacked (but I didn't port it, so not sure). I agree with you that HSV makes little sense. Even knowing what is behind it, I don't find it intuitive.

I wouldn't say the legacy and non-GLSL are more robust :-). Proposed:

The additional attributes (legacy, GLSL) indicate the technology used for the waveform visualization. The new GLSL waveforms use the most optimized implementation (for the waveforms themselves but also for the additional layers such as ranges and markers) and should generally be preferred. However, as the GLSL waveforms have been added only recently, the legacy and non-GLSL waveforms are still provided and have been tested on a wider range of hardware. The default is the RGB GLSL waveform type.

BTW, when it comes to amplitude, the description of the waveform types only holds really true, at least for the GLSL waveforms, when we merge mixxxdj/mixxx#12205 , which I created after investigating why, as @ronso0 pointed out inconsistencies in the amplitude here mixxxdj/mixxx#12115 . I didn't fix these inconsistencies in the legacy waveforms.

@m0dB
Copy link

m0dB commented Oct 28, 2023

On a side note, I think that there are much more interesting uses of the HSV color model than what is currently done with the HSV waveform type. See: m0dB/mixxx#7

@JoergAtGithub JoergAtGithub transferred this issue from mixxxdj/mixxx Dec 30, 2023
@m0dB
Copy link

m0dB commented Dec 30, 2023

@mxmilkiib I have just added some changes to my PR mixxxdj/mixxx#12466 to attempt to make the amplitude more similar across all waveform types. Still not perfect but similar. At last all the GLSL non-legacy waveforms now have the same amplitude (except for filtered, which is conceptually too different).

It is unfortunate that there are so many types, and we should really get rid of most of them. I have been digging deep to try to understand the code and but it's a bit of a mess with lots of legacy.

But until we do a full clean up, there will be some inconsistencies here. My recommendation is that you pick the GLSL non-legacy one and set a visual gain that works for you.

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

3 participants