Wireless transmission and reception of packetized audio data combined with forward error correction

JP7686796B2Active Publication Date: 2025-06-02DOLBY INTERNATIONAL AB
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
JP2023573424
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2022-04-29
Filing Date
2022-05-30
Publication Date
2025-06-02
Estimated Expiration
2042-05-30

AI Technical Summary

Technical Problem

Wireless audio transmission over protocols like BLUETOOTH® and WiFi often results in corrupted or missing packets, leading to unsynchronized audio and video content, delays, and inefficient retransmission, particularly in real-time applications.

Method used

Implementing forward error correction techniques, such as Reed-Solomon encoding, to divide audio frames into source and parity blocks, optimizing the number of blocks based on wireless communication protocol characteristics, allowing reconstruction of corrupted or missing blocks without retransmitting entire frames.

Benefits of technology

Enhances wireless channel efficiency, reduces playback latency and latency variance, ensuring synchronized audio and video playback without interruptions.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000022_0000
    Figure 00000022_0000
  • Figure 00000023_0000
    Figure 00000023_0000
  • Figure 00000024_0000
    Figure 00000024_0000
Patent Text Reader

Abstract

A method for transmitting and receiving an audio stream is provided. For transmission, the method includes obtaining a frame of an audio signal and determining a number of source blocks for dividing the frame of the audio signal and a number of parity blocks to generate for forward error correction. The number of source blocks and the number of parity blocks are determined based on characteristics of a wireless communication protocol to be used. The wireless communication protocol may be BLUETOOTH. The parity blocks may be used by a decoder to reconstruct one or more corrupted or missing source blocks and may be obtained by Reed-Solomon encoding.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application claims priority to the following priority applications: U.S. Provisional Application No. 63 / 195,781, filed June 02, 2021 (Docket No. D21054USP1), and U.S. Provisional Application No. 63 / 363,855, filed April 29, 2022 (Docket No. D21054USP2), which are incorporated herein by reference.

[0002] Technical Field The present disclosure relates to systems, methods, and media for wireless audio stream transmission. [Background technology]

[0003] With the increasing use of networked home speaker devices, home theaters, and wireless speakers and headphones, users are increasingly using wireless communication channels for media content playback. Reliability of audio transport using wireless communication channels is important. In many wireless communication protocols, corrupted or missing audio packets are retransmitted by a transmitter device to a receiver device. However, retransmission of corrupted or missing audio packets can be harmful. For example, packet retransmission can cause audio content to become unsynchronized with video content. As another example, packet retransmission can cause real-time audio content (e.g., a telephone or video conference conversation) to be distorted or have delays. Thus, improved systems, methods, and media for wireless audio stream transmission are desired.

[0004] Notation and Nomenclature Throughout this disclosure, including the claims, the terms "speaker," "loudspeaker," and "audio reproduction transducer" are used interchangeably to refer to any sound emitting transducer (or set of transducers). A typical headphone set includes two speakers. A speaker may be implemented to include multiple transducers (e.g., woofers and tweeters) that may be driven by a single common speaker feed or multiple speaker feeds. In some examples, the speaker feeds may undergo different processing in different circuit branches coupled to different transducers.

[0005] Throughout this disclosure, including the claims, the phrase performing an operation "on" a signal or data (e.g., filtering, scaling, transforming, or applying a gain to the signal or data) is used broadly to indicate performing the operation directly on the signal or data, or on a processed version of the signal or data (e.g., on a version of the signal that has undergone preliminary filtering or preprocessing before the operation is performed).

[0006] Throughout this disclosure, including the claims, the term "system" is used broadly to denote a device, system, or subsystem. For example, a subsystem that implements a decoder may be referred to as a decoder system, and a system that includes such a subsystem (e.g., a system that generates X output signals in response to multiple inputs, where the subsystem generates M of the inputs and the other XM inputs are received from external sources) may also be referred to as a decoder system.

[0007] Throughout this disclosure, including the claims, the term "processor" is used broadly to denote a system or device that is programmable or configurable (e.g., with software or firmware) to perform operations on data (e.g., audio, video, or other image data). Examples of processors include field programmable gate arrays (or other configurable integrated circuits or chipsets), digital signal processors programmed and / or otherwise configured to perform pipeline processing on audio or other sound data, programmable general-purpose processors or computers, and programmable microprocessor chips or chipsets. Summary of the Invention [Means for solving the problem]

[0008] At least some aspects of the present disclosure may be implemented via a method. Some methods may include obtaining a frame of an audio signal. Some methods may include determining a number of source blocks into which to divide the frame of the audio signal and a number of parity blocks to generate for forward error correction, where the number of source blocks and the number of parity blocks are determined based at least in part on characteristics of a wireless communication protocol to be used to transmit the audio stream. Some methods may include dividing a frame of the audio signal into the number of source blocks. Some methods may include generating the number of parity blocks using the source blocks. Some methods may include transmitting the source blocks and the parity blocks, where the parity blocks are usable by a decoder to reconstruct one or more corrupted or missing source blocks.

[0009] In some instances, the parity blocks are generated using a Reed-Solomon encoder.

[0010] In some examples, the characteristics of the wireless communication protocol include timing information indicative of packet scheduling of the wireless communication protocol. In some examples, determining the number of parity blocks includes: determining a total number of blocks to be used to encode a frame of the audio signal based on a duration of the frame of the audio signal and the timing information indicative of packet scheduling; determining a number of source blocks; and determining the number of parity blocks by determining a difference between the total number of blocks and the number of source blocks.

[0011] In some examples, the characteristics of the wireless communication protocol include a frame size of a frame of the audio signal and / or a packet size of a packet to be used to transmit a source block of the source blocks or a parity block of the parity blocks, and in some examples, the number of source blocks to be used is determined by determining a number of packets each having the packet size for transmitting a frame having the frame size.

[0012] In some instances, the number of parity blocks identified for a frame of the audio signal may differ from the number of parity blocks generated for a preceding frame of the audio signal.

[0013] In some examples, the number of parity blocks generated for a frame of the audio signal varies in a repeatable manner determined based on timing information indicative of packet scheduling of a wireless communication protocol.

[0014] In some examples, a frame of an audio signal is not retransmitted in response to a portion of the frame being dropped or corrupted.

[0015] In some examples, the wireless communication protocol is the BLUETOOTH protocol.

