Voice recovery with high-noise, low-gain
I would suggest dynamic range compression as a first port of call. Set the threshold low and the ratio quite high. Then apply make-up gain to an appropriate level. This functionality is built into many free audio editors such as Audacity. Matlab or Python implementation is also reasonably simple.