AudioThumbnail UI Overlay


#1

Hello,

I am building a plugin which has a component that overlays an audio thumbnail (granular playback reader visualization). There is an AudioThumbnail component to which the parent component is added as a listener. In the AudioThumbnail documentation the following is mentioned.

The class will asynchronously scan the wavefile to create its scaled-down view, so you should make your UI repaint itself as this data comes in. To do this, the AudioThumbnail is a ChangeBroadcaster, and will broadcast a message when its listeners should repaint themselves.

The thumbnail stores an internal low-res version of the wave data, and this can be loaded and saved to avoid having to scan the file again.

Now since I need to update the UI overlay at a decent frame rate, how do I repaint the AudioThumbnail component in the most efficient way (or is there another way)? Does the thumbnail component automatically use the Cache that is passed in the constructor?


#2

Sorry, really can’t understand what you’re asking there?


#3

When I repaint the playback visualization, I have to repaint the underlaying AudioThumbnail right? If I use the drawChannels method in from the AudioThumbnail class, does it automatically use the stored low-res version (when using the Cache)?


#4

Yeah, it’ll draw itself with the low-res data. That’s what the low-res data is for. Not sure I understand fully what you’re asking!


#5

I’m just checking whether it actually used the cache, because its eating up a huge amount of CPU just to redraw the thumbnail at that rate.


#6

If you zoom in far enough that each low-res data point covers more than 1 pixel, then it will switch to reading the actual samples from the file. Presumably that’s what you’re seeing?


#7

I’m using a block size of 512, but maybe my samples are just too big, if I dynamically change the block size based on the size of the sample, does it recalculate the low-res file for the cache all the time?


#8

It’s not a setting that would be expected to change dynamically. If it’s worth generating thumbnails at all then you generally don’t want to keep regenerating the data. But I don’t know, maybe it’d work OK in your use-case.


#9

Ok I think I should probably figure out some way to generate a bunch of thumbnails beforehand at different blocksizes, because samples can differ from one shots to loops to field recordings of about half a minute. Thank you for the help.