[0016] Some methods may include receiving a set of source blocks and a set of parity blocks corresponding to a frame of an audio signal using a wireless communication protocol connection, the set of source blocks being at least a subset of the source blocks generated by an encoder, the set of parity blocks being at least a subset of the parity blocks generated by the encoder, and the number of source blocks and the number of parity blocks generated and transmitted by the encoder being determined based at least in part on a characteristic of the wireless communication protocol. Some methods may include determining a number of corrupted source blocks of the set of source blocks. Some methods may include determining whether to reconstruct the corrupted source blocks in response to determining that the corrupted source blocks should be reconstructed. Some methods may include presenting a version of the audio frame including the reconstructed corrupted source blocks.

[0017] In some examples, determining whether to reconstruct the corrupted source blocks includes determining whether the number of corrupted source blocks is less than the number of uncorrupted parity blocks in the received set of parity blocks.

[0018] In some examples, some methods may further include receiving a second set of source blocks and a second set of parity blocks corresponding to a second frame of the audio signal; determining a second number of corrupted source blocks in the second set of source blocks; in response to determining that the second number of corrupted source blocks in the second set of source blocks is greater than the number of parity blocks in the second set of parity blocks, generating a replacement audio frame; and presenting the replacement audio frame. In some examples, the replacement audio frame includes a reduction in an output level of the audio signal.

[0019] In some examples, reconstructing the corrupted source blocks includes providing the set of source blocks and the set of parity blocks to a Reed-Solomon decoder.

[0020] In some examples, some methods may further include storing the set of source blocks and the set of parity blocks in a buffer prior to reconstructing the corrupted source blocks, wherein an amount of audio data stored in the buffer varies over time based at least in part on packet scheduling associated with a wireless communication protocol.

[0021] In some examples, the wireless communication protocol is the BLUETOOTH protocol.

[0022] In some instances, a reconstructed version of the audio frame containing the corrupted source block is presented through a loudspeaker.

[0023] Some or all of the operations, functions, and / or methods described herein may be performed by one or more devices according to instructions (e.g., software) stored on one or more non-transitory media. Such non-transitory media may include memory devices such as those described herein, including, but not limited to, random access memory (RAM) devices, read-only memory (ROM) devices, etc. Thus, some innovative aspects of the subject matter described in this disclosure may be implemented via one or more non-transitory media having software stored thereon.

[0024] At least some aspects of the present disclosure may be implemented via an apparatus. For example, one or more devices may be capable of at least partially performing the methods disclosed herein. In some implementations, the apparatus is or includes an audio processing system having an interface system and a control system. The control system may include one or more general purpose single or multi-chip processors, digital signal processors (DSPs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs) or other programmable logic devices, discrete gate or transistor logic, discrete hardware components, or combinations thereof.

[0025] Details of one or more implementations of the subject matter described herein are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages will become apparent from the description, drawings, and claims. It should be noted that the relative dimensions of the following figures may not be drawn to scale. [Brief description of the drawings]

[0026] [Figure 1] 1 is a schematic diagram of an exemplary system for wireless audio stream transmission, according to some embodiments.

[0027] [Diagram 2]1 is a flowchart of an example process for transmitting an audio stream, according to some embodiments.

[0028] [Diagram 3] 4 is a schematic diagram of an exemplary packet for transmitting an audio stream, according to some embodiments.

[0029] [Figure 4] 1 is a flowchart of an exemplary process for receiving and presenting an audio stream, according to some embodiments.

[0030] [Diagram 5] 1 illustrates example data showing latency of an audio stream transported using techniques described herein, according to some embodiments.

[0031] [Figure 6] FIG. 1 shows a block diagram illustrating example components of an apparatus capable of implementing various aspects of the disclosure.

[0032] Like reference numbers and designations in the various drawings indicate like elements. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0033] Reliability of audio stream transmission over wireless communication links, such as BLUETOOTH, WiFi, etc., can lead to dropped or corrupted packets. In general, a dropped or corrupted packet can lead to an entire frame of audio data being retransmitted. Retransmission of a frame can lead to latency issues, for example, by pausing audio playback while waiting for the frame to be retransmitted. This can be particularly problematic during playback of audio content that includes real-time audio (e.g., telephone or teleconference conversations) and / or audio content that is synchronized with video content. Furthermore, retransmitting an entire frame when only a portion of the frame may be corrupted or dropped (e.g., if the frame is split into multiple packets and only a subset of the packets are dropped or corrupted) is an inefficient use of the wireless channel.

[0034] Described herein are systems, methods, and media for wireless audio stream transmission. The techniques described herein allow wireless channel capacity to be more efficiently utilized. In particular, the techniques described herein utilize forward error correction to reconstruct portions of dropped or corrupted frames, thereby reducing the need to retransmit dropped or corrupted frames. Additionally, the techniques described herein may reduce playback latency and reduce latency variance, thereby reducing the number of pauses in audio content playback.

[0035] In some implementations, a transmitting device, which may include an encoder, may divide a frame of an audio signal into source blocks. The transmitting device may then generate a set of parity blocks from which corrupted or dropped source blocks may be reconstructed. In particular, each block may include a mathematically hashed version of the audio data for that block. The transmitting device may then transmit the source blocks and the parity blocks to a receiving device. The receiving device, which may include a decoder, may determine whether any of the source blocks were dropped or corrupted and, if so, may use the parity blocks to reconstruct the dropped or corrupted source blocks.

[0036] In some embodiments, the number of source blocks and / or the number of parity blocks may be selected to optimize channel capacity for a wireless communication protocol. For example, the number of parity blocks may be selected to be the maximum number of blocks that may be transmitted according to the packet size and packet scheduling constraints specified by the wireless communication protocol, thereby maximizing the number of source blocks that may be reconstructed. A more detailed technique for determining the number of source blocks and / or the number of parity blocks is shown in and described below in conjunction with FIG. 2. Additionally, the total number of blocks generated and transmitted per frame may be varied in a manner that optimizes channel capacity by allowing additional parity blocks to be transmitted per frame, as shown and described in more detail below in conjunction with FIGs. 2 and 3.

[0037] It should be noted that a variety of forward error correction techniques or algorithms may be utilized in conjunction with the techniques described herein. Examples include Reed-Solomon encoding, Hamming encoding, binary convolutional encoding, low density parity check encoding, etc. Forward error correction techniques are further described in "Forward Error Correction Techniques for Digital Signal Processors," IEEE Transactions on Information and Communications Technology, Vol. 13, No. 1, 2003, pp. 1311-1315, 2003, which is incorporated herein by reference in its entirety. [Non-Patent Document 1] Watson, M., Begen, A., and Roca, V. Forward Error Correction (FEC) Framework RFC 6363, 2011

[0038] 1 illustrates an example of a system 100 for compressed audio transport in accordance with some embodiments. As shown, the system 100 includes a transmitting device 102 that packetizes audio frames and transmits the packets, and a receiving device 104 that receives the packets and reconstructs the audio frames based on the received packets.

