The problem is serving large files from tornado. I didn't realize that file access in Python file access is blocking. So Raspberry Pis are seeking, grabbing the next part of the data and its taking forever because Tornado is feeding them back with high latency, which throws off the sync. I fixed the Tornado problem by just holding the current audio file in memory and feeding that. I also fixed the Raspberry Pi problem by giving the option to pause the file to backtrack (which is easier than seeking on large files).
The problem is serving large files from tornado. I didn't realize that file access in Python file access is blocking. So Raspberry Pis are seeking, grabbing the next part of the data and its taking forever because Tornado is feeding them back with high latency, which throws off the sync. I fixed the Tornado problem by just holding the current audio file in memory and feeding that. I also fixed the Raspberry Pi problem by giving the option to pause the file to backtrack (which is easier than seeking on large files).