How to filter sudden spikes and baseline changes in microphone signal?
Assuming some processing delay is acceptable (100 ms should be more than sufficient), and given there is such a substantial difference between the spike peaks and the signal level, a robust solution would be a non-linear puncture based filter by removing the spikes based on a threshold detector (that then replaces the the required number of samples before and after the threshold with a prior running mean of the filtered signal) and then pass the resulting signal through a low pass filter that has a duration in time at least ten times longer than the interval of time removed due to a spike. Use a running mean and rms of the filtered output for dynamic processing. The mean is described above to replace removed samples as a reasonable minimum error estimate of the sample otherwise hidden and the standard deviation is used to set the threshold. A threshold of 3-sigma above the mean should work well, but ultimately you could also track the statistics of the peak and place the threshold based on optimized probability of false alarm versus probability of detection trades.