When controlling a filter’s cutoff frequency you will normally get better results using an envelope that generates exponentially curved segments, such as
transegr. There is a version of madsr called mxadsr that also generates curves, but I normally recommend that people use the others as they are ultimately more powerful. Here is a filter that rises up quickly from 50 to 12000 Hz (attack segment) then decays down to 200 Hz slowly (decay), sticks at 200 Hz while the note is being held (sustain) and when the note is released, descends to 20 Hz quickly (release).
aenv expsegr 50, 0.3, 12000, 3, 200, 0.1, 20
asig moogladder asig, aenv, 0.6