Splitting Uno serial to pass data from XBEE to PC

If the interval between the radio and sound signals is about 2000 microsecs (usecs) I would be inclined to try polling with a fast loop - assuming nothing else needs to be done while waiting for the sound signal. If you use PINx (direct port manipulation) it will be much faster than digitalRead().

I think this will read pin12 which is bit 4 of Port B - if not it is very close. And I may have the logic inverted.

// when radio signal is received
unsigned long endMicros = 0;
unsigned long startMicros = micros();
waitForSound();

// other stuff

void waitForSound() {
   byte inVal = 0;
   while (inVal == 0) {
       inVal = PINB & 0b00010000;
   }
   endMicros = micros();
}

That loop should only involve a few machine instructions and (I think) take 1 or 2 usecs which should give accuracy better than 0.5%

...R