[0039] In some embodiments, the encoder 108 of the transmitting device 102 may obtain the input audio frame 106. In some embodiments, the input audio frame 106 may have any suitable duration (e.g., 10 ms, 32 ms, 40 ms, etc.). In some embodiments, the encoder 108 may obtain the input audio frame 106 in any suitable manner, such as by retrieving the input audio frame 106 from a memory that stores the audio stream, by identifying the next audio frame of the audio stream, etc.

[0040] In some embodiments, the encoder 108 may divide the input audio frame 106 into a set of blocks. The set of blocks may include a set of source blocks 110. Note that the set of source blocks is generally represented herein as having K source blocks. The set of blocks may further include a set of parity blocks 112. Note that the set of parity blocks is generally represented herein as having P parity blocks. As shown in FIG. 1, the set of blocks is generally represented as having N blocks, where N is represented by K+P (e.g., the number of source blocks+the number of parity blocks). In some embodiments, the number of source blocks and the number of parity blocks may depend on characteristics of a wireless transmission protocol used by the transmitting device 102 and the receiving device 104, as shown and described in more detail below in connection with FIG. 2.

[0041] In some embodiments, the transmitter 114 may transmit the set of source blocks 110 and the set of parity blocks 112. For example, the transmitter 114 may wirelessly transmit data represented by the set of source blocks 110 and the set of parity blocks 112 utilizing one or more antennas. In some embodiments, the transmitter 114 may transmit the set of source blocks 110 and the set of parity blocks 112 as a sequence of packets 116, with each packet of the sequence of packets 116 corresponding to a block of the set of source blocks 110 or the set of parity blocks 112. In some embodiments, the transmitter 114 may transmit the sequence of packets 116 in accordance with a scheduling protocol or scheduling constraints specified by or associated with a wireless communication protocol utilized by the transmitter 114.

[0042] With reference to the receiving device 104, the receiver 118 of the receiving device 104 may receive the sequence of packets 120. For example, the receiver 118 may utilize one or more antennas to wirelessly receive packets of the sequence of packets 116 transmitted by the transmitter 114. As shown in FIG. 1, in some embodiments, the received sequence of packets 120 may include a subset of packets transmitted by the transmitter 114 of the transmitting device 102. For example, in the example shown in FIG. 2, two packets corresponding to two source blocks were dropped during transmission, and packets "5" and "K" are missing from the received sequence of packets 120. It should be noted that the received sequence of packets 120 is shown by way of example only. In some instances, one or more packets may include corrupted blocks, or the dropped packets may correspond to parity blocks. In other words, the received sequence of packets 120 may differ in any suitable manner from the transmitted sequence of packets 116. Alternatively, in some cases, the sequence of received packets 120 may perfectly correspond to the sequence of transmitted packets 116, indicating a complete, uncorrupted transmission of the input audio frame 106. In such cases, forward error correction utilizing the received parity blocks is not required.

[0043] The decoder 122 of the receiving device 104 may generate a reconstructed audio frame 124. For example, in some implementations, the decoder 122 may utilize forward error correction techniques, such as Reed-Solomon encoding, Hamming encoding, or the like, to reconstruct dropped and / or corrupted source blocks of the received sequence of packets 120 using parity blocks included in the sequence of packets 120, as shown and described below in connection with FIG.

[0044] In some implementations, the reconstructed audio frames 124 may then be rendered and / or played. For example, in some embodiments, the reconstructed audio frames 124 may be rendered using various algorithms to distribute one or more audio signals across speakers and / or headphones to achieve a particular perceptual impression (e.g., reflecting spatial characteristics of the audio stream specified by a content creator). As another example, in some embodiments, the reconstructed audio frames 124 may be played, such as by presenting the reconstructed audio frames 124 through one or more loudspeakers, headphones, etc. In some implementations, the reconstructed audio frames 124 may be presented in a manner that is substantially synchronized with the presentation of the video content.

[0045] It should be noted that in some implementations, packets corresponding to a compressed audio stream may be transmitted in a unicast network topology, in which one transmitting device sends packets to be received by one receiving device, or in a multicast network topology, in which one transmitting device sends packets to many receiving devices (e.g., 2, 3, 5, 10, 20, etc.).

[0046] In some embodiments, an encoder (e.g., of a transmitting device) may determine the number of source blocks and the number of parity blocks to be generated in association with a frame of the audio signal. In some implementations, the number of source blocks and the number of parity blocks may be determined such that use of wireless communication protocol channel capacity is optimized. For example, the number of source blocks and the number of parity blocks selected may be such that a certain amount of corrupted or dropped source blocks may be allowed to be reconstructed using the parity blocks such that the reconstruction results in few or no frames needing to be replaced with dummy frames or retransmitted. In one example, the number of source blocks and the number of parity blocks may be selected such that up to 30% of the source blocks for a given frame may be reconstructed. In some implementations, the number of source blocks and / or the number of parity blocks may be selected based on timing information associated with a wireless communication protocol used to transmit the audio stream. In some implementations, the timing information may include packet scheduling constraints associated with the wireless communication protocol. In some embodiments, the number of source blocks and / or the number of parity blocks may be determined based on a frame size of a frame of an audio signal and / or a packet size of a packet to be used to transmit the blocks. A more detailed technique for selecting the number of source blocks and / or the number of parity blocks in a manner that optimizes channel capacity is shown in and described below in connection with FIG. 2.

[0047] FIG. 2 illustrates an example of a process 200 for transmitting a compressed audio stream, according to some embodiments. The blocks of process 200 may be performed, in some examples, by a control system, such as control system 610 of FIG. 6. According to some examples, the blocks of process 200 may be performed by a transmitting device, such as transmitting device 102 shown in FIG. 1. In some implementations, the blocks of process 200 may be performed by an encoder and / or transmitter of the transmitting device. In some embodiments, the blocks of process 200 may be performed in an order other than that shown in FIG. 2. In some implementations, two or more blocks of process 200 may be performed substantially in parallel. In some embodiments, one or more blocks of process 200 may be omitted.

[0048] Process 200 may begin by obtaining a frame of an audio signal, at 202. For example, in some implementations, process 200 may obtain the frame from a memory or other storage location. As another example, in some embodiments, process 200 may identify a frame as the next or subsequent frame of the audio signal to be transmitted.

[0049] At 204, process 200 can identify, based at least in part on characteristics of a wireless communication protocol to be used, a number of source blocks (generally represented herein as K) into which to divide a frame of the audio signal and a number of parity blocks (generally represented herein as P) to generate for forward error correction.

