On 29 Apr 2009, at 19:22, Mark Cerqueira wrote:
I've spent this semester doing some independent work with Perry and Dan on how to get good network synchronization for PLOrk so that we don't need a conductor and can focus on doing other things. I implemented a Time-Tagged OSC protocol similar to the stuff Adrian Freed does. Essentially the protocol first synchronizes everyone's clock via a protocol that is based on the Network Time Protocol (NTP). On the PLOrk network, one machine runs as a NTP Server and all others run as NTP Clients - NTP Clients calculate the offset of their VM time to the server VM time, as well as keeping track of the round-trip time of packets sent to synchronize to account for that in the offset.
Once the clocks are synchronized, packets sent over the network include the current time (which should be synchronized pretty closely if the above protocol works) and a time-to-execute offset. When someone receives the packet they add the current time plus the time-to-execute offset and schedule the packet to be opened only at that time. The NTP-like synchronization protocol I described above also keeps track of all RTTs and broadcasts to everyone what a good time-to-execute field is (i.e. make sure we give enough time for the packet to travel over the network). If all works well, everyone should open the packet at the same time.
I think somebody made a system for Internet performances (on any kind of instrument) where one does not bother synchronizing the sources, but the outputs are sent to a common computer which mixes them and sends it back to the performers. These wear headsets and need to learn to perform in a situation where the sound is delayed. (Perhaps similar to some pipe organs, with pipes far from the console.) A good synchronization will help, though, and will be a better solution when achievable. Hans