-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
SlipMode waveform visual for RGB GLSL #13002
Conversation
Did you consider to draw the whole waveform twice, half height stacked on each other? |
That was my first thought, yes, but I quickly decided against as I thought synchronising animation between the two would probably be more work that extend the renderer with more visual abilities. I guess if we factor in the implementation on each renderers, it might turns out to be less work.
Do you mean for the breathing animation around the slip point waveform? If yes, definitely agree: I've just hacked something together for now with a hardcoded ugly green, just wanted to gather some feedback before getting to work on something more polished :) |
2b02cdf
to
8a58627
Compare
Nice that you are addressing this! I had a hard time understand what was happening looking at the screen capture, and in the end I realised why: the start of track triangles are not part of the slip mode (which beat positions is). Is that intentional? How about another approach: draw the slipping waveform on top, using waveformrenderersimple, so it is a single color, which 50% transparency. Some comments (note, without looking at the code, so I don't know your current approach, it might very well be along the lines): Assuming the rendering with the normal play position and the slip position is done in the same waveform widget (and I think it should), there is no need to do any synchronisation. In
you can call
and you will get both positions synchronised. The widget has a stack of renderers, and you can easily add more renderers to this stack to render the slip mode, and tell these renderers to use the slipPlayPos instead of the truePlayPos. When not in slip mode, you just skip all those renderers. You can then decide whether you want to only render the waveform itself for the slip mode, or (part of the) additional layers as well, or whether you want them to overlay with transparency or draw them tiled. In other words, it would equally allow to do what I am seeing in the screen capture, what Joerg is proposing and what I am proposing. Apart from the synchronisation, using a single waveform widget with additional renderers makes sense because play mode and slip mode share a lot of information that is part of the widget (the waveform!), but also there is overhead in using a multiple widgets, as each has it's own QOpenGLWindow, so I would avoid that. (I have been thinking of using a single QOpenGLWindow for multiple WGLWidgets when possible: When multiple WGLWidgets combined occupy a single rectangle) Let me know if this explanation is clear enough. |
That's my fault. I've tested with that dummy audio file I use to test waveform correctness (monotonous tone from 20Hhz to 20Khz).
Yep I hadn't had implemented the pre/postroll triangle just yet. I just gave it a stab now (still incomplete with part of track missing on the slip waveform) Kooha-2024-03-26-13-38-26.mp4
Just to check I understood correctly, do you mean having it on top of the play waveform with transparency? I can think of two problem with this:
I guess it could be great to have renderer using different look for the slip visuals? Since it looks like renderer should implement this, I guess there is no technical limitation to make it look different in various waveform, so users may also gain more value out of using different renderers
Cool, that's exactly what I'm using :)
Sounds good. I will look at how easy to remove the currently hardcoded references to
Thanks, that was very clear. |
8a58627
to
28b49f9
Compare
I just rewrote everything using your feedback and I think it looks much better, simpler and easier! Let me know your thoughts (visual available on Zulip) |
Yes, this is the approach I had in mind! Nice! |
28b49f9
to
a17d8ec
Compare
a17d8ec
to
524eb44
Compare
This looks really good! |
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.
Thank you for this nice new feature. I have added some comments for improving readability.
WaveformRenderBeat::WaveformRenderBeat(WaveformWidgetRenderer* waveformWidget) | ||
: WaveformRenderer(waveformWidget) { | ||
WaveformRenderBeat::WaveformRenderBeat(WaveformWidgetRenderer* waveformWidget, | ||
::WaveformRendererAbstract::Type type) |
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.
Is using the root namespace :: required here? If yes we should workaround this name clash.
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.
Yes it - WaveformRendererAbstract
is defined both in src/waveform/renderers/waveformrendererabstract.h
and src/waveform/renderers/allshader/waveformrendererabstract.h
. Perhaps worth addressing the name conflict in another PR?
115ea94
to
a07530a
Compare
Unfortunately a conflict has been developed. |
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.
LGTM, Thank you.
Conflict solved now |
Thank you for this nice eye candy. |
Love this feature! The only oddity I've noticed is that the markers also "shift" to the bottom half when using a waveform that doesn't support this split view in slip mode: Screen.Recording.2024-07-22.at.17.15.47.mov |
This is due the work we had started with @m0dB to mutualise all the allshader waveform - I will try to finish implementing the effect on the other waveform type now that it should be easier! |
Created #13499 to keep track! |
This is an attempt to address the missing slip mode visual feature as requested in #8136
Other renderer will be addressed in different PRs.
TODO: