Providing synchronized audio to multiple devices
First Claim
Patent Images
1. A method of handling to-be-communicated information, the method comprising:
- placing audio data into each of a plurality of buffers for synchronized consumption by a plurality of audio devices;
wherein each device of the plurality of devices consumes to-be-communicated information from a corresponding buffer of the plurality of buffers; and
determining where to place to-be-communicated information within a particular buffer of the plurality of buffers based, at least in part, on presentation latency of a device that corresponds to a different buffer of the plurality of buffers.
2 Assignments
0 Petitions
Accused Products
Abstract
An audio system communicates with an aggregate device that includes multiple audio devices. When providing audio data for playback, the system compensates for presentation latency differences between the various audio devices. In addition, the system adjusts for device clock drift by selecting a master device and resampling the audio data provided to the other devices based on the difference between the device clock of the master device and the device clocks of the other devices.
295 Citations
56 Claims
-
1. A method of handling to-be-communicated information, the method comprising:
-
placing audio data into each of a plurality of buffers for synchronized consumption by a plurality of audio devices;
wherein each device of the plurality of devices consumes to-be-communicated information from a corresponding buffer of the plurality of buffers; and
determining where to place to-be-communicated information within a particular buffer of the plurality of buffers based, at least in part, on presentation latency of a device that corresponds to a different buffer of the plurality of buffers. - View Dependent Claims (49, 53)
-
-
2. The method of claim 2 further comprising:
-
allocating the plurality of ring buffers for the plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
the first device currently reading to-be-communicated information from a first current position in the first ring buffer;
the second device currently reading to-be-communicated information from a second current position in the second ring buffer; and
wherein writing the to-be-communicated information includes selecting how far ahead of the first current position to write to-be-communicated information in the first ring buffer based, at least in part, on latency between when the second device reads data from the second ring buffer and when the second device plays the to-be-communicated information. - View Dependent Claims (3, 4, 5)
-
-
6. A computer-readable medium comprising one or more sequences of instructions for providing to-be-communicated information to multiple devices, which instructions, when executed by one or more processors, cause the one or more processors to carry out the steps of:
-
allocating a plurality of ring buffers for a plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
the first device currently reading to-be-communicated information from a first current position in the first ring buffer;
the second device currently reading to-be-communicated information from a second current position in the second ring buffer; and
wherein writing the to-be-communicated information includes selecting how far ahead of the first current position to write to-be-communicated information in the first ring buffer based, at least in part, on latency between when the second device reads data from the second ring buffer and when the second device plays the to-be-communicated information. - View Dependent Claims (7, 8, 9)
-
-
10. A computer apparatus comprising:
-
a memory; and
one or more processors coupled to the memory and configured to execute one or more sequence of instructions for providing to-be-communicated information to multiple devices, wherein execution of the one or more sequences of instructions by one or more processors causes the one or more processors to perform the steps of;
allocating a plurality of ring buffers for a plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
the first device currently reading to-be-communicated information from a first current position in the first ring buffer;
the second device currently reading to-be-communicated information from a second current position in the second ring buffer; and
wherein writing the to-be-communicated information includes selecting how far ahead of the first current position to write to-be-communicated information in the first ring buffer based, at least in part, on latency between when the second device reads data from the second ring buffer and when the second device plays the to-be-communicated information. - View Dependent Claims (11, 12, 13)
-
-
14. A method of handling audio data, the method comprising:
-
placing to-be-communicated information into each of a plurality of buffers for synchronized consumption by a plurality of audio devices;
wherein each to-be-communicated information device of the plurality of devices consumes to-be-communicated information from a corresponding buffer of the plurality of buffers; and
resampling the to-be-communicated information placed into a particular buffer of the plurality of buffers based, at least in part, on device clock rate difference between the audio device that corresponds to the buffer and one or device clock rates of one or more other devices of the plurality of devices. - View Dependent Claims (15, 16, 17, 18, 50, 54)
-
-
19. A computer-readable medium comprising one or more sequences of instructions for providing to-be-communicated information to multiple devices, which instructions, when executed by one or more processors, cause the one or more processors to carry out the steps of:
-
allocating a plurality of ring buffers for a plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
the first device currently reading to-be-communicated information from a first current position in the first ring buffer;
the second device currently reading to-be-communicated information from a second current position in the second ring buffer;
storing first timestamp information when the first device performs a wrap-around operation while reading to-be-communicated information from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading to-be-communicated information from the second buffer;
determining a timing difference between the first device and the second device based, at least in part, on the first timestamp information and the second timestamp information; and
resampling the to-be-communicated information to be written to the second ring buffer based on the timing difference. - View Dependent Claims (20, 21, 22)
-
-
23. A method of handling to-be-communicated information, the method comprising:
-
using a single thread of execution to place to-be-communicated information into each of a plurality of ring buffers for synchronized consumption by a plurality of devices; and
wherein each device of the plurality of devices consumes to-be-communicated information from a corresponding buffer of the plurality of buffer. - View Dependent Claims (24, 25, 26, 27, 28, 29, 37, 38, 39, 40, 41, 51, 55)
-
-
30. A computer-readable medium comprising one or more sequences of instructions for providing to-be-communicated information to multiple devices, which instructions, when executed by one or more processors, cause the one or more processors to carry out the steps of:
-
allocating a plurality of ring buffers for a plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
within a single thread of execution, writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
storing first timestamp information when the first device performs a wrap-around operation while reading to-be-communicated information from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading to-be-communicated information from the second buffer;
within the single thread of execution, determining where to insert to-be-communicated information into the first ring buffer based on the first timestamp information; and
within the single thread of execution, determining where to insert to-be-communicated information into the second ring buffer based on the second timestamp information. - View Dependent Claims (31, 32, 33, 34, 35)
-
-
36. A computer apparatus comprising:
-
a memory; and
one or more processors coupled to the memory and configured to execute one or more sequence of instructions for providing to-be-communicated information to multiple devices, wherein execution of the one or more sequences of instructions by one or more processors causes the one or more processors to perform the steps of;
allocating a plurality of ring buffers for a plurality of devices, including a first ring buffer for a first device and a second ring buffer for a second device;
within a single thread of execution, writing to-be-communicated information, for synchronized playback on each of the plurality of devices, into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing to-be-communicated information to the ring buffer, performing a wrap-around operation to continue writing the to-be-communicated information beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading to-be-communicated information from the ring buffer, the corresponding device performing a wrap-around operation to continue reading the to-be-communicated information beginning at the start of the ring buffer;
storing first timestamp information when the first device performs a wrap-around operation while reading to-be-communicated information from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading to-be-communicated information from the second buffer;
within the single thread of execution, determining where to insert to-be-communicated information into the first ring buffer based on the first timestamp information; and
within the single thread of execution, determining where to insert to-be-communicated information into the second ring buffer based on the second timestamp information.
-
-
42. A method of handling to-be-communicated information, the method comprising:
-
within a single thread of execution receiving to-be-communicated information from each of a plurality of buffers for synchronized production by a plurality of audio devices; and
wherein each audio device of the plurality of audio devices stores to-be-communicated information into a corresponding buffer of the plurality of buffers. - View Dependent Claims (43, 44, 45, 46, 47, 48, 52, 56)
-
Specification