[0050] In some implementations, the number of source blocks and / or the number of parity blocks may be determined based on timing information. In some embodiments, the timing information may include packet scheduling specifications or constraints associated with a wireless communication protocol. In some embodiments, a total number of blocks (e.g., source blocks plus parity blocks) N may be determined based on the timing information. For example, in some embodiments, N may be determined as the number of blocks that may be transmitted given a particular packet scheduling (e.g., a timing interval in which packets are transmitted by a transmitter) associated with a wireless communication protocol within the duration of a frame. By way of example, N may be N=(frame_duration) / (packet_interval) [N = (frame duration) / (packet interval)] can be determined by

[0051] In the above equation, "frame_duration" represents a time interval corresponding to a frame (e.g., in milliseconds or any other suitable units), and "packet_interval" represents a timing interval during which packets are transmitted (e.g., the number of milliseconds between successively transmitted packets). In some implementations, the number of source blocks (e.g., K) may be determined based on a size (e.g., in bytes) of a frame of the audio signal and a size (e.g., in bytes) of a packet associated with the wireless communication system. For example, the number of source blocks may be determined as the number of blocks required to divide a frame having a particular frame size into a set of packets, each packet having the packet size. As an example, K may be determined based on the following equation: K=(frame_size) / (packet_size) [K = (frame size) / (packet size)] can be determined by

[0052] In the above formula, "frame_size" represents the size of an audio frame (e.g., in bytes or any other suitable units) and "packet_size" represents the size of a packet to be transmitted (e.g., in bytes or any other suitable units). In some implementations, the number of parity blocks (e.g., P) may be determined as the difference between the total number of blocks and the number of source blocks. As an example, P may be P=NK It may be determined by:

[0053] The following are examples for determining the total number of blocks, the number of source blocks, and the number of parity blocks for different audio stream bit rates and different wireless communication protocols. In some embodiments, the wireless communication protocol may transmit audio packets at a predetermined packet size and using a predetermined packet scheduling interval. In some implementations, the wireless communication protocol may be one that allows for the transmission of uncompressed audio and whose available bandwidth may also be used to reliably transport compressed audio. For example, in some implementations, the packets may contain compressed audio data, for example, using 24-bit (or 16-bit, etc.) Pulse Coded Modulation (PCM). The examples shown below assume a frame duration of 32 milliseconds. However, this is only one example, and the techniques described herein may be applied to frames having different durations. Additionally, the techniques described herein may be applied to wireless communication protocols utilizing various audio stream bit rates, other packet sizes and / or packet scheduling specifications, and / or other wireless communication protocols (e.g., WiFi) other than those described in the examples below.

[0054] The following table shows the frame sizes (in bytes) that may be used for audio streams with various bit rates (in kbps). The frame size may be used to determine the number of source blocks. [Table 1]

[0055] In a first example, the wireless communication link may transport audio packets, each having a packet size of 288 bytes and a packet scheduling interval of 1 packet per millisecond. In this example, the packets may be transmitted using a packet scheduling interval of 1 packet per millisecond. Thus, for a frame size of 3072 bytes (corresponding to a bit rate of 768 kbps), the total number of blocks N may be determined as the frame duration (32 milliseconds) divided by the packet interval (1 millisecond). That is, in this case, N may be a total of 32 blocks. Continuing with this first example, the number of source blocks K may be determined as the frame size (3072 bytes) divided by the packet size (288 bytes). That is, in such a case, K may be 10.67, or rounded up to 11 source blocks. Correspondingly, the number of parity blocks P may be 32-11, or 19 parity blocks.

[0056] In a second example utilizing a packet size of 288 bytes and a packet scheduling interval of one packet per millisecond, for a frame size of 5426 bytes (corresponding to a bit rate of 1355 kbps), the total number of blocks N may be determined as the frame duration (32 milliseconds) divided by the packet interval (1 millisecond). That is, N may be a total of 32 blocks. Continuing with this second example, the number of source blocks K may be determined as the frame size (5426 bytes) divided by the packet size (288 bytes). That is, in such a case, K may be 18.82, or 19 source blocks rounded up. Note that in some implementations, a partial portion of the last source block may be used to encode bytes of the next frame. In some such implementations, these extra bytes may be used to correct any corruption in the first source block of the next frame. Additionally or alternatively, in some implementations, a copy of the first bytes of the frame may be used. Correspondingly, the number of parity blocks P may be 32-19, or 11 parity blocks. In some implementations, such as some cases where the frame duration is an integer number of milliseconds, the total number of blocks used for a frame of an audio signal may be the same regardless of the bit rate and / or frame size (e.g., a total of 32 blocks per frame). In other words, in some implementations, the total number of blocks used for a frame of an audio signal may depend on the packet scheduling interval rather than the bit rate and / or frame size. In other implementations, the total number of blocks per frame may vary based on the bit rate and / or frame size.

[0057] In an example where BLUETOOTH® is used as the wireless communication protocol, packets may have a size of up to 240 bytes (e.g., 200 bytes, 224 bytes, 230 bytes, 236 bytes, 240 bytes, etc.). BLUETOOTH packets may be transmitted using a packet scheduling interval that is a multiple of 1.25 milliseconds. For example, BLUETOOTH packets may be scheduled to be transmitted in 1.25 millisecond slots, 2.5 millisecond slots, etc. In a first example, for a frame size of 1792 bytes (corresponding to a bit rate of 448 kbps), a packet size of 224 bytes, and a packet scheduling interval of 2.5 milliseconds, the total number of blocks N may be determined as the frame duration (32 milliseconds) divided by the packet scheduling interval (2.5 milliseconds). That is, in such a case, N may be 12.8, or rounded up to a total of 13 blocks. Continuing with this first example, the number of source blocks K may be determined as the frame size (1792 bytes) divided by the packet size (224 bytes). That is, in such a case, K may be 8 source blocks. Correspondingly, the number of parity blocks P may be 13-8, or 5 parity blocks.

[0058] It should be noted that in some implementations, the number of parity blocks may effectively depend on the bit rate of the audio signal. For example, since the number of source blocks is proportional to the frame size, which is proportional to the bit rate, for a fixed total number of blocks, the number of parity blocks may be inversely proportional to the bit rate. In other words, more parity blocks may be used for lower bit rate signals compared to higher bit rate signals. It should be noted that in some implementations, the bit rate may be adapted to balance the trade-off between audio quality and forward error correction implementation. As an example, in some embodiments, the receiver device may send a message to the transmitter device that the quality of the received audio signal is degraded. Continuing with this example, the transmitter may select a lower bit rate for transmitting the audio signal, which may result in lower audio quality, but there is additional headroom for transmitting parity blocks, which may be utilized by the receiver device for forward error correction.

