Re: [question/testing] SoundFileView improvements
[email protected] Tue, 10 Apr 2018 17:58:08 -0700
| Newsgroups | gmane.comp.audio.supercollider.devel |
|---|---|
| Message-ID | <CAEBNZeBLPUjHBnUH9mq_8Zb9g73PrFWRSx7MLxTY2qh3iGU25Q@mail.gmail.com> |
Here's the PR <https://github.com/supercollider/supercollider/pull/3662/>. On Tue, Apr 10, 2018 at 4:07 PM, <scott-y6qSm6YX8/[email protected]> wrote: > Seems reasonable to me if the performance isn't any different - floats > make for a much cleaner implementation. > > On Tue, Apr 10, 2018 at 3:45 PM <[email protected]> wrote: > >> I figured out how to preserve cache in SHORTs and set the scaling >> dynamically when reading the file, reworked everything... and got the same >> (slower) result as when I was working with floats. >> Turns out I was building in "debug".... >> >> So after switching to RelWithDebInfo, I'm getting very similar >> performance when using cache in SHORTs vs FLOATs. In this case do you think >> it is reasonable to just switch to floats? >> >> Thanks, >> Marcin >> >> On Fri, Apr 6, 2018 at 1:53 PM, Marcin PÄ…czkowski <[email protected]> >> wrote: >> >>> Thanks for the suggestions, Scott. >>> >>> In further working on this, I came to realize that: >>> - we can stick to short_int, since: >>> - we can't set the data after loading a soundfile, so setting min/max >>> values from the soundfile would fix representation of float soundfiles >>> - I'd add maxValue parameter to the allocate and setData methods, to >>> provide that control to the user when plotting data from the language >>> >>> >>>> 1. p.drawLine( x + i, min, x + i, max ); >>>> p.drawLine( x + i, minRMS[i], x + i, maxRMS[i] ); >>>> These might be faster if they were a 1px wide fillRect. >>>> >>> Maybe I'll try these later in my branch. >>> >>> 2. compositionMode of the pen should be QPainter::CompositionMode_Source >>>> >>> Will try... >>> >>> >>>> 3. p.setClipping(true); p.setClipRect( x, -halfChH, x+width, chHeight >>>> ); >>>> I believe it would be cheaper to guarantee the ranges of our values >>>> either when we calculate in displayData, or inline in our inner loop. >>>> >>> Yeah, I'll remove this clipping. I'll need to ensure data range in >>> displayData anyway and my whole point is to be able to draw values outside >>> this range. >>> >>> >>>> 4. Drawing vertical lines is bad for cache coherence and eliminates >>>> possibilities for vectorization. It MIGHT be worth experimenting with >>>> rotating the pixmap 90 degrees and drawing that way (so we have horizontal >>>> scanlines), and then rotating back to the correct orientation when we do >>>> drawPixmap, in hopes that Qt has either optimized the 90 degree rotation >>>> case or vectorized horizontal line drawing. >>>> >>> I'm not sure I'll get to trying this... but it's an interesting concept. >>> >>> Anyway, I'll keep working on this and will probably submit a PR once >>> it's in a working state. >>> >>> Marcin >>> >> >>