# US 7,774,077 B1 · Sequence grabber for audio content

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 7,774,077 B1
- Document ID: US7774077B1
- Status: Granted
- Kind: B1
- Application number: 11/158,482
- Filed: 2005-06-21
- Granted: 2010-08-10
- Earliest claimed: 2005-06-21
- Assignees: Apple Inc.
- Inventors: Bradley D. Ford
- Web page: https://patentgrep.com/patent/US7774077B1

## CPC

- G11B 20/10527: {Audio or video recording; Data buffering arrangements (G11B20/12 - G11B20/18 take precedence)}
- G11B 20/00007: {Time or data compression or expansion (audio compression based on psychoacoustics G10L19/00; data processing for reproducing audio data at different playback speeds G10L21/04; video compression H04N19/00; data compression per se H03M7/30)}
- G11B 27/034: on discs (G11B27/036, G11B27/038 take precedence)
- G11B 2020/00028: {Advanced audio coding [AAC]}
- G11B 2020/10592: {specifically adapted for recording or reproducing multichannel signals}
- G11B 2020/10601: {surround sound signal}
- G11B 2020/10666: {Ring buffers, e.g. buffers wherein an iteratively progressing read or write pointer moves back to the beginning of the buffer when reaching the last storage cell}
- G11B 2020/10685: {input interface, i.e. the way data enter the buffer, e.g. by informing the sender that the buffer is busy}
- G11B: INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER (recording measured values in a way that does not require playback through a transducer G01D9/00; recording or playback apparatus using mechanically marked tape, e.g. punched paper tape, or using unit records, e.g. punched or magnetically marked cards G06K; transferring data from one type of record carrier to another G06K1/18; circuits for coupling output of reproducer to radio receiver H04B1/20; gramophone pick-ups or like acoustic electromechanical transducers or circuits therefor H04R)

## Abstract

An audio context object gathers multiple channels of audio data from an audio device and stores each channel of data separately in a ring buffer. Clients of the audio context can request any number of channels of data at any interval from the audio context. Multiple clients can share the same audio device. The ring buffer used by the audio context object stores the channels of audio data in a two-dimensional array such that each channel of audio data is stored in contiguous memory.

## Claims

### Claim 1

A method of providing selected channels of audio data to clients, the method comprising:
receiving an audio stream comprising multiple channels of audio data, wherein the multiple channels of audio data, when combined, constitute an overall audio composition;
wherein receiving said audio stream comprises:
receiving, at a first time, a first push of audio data comprising audio data of each channel of the multiple channels, and
receiving, at a second time after said first time, a second push of audio data comprising audio data of each channel of the multiple channels;
storing each channel of the audio stream in a separate section of a buffer;
wherein the buffer comprises a plurality of sections;
wherein each section of the plurality of sections stores audio data of only one channel of the multiple channels;
wherein each channel of the multiple channels is stored in only one section of the plurality of sections;
wherein storing each channel of the audio stream in a separate section of the buffer comprises:
for each audio data of each channel from the first push of audio data, storing a copy of the each audio data in the section of buffer that stores audio data of the each channel, and
for each audio data of each channel from the second push of audio data, storing a copy of the each audio data in the section of the buffer that stores audio data of the each channel;
receiving a first request from a first client for audio data of a requested channel of the multiple channels;
receiving a second request from a second client for audio data of the requested channel of the multiple channels;
wherein the first client is different from the second client;
wherein the first request and the second request are distinct requests received at distinct times; and
for the first request, providing, to the first client, audio data of the requested channel from:
(a) the copy of the audio data of the requested channel from the first push of audio data stored in the section of the buffer in which audio data for the requested channel is stored, and
(b) the copy of the audio data of the requested channel from the second push of audio data stored in the section of the buffer in which audio data for the requested channel is stored;
for the second request, providing, to the second client, audio data of the requested channel from:
(a) the copy of the audio data of the requested channel from the first push of audio data stored in the section of the buffer in which audio data for the requested channel is stored, and
(b) the copy of the audio data of the requested channel from the second push of audio data stored in the section of the buffer in which audio data for the requested channel is stored;
wherein the method is performed by one or more computing devices.

### Claim 2 (depends on 1)

The method of claim 1, wherein said multiple channels of audio data are interleaved, further comprising:
de-interleaving the multiple channels of audio data.

### Claim 3 (depends on 1)

The method of claim 1, wherein the buffer is a ring buffer.

### Claim 4 (depends on 3)

The method of claim 3, wherein receiving the audio stream comprising multiple channels of audio data further comprises receiving multiple channels of audio data in a plurality of pushes from an audio source device, and wherein each push of data corresponds to an element in the ring buffer.

