While building a mobile app that plays music for fitness classes, I was asked to add a feature that allows the user to speed up the tempo of the music 0-4% to compensate for some gym stereo systems that play music slower. I'm puzzled because I imagine that for this to occur, the stereo system would need to buffer more and more data over time in order to consistently deliver it at a slower speed. I'm wondering if this is actually a human perception problem, or if there's something else going on that I don't understand. Any ideas?
Your assumption around buffering is incorrect. Any application that plays music out faster or slower will simply change the read-rate of the data to suit the play-out speed. The buffer size will not change. The only thing that will change is the rate at which the buffer is filled up again after being emptied.
Note that this is only possible when reading data off a disk or memory stick or via a remote streaming service where you 'pull' data as required. It will not work with radio/DAB+ etc because the data is being pushed and - like you say - the system would need to continuously buffer more data and would eventually run out of space. Needless to say, this does not and cannot happen. HTH.