[0059] 2, at 206, process 200 may subdivide the frame into K source blocks. The subdivision of the frame may be by dividing the data of the frame into the K blocks such that the data of the frame is generally evenly divided among the K source blocks.

[0060] At 208, the process 200 may generate P parity blocks using the K source blocks. For example, in some implementations, the process 200 may use a particular forward error correction technique or algorithm to generate the P parity blocks using the K source blocks. Examples of forward error correction techniques that may be used include Reed-Solomon encoding, Hamming encoding, and the like. In an example where Reed-Solomon encoding is used and N=32, K=19, and P=11, a (32,19) Reed-Solomon scheme may be used. Similarly, in an example where Reed-Solomon encoding is used and N=13, K=8, and P=5, a (13,8) Reed-Solomon scheme may be used. It should be appreciated that other forward error correction techniques, such as Hamming codes, binary convolutional codes, low density parity check codes, and the like, may be used. In some implementations, the forward error correction technique used may be selected based on the correction efficiency of the technique, and / or any other considerations.

[0061] At 210, process 200 may transmit the K source blocks and the P parity blocks using a wireless communication protocol. For example, in some implementations, the source blocks and the parity blocks may be transmitted as a sequence of packets, where each packet is transmitted according to a packet scheduling constraint associated with the wireless communication protocol. For example, for some communication protocols, the sequence of packets may be transmitted as one packet per millisecond. As another example, if the wireless communication protocol is BLUETOOTH, the sequence of packets may be transmitted as one packet per 2.5 milliseconds (or any other suitable multiple of 1.25 milliseconds).

[0062] Note that in some implementations, a header may be added to the packet. For example, the header may indicate a forward error correction scheme (e.g., utilized in block 208) for generating the parity blocks. As a more specific example, the header may indicate the type of algorithm used, the total number of blocks, the number of source blocks, and / or the number of parity blocks. As another example, in some embodiments, the header may include a checksum, such as a cyclic redundancy check (CRC), that may be utilized to determine whether the packet is corrupted. As yet another example, in some embodiments, the header may include a sequence counter that may be utilized to detect dropped packets.

[0063] Process 200 may then loop back to block 202 to get another frame of the audio signal. Process 200 may loop through blocks 202-210 until the entire audio signal has been transmitted. Additionally or alternatively, in some implementations, process 200 may loop through blocks 202-210 until it receives a command to stop transmitting the audio signal (e.g., a signal received from a user device, from a remote control device, from a keyboard or other user input device, a spoken signal, a gesture associated with a command to stop transmitting the audio signal, etc.).

[0064] Note that the transmission of parity blocks may increase the overall transmission bit rate associated with the audio stream. In one example, an audio stream transmitted at 448 kbps without parity blocks may be transmitted at a bit rate of 653 kbps due to the extra data associated with the parity blocks. However, using parity blocks to reconstruct dropped or corrupted source blocks (using forward error correction) reduces or completely eliminates retransmitted frames, thereby improving the overall efficiency of the wireless channel.

[0065] In some implementations, the total number of blocks used to encode a frame may vary from frame to frame.

[0066] In some embodiments, the number of parity blocks may vary from frame to frame based on the total number of blocks utilized. For example, the total number of blocks utilized may vary, while the number of source blocks may remain fixed from frame to frame. Thus, the number of parity blocks may vary from frame to frame, e.g., to account for a varying total number of blocks with a fixed number of source blocks. In some implementations, the variation from frame to frame may occur in a repeatable manner that depends on timing information (e.g., packet scheduling constraints) associated with a particular wireless communication protocol.

[0067] As an example, in a case where BLUETOOTH® is used as the wireless communication protocol, packets (each packet corresponding to a block) may be transmitted at time intervals of 2.5 ms (or any other suitable multiple of 1.25 ms). Thus, in a case where a frame is subdivided into 9 source blocks, the first frame may be associated with 4 parity blocks for a total of 13 blocks. Since 13 blocks (corresponding to one frame of an audio signal) are transmitted in 32.5 ms (e.g., 13 x 2.5 ms), which is longer than the 32 ms duration of the frame, the transmitting device may effectively be running behind the audio stream. Thus, after a certain number of frames, the total number of blocks may be reduced (e.g., reduced by 1) to account for the extra time required to transmit blocks for the preceding frames. As an example, four frames with a total of 13 blocks (e.g., 9 source blocks and 4 parity blocks) may be transmitted, followed by a fifth frame with a total of 12 blocks (e.g., 9 source blocks and 3 parity blocks). Note that in this example, using a scheme of 13 blocks for the first four frames and 12 blocks for the fifth frame, a total of 64 blocks may be transmitted (e.g., each as a packet) across five frames. This spans 160 ms (e.g., 64 x 2.5 ms), which corresponds to a duration spanning five frames (e.g., 32 ms x 5).

[0068] FIG. 3 illustrates an exemplary packetization scheme in which the number of blocks utilized per frame varies by frame, according to some embodiments. As illustrated, for frame 1, nine source blocks and four parity blocks are transmitted. These blocks are grouped into groups of four, each block is transmitted in association with a packet, and the packets are transmitted 2.5 milliseconds apart. Thus, four blocks (source or parity) are transmitted in 10 milliseconds. Similarly, frames 2, 3, and 4 are associated with nine source blocks and four parity blocks. However, for frame 5, nine source blocks and three parity blocks (e.g., one less parity block) are transmitted, allowing the encoding scheme to realign with the frames of the audio signal, due to the extra time required to transmit 13 blocks per frame.

[0069] In some implementations, a receiving device (e.g., a BLUETOOTH or Wi-Fi connected speaker or headphones, etc.) may receive a sequence of packets, each packet corresponding to a transmitted block (e.g., a source block or a parity block). In some embodiments, a decoder of the receiving device may determine a number of corrupted or dropped blocks of a set of source blocks associated with the received sequence of packets. In some implementations, in response to determining that at least one source block was corrupted or dropped during transmission, the decoder may determine whether the corrupted or dropped blocks can be reconstructed using the parity blocks. For example, the decoder may determine whether the number of corrupted blocks is less than the number of parity blocks. In some embodiments, in response to determining that the corrupted blocks can be reconstructed, the decoder may reconstruct the corrupted blocks and may cause an audio frame including the reconstructed source blocks to be presented. Conversely, in response to determining that the corrupted blocks cannot be reconstructed, the decoder may generate a substitute frame or a "dummy" frame and may cause the substitute frame or the dummy frame to be presented.

