I created skin that shows peak, rms and fft (for one band at certain frequency) values in a Line meter.

I tested it with tone generator, using sin wave. Here is the picture that I got: Cyan line is fft, yellow is rms, and green is peak.

All attack/decay options are set to 500, peak and rms gains are adjusted so that rms and peak match fft after all three are stabilized.

Skin updates every 17 ms, so 500 ms should roughly match 30 pixels of image. Red lines show two intervals of 30 pixels.

Since the sound produced by my computer can be described as "silence, sine wave, silence", all three studied values should be "zero, maximum, zero" (without filtering). If I set all attack/decay options to 1, I see exactly that.

What I expected to get:

• Lines for all values roughly match.

• Transition from zero to max and back is either linear or forms exponential growth.

• All transitions take 500 ms.

What I actually got (shown in the picture above):

• Lines have quite different values during the transition.

• Rms and peak grow exponentially (with different constants though), but fft is exponential in the attack time and is linear in the decay time.

• Attack time is roughly 500 ms, but decay time is not only longer than 500 ms, but also is different for rms, peak and fft.

Soooo. Is it normal? And if it is, then how do I interpret attack and decay time for this plugin?

I have already looked into source code of the plugin in the Rainmeter github, and I don't understand why there is a difference. Well, rms is filtered in square form, and then rooted, this can explain the difference between rms and peak. But why are peak and fft values differ? Why attack and decay times differ? Why is fft linear in the decay time?!

Code of my test skin: