A communication system comprising: a root node comprising a processor, a memory, and a communications module configured to establish communications with a plurality of nodes defining a mesh network; and a plurality of nodes in communication with the root node, the plurality of nodes defining a mesh network; the root node being configured to transmit audio data to the plurality of nodes, and the plurality of nodes being configured to produce audio corresponding to the audio data; characterized in that: the audio data is transmitted to the plurality of nodes in a series of frames, wherein each frame includes a frame identifier and a message containing the audio data; the root node is further configured to: determine a time delay to each node of the plurality of nodes; and transmit a delay code to the plurality of nodes, each of the plurality of nodes being configured to produce the audio corresponding to the audio data at a time corresponding to the delay code; and a node of the plurality of nodes is configured to: detect a missing frame in response to a sequence of frame identifiers; and upon the node of the plurality of nodes detecting the missing frame and a playback time greater than a time for data re-transmission between the root node and the node of the plurality of nodes, send a request to the root node to resend the missing frame. a root node comprising a processor, a memory, and a communications module configured to establish communications with a plurality of nodes defining a mesh network; and a plurality of nodes in communication with the root node, the plurality of nodes defining a mesh network; the root node being configured to transmit audio data to the plurality of nodes, and the plurality of nodes being configured to produce audio corresponding to the audio data; characterized in that: the audio data is transmitted to the plurality of nodes in a series of frames, wherein each frame includes a frame identifier and a message containing the audio data; the root node is further configured to: determine a time delay to each node of the plurality of nodes; and transmit a delay code to the plurality of nodes, each of the plurality of nodes being configured to produce the audio corresponding to the audio data at a time corresponding to the delay code; and a node of the plurality of nodes is configured to: detect a missing frame in response to a sequence of frame identifiers; and upon the node of the plurality of nodes detecting the missing frame and a playback time greater than a time for data re-transmission between the root node and the node of the plurality of nodes, send a request to the root node to resend the missing frame. the audio data is transmitted to the plurality of nodes in a series of frames, wherein each frame includes a frame identifier and a message containing the audio data; the root node is further configured to: determine a time delay to each node of the plurality of nodes; and transmit a delay code to the plurality of nodes, each of the plurality of nodes being configured to produce the audio corresponding to the audio data at a time corresponding to the delay code; and determine a time delay to each node of the plurality of nodes; and transmit a delay code to the plurality of nodes, each of the plurality of nodes being configured to produce the audio corresponding to the audio data at a time corresponding to the delay code; and a node of the plurality of nodes is configured to: detect a missing frame in response to a sequence of frame identifiers; and upon the node of the plurality of nodes detecting the missing frame and a playback time greater than a time for data re-transmission between the root node and the node of the plurality of nodes, send a request to the root node to resend the missing frame. detect a missing frame in response to a sequence of frame identifiers; and upon the node of the plurality of nodes detecting the missing frame and a playback time greater than a time for data re-transmission between the root node and the node of the plurality of nodes, send a request to the root node to resend the missing frame.