[0070] FIG. 4 illustrates an example of a process 400 for reconstructing source blocks and presenting an audio signal, according to some embodiments. The blocks of process 400 may be performed, in some examples, by a control system, such as control system 610 of FIG. 6. In some embodiments, the blocks of process 400 may be performed on a receiving device, such as receiving device 104 of FIG. 1. In some embodiments, the blocks of process 400 may be performed by a decoder and / or receiver of the receiving device. In some implementations, the blocks of process 400 may be performed in an order other than that shown in FIG. 4. In some embodiments, two or more blocks of process 400 may be performed substantially in parallel. In some embodiments, one or more blocks of process 400 may be omitted.

[0071] Process 400 may begin, at 402, by receiving a set of source blocks and a set of parity blocks corresponding to a frame of an audio signal. In some embodiments, each block may be associated with a received packet of a sequence of received packets. In some implementations, process 400 may obtain a block (e.g., a source block or a parity block) from a packet. In some implementations, process 400 may obtain a block using information stored in a header of the packet.

[0072] At 404, process 400 may determine the number of corrupted or dropped source blocks of the set of source blocks. In some implementations, process 400 may identify a source block of the set of source blocks as corrupted based at least in part on a checksum (e.g., a CRC value) included in a header of a packet corresponding to the source block. The corrupted source blocks may be identified using any suitable forward error correction technique, such as using Reed-Solomon encoding, or the like. In some implementations, process 400 may identify the number of dropped source blocks by identifying a difference between an expected number of source blocks (e.g., as specified by the forward error correction scheme being used) and the received number of source blocks.

[0073] At 406, process 400 may determine whether the number of corrupted or dropped source blocks is zero. If process 400 determines at 406 that the number of corrupted or dropped source blocks is zero ("yes" at 406), process 400 may proceed to 408, where the set of source blocks may be used to generate an audio frame. For example, process 400 may reconstruct a full-length audio frame using data contained in source blocks of the set of source blocks. Process 400 may then proceed to block 414, where the audio frame may be presented (e.g., via one or more speakers, one or more headphones, etc.).

[0074] Conversely, if at 406 process 400 determines that the number of corrupted or dropped blocks is not zero ("no" at 406), process 400 may proceed to block 410 and determine whether the number of corrupted or dropped source blocks is less than or equal to the number of parity blocks. For example, if the number of received parity blocks is three, process 400 may determine that the number of corrupted or dropped blocks is less than or equal to the number of parity blocks if the number of corrupted or dropped blocks is one, two, or three. Note that at 402, the number of received parity blocks may be less than the number of parity blocks transmitted by the transmitting device (e.g., in cases where parity blocks are dropped). Thus, in some embodiments, process 400 may compare the number of corrupted or dropped source blocks to the number of received parity blocks (e.g., rather than the number of expected or transmitted parity blocks). Additionally or alternatively, in some implementations, one or more of the received parity blocks may be corrupted. Thus, in some implementations, process 400 may compare the number of corrupted or dropped source blocks to the number of uncorrupted received parity blocks (e.g., parity blocks that may be used in forward error correction).

[0075] If the process 400 determines at 410 that the number of corrupted or dropped source blocks is less than or equal to the number of parity blocks ("yes" at 410), the process 400 may proceed to 412 and generate an audio frame by reconstructing the corrupted or dropped source blocks. For example, the process 400 may use a forward error correction scheme to reconstruct the corrupted or dropped source blocks using the received parity blocks. As described above, the forward error correction scheme (e.g., Reed-Solomon encoding, Hamming encoding, etc.) used to generate the parity blocks may similarly be used to reconstruct the corrupted or dropped source blocks. In some implementations, the forward error correction scheme to be used may be specified in one or more packet headers of the packets corresponding to the received source blocks and the received parity blocks (e.g., as described above with respect to block 402).

[0076] Conversely, if at 410 the process 400 determines that the number of corrupted or dropped source blocks exceeds the number of parity blocks ("no" at 410), the process 400 may proceed to 414 and generate a substitute or dummy audio frame. In some embodiments, the substitute or dummy audio frame may soft mute the output of the decoder, for example, by lowering the overall sound level during the duration of the presentation of the audio frame. In some implementations, audio data from a preceding frame and / or a next frame may be utilized to generate the substitute frame. For example, in some implementations, interpolation may be used to generate data corresponding to the substitute frame. In one example, the interpolation may be performed between audio data from a previous frame and audio data of a next frame.

[0077] Regardless of whether block 412 or 414 is performed, at 416, process 400 may present the audio frame. For example, process 400 may present the audio frame (either the audio frame including the reconstructed corrupted or dropped source block or the replacement / dummy audio frame) via one or more speakers, one or more headphones, etc. It should be noted that prior to presenting the audio frame, in some embodiments, process 400 may render the audio frame, e.g., by routing an audio signal to one or more speakers, headphones, etc. to create a particular perceptual impression.

[0078] In some implementations, the techniques described above may generate a number of source blocks and a number of parity blocks that are optimized for the channel capacity of a particular type of wireless link. More specifically, the number of source blocks and the number of parity blocks may be selected (using the techniques described herein) such that a relatively small number of frames need to be retransmitted or replaced with dummy frames due to not having enough parity blocks to reconstruct corrupted or dropped source blocks. Furthermore, by determining the number of source blocks and the number of parity blocks based on packet scheduling constraints, the techniques described herein may allow a buffer associated with a decoder (e.g., at a receiving device) to generally maintain a non-zero amount of data or a non-zero duration of audio data, thereby reducing overall system latency. For example, in instances where the total number of blocks (e.g., source blocks and parity blocks) associated with a frame are transmitted for a duration that exceeds the duration of the frame, there may be an initial latency at the decoder to receive all of the blocks corresponding to the frame. However, because of the initial latency, the decoder may be able to maintain a buffer that thereafter typically remains at about 0 milliseconds. This can allow the receiving device to play the audio stream continuously without pauses or interruptions to allow the buffer to catch up, which may be particularly advantageous in cases where real-time audio data is being presented and / or where audio content is being presented that is synchronized with video content.

[0079] FIG. 5 illustrates an example of buffer latency utilizing the source and parity block scheme shown in connection with FIG. 3 and described above. FIG. 3 described an exemplary source and parity block scheme in the context of BLUETOOTH communications in which packets (each corresponding to a block) are sent at 2.5 ms intervals, with four blocks sent per 10 ms isochronous interval. In the example shown in FIG. 3 and described above, for the first four frames, nine source blocks and four parity blocks are sent, and for the fifth frame, nine source blocks and three parity frames are sent.

