US8185674B2 - System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices - Google Patents

System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices Download PDF

Info

Publication number
US8185674B2
US8185674B2 US12605137 US60513709A US8185674B2 US 8185674 B2 US8185674 B2 US 8185674B2 US 12605137 US12605137 US 12605137 US 60513709 A US60513709 A US 60513709A US 8185674 B2 US8185674 B2 US 8185674B2
Authority
US
Grant status
Grant
Patent type
Prior art keywords
device
audio data
buffer
plurality
devices
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active, expires
Application number
US12605137
Other versions
US20100042239A1 (en )
Inventor
Jeffrey C. Moore
William G. Stewart
Gerhard H. Lengeling
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Grant date

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/165Management of the audio stream, e.g. setting of volume, audio stream path
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • G06F3/162Interface to dedicated audio devices, e.g. audio drivers, interface to CODECs
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/10527Audio or video recording; Data buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network-specific arrangements or communication protocols supporting networked applications
    • H04L67/10Network-specific arrangements or communication protocols supporting networked applications in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network-specific arrangements or communication protocols supporting networked applications
    • H04L67/10Network-specific arrangements or communication protocols supporting networked applications in which an application is distributed across nodes in the network
    • H04L67/1095Network-specific arrangements or communication protocols supporting networked applications in which an application is distributed across nodes in the network for supporting replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes or user terminals or syncML
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television, VOD [Video On Demand]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/41Structure of client; Structure of client peripherals
    • H04N21/414Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance
    • H04N21/4143Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance embedded in a Personal Computer [PC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television, VOD [Video On Demand]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network, synchronizing decoder's clock; Client middleware
    • H04N21/4302Content synchronization processes, e.g. decoder synchronization
    • H04N21/4307Synchronizing display of multiple content streams, e.g. synchronisation of audio and video output or enabling or disabling interactive icons for a given period of time
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television, VOD [Video On Demand]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network, synchronizing decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
    • H04N21/44004Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television, VOD [Video On Demand]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/81Monomedia components thereof
    • H04N21/8106Monomedia components thereof involving special audio data, e.g. different tracks for different languages

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.

Description

BENEFIT CLAIM

This application claims benefit as a Divisional of application Ser. No. 10/877,762, filed Jun. 25, 2004 now U.S. Pat. No. 7,631,119 the entire contents of which is hereby incorporated by reference as if fully set forth herein, under 35 U.S.C. §120. The applicant(s) hereby rescind any disclaimer of claim scope in the parent application(s) or the prosecution history thereof and advise the USPTO that the claims in this application may be broader than any claim in the parent application(s).

TECHNICAL FIELD

The present invention relates to synchronizing audio with multiple devices and, more specifically, to handling the communication of audio information between applications and multiple devices.

BACKGROUND

Electronic devices, such as computer systems, typically communicate with audio devices through device drivers associated with the audio devices. For example, a computer system plays sound on a speaker by sending audio information to a device driver designed for the speaker. Similarly, a computer system captures audio information from a microphone by receiving audio data from the device driver associated with the microphone.

Various approaches may be used to handle the communication of audio information between client applications (“clients”) that use audio information and the device drivers of audio devices. For example, according to an interrupt-based approach, a direct connection is established between the driver and its client application. Any time the driver wants audio data from the client, the driver raises an interrupt, suspending other activity on the Central Processing Unit (“CPU”) of the computer system on which the client is running. Therefore, for a certain period of time, the driver is in control of the computer system.

To avoid problems associated with the interrupt approach, a “ring buffer” approach has been developed. According to the ring buffer approach, execution of a device driver is decoupled from execution of its client application by using a ring buffer as a rendezvous point for communicating audio data between the device driver and the client application. Specifically, the device driver for a playback device reads audio data from the ring buffer without directly communicating with the client application. The client application, in turn, feeds audio data into the ring buffer ahead of the device driver so that the device driver continues to have new audio data to read. Similarly, the device driver for a recording device writes audio data into the ring buffer without directly communicating with the client application. The client application, in turn, reads audio data from the ring buffer at a rate to ensure that the device driver does not overwrite unread audio data.

As audio systems become more sophisticated, the type and number of audio devices used by a system has increased. Consequently, there is a need to be able to send audio to multiple playback devices connected to a system in a manner that results in synchronized playback by the multiple devices. Similarly, there is a need to be able to consume audio from multiple audio sources connected to a system, to allow a single client application to concurrently consume audio from the various audio sources.

BRIEF DESCRIPTION OF THE DRAWINGS

The present invention is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which:

FIG. 1 is a block diagram of a system in which audio is communicated between an system-side audio handling I/O unit and a device-side audio handling I/O unit through the use of a ring buffer;

FIG. 2 is a block diagram of a system in which audio is communicated between an system-side audio handling I/O unit and multiple device-side audio handling I/O units through the use of multiple ring buffers;

FIG. 3 illustrates how an system-side audio handling I/O unit determines an offset into ring buffers for some devices based on offset latencies of other devices; and

FIG. 4 is a block diagram illustrating a computer system upon which embodiments of the invention may be implemented.

DETAILED DESCRIPTION

In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention.

Audio I/O System

As mentioned above, using the ring buffer approach, an audio I/O system communicates audio data to and from devices by using a ring buffer as a rendezvous point for the audio data. Such an audio I/O system typically includes (1) a ring buffer, where audio data is written to and read from, (2) a device-side audio handling I/O unit (“DIO”) (typically a device driver), and (3) an system-side audio handing I/O unit (“SIO”). A specific example of such a system is illustrated in FIG. 1.

Referring to FIG. 1, it illustrates an audio I/O system 100 that includes a DIO 105, an SIO 110, and a ring buffer 101. For the purpose of illustration, it shall be assumed that DIO 105 is a device driver for a playback device, such as a speaker. Thus, DIO 105 reads audio data from ring buffer 101.

SIO 110 generally represents a system-side entity through which applications communicate with audio devices. For example, the operating system of a computer system may provide an interface through which applications make calls to communicate with audio devices. In response to such calls, the operating system executes a routine to perform the requested audio transfer operation. SIO 110 may be, for example, an Audio Hardware Abstraction Layer (HAL) provided in the core audio framework of MAC OS X, generally available from Apple Computer, Inc.

While playing back audio from ring buffer 101, DIO 105 reads audio data from ring buffer 101. The specific position, within ring buffer 101, from which DIO 105 is reading audio data at any given point in time is referred to herein as the “DIO position” within ring buffer 101. The DIO position wraps around to the start 130 of ring buffer 101 upon reaching the end 140 of ring buffer 101.

It is the responsibility of SIO 110 to place audio data into ring buffer 101 in front of the DIO position of DIO 105 so that it may be subsequently consumed by DIO 105. To place audio data in the appropriate location within ring buffer 101, SIO 110 needs to know the current DIO position. However, it would be impractical for DIO 105 to continuously communicate its position to the SIO 110. Therefore, according to one embodiment, DIO 105 periodically generates information that SIO 110 can use to estimate the current DIO position.

In one embodiment, the information used by SIO 110 to estimate the current DIO location is timestamp information generated by DIO 105 when DIO 105 performs a wrap around operation. Specifically, when DIO 105 reaches the end 140 of ring buffer 101, DIO 105 generates timestamp information that indicates (1) the current clock time of the CPU clock 112, and (2) an indication of which audio samples have been processed by DIO 105. From this timestamp information, and the current time of CPU clock 112, SIO 110 is able to estimate the current DIO position at any given point in time, and thereby determine the appropriate point at which to insert audio data within ring buffer 101 (the “insertion point”).

Once SIO 110 has determined the current DIO position, SIO 110 must determine how far ahead of the DIO position to insert audio data. In particular, to ensure proper playback, SIO 110 may add a safety offset 115 to the current DIO position. The specific safety offset 115 used by SIO 110 may vary based on the nature of the audio device associated with the DIO 105. Essentially, a safety offset is a limitation on how close the SIO 110 can write data in Buffer 101 ahead of the current DIO position 107.

Moreover, in one embodiment, the SIO 110 may allow the application that is providing the audio data up to a full buffer unit in addition to the safety offset 115 to deliver audio data to the SIO 110 for writing. Hence, when SIO 110 wakes up to write data to buffer 101, the application providing the audio data may take potentially as much real time to compute the data as it is going to take to play it, and no more. Thus, based on a prediction of where the current DIO position 107 is, the SIO 110 may decide that the appropriate insertion point is at point 120.

Aggregate Devices

An aggregate device is a collection of devices that may be treated by an application as if it were a single device. According to one embodiment, a single SIO is used for synchronized playback and/or synchronized receipt of audio from an aggregate device. FIG. 2 is a block diagram illustrating a system for synchronizing communications with an aggregate device, according to an embodiment of the invention.

Referring to FIG. 2, Aggregate Device 200 includes multiple devices 201 and 251, all of which are communicating with a single SIO 210. For the purpose of explanation, it shall be assumed that devices 201 and 251 are audio playback devices, and that SIO 210 is receiving audio from an application for synchronized playback on devices 201 and 251.

As illustrated in FIG. 2, each device 201 and 251 has its own ring buffer (buffers 202 and 252, respectively). Each device 201 and 251 may have its own buffer size and safety offset. In addition, each device 201 and 251 may have its own device clock that affects the rate at which the device consumes audio data. Consequently, at any given time, the current DIO positions 207 and 257 of the devices may be at different points in their respective ring buffers 202 and 252.

According to one embodiment, each DIO 205 and 255 generates timestamp information every time the DIO performs a wrap-around operation. The SIO 210 uses the timestamp information from each DIO 205 and 255 to independently determine the current DIO position of each device. However, if the insertion positions selected by the SIO 210 are made without consideration to the fact that the device belong to an aggregate device, the devices will inevitably get out of synchronization, and the quality of the audio experience will degrade. According to one embodiment, SIO 210 is designed to compensate for factors that result in such degradation, including differences presentation latency and device clock rates.

Correcting for Differences in Presentation Latency

The presentation latency of a device is the actual amount of time between when the device's DIO reads data from a ring buffer and when the device actually plays the audio data. If the devices that belong to an aggregate device have different presentation latencies, then the sound played by some of the devices will lag behind the sound played by other devices, unless some form of adjustment is made for the differences.

According to one embodiment, the SIO 210 receives presentation latency data about the presentation latency of each device 201 and 251 in aggregate device 200. The SIO 210 adjusts the insertion points within buffers 202 and 252 so that each device plays the same audio data at the same time.

Techniques for correcting for differences in presentation latency shall now be described with reference to FIG. 3. Referring to FIG. 3, it illustrates a scenario in which an aggregate device includes 3 devices 310, 320 and 330. Each device 310, 320 and 330 has a corresponding presentation latency. The presentation latency of each device may be determined experimentally by each device and supplied to the Aggregate SIO, as previously discussed.

According to one embodiment, how far ahead the SIO writes ahead of each DIO position of each device takes into account a latency offset (350 and 360), as well as the safety offset of the device. While the safety offset of a particular device is dictated by the characteristics of that particular device, the latency offset of a particular device is dictated by how the characteristics of the other devices that belong to the same aggregate device differ from the characteristics of that particular device. Specifically, according to one embodiment, the latency offset for a given device is based on the difference between the composite latency of the device (safety offset+presentation latency) and the maximum composite latency of any device in the aggregate device. For example, device 310 has the highest composite latency (presentation latency 315+safety offset 318) of devices 310, 320 and 330. Therefore, the latency offset of each of devices 310, 320 and 330 is determined based on the difference between each of their composite latencies, and the composite latency of device 310.

In the illustrated example, the SIO compensates for the difference in the composite latency of device 310 and the composite latency of device 320 by using a latency offset 350 with device 320. Similarly, the SIO compensates for the difference in composite latency of device 330 with device 310 by using a latency offset 360 with device 330. Since device 310 has the highest composite latency, no latency offset is needed for device 310.

Referring again to FIG. 2, the gap between DIO position 257 and the insertion point 270 used by SIO 210 for device 251 takes into account both the safety offset 265 of device 251 and a latency offset 230. As explained above, latency offset 230 compensates for the difference between the composite latency (safety offset+presentation latency) of device 201 and the composite latency (safety offset+presentation latency) of device 251.

Correcting Clock Drift for Multiple Devices

Each audio device in an aggregate device may have its own device clock. The rate at which a device consumes and/or produces audio is driven by the device clock. Due to differences in device clocks, device clocks may “tick” at slightly different rates. Hence, although both device 201 and 251 are theoretically running at the same rate, device 201 may actually be consuming samples from buffer 202 faster than device 251. Over short periods of time, such differences may not be detectable. However, over time, the distortion caused by such “clock drift” increases. If not addressed, clock drift between the devices that make up an aggregate device will lead to a situation where the synchronized data provided by the SIO is not being played by the devices in synchronization.

According to one embodiment, the SIO compensates for rate discrepancies between clocks on different devices of the same aggregate device. Specifically, based on the timestamp information supplied by each DIO, the SIO determines how fast the device clocks are actually running, and performs dynamic resampling on audio data prior to inserting the audio data into the ring buffer of one or more of the devices.

According to one embodiment, SIO designates one device to be the “master device” against which to compare the clock rates of other devices. Preferably, the device designated by the SIO to be the master device would be the device with the most stable device clock. In one embodiment, the device that reports the most latency is designated as the master device. In another embodiment, the master designation may be dynamically changed based on a variety of factors. For example, during playback the SIO may determine that one device in the aggregate device would be a better master than the currently designated master. In response to such a designation, the SIO may change the master designation, and begin compensating for clock drift based on the clock speed of the new master.

Once a master device has been designated, the SIO resamples the audio data provided to the other devices to correct/makeup for the discrepancy between their device clock rates and the device clock rate of the master device. Specifically, if a device has a slower clock rate than the master device, then the audio data for a given segment of audio is reduced. When the slower device consumes the reduced-size audio data, the slower device effectively “catches up” relative to the master device. Conversely, if a device has a faster clock rate than the master device, then the audio data for a given segment of audio is increased. When the faster device consumes the increased-size audio data, the faster device is effectively “slowed down” relative to the master device.

Any one of numerous well-known techniques for resampling audio data may be used to perform the resample. The present invention in not limited to any particular resampling technique.

Although SIO 215 is designed to compensate for clock drift among members of an aggregate device, it is also able to handle scenarios in which a mechanism is used to prevent clock drift. For example, if all of the devices that belong to an aggregate device are being driven by the same clock, then no clock drift will occur. In this scenario, the SIO determines that no resampling is required.

Synchronizing the Receipt of Audio from Multiple Devices

While embodiments described above have used examples in which audio is synchronously provided to an aggregate device, the same techniques may be used to provide synchronous receipt of audio data from multiple audio source devices. Thus, rather writing audio data ahead of the DIO position of multiple audio-consuming devices, the SIO reads audio data behind the DIO position of the audio-producing devices. Similar to the scenarios described above, the offset between the SIO reading-position and the DIO insertion positions includes a safety offset, and a latency offset that compensates for the difference between (1) safety offsets, and (2) time lapse between (a) when each device receives audio data and (b) when the device places the data into its corresponding ring buffer.

Multiple SIO Systems

In the examples given above, a single SIO is providing audio data to, or receiving audio data from, an aggregate audio device. However, multiple SIOs can concurrently communicate with the same aggregate device. Thus, while SIO 210 is writing audio data for one application into ring buffers 202 and 252 for playback on devices 201 and 251, a second SIO may be doing the same for a different application. Under these circumstances, the second SIO would compensate for clock drift, presentation latency differences, and safety offset differences, in the same manner as SIO 210. However, in adjusting for clock drift, the second SIO need not select the same device to be the master device.

The aggregate devices with which SIOs interact may not have identical memberships. For example, a first SIO may be providing audio for synchronized playback on a first aggregate device that includes devices A, B and C. At the same time, a second SIO may be providing audio for synchronized playback on a second aggregate device that includes devices B, C, and D. In this scenario, both SIOs are inserting audio data for devices B and C into the ring buffers for devices B and C. However, they determine latency offsets and resampling adjustments based on the specific membership of their aggregate devices, and their independent selection of a master device.

Single-Thread of Execution

According to one embodiment, each SIO is run as a single thread of execution, regardless of how many devices belong to the aggregate device with which the SIO exchanges audio data. Consequently, audio applications are able to provide synchronized audio to multiple devices without having to include the complexities inherent in managing multiple execution threads. The single thread of execution determines appropriate insertion points into each of the multiple ring buffers using the techniques described above, thereby insulating the audio applications from the complexity of dealing with multiple audio devices.

Hardware Overview

FIG. 4 is a block diagram that illustrates a computer system 400 upon which an embodiment of the invention may be implemented. Computer system 400 includes a bus 402 or other communication mechanism for communicating information, and a processor 404 coupled with bus 402 for processing information. Computer system 400 also includes a main memory 406, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 402 for storing information and instructions to be executed by processor 404. Main memory 406 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 404. Computer system 400 further includes a read only memory (ROM) 408 or other static storage device coupled to bus 402 for storing static information and instructions for processor 404. A storage device 410, such as a magnetic disk or optical disk, is provided and coupled to bus 402 for storing information and instructions.

Computer system 400 may be coupled via bus 402 to a display 412, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device 414, including alphanumeric and other keys, is coupled to bus 402 for communicating information and command selections to processor 404. Another type of user input device is cursor control 416, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 404 and for controlling cursor movement on display 412. This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.

The invention is related to the use of computer system 400 for implementing the techniques described herein. According to one embodiment of the invention, those techniques are performed by computer system 400 in response to processor 404 executing one or more sequences of one or more instructions contained in main memory 406. Such instructions may be read into main memory 406 from another machine-readable medium, such as storage device 410. Execution of the sequences of instructions contained in main memory 406 causes processor 404 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and software.

The term “machine-readable medium” as used herein refers to any medium that participates in providing data that causes a machine to operation in a specific fashion. In an embodiment implemented using computer system 400, various machine-readable media are involved, for example, in providing instructions to processor 404 for execution. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media includes, for example, optical or magnetic disks, such as storage device 410. Volatile media includes dynamic memory, such as main memory 406. Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 402. Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.

Common forms of machine-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read.

Various forms of machine-readable media may be involved in carrying one or more sequences of one or more instructions to processor 404 for execution. For example, the instructions may initially be carried on a magnetic disk of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system 400 can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus 402. Bus 402 carries the data to main memory 406, from which processor 404 retrieves and executes the instructions. The instructions received by main memory 406 may optionally be stored on storage device 410 either before or after execution by processor 404.

Computer system 400 also includes a communication interface 418 coupled to bus 402. Communication interface 418 provides a two-way data communication coupling to a network link 420 that is connected to a local network 422. For example, communication interface 418 may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface 418 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface 418 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.

Network link 420 typically provides data communication through one or more networks to other data devices. For example, network link 420 may provide a connection through local network 422 to a host computer 424 or to data equipment operated by an Internet Service Provider (ISP) 426. ISP 426 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet” 428. Local network 422 and Internet 428 both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link 420 and through communication interface 418, which carry the digital data to and from computer system 400, are exemplary forms of carrier waves transporting the information.

Computer system 400 can send messages and receive data, including program code, through the network(s), network link 420 and communication interface 418. In the Internet example, a server 430 might transmit a requested code for an application program through Internet 428, ISP 426, local network 422 and communication interface 418.

The received code may be executed by processor 404 as it is received, and/or stored in storage device 410, or other non-volatile storage for later execution. In this manner, computer system 400 may obtain application code in the form of a carrier wave.

In the foregoing specification, embodiments of the invention have been described with reference to numerous specific details that may vary from implementation to implementation. Thus, the sole and exclusive indicator of what is the invention, and is intended by the applicants to be the invention, is the set of claims that issue from this application, in the specific form in which such claims issue, including any subsequent correction. Any definitions expressly set forth herein for terms contained in such claims shall govern the meaning of such terms as used in the claims. Hence, no limitation, element, property, feature, advantage or attribute that is not expressly recited in a claim should limit the scope of such claim in any way. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.

Claims (20)

1. A method for providing audio for playback by multiple devices, the method comprising:
writing audio data into each of a plurality of buffers for consumption by a plurality of audio devices;
wherein each device of the plurality of devices consumes audio data from a corresponding buffer of the plurality of buffers;
resampling audio data to be written into a buffer of the plurality of buffers based, at least in part, on a difference between a device clock rate of the device that corresponds to the buffer and a device clock rate of another device of the plurality of devices;
wherein the method is performed by one or more computing devices.
2. The method of claim 1, wherein said plurality of buffers is a plurality of ring buffers including a first ring buffer for a first device and a second ring buffer for a second device, the method further comprising:
writing audio data into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing audio data to the ring buffer, performing a wrap-around operation to continue writing audio data beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading audio data from the ring buffer, the corresponding device performing a wrap-around operation to continue reading audio data beginning at the start of the ring buffer;
the first device currently reading audio data from a first current position in the first ring buffer;
the second device currently reading audio data 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 audio data from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading audio data 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 audio data to be written to the second ring buffer based on the timing difference.
3. The method of claim 1, further comprising:
selecting a device from the plurality of devices as a master device based, at least in part, on presentation latency information received from said plurality of devices;
determining a timing difference between said master device and any device of said plurality of devices; and
resampling audio data to be written to any buffer of said plurality of buffers based on said timing difference.
4. The method of claim 1, wherein resampling audio data to be written to said buffer further comprises increasing the rate at which audio data is written to said buffer.
5. The method of claim 1, wherein resampling audio data to be written to said buffer further comprises decreasing the rate at which audio data is written to said buffer.
6. A non-transitory computer-readable medium storing instructions which, when executed by one or more computing devices, cause the one or more computing devices to perform:
writing audio data into each of a plurality of buffers for consumption by a plurality of audio devices;
wherein each device of the plurality of devices consumes audio data from a corresponding buffer of the plurality of buffers;
resampling audio data to be written into a buffer of the plurality of buffers based, at least in part, on a difference between a device clock rate of the device that corresponds to the buffer and a device clock rate of another device of the plurality of devices.
7. The non-transitory computer-readable medium of claim 6, wherein said plurality of buffers is a plurality of ring buffers including a first ring buffer for a first device and a second ring buffer for a second device, wherein the instructions, when executed by the one or more computing devices, cause the one or more computing devices to further perform:
writing audio data into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing audio data to the ring buffer, performing a wrap-around operation to continue writing audio data beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading audio data from the ring buffer, the corresponding device performing a wrap-around operation to continue reading audio data beginning at the start of the ring buffer;
the first device currently reading audio data from a first current position in the first ring buffer;
the second device currently reading audio data 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 audio data from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading audio data 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 audio data to be written to the second ring buffer based on the timing difference.
8. The non-transitory computer-readable medium of claim 6, wherein the instructions, when executed by the one or more computing devices, cause the one or more computing devices to further perform:
selecting a device from the plurality of devices as a master device based, at least in part, on presentation latency information received from said plurality of devices;
determining a timing difference between said master device and any device of said plurality of devices; and
resampling audio data to be written to any buffer of said plurality of buffers based on said timing difference.
9. The non-transitory computer-readable medium of claim 6, wherein resampling audio data to be written to said buffer further comprises increasing the rate at which audio data is written to said buffer.
10. The non-transitory computer-readable medium of claim 6, wherein resampling audio data to be written to said buffer further comprises decreasing the rate at which audio data is written to said buffer.
11. A computer system comprising:
one or more processors;
logic encoded in one or more computer-readable storage media wherein execution by the one or more processors causes:
writing audio data into each of a plurality of buffers for consumption by a plurality of audio devices;
wherein each device of the plurality of devices consumes audio data from a corresponding buffer of the plurality of buffers;
resampling audio data to be written into a buffer of the plurality of buffers based, at least in part, on a difference between a device clock rate of the device that corresponds to the buffer and a device clock rate of another device of the plurality of devices.
12. The computer system of claim 11, wherein said plurality of buffers is a plurality of ring buffers including a first ring buffer for a first device and a second ring buffer for a second device, wherein the logic, when executed by the one or more processors, further causes:
writing audio data into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing audio data to the ring buffer, performing a wrap-around operation to continue writing audio data beginning at the start of the ring buffer;
upon reaching the end of any ring buffer while reading audio data from the ring buffer, the corresponding device performing a wrap-around operation to continue reading audio data beginning at the start of the ring buffer;
the first device currently reading audio data from a first current position in the first ring buffer;
the second device currently reading audio data 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 audio data from the first buffer;
storing second timestamp information when the second device performs a wrap-around operation while reading audio data 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 audio data to be written to the second ring buffer based on the timing difference.
13. The computer system of claim 11, wherein the logic, when executed by the one or more processors, further causes:
selecting a device from the plurality of devices as a master device based, at least in part, on presentation latency information received from said plurality of devices;
determining a timing difference between said master device and any device of said plurality of devices; and
resampling audio data to be written to any buffer of said plurality of buffers based on said timing difference.
14. The computer system of claim 11, wherein resampling audio data to be written to said buffer further comprises increasing the rate at which audio data is written to said buffer.
15. The computer system of claim 11, wherein resampling audio data to be written to said buffer further comprises decreasing the rate at which audio data is written to said buffer.
16. A system comprising:
a plurality of buffers;
a plurality of audio devices, wherein each audio device of the plurality of audio devices is operatively coupled to one buffer of the plurality of buffers, wherein each audio device of the plurality of audio devices is associated with a device clock;
a mechanism operatively coupled to said plurality of buffers and configured to resample audio data to be written into a buffer of the plurality of buffers based, at least in part, on a difference between a device clock rate of the audio device that corresponds to the buffer and a device clock rate of another device of the plurality of audio devices.
17. The system of claim 16,
wherein said plurality of buffers is a plurality of ring buffers;
wherein a first audio device of said plurality of audio devices is operatively coupled to a first ring buffer of the plurality of ring buffers;
wherein said first audio device is configured to:
upon reaching the end of the first ring buffer while reading audio data from the first ring buffer, perform a wrap-around operation to continue reading audio data beginning at the start of the first ring buffer; and
store first timestamp information when the first audio device performs a wrap-around operation while reading audio data from the first ring buffer;
wherein a second audio device of said plurality of audio devices is operatively coupled to a second ring buffer of the plurality of ring buffers;
wherein said second audio device is configured to:
upon reaching the end of the second ring buffer while reading audio data from the second ring buffer, perform a wrap-around operation to continue reading audio data beginning at the start of the second ring buffer; and
store second timestamp information when the second audio device performs a wrap-around operation while reading audio data from the second buffer;
wherein said mechanism is further configured to:
write audio data into each of the plurality of ring buffers;
upon reaching the end of any ring buffer while writing audio data to the ring buffer, perform a wrap-around operation to continue writing audio data beginning at the start of the ring buffer;
determine a timing difference between the first audio device and the second audio device based, at least in part, on the first timestamp information and the second timestamp information; and
resample audio data to be written to the second ring buffer based on the timing difference.
18. The system of claim 16, wherein said mechanism is further configured to:
select a device from the plurality of audio devices as a master device based, at least in part, on presentation latency information received from said plurality of audio devices;
determine a timing difference between said master device and any audio device of said plurality of audio devices; and
resample audio data to be written to any buffer of said plurality of buffers based on said timing difference.
19. The system of claim 16, wherein the mechanism is further configured to resample audio data to be written to said buffer by increasing the rate at which audio data is written to said buffer.
20. The system of claim 16, wherein the mechanism is further configured to resample audio data to be written to said buffer by decreasing the rate at which audio data is written to said buffer.
US12605137 2004-06-25 2009-10-23 System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices Active 2024-09-07 US8185674B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US10877762 US7631119B2 (en) 2004-06-25 2004-06-25 Techniques for providing audio for synchronized playback by multiple devices
US12605137 US8185674B2 (en) 2004-06-25 2009-10-23 System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US12605137 US8185674B2 (en) 2004-06-25 2009-10-23 System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices
US13477681 US8904066B2 (en) 2004-06-25 2012-05-22 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14557349 US9176706B2 (en) 2004-06-25 2014-12-01 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14930601 US9569169B2 (en) 2004-06-25 2015-11-02 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15397558 US9977648B2 (en) 2004-06-25 2017-01-03 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15952118 US20180336003A1 (en) 2004-06-25 2018-04-12 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US10877762 Division US7631119B2 (en) 2004-06-25 2004-06-25 Techniques for providing audio for synchronized playback by multiple devices

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13477681 Continuation US8904066B2 (en) 2004-06-25 2012-05-22 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks

Publications (2)

Publication Number Publication Date
US20100042239A1 true US20100042239A1 (en) 2010-02-18
US8185674B2 true US8185674B2 (en) 2012-05-22

Family

ID=34980227

Family Applications (8)

Application Number Title Priority Date Filing Date
US10877762 Active 2028-06-19 US7631119B2 (en) 2004-06-25 2004-06-25 Techniques for providing audio for synchronized playback by multiple devices
US12605137 Active 2024-09-07 US8185674B2 (en) 2004-06-25 2009-10-23 System having a plurality of buffers for providing audio for synchronized playback to multiple audio devices
US12605131 Active 2024-08-11 US8037220B2 (en) 2004-06-25 2009-10-23 Techniques for providing audio for synchronized playback by multiple devices
US13477681 Active US8904066B2 (en) 2004-06-25 2012-05-22 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14557349 Active US9176706B2 (en) 2004-06-25 2014-12-01 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14930601 Active US9569169B2 (en) 2004-06-25 2015-11-02 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15397558 Active US9977648B2 (en) 2004-06-25 2017-01-03 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15952118 Pending US20180336003A1 (en) 2004-06-25 2018-04-12 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US10877762 Active 2028-06-19 US7631119B2 (en) 2004-06-25 2004-06-25 Techniques for providing audio for synchronized playback by multiple devices

Family Applications After (6)

Application Number Title Priority Date Filing Date
US12605131 Active 2024-08-11 US8037220B2 (en) 2004-06-25 2009-10-23 Techniques for providing audio for synchronized playback by multiple devices
US13477681 Active US8904066B2 (en) 2004-06-25 2012-05-22 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14557349 Active US9176706B2 (en) 2004-06-25 2014-12-01 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US14930601 Active US9569169B2 (en) 2004-06-25 2015-11-02 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15397558 Active US9977648B2 (en) 2004-06-25 2017-01-03 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US15952118 Pending US20180336003A1 (en) 2004-06-25 2018-04-12 Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks

Country Status (3)

Country Link
US (8) US7631119B2 (en)
EP (2) EP2466908B1 (en)
WO (1) WO2006007322B1 (en)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140149606A1 (en) * 2012-11-23 2014-05-29 Samsung Electronics Co., Ltd. Server, multimedia apparatus and control method thereof for synchronously playing multimedia contents through a plurality of multimedia devices
US9237324B2 (en) 2010-10-22 2016-01-12 Phorus, Inc. Playback synchronization
US9348354B2 (en) 2003-07-28 2016-05-24 Sonos, Inc. Systems and methods for synchronizing operations among a plurality of independently clocked digital data processing devices without a voltage controlled crystal oscillator
US9374607B2 (en) 2012-06-26 2016-06-21 Sonos, Inc. Media playback system with guest access
US9516440B2 (en) 2012-10-01 2016-12-06 Sonos Providing a multi-channel and a multi-zone audio environment
US9569169B2 (en) 2004-06-25 2017-02-14 Apple Inc. Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US9665341B2 (en) 2015-02-09 2017-05-30 Sonos, Inc. Synchronized audio mixing
US9729115B2 (en) 2012-04-27 2017-08-08 Sonos, Inc. Intelligently increasing the sound level of player
US9734242B2 (en) 2003-07-28 2017-08-15 Sonos, Inc. Systems and methods for synchronizing operations among a plurality of independently clocked digital data processing devices that independently source digital data
US9749760B2 (en) 2006-09-12 2017-08-29 Sonos, Inc. Updating zone configuration in a multi-zone media system
US9756424B2 (en) 2006-09-12 2017-09-05 Sonos, Inc. Multi-channel pairing in a media system
US9766853B2 (en) 2006-09-12 2017-09-19 Sonos, Inc. Pair volume control
US9781513B2 (en) 2014-02-06 2017-10-03 Sonos, Inc. Audio output balancing
US9787550B2 (en) 2004-06-05 2017-10-10 Sonos, Inc. Establishing a secure wireless network with a minimum human intervention
US9794707B2 (en) 2014-02-06 2017-10-17 Sonos, Inc. Audio output balancing
US9977561B2 (en) 2004-04-01 2018-05-22 Sonos, Inc. Systems, methods, apparatus, and articles of manufacture to provide guest access
US10175930B2 (en) 2013-03-22 2019-01-08 Sonos, Inc. Method and apparatus for playback by a synchrony group

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207905B2 (en) 2003-07-28 2015-12-08 Sonos, Inc. Method and apparatus for providing synchrony group status information
US8290603B1 (en) 2004-06-05 2012-10-16 Sonos, Inc. User interfaces for controlling and manipulating groupings in a multi-zone media system
US20070110074A1 (en) * 2004-06-04 2007-05-17 Bob Bradley System and Method for Synchronizing Media Presentation at Multiple Recipients
US8797926B2 (en) 2004-06-04 2014-08-05 Apple Inc. Networked media station
US8443038B2 (en) 2004-06-04 2013-05-14 Apple Inc. Network media device
US8190680B2 (en) * 2004-07-01 2012-05-29 Netgear, Inc. Method and system for synchronization of digital media playback
DE102004046746B4 (en) * 2004-09-27 2007-03-01 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. A method for synchronizing additional data and basic data
JP4660184B2 (en) * 2004-12-27 2011-03-30 株式会社東芝 Signal repeater and a signal relay method
US7620753B1 (en) * 2005-03-17 2009-11-17 Apple Inc. Lockless access to a ring buffer
US7792024B1 (en) 2005-03-18 2010-09-07 Apple Inc. IO latency reduction
EP1872533A4 (en) 2005-04-22 2013-03-06 Audinate Pty Ltd Method for transporting digital media
CN101171838B (en) 2005-04-28 2011-06-01 松下电器产业株式会社 Lip-sync correcting device and lip-sync correcting method
US8462627B2 (en) * 2005-12-30 2013-06-11 Altec Lansing Australia Pty Ltd Media data transfer in a network environment
US7539889B2 (en) * 2005-12-30 2009-05-26 Avega Systems Pty Ltd Media data synchronization in a wireless network
US7680135B2 (en) * 2006-03-28 2010-03-16 Yamaha Corporation Audio network system having lag correction function of audio samples
US7978696B2 (en) 2006-05-17 2011-07-12 Audinate Pty Limited Redundant media packet streams
JP2010507294A (en) * 2006-10-17 2010-03-04 アベガ システムズ ピーティーワイ リミテッド Integration of multi-media device
US7827479B2 (en) * 2007-01-03 2010-11-02 Kali Damon K I System and methods for synchronized media playback between electronic devices
EP2165541B1 (en) * 2007-05-11 2013-03-27 Audinate Pty Ltd Systems, methods and computer-readable media for configuring receiver latency
US8576922B2 (en) * 2007-06-10 2013-11-05 Apple Inc. Capturing media in synchronized fashion
WO2009105838A1 (en) 2008-02-29 2009-09-03 Audinate Pty Ltd Network devices, methods and/or systems for use in a media network
CN102027699B (en) 2008-03-12 2015-04-29 珍尼雷克公司 Data transfer method and system for loudspeakers in a digital sound reproduction system
US8898034B2 (en) * 2009-06-03 2014-11-25 Apple Inc. Automatically identifying geographic direction
US7891103B2 (en) * 2009-06-05 2011-02-22 Apple Inc. Magnetometer accuracy and use
US8437970B2 (en) * 2009-06-05 2013-05-07 Apple Inc. Restoring and storing magnetometer calibration data
US8938675B2 (en) * 2009-06-16 2015-01-20 Harman International Industries, Incorporated System for automated generation of audio/video control interfaces
US9116002B2 (en) * 2009-08-27 2015-08-25 Apple Inc. Context determination to assist location determination accuracy
US8531180B2 (en) 2010-03-30 2013-09-10 Apple Inc. Determining heading using magnetometer data and angular rate data
US8626465B2 (en) 2010-03-30 2014-01-07 Apple Inc. Calibrating sensor measurements on mobile devices
US8717009B2 (en) 2010-10-06 2014-05-06 Apple Inc. Magnetometer calibration
US8615253B2 (en) 2011-06-03 2013-12-24 Apple Inc. State estimation using motion context and multiple input observation types
CN103326955B (en) * 2012-03-20 2016-09-07 华为终端有限公司 Information acquisition method and apparatus
US8997169B2 (en) 2012-03-23 2015-03-31 Sony Corporation System, method, and infrastructure for synchronized streaming of content
CN102739661B (en) * 2012-06-18 2015-07-15 深圳市云动创想科技有限公司 Method and system for network audio sync output on basis of data statistics
US9787523B2 (en) * 2012-07-05 2017-10-10 Eric Lazarus Managing data in a data queue including synchronization of media on multiple devices
US9423252B2 (en) 2012-09-11 2016-08-23 Apple Inc. Using clustering techniques to improve magnetometer bias estimation
US9510055B2 (en) 2013-01-23 2016-11-29 Sonos, Inc. System and method for a media experience social interface
US9307508B2 (en) 2013-04-29 2016-04-05 Google Technology Holdings LLC Systems and methods for syncronizing multiple electronic devices
US9151610B2 (en) 2013-06-08 2015-10-06 Apple Inc. Validating calibrated magnetometer data
CN103338204B (en) * 2013-07-05 2016-12-28 深圳市云动创想科技有限公司 An audio output method and system for synchronizing
US9386123B2 (en) * 2013-07-23 2016-07-05 Adobe Systems Incorporated Distributed audio playback and recording
US20150066175A1 (en) * 2013-08-29 2015-03-05 Avid Technology, Inc. Audio processing in multiple latency domains
US20150095679A1 (en) 2013-09-30 2015-04-02 Sonos, Inc. Transitioning A Networked Playback Device Between Operating Modes
US9720576B2 (en) 2013-09-30 2017-08-01 Sonos, Inc. Controlling and displaying zones in a multi-zone system
US9288596B2 (en) 2013-09-30 2016-03-15 Sonos, Inc. Coordinator device for paired or consolidated players
US9654545B2 (en) 2013-09-30 2017-05-16 Sonos, Inc. Group coordinator device selection
WO2015050408A1 (en) * 2013-10-04 2015-04-09 Samsung Electronics Co., Ltd. Method and apparatus for sharing and displaying writing information
US9210204B2 (en) * 2013-10-31 2015-12-08 At&T Intellectual Property I, Lp Synchronizing media presentation at multiple devices
US10127012B2 (en) * 2013-12-27 2018-11-13 Intel Corporation Scalable input/output system and techniques to transmit data between domains without a central processor
KR20150081886A (en) * 2014-01-07 2015-07-15 삼성전자주식회사 Av device and control method thereof
US9300647B2 (en) 2014-01-15 2016-03-29 Sonos, Inc. Software application and zones
US9679054B2 (en) 2014-03-05 2017-06-13 Sonos, Inc. Webpage media playback
EP2924946B1 (en) * 2014-03-28 2016-09-21 Telefonica Digital España, S.L.U. A computer implemented method and system for alerting an incoming communication in a communication application and computer programs thereof
US9874997B2 (en) 2014-08-08 2018-01-23 Sonos, Inc. Social playback queues
US9860286B2 (en) 2014-09-24 2018-01-02 Sonos, Inc. Associating a captured image with a media item
US9959087B2 (en) 2014-09-24 2018-05-01 Sonos, Inc. Media item context from social media
US9723038B2 (en) 2014-09-24 2017-08-01 Sonos, Inc. Social media connection recommendations based on playback information
US9690540B2 (en) 2014-09-24 2017-06-27 Sonos, Inc. Social media queue
US20160132287A1 (en) * 2014-11-12 2016-05-12 Microsoft Technology Licensing, Llc Dynamic Reconfiguration of Audio Devices
CN105657495B (en) * 2015-12-31 2018-10-19 南京邮电大学 A multi-intelligent terminal synchronous playback method and apparatus
US9886234B2 (en) 2016-01-28 2018-02-06 Sonos, Inc. Systems and methods of distributing audio to one or more playback devices
WO2018152242A1 (en) * 2017-02-15 2018-08-23 Amazon Technologies, Inc. Selection of master device for synchronized audio

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664044A (en) * 1994-04-28 1997-09-02 International Business Machines Corporation Synchronized, variable-speed playback of digitally recorded audio and video
US5664226A (en) * 1994-09-08 1997-09-02 International Business Machines Corporation System for merging plurality of atomic data elements into single synchronized file by assigning ouput rate to each channel in response to presentation time duration
EP0830026A2 (en) 1989-12-22 1998-03-18 Avid Technology, Inc. Apparatus and method for playing digitized media data
US6092119A (en) * 1994-02-14 2000-07-18 Sony Corporation Random access audio/video processor with compressed video resampling to allow higher bandwidth throughput
US20020081098A1 (en) 2000-12-21 2002-06-27 Koninklijke Philips Electronics N.V. Compressed-data processing arrangement and related method
US20040128402A1 (en) 2000-09-27 2004-07-01 Weaver David John Architecture for optimizing audio and video output states for multimeda devices
US20050201398A1 (en) 2003-12-22 2005-09-15 Naik Uday R. Optimized back-to-back enqueue/dequeue via physical queue parallelism
US20050226233A1 (en) 2004-03-31 2005-10-13 Kryuchkov Sergey V Method and system for facilitating network troubleshooting
US20050240745A1 (en) 2003-12-18 2005-10-27 Sundar Iyer High speed memory control and I/O processor system
US7024575B2 (en) * 2002-11-14 2006-04-04 Intel Corporation Apparatus and method for time synchronization of a plurality of multimedia streams
US20060074637A1 (en) 2004-10-01 2006-04-06 Microsoft Corporation Low latency real-time audio streaming
US7084898B1 (en) * 2003-11-18 2006-08-01 Cisco Technology, Inc. System and method for providing video conferencing synchronization
US7266713B2 (en) * 2004-01-09 2007-09-04 Intel Corporation Apparatus and method for adaptation of time synchronization of a plurality of multimedia streams
US7821574B2 (en) * 2003-04-05 2010-10-26 Apple Inc. Method and apparatus for synchronizing audio and video streams

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5245667A (en) * 1991-04-03 1993-09-14 Frox, Inc. Method and structure for synchronizing multiple, independently generated digital audio signals
GB2311917B (en) * 1996-04-02 2000-11-01 Sony Uk Ltd Audio signal processor
JP3288282B2 (en) * 1997-10-20 2002-06-04 矢崎総業株式会社 Communication method and a communication system,
US6862635B1 (en) 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6463486B1 (en) * 1999-04-06 2002-10-08 Microsoft Corporation System for handling streaming information using a plurality of reader modules by enumerating output pins and associated streams of information
EP1222822B1 (en) 1999-10-07 2004-09-08 Thomson Licensing S.A. Trick play signal generation for a digital video recorder
US6598172B1 (en) * 1999-10-29 2003-07-22 Intel Corporation System and method for clock skew compensation between encoder and decoder clocks by calculating drift metric, and using it to modify time-stamps of data packets
GB0000873D0 (en) 2000-01-14 2000-03-08 Koninkl Philips Electronics Nv Interconnection of audio/video devices
US6993251B1 (en) 2000-03-31 2006-01-31 Matsushita Electric Industrial Co., Ltd. Method and apparatus for concealing disk soft errors in recorded digital television signals
US6715036B1 (en) * 2000-08-01 2004-03-30 International Business Machines Corporation Method, system, and data structures for transferring blocks of data from a storage device to a requesting application
US7281053B2 (en) * 2000-10-13 2007-10-09 Aol Llc Method and system for dynamic latency management and drift correction
US7610205B2 (en) * 2002-02-12 2009-10-27 Dolby Laboratories Licensing Corporation High quality time-scaling and pitch-scaling of audio signals
US7324857B2 (en) * 2002-04-19 2008-01-29 Gateway Inc. Method to synchronize playback of multicast audio streams on a local network
US7262716B2 (en) * 2002-12-20 2007-08-28 Texas Instruments Incoporated Asynchronous sample rate converter and method
US7426417B1 (en) * 2003-04-05 2008-09-16 Apple Inc. Method and apparatus for efficiently accounting for the temporal nature of audio processing
US9207905B2 (en) * 2003-07-28 2015-12-08 Sonos, Inc. Method and apparatus for providing synchrony group status information
US8234395B2 (en) * 2003-07-28 2012-07-31 Sonos, Inc. System and method for synchronizing operations among a plurality of independently clocked digital data processing devices
US8868698B2 (en) * 2004-06-05 2014-10-21 Sonos, Inc. Establishing a secure wireless network with minimum human intervention
US7631119B2 (en) 2004-06-25 2009-12-08 Apple Inc. Techniques for providing audio for synchronized playback by multiple devices
US8190680B2 (en) * 2004-07-01 2012-05-29 Netgear, Inc. Method and system for synchronization of digital media playback

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0830026A2 (en) 1989-12-22 1998-03-18 Avid Technology, Inc. Apparatus and method for playing digitized media data
US6092119A (en) * 1994-02-14 2000-07-18 Sony Corporation Random access audio/video processor with compressed video resampling to allow higher bandwidth throughput
US5664044A (en) * 1994-04-28 1997-09-02 International Business Machines Corporation Synchronized, variable-speed playback of digitally recorded audio and video
US5664226A (en) * 1994-09-08 1997-09-02 International Business Machines Corporation System for merging plurality of atomic data elements into single synchronized file by assigning ouput rate to each channel in response to presentation time duration
US20040128402A1 (en) 2000-09-27 2004-07-01 Weaver David John Architecture for optimizing audio and video output states for multimeda devices
US20020081098A1 (en) 2000-12-21 2002-06-27 Koninklijke Philips Electronics N.V. Compressed-data processing arrangement and related method
US7024575B2 (en) * 2002-11-14 2006-04-04 Intel Corporation Apparatus and method for time synchronization of a plurality of multimedia streams
US7821574B2 (en) * 2003-04-05 2010-10-26 Apple Inc. Method and apparatus for synchronizing audio and video streams
US7084898B1 (en) * 2003-11-18 2006-08-01 Cisco Technology, Inc. System and method for providing video conferencing synchronization
US20050240745A1 (en) 2003-12-18 2005-10-27 Sundar Iyer High speed memory control and I/O processor system
US7657706B2 (en) * 2003-12-18 2010-02-02 Cisco Technology, Inc. High speed memory and input/output processor subsystem for efficiently allocating and using high-speed memory and slower-speed memory
US20050201398A1 (en) 2003-12-22 2005-09-15 Naik Uday R. Optimized back-to-back enqueue/dequeue via physical queue parallelism
US7266713B2 (en) * 2004-01-09 2007-09-04 Intel Corporation Apparatus and method for adaptation of time synchronization of a plurality of multimedia streams
US20050226233A1 (en) 2004-03-31 2005-10-13 Kryuchkov Sergey V Method and system for facilitating network troubleshooting
US20060074637A1 (en) 2004-10-01 2006-04-06 Microsoft Corporation Low latency real-time audio streaming

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Clifton, D. "Pipe.C", A Kla2Module, downloaded from the Internet http://www.codelode.com/Kernel/kla2pipec.html, dated 2003, 11 pages.
Current Claims, Application Serial No. 05758075.5-Dec. 2009 (9 pages).
Current Claims, Application Serial No. 05758075.5—Dec. 2009 (9 pages).
European Office Action, Application Serial No. 05758075.5 dated Nov. 23, 2009 (9 pages).
Huhhes, M. "Tuning streams inside out, Part 2: Optimizing internal Java I/O" XP-002348074, dated Sep. 3, 2002, 18 pages.

Cited By (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10140085B2 (en) 2003-07-28 2018-11-27 Sonos, Inc. Playback device operating states
US10120638B2 (en) 2003-07-28 2018-11-06 Sonos, Inc. Synchronizing operations among a plurality of independently clocked digital data processing devices
US9348354B2 (en) 2003-07-28 2016-05-24 Sonos, Inc. Systems and methods for synchronizing operations among a plurality of independently clocked digital data processing devices without a voltage controlled crystal oscillator
US9354656B2 (en) 2003-07-28 2016-05-31 Sonos, Inc. Method and apparatus for dynamic channelization device switching in a synchrony group
US10157034B2 (en) 2003-07-28 2018-12-18 Sonos, Inc. Clock rate adjustment in a multi-zone system
US10157035B2 (en) 2003-07-28 2018-12-18 Sonos, Inc. Switching between a directly connected and a networked audio source
US10031715B2 (en) 2003-07-28 2018-07-24 Sonos, Inc. Method and apparatus for dynamic master device switching in a synchrony group
US9658820B2 (en) 2003-07-28 2017-05-23 Sonos, Inc. Resuming synchronous playback of content
US10157033B2 (en) 2003-07-28 2018-12-18 Sonos, Inc. Method and apparatus for switching between a directly connected and a networked audio source
US9727304B2 (en) 2003-07-28 2017-08-08 Sonos, Inc. Obtaining content from direct source and other source
US9727302B2 (en) 2003-07-28 2017-08-08 Sonos, Inc. Obtaining content from remote source for playback
US9727303B2 (en) 2003-07-28 2017-08-08 Sonos, Inc. Resuming synchronous playback of content
US10146498B2 (en) 2003-07-28 2018-12-04 Sonos, Inc. Disengaging and engaging zone players
US9734242B2 (en) 2003-07-28 2017-08-15 Sonos, Inc. Systems and methods for synchronizing operations among a plurality of independently clocked digital data processing devices that independently source digital data
US9733891B2 (en) 2003-07-28 2017-08-15 Sonos, Inc. Obtaining content from local and remote sources for playback
US9733892B2 (en) 2003-07-28 2017-08-15 Sonos, Inc. Obtaining content based on control by multiple controllers
US9733893B2 (en) 2003-07-28 2017-08-15 Sonos, Inc. Obtaining and transmitting audio
US9740453B2 (en) 2003-07-28 2017-08-22 Sonos, Inc. Obtaining content from multiple remote sources for playback
US9778898B2 (en) 2003-07-28 2017-10-03 Sonos, Inc. Resynchronization of playback devices
US9778900B2 (en) 2003-07-28 2017-10-03 Sonos, Inc. Causing a device to join a synchrony group
US10133536B2 (en) 2003-07-28 2018-11-20 Sonos, Inc. Method and apparatus for adjusting volume in a synchrony group
US9778897B2 (en) 2003-07-28 2017-10-03 Sonos, Inc. Ceasing playback among a plurality of playback devices
US9977561B2 (en) 2004-04-01 2018-05-22 Sonos, Inc. Systems, methods, apparatus, and articles of manufacture to provide guest access
US9866447B2 (en) 2004-06-05 2018-01-09 Sonos, Inc. Indicator on a network device
US9787550B2 (en) 2004-06-05 2017-10-10 Sonos, Inc. Establishing a secure wireless network with a minimum human intervention
US9960969B2 (en) 2004-06-05 2018-05-01 Sonos, Inc. Playback device connection
US10097423B2 (en) 2004-06-05 2018-10-09 Sonos, Inc. Establishing a secure wireless network with minimum human intervention
US9977648B2 (en) 2004-06-25 2018-05-22 Apple Inc. Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US9569169B2 (en) 2004-06-25 2017-02-14 Apple Inc. Using a plurality of buffers to provide audio for synchronized playback to multiple audio devices having separate device clocks
US9813827B2 (en) 2006-09-12 2017-11-07 Sonos, Inc. Zone configuration based on playback selections
US10136218B2 (en) 2006-09-12 2018-11-20 Sonos, Inc. Playback device pairing
US9756424B2 (en) 2006-09-12 2017-09-05 Sonos, Inc. Multi-channel pairing in a media system
US9766853B2 (en) 2006-09-12 2017-09-19 Sonos, Inc. Pair volume control
US9749760B2 (en) 2006-09-12 2017-08-29 Sonos, Inc. Updating zone configuration in a multi-zone media system
US9860657B2 (en) 2006-09-12 2018-01-02 Sonos, Inc. Zone configurations maintained by playback device
US10028056B2 (en) 2006-09-12 2018-07-17 Sonos, Inc. Multi-channel pairing in a media system
US9928026B2 (en) 2006-09-12 2018-03-27 Sonos, Inc. Making and indicating a stereo pair
US9237324B2 (en) 2010-10-22 2016-01-12 Phorus, Inc. Playback synchronization
US10063202B2 (en) 2012-04-27 2018-08-28 Sonos, Inc. Intelligently modifying the gain parameter of a playback device
US9729115B2 (en) 2012-04-27 2017-08-08 Sonos, Inc. Intelligently increasing the sound level of player
US9374607B2 (en) 2012-06-26 2016-06-21 Sonos, Inc. Media playback system with guest access
US9516440B2 (en) 2012-10-01 2016-12-06 Sonos Providing a multi-channel and a multi-zone audio environment
US10051398B2 (en) 2012-10-01 2018-08-14 Sonos, Inc. Providing playback timing in a multi-zone audio environment
US20140149606A1 (en) * 2012-11-23 2014-05-29 Samsung Electronics Co., Ltd. Server, multimedia apparatus and control method thereof for synchronously playing multimedia contents through a plurality of multimedia devices
US10175930B2 (en) 2013-03-22 2019-01-08 Sonos, Inc. Method and apparatus for playback by a synchrony group
US9794707B2 (en) 2014-02-06 2017-10-17 Sonos, Inc. Audio output balancing
US9781513B2 (en) 2014-02-06 2017-10-03 Sonos, Inc. Audio output balancing
US10175932B2 (en) 2014-10-17 2019-01-08 Sonos, Inc. Obtaining content from direct source and remote source
US9665341B2 (en) 2015-02-09 2017-05-30 Sonos, Inc. Synchronized audio mixing
US9977649B2 (en) 2015-02-09 2018-05-22 Sonos, Inc. Synchronized audio mixing

Also Published As

Publication number Publication date Type
EP2466908A2 (en) 2012-06-20 application
WO2006007322A3 (en) 2006-06-15 application
US9977648B2 (en) 2018-05-22 grant
US8904066B2 (en) 2014-12-02 grant
WO2006007322A2 (en) 2006-01-19 application
US8037220B2 (en) 2011-10-11 grant
US7631119B2 (en) 2009-12-08 grant
EP2466908A3 (en) 2013-01-23 application
US20170185374A1 (en) 2017-06-29 application
WO2006007322B1 (en) 2006-08-03 application
US20050288805A1 (en) 2005-12-29 application
EP2466908B1 (en) 2016-11-16 grant
US20150186104A1 (en) 2015-07-02 application
US20160098247A1 (en) 2016-04-07 application
US9176706B2 (en) 2015-11-03 grant
US20100042238A1 (en) 2010-02-18 application
EP1769639A2 (en) 2007-04-04 application
US9569169B2 (en) 2017-02-14 grant
US20180336003A1 (en) 2018-11-22 application
US20120232682A1 (en) 2012-09-13 application
US20100042239A1 (en) 2010-02-18 application

Similar Documents

Publication Publication Date Title
US7434154B2 (en) Systems and methods for synchronizing media rendering
US5805821A (en) Video optimized media streamer user interface employing non-blocking switching to achieve isochronous data transfers
US5586264A (en) Video optimized media streamer with cache management
US5761417A (en) Video data streamer having scheduler for scheduling read request for individual data buffers associated with output ports of communication node to one storage node
US5668948A (en) Media streamer with control node enabling same isochronous streams to appear simultaneously at output ports or different streams to appear simultaneously at output ports
US5712976A (en) Video data streamer for simultaneously conveying same one or different ones of data blocks stored in storage node to each of plurality of communication nodes
US20020122080A1 (en) Portable information terminal apparatus, information processing method, computer-program storage medium, and computer-program
US7209795B2 (en) Method of synchronizing the playback of a digital audio broadcast by inserting a control track pulse
US5603058A (en) Video optimized media streamer having communication nodes received digital data from storage node and transmitted said data to adapters for generating isochronous digital data streams
US20080235566A1 (en) Presentation of media in an application
US20120257561A1 (en) Systems and methods for implementing multicasting using personal area network "pan" wireless technology
US7533182B2 (en) Portable screening room
US20080189365A1 (en) System and method for managing group interaction session states
US20020067909A1 (en) Synchronized service provision in a communications network
US8316147B2 (en) Time synchronization of multiple time-based data streams with independent clocks
US7085842B2 (en) Line navigation conferencing system
US20080005353A1 (en) Enabling a plurality of devices to control each other
US6230205B1 (en) Method and apparatus for managing delivery of multimedia content in a communications system
US20040181579A1 (en) Control unit operations in a real-time collaboration server
US20040181796A1 (en) Real-time collaboration client
US20020133247A1 (en) System and method for seamlessly switching between media streams
US20060270395A1 (en) Personal shared playback
US20040186733A1 (en) Stream sourcing content delivery system
US20070038999A1 (en) System and method for synchronizing operations among a plurality of independently clocked digital data processing devices
US6188670B1 (en) Method and system in a data processing system for dynamically controlling transmission of data over a network for end-to-end device flow control

Legal Events

Date Code Title Description
FPAY Fee payment

Year of fee payment: 4