Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
134 stars 2 forks source link

Add start and end times to the audio waveform texture #2530

Open BaxterOttoman opened 2 months ago

BaxterOttoman commented 2 months ago

Is your feature request related to a problem? Please describe.

It is currently not practical to get a texture of a section of an audio clip. The audio waveform texture only offers a render of the entire length of an audio waveform. This limits its utility tremendously. To get a smaller length of a quality that's useful, the entire texture has to be an unreasonable resolution and the texture has to be scaled and offset.

Describe the solution you'd like

I would like to see values added to the component, being a start and end time of the clip for selecting the section to be rendered. Values below zero should be zeroed out and values above the length of the clip should be brought down to the clip's length. When a new clip is provided to the component, the component should update to have a start time of 0 and an end time of the clip's length.

Describe alternatives you've considered

The rect mesh allows for arbitrary information to be passed in, but this doesn't have the resolution needed, and it would involve the frustration of playing the section of the clip to record the graph if it did.

Additional Context

No response

Requesters

Baxter

shiftyscales commented 2 months ago

What is your intended use case for this request, @BaxterOttoman? You mentioned resolution- are you intending to scroll / present the waveform in real-time?

You can currently trip audio clips in Resonite- so if you just needed a static representation of a portion of the audio clip, you can clip / trim out the rest of the audio you don't need- and use the trimmed clip in the existing component as-is.

As far as I'm aware- this component is primarily intended just to give a preview of the waveform- hence why it uses a fixed resolution. If you needed to display the full / true resolution of the audio waveform- it would require a massive resolution as you had noted- so if you're just needing to display the waveform live there are better ways of doing so.

JackTheFoxOtter commented 2 months ago

For any sort of audio editing tool, but also for some playback visualizations, this could be pretty valuable, and has relatively low complexity implementing I'd think. Trimming an audio clip is a destructive action, and doing this automatically would be pretty performance intensive. I could see this particularly useful for situations where you need to see the next couple of seconds of waveform, but you don't have to see the entire thing - one example I can think of would be live DJing / compositing, where the ability to see the waveform ahead could help with timing and transitions.

shiftyscales commented 2 months ago

That's why I was wondering, @JackTheFoxOtter - as far as live production / processing / editing, those needs would probably be better handled by #567.

Using the texture component like that would not be optimal for real-time applications as you would be continually generating new procedural textures for each change made to the input parameters.

Frooxius commented 2 months ago

This is actually relatively simple change that would be useful.

567 doesn't have anything to do with this kind of audio editing - that's specifically signal processing and effects. And it doesn't have anything to do with providing visuals either.

The component will recompute anytime something changes - which is pretty much what all audio editing applications do, it's not very unusual.

BaxterOttoman commented 2 months ago

Jack brought up something that I think could be worth considering with regard to previewing a set duration of a clip. I had said I think the values should be clamped to the clip length, but now I'm thinking it may be a better idea to allow values outside of that, but anything out there would just render as flat. This would let you have a window of a set number of seconds that can go past the beginning or end.