Rather than using an FFT you might want to research a Digital Bandpass Filter.
In either case you will probably be setting the ADC in free-running mode (take readings as frequently as possible). The filter will depend on the sampling interval so you might need to work that out first.
Here is an example of a calculator that will write the code for you:
http://www-users.cs.york.ac.uk/~fisher/mkfilterThe generated code looks like this:
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line: /www/usr/fisher/helpers/mkfilter -Bu -Bp -o 3 -a 1.0000000000e-01 1.1875000000e-01 -l */
#define NZEROS 6
#define NPOLES 6
#define GAIN 5.485702260e+03
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (;;)
{ xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4]; xv[4] = xv[5]; xv[5] = xv[6];
xv[6] = next input value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4]; yv[4] = yv[5]; yv[5] = yv[6];
yv[6] = (xv[6] - xv[0]) + 3 * (xv[2] - xv[4])
+ ( -0.7899732587 * yv[0]) + ( 3.8143619741 * yv[1])
+ ( -8.6998844482 * yv[2]) + ( 11.5413569160 * yv[3])
+ ( -9.4113261268 * yv[4]) + ( 4.4637724618 * yv[5]);
next output value = yv[6];
}
}
As an experiment I just shoved in a 32 kHz sample rate. I don't know if the Arduino can sample that fast or not. I think you will want to RMS average the "next output value" values (square them, add them up, and divide by the number of samples).
An alternative would be to make a hardware audio bandpass filter and integrator BEFORE the analog input.