def interpolate(signal, crossings):
    """
    Calculate float crossing values by linear interpolation rather than relying exclusively
    on factors of samplerate. We find the sample values before and after the
    theoretical zero-crossing, then use linear interpolation to add an additional fractional
    component to the zero-crossing index (so our `crossings` indexes become float rather
    than int). This surprisingly makes a considerable difference in quantized frequencies,
    especially at lower divratios. However, this implementation isn't perfect, and it appears
    to add an oscillating uncertainty to time & frequency as we approach nyquist (or, perhaps,
    the zero-cross nyquist, which is something like samplerate / 2 / divratio).