[0080] Referring to FIG. 5, curve 502 illustrates the duration of audio data stored in the decoder's buffer in milliseconds. Each step increment of curve 502 corresponds to blocks received at 10 millisecond isochronous intervals (e.g., four blocks received at a packet space interval of 2.5 milliseconds). For the first four frames, 13 blocks are utilized, so the decoder receives all of the audio data for the frame (having a duration of 32 milliseconds) in 40 milliseconds (e.g., four isochronous intervals). In other words, the 13th block is received during the fourth isochronous interval, which spans 30 to 40 milliseconds, so the decoder is ready to present the first audio frame after 40 milliseconds. Thus, as illustrated by curve 502 in FIG. 5, the duration of the audio data stored in the buffer drops from 40 milliseconds to 8 milliseconds, so that after 40 milliseconds, one frame's worth of audio data (e.g., 32 milliseconds) is presented. Curve 504 illustrates the duration of unplayed audio data stored in the buffer. As illustrated, due to the mismatch between the duration required to receive a 32 ms frame of audio data versus the duration of an audio frame, the buffer always has at least partial data for the next frame. Furthermore, due to forward error correction (e.g., parity blocks), the data in the buffer can generally correspond to available source blocks (e.g., available as is and / or can be reconstructed using the parity blocks), thereby allowing for more robust audio playback. This may allow the decoder to allow continuous or near-continuous audio playback without requiring pauses to allow time to buffer additional data.

[0081] FIG. 6 is a block diagram illustrating examples of components of a device capable of implementing various aspects of the present disclosure. As with other figures provided herein, the types and numbers of elements shown in FIG. 6 are provided merely as examples. Other implementations may include more, fewer, and / or different types and numbers of elements. According to some examples, device 600 may be configured to perform at least some of the methods disclosed herein. In some implementations, device 600 may be or include a television, one or more components of an audio system, a mobile device (such as a cellular phone), a laptop computer, a tablet device, a smart speaker, or another type of device.

[0082] According to some alternative implementations, the apparatus 600 may be or include a server. In some such examples, the apparatus 600 may be or include an encoder. Thus, in some cases, the apparatus 600 may be a device configured for use in an audio environment, such as a home audio environment, and in other cases, the apparatus 600 may be a device configured for use in the "cloud," e.g., a server.

[0083] In this example, the device 600 includes an interface system 605 and a control system 610. The interface system 605, in some implementations, may be configured to communicate with one or more other devices of an audio environment. The audio environment, in some examples, may be a home audio environment. In other examples, the audio environment may be another type of environment, such as an office environment, an automobile environment, a train environment, a street or sidewalk environment, a park environment, etc. The interface system 605, in some implementations, may be configured to exchange control information and associated data with audio devices of the audio environment. The control information and associated data, in some examples, may relate to one or more software applications that the device 600 is executing.

[0084] The interface system 605 may be configured to receive or provide a content stream in some implementations. The content stream may include audio data. The audio data may include, but is not limited to, an audio signal. In some instances, the audio data may include spatial data, such as channel data and / or spatial metadata. In some examples, the content stream may include video data and audio data corresponding to the video data.

[0085] The interface system 605 may include one or more network interfaces and / or one or more external device interfaces (such as one or more Universal Serial Bus (USB) interfaces). According to some implementations, the interface system 605 may include one or more wireless interfaces. The interface system 605 may include one or more devices for implementing a user interface, such as one or more microphones, one or more speakers, a display system, a touch sensor system, and / or a gesture sensor system. In some examples, the interface system 605 may include one or more interfaces between the control system 610 and a memory system, such as the optional memory system 615 shown in FIG. 6. However, the control system 610 may include a memory system in some cases. The interface system 605 may be configured to receive input from one or more microphones in the environment in some implementations.

[0086] The control system 610 may include, for example, a general-purpose single or multi-chip processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, and / or discrete hardware components.

[0087] In some implementations, the control system 610 may reside in more than one device. For example, in some implementations, a portion of the control system 610 may reside in a device within one of the environments illustrated herein, and another portion of the control system 610 may reside in a device that is external to the environment, such as a server, a mobile device (e.g., a smartphone or a tablet computer), etc. In other examples, a portion of the control system 610 may reside in a device within one environment, and another portion of the control system 610 may reside in one or more other devices of the environment. For example, a portion of the control system 610 may reside in a device implementing a cloud-based service, such as a server, and another portion of the control system 610 may reside in another device implementing a cloud-based service, such as another server, a memory device, etc. The interface system 605 may also reside in more than one device, in some examples.

[0088] In some implementations, the control system 610 may be configured to at least partially perform the methods disclosed herein. According to some examples, the control system 610 may be configured to implement methods such as determining a number of source blocks and / or parity blocks for a particular wireless communication protocol, generating one or more parity blocks, transmitting and / or receiving packets, reconstructing corrupted source blocks, presenting reconstructed audio frames, etc.

[0089] Some or all of the methods described herein may be performed by one or more devices according to instructions (e.g., software) stored in one or more non-transitory media. Such non-transitory media may include memory devices such as those described herein, including, but not limited to, random access memory (RAM) devices, read-only memory (ROM) devices, and the like. The one or more non-transitory media may be present, for example, in optional memory system 615 and / or control system 610 shown in FIG. 6. Thus, various innovative aspects of the subject matter described in this disclosure may be implemented in one or more non-transitory media having software stored thereon. The software may include, for example, instructions for determining a number of source blocks and / or parity blocks for a particular wireless communication protocol, generating one or more parity blocks, transmitting and / or receiving packets, reconstructing corrupted source blocks, presenting reconstructed audio frames, and the like. The software may be executable by one or more components of a control system, such as, for example, control system 610 of FIG. 6.

[0090] In some examples, the device 600 may include an optional microphone system 620 as shown in FIG. 6. The optional microphone system 620 may include one or more microphones. In some implementations, one or more of the microphones may be part of or associated with another device, such as a speaker of a speaker system, a smart audio device, or the like. In some examples, the device 600 may not include a microphone system 620. However, in some such implementations, the device 600 may still be configured to receive microphone data for one or more microphones in the audio environment via the interface system 610. In some such implementations, a cloud-based implementation of the device 600 may be configured to receive microphone data, or noise metrics at least partially corresponding to the microphone data, from one or more microphones in the audio environment via the interface system 610.

[0091] According to some implementations, the device 600 may include an optional loudspeaker system 625 shown in FIG. 6. The optional loudspeaker system 625 may include one or more loudspeakers, which may also be referred to herein as a "speaker" or, more generally, an "audio reproduction transducer." In some examples (e.g., cloud-based implementations), the device 600 may not include the loudspeaker system 625. In some implementations, the device 600 may include headphones. The headphones may be connected or coupled to the device 600 via a headphone jack or via a wireless connection (e.g., BLUETOOTH®).

