A couple remarks:
* Could you show the declaration of 'sai_buf'? And the value of 'sample_no'?
* I'm assuming you're doing some kind of ping-pong (double buffering), but I need to make sure you got it right.
* The "f_read(&myfile,&sai_buf[index_buf%2],sample_no,&bt)" call: have you timed how long it takes? If it takes longer than the playing of one buffer through I2S, then you're screwed and that would explain your problem.