There are two parts to this change:
1. The computation of peaks is moved from `MessageAudio` to the
`GlobalAudioContext` and thus we can limit the concurrency of the
computations (`p-queue`!) and de-duplicate the computations as well
2. While the peaks are computed the component has to display spinning
animation instead of empty waveform and unclickable UI.