# Interpolation with pattrstorage

This example shows different ways to interpolate between values, for the purpose of automating volume control.

First, remember that **gain~** has exponential scaling built in, so you can send it linearly changing int values from *0* to *128* and it will scale exponentially from 0. to 0.999999 (with sample-by-sample interpolation according to the ramp time you specify for **gain~**’s ‘interp’ attribute).

If you find that to not be enough, you can do your own conversion of linear to exponential, using **pow**, **expr**, **dbtoa**, or ‘pow’ interpolation in pattrstorage. There’s no right magic number for the exponent; it depends on the type of curve you want. For scaling audio signals, I find that **dbtoa** works fine, and you can use **number~** to do the sample-by-sample interpolation (in the amount of time specified by **number~**’s ‘interval’ attribute).

(Both **gain~** and **number~** use linear interpolation for their sample-by-sample interpolation between input values, but if you send enough intermediate input values in a smooth progression you won’t hear them interpolating linearly between exponentially-changing inputs.)