Estimating noise level without 'quiet' segment I have a signal which consists of an onset and a release period. 

The onset, sounding like a thud, excites frequencies across the entire frequency range (0-22 kHz). It lasts for about 0.1 s.

The release, sounding like a ring, excites 2-5 specific narrow frequency bands. Their amplitudes decay exponentially, albeit at slightly different rates.

I want to find the end of these narrow peak tracks. The method I am using now tracks the max amplitude in the narrow frequency bands and takes a windowed derivative. When this derivative passes through a threshold value, the end of the peak track is marked. This doesn't seem to be working consistently for particularly noisy signals.

My second idea was to track the amplitude of the peak tracks and compare them to the noise level. As soon as they reach the noise level, mark it as the end.

How do I estimate the noise level if there is no non-signal segment? The segment  before the strike, is often very short or has some ramp in amplitude making it unsuitable as an average.

Edit: Here's the spectrogram:
If you want to determine if the 2-5 narrowband frequencies are present use a matched filter with a threshold to determine their presence. In matlab the function is xcorr.
If you want to determine what the noise level is when only signal is present, try filtering out the signal. Create a filter for each frequency then convolve the filters together to get a final filter.