Buffered read for audio from SD card

        Serial.print(buffer[i],BIN);

Serial.print in BIN format doesn't print leading zeros, nor does it print a space or linefeed between each element of the buffer. You have no way of knowing where a number ends and the next begins.
11000000110000 could be 1 10000001 10000, or 11000000 1 100000 or even 11000000110000, etc.
This snippet:

const int S = 512;
  short buffer[S];
  int i;
 
  buffer[0] = 1460;
  buffer[1] = 12336;
 
    for(i=0;i<2;i++)
        Serial.print(buffer[i],BIN);

prints this:

1011011010011000000110000

Changing to println from print it prints this:

10110110100
11000000110000

which is still missing leading zeros but now you can reliably determine what each number is.

What I have in the SD: 0000010110110100

Prove it.

Pete