Smooth Realtime-Audio Reaction in Animation Nodes?
As you have guessed, the Attack and Release are the values that controls the smoothness of the visualization. But there are couple of things to note:


An attack or a release value of 1 doesn't mean maximum smoothness. It means the values will nearly never change. So use the values responsibly, don't just enter values arbitrary and expect things to work. Usually, a release value around 0.6 and a low attack value works best.
In order for Animation Nodes to compute the spectrum at a certain frame, a number of preceding frames have to be computed in order to perform the smoothing. The number of frames computed is exposed in the Advanced Node Settings as the Smoothing Samples option. Higher values means more accurate smoothing, however, all values higher than a certain value converge to the same result. So don't increase this value too much, it will needlessly increase the execution time.
There is a theoretical limitation on the smoothing capabilities of the node. So you may not always get the result you are looking for. This is especially apparent in songs with a high tempo (BPM).




To have a better understanding of the inner workings on the node. I present a somewhat messy explanation. The names Attack and Release come from the concept of ADSR Envelope in music synthesis, which is short for Attack, Delay, Sustain, and Release. When you press a key on a piano, the Attack of the note is the time taken to reach the peak of the note, so a small attack value means the note reach its peak faster and snappier while a high attack value means the note reach its peak slowly and more smoothly. Similarly, the release is the time taken for the note to stop after the key is release.

In the context of music visualization, the attack and release usually have different interpretation. Lets say at frame zero, we computed the spectrum to be 10, and at frame one we computed the spectrum to be 3. This is a decrease of 7 units in just one frame! This certainly won't look good! So, instead, we give the user a "smoothed value", this value is a linear combination between the computed value and the value computed at the previous frame. The factor of the linear combination is the attack or the release value depending on whether the value increased (attack) or decreased (release). Since the value in our example decrease from 10 to 3, then the release values is utilized. And instead of giving the user 3 which implies a decrease of 7, we give the user $10 - 7(1 - \delta)$ where $\delta$ is the release value. A high value of $\delta$ translates to an output closer to 10 (Which we interpret as smoothing because it is a lower decrease) and a lower value of $\delta$ translates to an output closer to 3.