How to obtain round peaks instead of triangular peaks when smoothing an input? I have a signal (in blue) that I would like to smooth out (in red, moving average).

I would like to get red peaks to look more round than triangular and at the same time their width would become closer to the original ones.



Do you know / can you suggest a filter that would yield such result ?

Background:

The input is the zero-crossing rate from a song, for building a colored waveform as I've tried in this question : Coloring a waveform with spectral centroid or by other means

Here's the result of the new approach:

(unprocessed)



(ideal result, cheated somehow here using a post, expensive gaussian blur)



Update

Here's the result, using @Laurent Duval answer:



Also, I still need to try all of your suggestions again as my input/initial take was buggy, surprisingly now the ZCR yields better output than using FFTW out of the box (pics on the right):



Update 2

Simple moving average (green: 1-pass, gold: 2-passes)
Use two or three passes of moving average (can be pipelined).