3
18
Fork
You've already forked LibreDJ
6

Better waveform rendering #31

Open
opened 2024年07月11日 01:28:16 +02:00 by obsoleszenz · 5 comments

There is this interesting egui project featuring different neat waveform/spectrum renderings:

https://github.com/aizcutei/nanometers

There is this interesting egui project featuring different neat waveform/spectrum renderings: https://github.com/aizcutei/nanometers

I am actually kinda loving the three-band spectrogram style.
I don't think it needs to be three band and i think I would prefer a spectrogram like view over the traditional stacked waveform that all everyone else uses. (One could totally do this as a texel shader in egui, gotta-go-fast)

I am actually kinda loving the three-band spectrogram style. I don't think it needs to be three band and i think I would prefer a spectrogram like view over the traditional stacked waveform that all everyone else uses. (One could totally do this as a texel shader in egui, gotta-go-fast)
Author
Owner
Copy link

Yes i also like it. Wonder if it would be interesting to do it 4 band or fft with couple bins. What is a texel shader? But yes would like to do it in a shader or very shader supported so that it's fast and light. The idea for the egui transition for now is to simply copy the tui. No additional ui widgets, just a ~1:1 copy. Do you have experience working with rust/egui?

Yes i also like it. Wonder if it would be interesting to do it 4 band or fft with couple bins. What is a texel shader? But yes would like to do it in a shader or very shader supported so that it's fast and light. The idea for the egui transition for now is to simply copy the tui. No additional ui widgets, just a ~1:1 copy. Do you have experience working with rust/egui?

sting to do it 4 band or fft with couple bins.

I have a hunch that having the bands be equal-power per track would be a neat feature.
I don't think it need affect the parameters for the equalizer but rather as a visualisation. Afaik, denon has bands that are
20-500, 500-2k(?), 2k-20k or somesuch.

> sting to do it 4 band or fft with couple bins. I have a hunch that having the bands be equal-power per track would be a neat feature. I don't think it need affect the parameters for the equalizer but rather as a visualisation. Afaik, denon has bands that are 20-500, 500-2k(?), 2k-20k or somesuch.
Author
Owner
Copy link

How would we achieve equal power here for different sized bands? Currently i'm doing some experimentally retrieved "gain staging" of the bands to somehow make them look good for my tracks. But it fails for certain tracks, and probably is just not the correct way to do it.
obsoleszenz/librecdj@e11ab4f7e9/crates/waveform/src/lib.rs (L92)

How would we achieve equal power here for different sized bands? Currently i'm doing some experimentally retrieved "gain staging" of the bands to somehow make them look good for my tracks. But it fails for certain tracks, and probably is just not the correct way to do it. https://codeberg.org/obsoleszenz/librecdj/src/commit/e11ab4f7e9d985a001a63985cf29af389cd8b1e9/crates/waveform/src/lib.rs#L92

You'd probably want to look into what's called Welch's method, calculate the power for some set bands, and then bisect until it has converged enough. but that's not for normalizing the levels - as displayed - in the bands, i was thinking that would be for setting the upper and lower limits of the different bands.
Maybe for gain staging you could do something like Ebur128 on the lows, low-mids, high-mids, highs?

You'd probably want to look into what's called Welch's method, calculate the power for some set bands, and then bisect until it has converged enough. but that's not for normalizing the levels - as displayed - in the bands, i was thinking that would be for setting the upper and lower limits of the different bands. Maybe for gain staging you could do something like Ebur128 on the lows, low-mids, high-mids, highs?
Sign in to join this conversation.
No Branch/Tag specified
main
overhaul_libplayer_process_slice
fix_pitch_riding
fixup_seek
feat_better_seek
fix_requested_bigger_frame
fix_player_unreachable
feat_better_vinyl_emulation
rewrite_jogwheel
fix_220
feat_denonsc2000_improvements
fix_self_heal_on_library_worker_crash
fix_multi_deck_relative_tempo_drift
feat_bpm_leader
fix_lofty_crash
update_lofty
better_libplayer_tests
feat_jump_to_next_prev_section
fix_loop_spinback
cleanup_libplayer
fix_alloc_in_denonsc2000
update_egui
cleanup_sample_loading_in_backend
refactor_backend
fix_keybindings_en_us_pitch
fix_library_thread_dying
fix_selector
feat_edit_cover
feat_fps_counter
fix_waveform
fix_close_window
feat_deck_type
feat_ci
v0.6
feat_binding_env
fix_sample_loader
fix_use_no_denormals
fix_formatting
feat_gui_sections
fix_popup_disable
fix_resolve_home
string_cmd
feat_new_playlist
fix_waveform_rendering_pixels
rebranding
fix_small_window_crash
feat_visualize_loop
feat_better_waveform_rendering
fix_mark_played
feat_cover_images
fix_resample_waveform
fix_denon_sc2000_clone_deck
fix_played_marker
feat_mark_played
fix_loop_alignment
resampler_zone
fix_panic_in_get_sample_or_zero
fix_key_handling
feat_better_waveforms
fix_gui_key_event
improve_error_handling
fix_nix_build
remove_tui
improve_edit_metadata
refactor_multiplex_rtrb
feat_gui_edit_metadata
gui_deck_indicator_reposition
fix_keybindings_en_us
fix_gui_deck_overgrowing
gui_deck_indicator
fix_gui_waveform_overview
fix_gui_library
improve_egui_popups2
wgpu_storage_buffer
refactor_units
v0.8.0
v0.7.2
v0.7.1
v0.7.0
v0.6.1
v0.6.0
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
OpenDJLab/LibreDJ#31
Reference in a new issue
OpenDJLab/LibreDJ
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?