300 infrared sensors

My opinion is that this wouldn't work as you are taking far too long to do the conversion just to see if there is something present which most of the time there would not be. Remember the processor also has to control the visible LEDs and the pattern they go in.

I thought the 38 KHz would be the same for all sensors, just one 38 KHz source (constant frequency) and 50% duty cycle. This isn't the same type of sensor that's used for IR communication like TV remotes and garage door openers. The only information it returns is a pulse with varying width, repeating at 50-680 ms.

EDIT: Oops ... you said "visible leds" not IR leds.

MORE: The processor would only have to track the bit timing of 36 bytes. A method something like this could be used to store the sensor status and time/duration information.

Example: This function is manipulating 80 bits (10 bytes). I've timed this function on the Due - 1,000 iterations took 790 us. So the execution time is 0.79 us.

void buttonFilter(void)
{
  if (millis() - millisStart >= 2)
  {
    for (int i = 0; i < qty; i++)
    {
      buttonState[i] = (buttonState[i] << 1) | digitalRead(buttons[i]); // shift and read
      if ((buttonState[i] & B11111) == B01111)  // if rising and high for 3 stable reads
      {
        buttonRead[i] = 1;
      }
      if ((buttonState[i] & B11111) == B10000)  // if falling and low for 3 stable reads
      {
        buttonRead[i] = 0;
      }
    }

I guess whatever is decided for a sensor, it would be good to pre-test just a few of them. Even a small 2x2 or 3x3 matrix could be directly connected to the Arduino and evaluated.