Algorithm to find spike I've been doing FFT's (on sound) for a while and usually use the highest intensity or the ones above average to get the spikes in an FFT result.

What would be a good method to get all the 'spikes' in an FFT. I can't use averages or peaks because the frequency response drops off. Visually its quite obvious there is a spike but I can't get a way extract the frequency from the spike.

Low frequencies always tend to have a higher itensity than higher ones but don't necessarily have any spikes in them.

Are there any good reliable techniques for this?
A statistical test might be appropriate.  For instance, if you assume the noise floor is Gaussian, then you could compute the standard deviation in any particular octave (or other appropriate sub-band), and look for maxima that are whatever multiple of standard deviations above the local average that you might consider to be statistically significant for your application.