[0092] Some aspects of the disclosure include systems or devices configured (e.g., programmed) to perform one or more examples of the disclosed methods, and tangible computer-readable media (e.g., disks) storing code for implementing one or more examples of the disclosed methods or steps thereof. For example, some disclosed systems may be or include a programmable general-purpose processor, digital signal processor, or microprocessor programmed with software or firmware and / or configured to perform any of a variety of operations on data, including embodiments of the disclosed methods or steps thereof. Such a general-purpose processor may be or include a computer system that includes an input device, a memory, and a processing subsystem programmed (and / or otherwise configured) to perform one or more examples of the disclosed methods (or steps thereof) in response to asserted data.

[0093] Some embodiments may be implemented as a configurable (e.g., programmable) digital signal processor (DSP) configured (e.g., programmed and otherwise configured) to perform the necessary processing on the audio signal(s), including performing one or more examples of the disclosed methods. Alternatively, embodiments of the disclosed system (or elements thereof) may be implemented as a general-purpose processor (e.g., a personal computer (PC) or other computer system or microprocessor, which may include input devices and memory) that is programmed with software or firmware and / or otherwise configured to perform any of the various operations, including one or more examples of the disclosed methods. Alternatively, elements of some embodiments of the inventive system are implemented as a general-purpose processor or DSP configured (e.g., programmed) to perform one or more examples of the disclosed methods, the system also including other elements (e.g., one or more loudspeakers and / or one or more microphones). A general-purpose processor configured to perform one or more examples of the disclosed methods may be coupled to an input device (e.g., a mouse and / or a keyboard), a memory, and a display device.

[0094] Another aspect of the disclosure is a computer-readable medium (e.g., a disk or other tangible storage medium) storing code (e.g., executable code) for performing one or more examples of the disclosed methods or steps thereof.

[0095] While particular embodiments of the present disclosure and applications of the present disclosure have been described herein, it will be apparent to those skilled in the art that many variations on the embodiments and applications described herein are possible without departing from the scope of the present disclosure as described and claimed herein. Although certain forms of the present disclosure have been illustrated and described, it will be understood that the present disclosure should not be limited to the specific embodiments described and illustrated, or to the specific methods described.

Claims

1. 13. A method of transmitting an audio stream, comprising: acquiring a frame of an audio signal; determining a number of source blocks into which to divide a frame of the audio signal and a number of parity blocks to generate for forward error correction, the number of source blocks and the number of parity blocks being determined based at least in part on characteristics of a wireless communication protocol to be used to transmit the audio stream; dividing a frame of the audio signal into said number of source blocks; generating said number of parity blocks using said source blocks; transmitting the source blocks and the parity blocks, the parity blocks being usable by a decoder to reconstruct one or more corrupted or missing source blocks; method.

2. The method of claim 1 , wherein the parity blocks are generated using a Reed-Solomon encoder.

3. The method of claim 1 or 2, wherein the characteristics of the wireless communication protocol include timing information indicative of packet scheduling of the wireless communication protocol.

4. The determination of the number of parity blocks includes: determining a total number of blocks to be used to encode the frame of the audio signal based on a duration of the frame of the audio signal and the timing information indicative of packet scheduling; determining a number of said source blocks; determining the number of parity blocks by determining the difference between the total number of blocks and the number of source blocks; The method according to claim 3.

5. 5. The method according to claim 1, wherein the characteristics of the wireless communication protocol include a frame size of the frames of the audio signal and / or a packet size of packets used to transmit a source block of the source blocks or a parity block of the parity blocks.

6. 6. The method of claim 5, wherein the number of source blocks to be used is determined by determining a number of packets each having the packet size for transmitting the frame having the frame size.

7. 7. A method according to claim 1, wherein the number of parity blocks identified for the frame of the audio signal is different from the number of parity blocks generated for a previous frame of the audio signal.

8. 8. The method according to claim 1, wherein the number of parity blocks generated for frames of the audio signal varies in a repeatable manner determined based on timing information indicative of packet scheduling of the wireless communication protocol.

9. 9. A method according to any preceding claim, wherein a frame of the audio signal is not retransmitted in response to a portion of the frame being dropped or corrupted.

10. The method according to any one of claims 1 to 9, wherein the wireless communication protocol is the BLUETOOTH protocol.

11. 1. A method of receiving an audio stream, comprising: receiving a set of source blocks and a set of parity blocks corresponding to a frame of an audio signal using a wireless communication protocol connection, the set of source blocks being at least a subset of the source blocks generated by an encoder, the set of parity blocks being at least a subset of the parity blocks generated by the encoder, and a number of source blocks and parity blocks generated and transmitted by the encoder determined at least in part based on characteristics of the wireless communication protocol; determining a number of corrupted source blocks among the set of source blocks; in response to determining that the number of corrupted source blocks is greater than zero, determining whether to reconstruct the corrupted source blocks; in response to determining that the corrupted source block should be reconstructed, reconstructing the corrupted source block; and presenting a version of the audio frame including the reconstructed corrupted source block. method.

12. 12. The method of claim 11, wherein determining whether to reconstruct the corrupted source blocks comprises determining whether the number of the corrupted source blocks is less than a number of uncorrupted parity blocks in the received set of parity blocks.

13. receiving a second set of source blocks and a second set of parity blocks corresponding to a second frame of the audio signal; determining a second number of corrupted source blocks in a second set of source blocks; generating a replacement audio frame in response to determining that a second number of corrupted source blocks in the second set of source blocks is greater than a number of parity blocks in the second set of parity blocks; and presenting the replacement audio frame.

13. The method according to claim 11 or 12.

14. The method of claim 13 , wherein the replacement audio frame comprises a reduction in an output level of the audio signal.

15. 15. The method of claim 11, wherein reconstructing the corrupted source blocks comprises providing the set of source blocks and the set of parity blocks to a Reed-Solomon decoder.

16. 16. The method of claim 11, further comprising storing the set of source blocks and the set of parity blocks in a buffer prior to reconstructing the corrupted source blocks, wherein an amount of audio data stored in the buffer varies over time based at least in part on packet scheduling associated with the wireless communication protocol.

17. 17. The method according to any one of claims 11 to 16, wherein the wireless communication protocol is the BLUETOOTH protocol.

18. 18. The method of claim 11, wherein the version of the audio frame containing the reconstructed corrupted source block is presented via a loudspeaker.

19. Apparatus configured to implement the method according to any one of claims 1 to 18.

20. 20. One or more non-transitory media having stored thereon software comprising instructions for controlling one or more devices to perform the method of any one of claims 1 to 18.