### Claim 5 (depends on 4)

The method of claim 4, wherein providing audio data for the requested channel from the buffer to the first client further comprises:
reading an offset from at least one element in the ring buffer, and
reading data from a location in the buffer determined by the offset.

### Claim 6 (depends on 1)

The method of claim 1, additionally comprising:
receiving a second audio stream comprising multiple channels of audio data;
storing each channel of the second audio stream is a separate section of a second buffer;
receiving a third request from a third client for at least one channel of said second audio stream; and
for each requested channel of said second audio stream, providing data from the second buffer.

### Claim 7 (depends on 1)

The method of claim 1, wherein said audio data for the requested channel provided to the first client is used by the first client to record an audio track of a movie.

### Claim 8 (depends on 1)

The method of claim 1, wherein the requested channel is a channel of silence.

### Claim 9 (depends on 1)

The method of claim 1, wherein storing each channel of audio data comprises storing each channel of audio data contiguously in a single section of the buffer.

### Claim 10 (depends on 1)

The method of claim 1, wherein the multiple channels of the audio stream correspond to a left and right channel of an audio signal produced by an audio device.

### Claim 11 (depends on 1)

The method of claim 1, wherein said first request from the first client requests audio data of another channel of the multiple channels in addition to the audio of the requested channel, the method further comprising:
for the first request, providing, to the first client, audio data of the other requested channel from:
(a) the copy of the audio data of the other requested channel from the first push of audio data stored in the section of the buffer in which audio data for the other requested channel is stored, and
(b) the copy of the audio data of the other requested channel from the second push of audio data stored in the section of the buffer in which audio data for the other requested channel is stored.

### Claim 12 (depends on 11)

The method of claim 11, wherein said second request from the second client does not request audio data of the other channel requested by the first client in the first request, the method further comprising:
for the second request, not providing, to the second client, any audio data of the other requested channel.

### Claim 13

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 audio to multiple clients, 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:
receiving an audio stream comprising multiple channels of audio data, wherein the multiple channels of audio data, when combined, constitute an overall audio composition;
wherein receiving said audio stream comprises:
receiving, at a first time, a first push of audio data comprising audio data of each channel of the multiple channels, and
receiving, at a second time after said first time, a second push of audio data comprising audio data of each channel of the multiple channels;
storing each channel of the audio stream in a separate section of a buffer;
wherein the buffer comprises a plurality of sections;
wherein each section of the plurality of sections stores audio data of only one channel of the multiple channels;
wherein each channel of the multiple channels is stored in only one section of the plurality of sections;
wherein storing each channel of the audio stream in a separate section of the buffer comprises:
for each audio data of each channel from the first push of audio data, storing a copy of the each audio data in the section of buffer that stores audio data of the each channel, and
for each audio data of each channel from the second push of audio data, storing a copy of the each audio data in the section of the buffer that stores audio data of the each channel;
receiving a first request from a first client for audio data of a requested channel of the multiple channels;
receiving a second request from a second client for audio data of the requested channel of the multiple channels;
wherein the first client is different from the second client;
wherein the first request and the second request are distinct requests received at distinct times; and
for the first request, providing, to the first client, audio data of the requested channel from:
(a) the copy of the audio data of the requested channel from the first push of audio data stored in the section of the buffer in which audio data for the requested channel is stored, and
(b) the copy of the audio data of the requested channel from the second push of audio data stored in from the section of the buffer in which audio data for the requested channel is stored;
for the second request, providing, to the second client, audio data of the requested channel from:
(a) the copy of the audio data of the requested channel from the first push of audio data stored in the section of the buffer in which audio data for the requested channel is stored, and
(b) the copy of the audio data of the requested channel from the second push of audio data stored in the section of the buffer in which audio data for the requested channel is stored.

### Claim 14 (depends on 1)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 1.

### Claim 15 (depends on 2)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 2.

### Claim 16 (depends on 3)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 3.

### Claim 17 (depends on 4)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 4.

### Claim 18 (depends on 5)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 5.

### Claim 19 (depends on 6)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 6.

### Claim 20 (depends on 7)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 7.

### Claim 21 (depends on 8)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 8.

### Claim 22 (depends on 9)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 9.

### Claim 23 (depends on 10)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 10.

### Claim 24 (depends on 11)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 11.

### Claim 25 (depends on 12)

A non-transitory computer-readable medium storing one or more sequences of instructions which, when executed by one or more processors, causes the one or more processors to perform the method recited in claim 12.
