Patent Description:
Many devices use a specific set of tones, sounds, or music to communicate states of operation to a user. For example, many gaming systems emit different sounds to indicate that a device is powering-on, powering-off, ejecting a disk, or has no disc at all. Compression algorithms are employed to make storing the associated audio data more efficient, but the required decompression is usually expensive from both a cost and resource perspective. Using uncompressed audio data overcomes these limitations but is storage-inefficient.

A compromise is to reduce the fidelity of an audio signal. Tones are first sampled in a <NUM>-bit format and then converted to a <NUM>-bit format. Approximately <NUM>,<NUM> different values can be represented by <NUM> bits (binary), but at the cost of storage. By reducing the depth of a tone to <NUM> bits, the cost of storage is nearly halved, but much of the fidelity of the signal is lost because only <NUM> different values can be represented by <NUM> bits. The data may be expanded back to <NUM> bits, but once the fidelity has been lost, it cannot be recovered.

Nevertheless, such compression and expansion of audio data has been employed in various applications to make them more storage or bandwidth efficient, even at the cost of fidelity. For example, many telephony systems reduce the fidelity of the signals that carry voice communications in order to conserve bandwidth. This has the effect of making the sound of phone calls less faithful than the sound of an in-person conversation.

Most of the dynamic range of an audio signal is concentrated within a minority of the samples of its sinusoidal waveform. This means that the loss of fidelity that occurs when an audio signal is compressed is concentrated on the lower (or softer) portions of the dynamic range. Expanding the data to a greater depth may help to put the data in a format suitable for further processing, but it does not return to its original fidelity. The result is an audible signal of poor quality that lacks too much of its original dynamic range - especially lower in the range.

<CIT> discloses quantization of digital audio signal information. More particularly, this document relates to the reduction of perceptible effects of quantizing noise by reserving a special quantization level for low-level signals in encoding and decoding applications.

<CIT> and <CIT> disclose further approaches for quantizing/ compressing sampled values of audio data.

It is therefore the object of the invention to provide an improved method and computing apparatus for compressing sampled values of audio data having a dynamic range.

Technology is disclosed herein that enhances the compression and decompression of audio data, allowing greater fidelity to be maintained in the lower ranges of signals than otherwise, while mitigating the performance and cost impact of decompression.

In an implementation, sampled values of an audio signal have a dynamic range. A division of the dynamic range, into at least a lower range and an upper range, is identified based on a fixed mapping of some of the sampled values to a subset of quanta in a set of quanta having a depth less than a depth of the sampled values. Then an adaptive mapping of a remaining portion of the sampled values to a remaining subset of quanta in the set of quanta is also identified, based at least on a dimension of the upper range. The fixed mapping is used to encode the lower range of the sampled values, while the adaptive mapping is used to encode the upper range of the sampled values.

In another implementation, a memory has a file stored thereon that includes first and second encoded values. The first encoded values comprise a lower portion of sampled values, in a lower range of a dynamic range of a signal, encoded by a fixed mapping of the lower portion of the sampled values to a subset of quanta in a set of quanta. The set of quanta has a depth less than a depth of the sampled values. The second encoded values comprise an upper portion of the sampled values, in an upper range of the dynamic range of the signal, encoded by an adaptive mapping of the upper portion of the sampled values to a remaining subset of quanta in the set of quanta.

The file also includes a key for mapping the set of quanta to a set of corresponding decoded values having a depth greater than the depth of the set of quanta. One or more processors operatively coupled with the memory read the file, map the first encoded values and the second encoded values to the decoded values using the key, and output the decoded values.

This Overview is provided to introduce a selection of concepts in a simplified form that are further described below in the Technical Disclosure. It may be understood that this Overview is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.

Many aspects of the disclosure may be better understood with reference to the following drawings. Moreover, like reference numerals in the drawings designate corresponding parts throughout the several views. While several embodiments are described in connection with these drawings, the disclosure is not limited to the embodiments disclosed herein. On the contrary, the intent is to cover all alternatives, modifications, and equivalents.

Technology is disclosed herein for compressing audio data using fixed and adaptive mapping schemes such that storage space is conserved - and fidelity is preserved to a greater degree than with previous solutions. The fixed mapping discussed below ensures that sampled values in the lower portion of the dynamic range of a signal are retained when audio data is down-converted from one depth to another. The adaptive mapping adapts to the coverage that may be obtained by the fixed mapping from one tone or sound to another. The encoded values produced by the fixed and adaptive mapping may be written to an audio file along with a key for decoding the values.

The file, being reduced in size relative to its original counterpart, can be deployed in the context of storage-constrained environments such as microcontrollers that drive audible sounds for gaming consoles, home and entertainment appliances, and even some greeting cards. The on-board process of up-converting the encoded values to a larger depth suitable for being played-out is straight-forward mapping of values, in contrast with resource hungry decompression schemes. And as mentioned, the decoding can be carried out by an inexpensive microcontroller that can operate before the main processing unit on a device is ready. Thus, the solution(s) disclosed herein are especially applicable to devices that produce relatively brief tones or groups of tones that signify various states such as power-on, power-off, and the like.

Referring now to the drawings, <FIG> illustrates an operational environment <NUM> in an implementation. Operational environment <NUM> includes a computer <NUM> and media device <NUM>. Computer <NUM> is representative of any computing device(s) capable of processing audio data based on a fixed and dynamic mapping and producing a file having the encoded audio data stored therein. Examples include, but are not limited to, laptop and desktop computers, server computers, and other such computing devices having an architecture suitable for compressing audio data, of which computer architecture <NUM> in <FIG> is representative.

Media device <NUM> is representative of any device capable of playing out audible sound based on the encoded audio data stored in the file produced by computer <NUM>. Examples of media device <NUM> include - but are not limited to - computers of all types, phones, gaming consoles, digital appliances, entertainment devices, and any other devices that employ microcontrollers to drive the output of tones, sounds, music, and the like. In fact, even a very simple devices such as a greeting card with audio features is an example of media device <NUM>.

In operation, recording equipment (not shown) records an audio signal <NUM> and samples the signal to produce a file <NUM> having sampled values stored therein. The sampled values have a depth of "x" such as <NUM> bits (although the signal may be originally been sampled at a higher depth, e.g. <NUM> bits, and down-converted to <NUM> bits). File <NUM> is representative of any file having raw audio data stored in accordance with any of a variety of formats such as the pulse code modulation (PCM) format, the waveform audio file (WAV) format, and the audio interchange file format (AIFF). The sampled values may represent voltage, amperes, power, or any other unit of measured. In some scenarios, the sampled values may represent decibels.

Computer <NUM> takes file <NUM> as input and produces file <NUM> as output. File <NUM> is representative of any file having encoded values stored therein having a depth less than the sampled values in file <NUM>. File <NUM> also includes a key <NUM> for decoding the encoded values on media device <NUM> and playing-out the audible sound represented in the audio data. Examples of key <NUM> include a table that maps the encoded values (or encoding quanta) to decoded values. Key <NUM> may be a one-dimensional list in some scenarios where the order of the decoded values implicitly identifies their corresponding quantized value without having to explicitly express the correspondence (further saving space). The decoded values may represent voltage, amperes, power, or other units of measurement. In some scenarios, the decoded values may be given in terms of decibels, in which case a conversion calculation may be performed.

<FIG> illustrates an encoding process <NUM> implemented by hardware, firmware, and/or software on computer <NUM> to compress audio data. Encoding process <NUM> may be implemented in program instructions in the context of any of the modules, components, or other such hardware, firmware, or software elements of computer <NUM>. The program instructions direct computer <NUM> to operate as described for encoding process <NUM>, referring parenthetically to the steps in <FIG>.

To begin, encoding process <NUM> identifies a dynamic range of the sampled values of an audio signal (step <NUM>). The sampled values may correspond to units of measurement such as voltage, amperes, or power, in which case a conversion calculation to decibels may be performed in order to obtain the dynamic range in decibels. The dynamic range of an audio signal is a representation of the loudness of a recorded sound. For example, the dynamic range of a signal can be given as a ratio of the loudest sound to the softest sound expressed in decibels (dB) and sometimes is expressed as the difference (in dB) between the largest sampled value and the softest - which is normally zero. The largest sampled value likely occurs at the peak of the sinusoidal waveform of a signal. Identifying the dynamic range may therefore involve identifying the largest and smallest sampled values and determining the difference therebetween.

Next, encoding process <NUM> identifies a division of the dynamic range into a lower range and an upper range (step <NUM>). The division of the dynamic range is determined based on a fixed mapping of a lower portion of the sampled values to a subset of quanta in a set of quanta having a depth less than the depth of the sampled values. In other words, the encoding process determines how much of the dynamic range is covered by the fix mapping. The point in the dynamic range where the fixed mapping stops is where the dynamic range can be divided. The division of the dynamic range may be calculated in terms of decibels but may also be calculated in terms of a unit of measurement of the audio data. In such scenarios, a conversion calculation from decibels to the unit of measurement may be performed (and vice-versa when needed).

The fixed mapping may occur on the basis of any ratio or correspondence of sampled values to quanta. For example, the fixed mapping may map sampled values to quanta on a <NUM>:<NUM> basis, a <NUM>:<NUM> basis, a <NUM>:<NUM> basis, or more. The mapping ratio may also vary on a per-quanta basis and can be determined empirically, algorithmically, and/or using a machine learning model. In such scenarios, the demarcation line at which to divide the dynamic range is not known a priori but rather is identified once the extent of the fixed mapping has been determined.

In other scenarios, the number of quanta and their relative spacing may be known a priori, in which case the size of the lower range would also be known. For example, k-number of quanta may be allocated to the lower range at a spacing of n-dB. The size of the lower range would therefore be k-times-n decibels and the demarcation between the lower and upper range would be set at that value. In a variation, the spacing of the quanta allocated to the lower range could be varied algorithmically, empirically, or via machine learning, but the general principal would remain the same that the size of the lower range could be calculated a priori.

In both cases, the size of the upper range would depend on the maximum of the sampled values and the size of the lower range. In simple terms, the size of the upper range would be calculated based on the difference between the maximum value in the samples and the maximum value of the samples in the lower range covered by the fixed mapping.

Encoding process <NUM> then proceeds to identify an adaptive mapping of the upper range of the dynamic range to a remainder of the quanta in the set of quanta (step <NUM>). How many quanta remain may vary depending upon how many quanta were used by the fixed mapping and how many total quanta are available per a given encoding scheme. For instance, an <NUM>-bit scheme allows for <NUM> total quanta. Assuming <NUM> quanta are allocated to the fixed mapping process, <NUM> quanta would remain for the adaptive mapping. If <NUM> quanta were allocated to the fixed mapping process, then <NUM> would remain for the adaptive mapping, and so on.

In addition to determining how many quanta to allocate to the adaptive mapping, encoding process <NUM> may also determine how to space the quanta in the domain of the audio signal. For instance, the quanta could be spaced evenly such that each value is separated from the next value by the same distance (in dB). In another example, the quanta could be spaced apart by progressively greater distances, by random distances, or otherwise. Such spacing could be determined algorithmically, empirically, or using a machine learning model.

Having identified the fixed and adaptive mapping schema to be applied, encoding process <NUM> encodes the lower portion of the sampled values based on the fixed mapping (step <NUM>) and encodes the upper portion of the sampled values based on the adaptive mapping (step <NUM>). The fixed mapping includes, for a given value in a lower portion of the sampled values, identifying a corresponding value in the set of quanta (in the case of <NUM>:<NUM> mapping) or a nearest value in the set of quanta (in the case of many-to-one mapping) and writing the identified value to an audio file. The adaptive mapping includes, for a given value in the upper portion of the sampled values, identifying a nearest value in the set of quanta and writing the identified value to the same file. The file may then be installed on a device to be decoded and played-out at runtime to indicate the operational state of the device, for example.

Referring back to <FIG>, encoding scenario <NUM> provides a highly simplified example implementation of encoding process <NUM>. With respect to encoding scenario <NUM>, encoding process <NUM> examines the sampled values in file <NUM> to identifying a dynamic range of audio signal <NUM>. The dynamic range <NUM> in this example ranges from sampled value s-v<NUM>, to sampled value s-v<NUM>. The size of the dynamic range is therefore s-v<NUM> less s-v<NUM> (or s-v<NUM> - <NUM>). Encoding process <NUM> divides the dynamic range <NUM> into a lower range <NUM> and an upper range <NUM> based on the fixed mapping <NUM> of a lower portion of the dynamic range to a subset of quanta. Here, sampled values s-v<NUM> to s-v<NUM> map on a <NUM>:<NUM> basis to encoding quanta e-q<NUM> to encoding quanta e-q<NUM>, although other spacing is possible as discussed above.

Further in this example, it is assumed for exemplary purposes that there are six possible encoding quanta e-q<NUM> to e-q<NUM>. Accordingly, three encoding quanta remain after having allocated the first three quanta to lower range <NUM>. Adaptive mapping <NUM> maps the remaining sampled values in the upper range <NUM> to the adaptive quanta <NUM> represented by the three remaining quanta. In this example, adaptive mapping <NUM> occurs on a <NUM>:<NUM> basis (two sampled values for every quantized value), although a variety of mapping schema may be used as discussed above.

As sampled values <NUM> are read from file <NUM>, the sampled values are mapped per the fixed mapping <NUM> and the adaptive mapping <NUM> to the fixed quanta <NUM> and adaptive quanta <NUM> respectively. The encoded values <NUM> that result are written to file <NUM>, along with a key <NUM> that describes the mapping. In this example, sampled values <NUM> include in order: s-v<NUM>, s-v<NUM>, s-v<NUM>, s-v<NUM>, and s-v<NUM>. Sampled values <NUM> map to encoded values <NUM> which include in order: e-q<NUM>, e-q<NUM>, e-q<NUM>, e-q<NUM>, e-q<NUM>. It may be appreciated that encoded values <NUM> require less storage since they have a depth less than that of sampled values <NUM>. However, some fidelity has been lost as can be seen by the repeated value of e-q<NUM> for both s-v<NUM> and s-v<NUM>.

<FIG> illustrates operational environment <NUM> in another implementation. Operational environment <NUM> includes one or more processors, represented by processor <NUM>, coupled with memory <NUM>. Operational environment <NUM> also includes an audio sub-system <NUM> capable of playing out an audible signal. Processor <NUM> is representative of any processor capable of decompressing an audio file such as a microcontroller. Memory <NUM> is representative of any type of microcontroller memory capable of storing an audio file such as SRAM, FLASH, and EEPROM memories. Processor <NUM>, memory <NUM>, and audio sub-system <NUM> may be implemented in a variety of devices such as computers, gaming consoles, home appliances, robotic appliances, greeting cards having audio features, and the like.

In operation, audio file <NUM> is stored in a portion of memory <NUM> capable of persisting the data in powered-off states. Audio file <NUM> includes encoded values having a depth less than "x. " It may be assumed that the values were encoded by an encoding process the same as or similar to encoding process <NUM>. Thus, some of the encoded values were produced by a fixed mapping process, while others were produced by an adaptive mapping process.

Audio file <NUM> also includes a key <NUM> for converting the encoded values to decoded values having a depth at least greater than the depth of the encoded values. For instance, the new depth may be equal to or greater than x but could also be less than x if still greater than the depth of the encoded values. Examples of key <NUM> include a table that maps the encoded values (or encoding quanta) to decoded values. Key <NUM> may be a one-dimensional list in some scenarios where the order of the decoded values implicitly identifies their corresponding quantized value without having to explicitly express the correspondence.

<FIG> illustrates a decoding process <NUM> that may be implemented in program instructions in the context of the hardware, firmware, and/or software on processor <NUM>. The program instructions, when executed by processor <NUM>, direct processor <NUM> and/or the media device within which processor <NUM> is deployed to operate as described for decoding process <NUM>, referring parenthetically to the steps illustrated in <FIG>.

To begin, processor <NUM> reads the file size for audio file <NUM> into a portion of memory <NUM> that may be read from and written to by processor <NUM> (step <NUM>). Processor <NUM> also writes the look-up table or list represented by key <NUM> to this portion of memory <NUM> which may sometimes be referred to as scratch-pad memory.

For each encoded value in audio file <NUM>, processor <NUM> proceeds to find its corresponding decoded value of greater depth using key <NUM> (step <NUM>). This may be accomplished by, for instance, finding the encoded value in a look-up table and, from there, finding its corresponding decoded value. In another example, this may be accomplished by finding the corresponding decoded value at a place in a list represented by the encoded value.

Optionally, processor <NUM> may average the decoded value with one or more of the previous decoded values and/or one or more of the next decoded values (step <NUM>). The present, previous, or next decoded values may be weighted differently with respect to each other in the averaging to further increased the fidelity of the output decoded values.

Finally, processor <NUM> writes the decoded values to audio file <NUM> (step <NUM>), which may be the same as, or different from, audio file <NUM>. Audio sub-system <NUM> drives a speaker with the output signal <NUM> produced from the decoded values in audio file <NUM>.

<FIG> also illustrates decoding scenario <NUM> in a highly simplified example of decoding process <NUM>. In operation, decoding process <NUM> identifies the encoding quanta <NUM> and their corresponding decoded values <NUM> from the contents of audio file <NUM>. The encoding quanta <NUM> include all of the quanta used to encode sampled values. The encoding quanta <NUM> are shown in decoding scenario <NUM>, although it may be appreciated that they may be absent from key <NUM> in some scenarios, as discussed above, while still being known implicitly or logically to decoding process <NUM>. The encoding quanta <NUM> in this scenario are represented by e-q<NUM> through e-q<NUM>. The decoded values are represented by d-v<NUM> through d-v<NUM>.

As encoded values <NUM> are read from audio file <NUM>, the values are converted per mapping <NUM> to their corresponding decoded values which have a depth greater than the depth of the encoded values. In this example, encoded values <NUM> include in order: e-v<NUM>, e-v<NUM>, e-v<NUM>, e-v<NUM>, and e-v<NUM>. Mapping <NUM> produces decoded values <NUM> which include in order: d-v<NUM>, d-v<NUM>, d-v<NUM>, d-v<NUM>, and d-v<NUM>. As mentioned, the decoded values may be further enhanced with various degrees of weighting and interpolation to as to further improve their fidelity to the original signal. The decoded values <NUM> are written to audio file <NUM> for play out by audio sub-system <NUM>.

<FIG> illustrates another operational scenario <NUM> in an example of encoding process <NUM> as applied to an audio signal <NUM>. It may be appreciated that the bottom half is a reflection of the top half and the same or similar principals apply with respect to encoding the bottom of the signal.

Audio signal <NUM> is representative of an analog audio signal that can be digitally sampled and stored in an audio file such as a PCM file, a WAV file, or the like. Audio signal <NUM> has a sinusoidal waveform in the time domain with a peak value of 67dB. In operation, an encoding device employing encoding process <NUM> identifies the dynamic range of audio signal <NUM> from the sampled values in the audio file. In this example, the dynamic range <NUM> extends from 0dB up to 67dB for the top half of the waveform.

It is assumed for exemplary purposes that sampled values are in a <NUM>-bit binary format capable of representing approximately <NUM>,<NUM> different values in the top half of the signal. Dynamic range <NUM> includes one instance of each of the values that were sampled from audio signal <NUM>. For example, the bottom of the range includes the values: 0dB, 6dB, and 17dB. The top of the range includes: 57dB, 61dB, 62dB, 64dB, 65dB, and 67dB. It may be appreciated that the values are given in decimal notation but represent <NUM>-bit binary numbers.

The encoding device employing encoding process <NUM> proceeds to divide the dynamic range <NUM> into a lower range <NUM> and an upper range <NUM>. This may be accomplished by first determining how much of the dynamic range <NUM> is covered by a fixed mapping <NUM>. Here, fixed mapping <NUM> maps values in the lower portion of dynamic range <NUM> to fixed quanta <NUM>, which are referred to as such because they are used for fixed mapping. The point in dynamic range <NUM> where fixed mapping <NUM> stops is where dynamic range <NUM> can be divided.

The fixed mapping <NUM> may occur on the basis of any ratio or correspondence of sampled values to quanta such as <NUM>:<NUM>, <NUM>:<NUM>, <NUM>:<NUM>, and so on. The mapping ratio may also vary on a per-quanta basis and can be determined empirically, algorithmically, and/or using a machine learning model. In such scenarios, the demarcation line at which to divide the dynamic range is identified once the extent of the fixed mapping has been determined. Alternatively, the number of quanta and their relative spacing may be known ahead of time, in which case the size of the lower range would also be known.

In both cases, the size of upper range <NUM> would depend on the maximum of the sampled values and the size of the lower range <NUM>. In other words, the size of the upper range would be calculated based on the difference between the maximum value in the samples and the maximum value of the samples in the lower range covered by the fixed mapping.

In this example scenario, a <NUM>:<NUM> mapping is used to map sampled values to encoding quanta: 0db maps to <NUM>; 6dB maps to <NUM>; and 17dB maps to <NUM>. The fixed mapping <NUM> expends its quanta at 17dB. Accordingly, dynamic range <NUM> is split into the lower and upper ranges at 17dB. It may be appreciated that the fixed quanta <NUM> and the adaptive quanta <NUM> are given in decimal notation but represent <NUM>-bit binary values. As such, the encoding values have a bit depth (<NUM>) that is half the depth of the sampled values (<NUM>).

The encoding device proceeds to identify an adaptive mapping <NUM> of the upper range <NUM> of the sampled values to a remainder of the quanta represented by adaptive quanta <NUM>, which are referred to as such because they are used for adaptive mapping. How many quanta remain may vary depending upon how many quanta were used by the fixed mapping and how many total quanta are available per a given encoding scheme. It is assumed here that an <NUM>-bit scheme is used which allows for <NUM> total quanta. Since <NUM> values were used to encode the lower range <NUM>, <NUM> values remain to encode the upper range <NUM>. If the schema had called for using <NUM> values to encode the lower range <NUM>, then <NUM> quanta would remain to be allocated to the adaptive mapping.

In addition to determining how many quanta to allocate to the adaptive mapping <NUM>, encoding process <NUM> may also determine how to space the quanta in the domain of the audio signal. For instance, the quanta could be spaced evenly such that each value is separated from the next value by the same distance (in dB). In another example, the quanta could be spaced apart by progressively greater distances, by random distances, or otherwise. Such spacing could be determined algorithmically, empirically, or using a machine learning model.

Having identified the fixed and adaptive mapping schema to be applied, encoding process <NUM> encodes the lower range <NUM> via fixed mapping <NUM> to fixed quanta <NUM> and encodes the upper range <NUM> to adaptive quanta <NUM>. The fixed mapping includes, for a given value in a lower portion of the sampled values, identifying a corresponding value in the set of quanta (in the case of <NUM>:<NUM> mapping) or a nearest value in the set of quanta (in the case of many-to-one mapping) and writing the identified value to an audio file. The adaptive mapping includes, for a given value in the upper portion of the sampled values, identifying a nearest value in the set of quanta and writing the identified value to the same file. The file may then be installed on a device to be decoded and played-out at runtime to indicate the operational state of the device, for instance. In this example scenario, the fixed and adaptive mapping of sampled values <NUM> in a <NUM>-bit format to quanta in an <NUM>-bit format results in encoded values <NUM>. Namely: 0dB maps to <NUM>; 6dB maps to <NUM>; 61dB maps to <NUM>; 62dB maps to <NUM>; 17dB maps to <NUM>; 64dB maps to <NUM>; and 67dB maps to <NUM>.

<FIG> illustrates an operational scenario <NUM> to illustrate an implementation of decoding process <NUM>. In operation, an encoding process has produced a set of encoded values in an audio file. The values are read out of the file and are represented by encoded values <NUM>. In addition, the decoding process (implemented on a microcontroller, for example), identifies a set of encoding quanta <NUM>, from data in the file or implicitly, as well as a mapping <NUM> of the quanta to decoded values <NUM>. The decoding process maps the incoming encoded values directly to the decoded values based on mapping <NUM>.

For example, the set of encoding quanta includes <NUM>-bit values represented in decimal notation ranging from <NUM> to <NUM>. The decoded values <NUM> include <NUM><NUM>-bit values represented in decimal notation. Mapping <NUM> maps each one of the encoding quanta to a different one of the decoded values <NUM>. The result is a set of decoded values represented by decoded values <NUM>. More specifically, encoded values <NUM> produce decoded values <NUM> as follows: <NUM> maps to 0dB; <NUM> maps to 6dB; <NUM> maps to 62dB; <NUM> maps to 62dB; <NUM> maps to 67dB; and <NUM> again maps to 67dB.

<FIG> illustrates operational scenario <NUM> in another example of encoding process <NUM> as applied to an audio signal <NUM>. It may be appreciated that the bottom half is a reflection of the top half and the same or similar principals apply with respect to encoding the bottom of the signal. It may also be appreciated the audio signal <NUM> differs from audio signal <NUM> in <FIG> with respect to its maximum value (70dB vs. 67dB). This difference can have the effect of changing the demarcation point at which the lower range is separated from the upper range. In other words, the same fixed mapping schema, when applied to two different signals, results in different adaptive mapping for each of the signals.

Audio signal <NUM> in operational scenario <NUM> is representative of an analog audio signal that can be digitally sampled and stored in an audio file such as a PCM file, a WAV file, or the like. Audio signal <NUM> has a sinusoidal waveform in the time domain with a peak value of 70dB. In operation, an encoding device employing encoding process <NUM> identifies the dynamic range of audio signal <NUM> from the sampled values in the audio file. In this example, the dynamic range <NUM> extends from 0dB up to 70dB for the top half of the waveform.

It is assumed for exemplary purposes that the sampled values are in a <NUM>-bit binary format. Dynamic range <NUM> includes one instance of each of the values that were sampled from audio signal <NUM>. For example, the bottom of the range includes the values: 0dB, 6dB, and 15dB. The top of the range includes: 57dB, 61dB, 62dB, 64dB, 65dB, and 67dB. It may be appreciated that the values are given in decimal notation even though they represent <NUM>-bit binary numbers. Note also that the values in the lower portion of the range differ by at least one value from those in the lower portion of dynamic range <NUM>. This is because audio signal <NUM> differs from audio signal <NUM> (assuming the same sampling rate).

Encoding process <NUM> proceeds to divide the dynamic range <NUM> into a lower range <NUM> and an upper range <NUM>. This may be accomplished by first determining how much of the dynamic range <NUM> is covered by a fixed mapping <NUM>. Here, fixed mapping <NUM> maps values in the lower portion of dynamic range <NUM> to fixed quanta <NUM>. The point in dynamic range <NUM> where the fixed mapping stops is where the dynamic range can be divided.

In this example scenario, a <NUM>:<NUM> mapping is used to map sampled values to encoding quanta: 0db maps to <NUM>; 6dB maps to <NUM>; and 15dB maps to <NUM>. The fixed mapping therefore expends its quanta at 15dB, whereas the fixed mapping in <FIG> completed at 17dB. Accordingly, dynamic range <NUM> is split into the lower and upper ranges at 15dB. It may be appreciated that the fixed quanta <NUM> and the adaptive quanta <NUM> are given in decimal notation but represent <NUM>-bit binary values. As such, the encoding values have a bit depth (<NUM>) that is half that of the sampled values (<NUM>).

The encoding device proceeds to identify an adaptive mapping <NUM> of the upper range <NUM> of sampled values to a remainder of the quanta represented by adaptive quanta <NUM>. How many quanta remain may vary depending upon how many quanta were used by the fixed mapping and how many total quanta are available per a given encoding scheme. It is assumed here that an <NUM>-bit scheme is used which allows for <NUM> total quanta. Since <NUM> values were used to encode the lower range <NUM>, <NUM> values remain to encode the upper range <NUM>.

Having identified the fixed and adaptive mapping schema to be applied, encoding process <NUM> encodes the lower range <NUM> with the fixed mapping <NUM> to fixed quanta <NUM> and encodes the upper range <NUM> using adaptive mapping <NUM> and adaptive quanta <NUM>. The fixed mapping <NUM> includes, for a given value in a lower portion of the sampled values, identifying a corresponding value in the set of quanta (in the case of <NUM>:<NUM> mapping) or a nearest value in the set of quanta (in the case of many-to-one mapping) and writing the identified value to an audio file. The adaptive mapping includes, for a given value in the upper portion of the sampled values, identifying a nearest value in the set of quanta and writing the identified value to the same file. The file may then be installed on a device to be decoded and played-out at runtime to indicate the operational state of the device, for example. In this example scenario, the fixed and adaptive mapping of sampled values <NUM> in a <NUM>-bit format to quanta in an <NUM>-bit format results in encoded values <NUM>. Namely: 0dB maps to <NUM>; 6dB maps to <NUM>; 61dB maps to <NUM>; 62dB maps to <NUM>; 15dB maps to <NUM>; 64dB maps to <NUM>; and 70dB maps to <NUM>.

For example, the set of encoding quanta includes <NUM>-bit values represented in decimal notation ranging from <NUM> to <NUM>. The decoded values <NUM> include <NUM><NUM>-bit values represented in decimal notation. Mapping <NUM> maps each one of the encoding quanta to a different one of the decoded values <NUM>. The result is a set of decoded values represented by decoded values <NUM>. More specifically, encoded values <NUM> produce decoded values <NUM> as follows: <NUM> maps to 0dB; <NUM> maps to 6dB; <NUM> maps to 61dB; <NUM> maps to 64dB; <NUM> maps to 15dB; <NUM> maps to 64dB; and <NUM> maps to 70dB.

<FIG> and <FIG> illustrate two related scenarios to better appreciate fixed and adaptive mapping. In these scenarios, fixed mapping is accomplished by mapping the lowest n-number of sampled values to the first n-number of quanta. It is assumed for both scenario 900A and scenario 900B that <NUM><NUM>-bit quanta are possible and n=<NUM>. The lowest <NUM> values in a set of sampled values therefore maps to the lower <NUM> quanta. The remaining <NUM> quanta are allocated to the adaptive mapping process.

The adaptive mapping process in both scenarios allocates the remaining quanta evenly in the logarithmic domain across the upper range of sampled values. In <FIG>, the dynamic range extends a total of 70dB and the fixed quanta cover 20dB of the range, leaving 50dB of range remaining to be covered by the adaptive quanta. An even spacing of the adaptive quanta in the logarithmic domain results in a. 5dB spread for each one of the remaining quanta.

In contrast, the dynamic range in <FIG> also extends to 70dB, but the fixed quanta cover only 10dB of the range, leaving 60dB remaining for the adaptive quanta. An even spacing of the adaptive quanta results in a. 6dB spread for each one of the <NUM> remaining quanta.

In <FIG>, scenario 900A includes audio signal <NUM>, which has a static or fixed range that extends from 0dB to 20dB. Its adaptive range extends from 20dB to 70dB. The fixed range is determined by mapping, on a <NUM>:<NUM> basis, the first twenty-eight (<NUM>) quanta to the lowest <NUM> sampled values. It is assumed for exemplary purposes that such mapping covers the sampled values up to 20dB.

As the first twenty-eight quanta are allocated on a fixed basis to the lowest twenty-eight sampled values, one-hundred quanta remain to be allocated to adaptive mapping. An even distribution of the one-hundred quanta is assumed in this example, meaning that the remaining 50dB of range can be mapped at increments of. 5dB to the one-hundred quanta. Then, as sampled values flow through the mapping(s), they are mapped either based on the <NUM>:<NUM>: mapping for the lower range of values or via the evenly-spaced mapping for the upper range.

As an example, sampled values <NUM> flow through either the fixed mapping or the adaptive mapping. Values 20dB or less (<NUM>) are mapped per the fixed mapping, while values greater than 20dB (<NUM>) are mapped per the adaptive mapping. The fixed mapping maps specific values <NUM> to specific fixed quanta <NUM>. The adaptive mapping maps. 5dB ranges of values <NUM> to specific quanta <NUM>, which may be referred to as adaptive quanta.

The sampled values in the fixed range are mapped by finding their corresponding value in values <NUM> and then identifying the corresponding quanta in fixed quanta <NUM>. The sampled values in the upper range are mapped by finding the group or range of values within which the sampled value falls and then finding the quanta corresponding to that group or range. Here, the groups are labeled based on the highest member of the group, although any nomenclature could be used. For example, the value <NUM>. 1dB belongs to the group labeled with <NUM>. 5dB, as does the value <NUM>, whereas the value <NUM> belongs to the group labeled <NUM>. Accordingly, the three values map to <NUM>, <NUM>, and <NUM> respectively, illustrated by encoded values <NUM>. The values from the lower range map to values <NUM> (<NUM>, <NUM>, and <NUM>). The combined result is sequence of numbers represented in encoded values <NUM>.

The sampled values have <NUM>-bit binary formats, whereas the encoded values <NUM> have an <NUM>-bit format. A <NUM>:<NUM> mapping is utilized in the reverse direction to decode the <NUM>-bit encoded values into <NUM>-bit decoded values. Here, the decoded values <NUM> are <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM>, all in decibels.

<FIG> illustrates how differences in signal characteristics or even the characteristics of sampled values can change how audio data is encoded. In scenario 900B, audio signal <NUM> has a static or fixed range that extends from 0dB to 10dB (as opposed to 20dB in scenario 900A). Its adaptive range therefore extends from 10dB to 70dB. The fixed range is determined by mapping, on a <NUM>:<NUM> basis, the first twenty-eight (<NUM>) quanta to the lowest <NUM> sampled values. It is assumed for exemplary purposes that such mapping covers the sampled values up to 10dB.

As the first twenty-eight quanta are allocated on a fixed basis to the lowest twenty-eight sampled values, one-hundred quanta remain to be allocated to adaptive mapping. An even distribution of the one-hundred quanta is assumed in this example, meaning that the remaining 60dB of range can be mapped at increments of. 6dB to the one-hundred quanta. Then, as sampled values flow through the mapping(s), they are mapped either based on the <NUM>:<NUM>: mapping for the lower range of values or via the evenlyspaced mapping for the upper range.

As an example, sampled values <NUM> flow through either the fixed mapping or the adaptive mapping. Values 10dB or less (<NUM>) are mapped per the fixed mapping, while values greater than 10dB (<NUM>) are mapped per the adaptive mapping. The fixed mapping maps specific values <NUM> to specific fixed quanta <NUM>. The adaptive mapping maps. 6dB ranges of values <NUM> to specific quanta <NUM>, which may be referred to as adaptive quanta.

The sampled values in the fixed range are mapped by finding their corresponding value in values <NUM> and then identifying the corresponding quanta in fixed quanta <NUM>. The sampled values in the upper range are mapped by finding the group or range of values within which the sampled value falls and then finding the quanta corresponding to that group or range. Here, the groups are labeled based on the highest member of the group, although any nomenclature could be used. For example, the value <NUM>. 1dB belongs to the group labeled with <NUM>. 4dB, as does the value <NUM>, whereas the value <NUM> belongs to the group labeled <NUM>. Accordingly, the three values map to <NUM>, <NUM>, and <NUM> respectively, illustrated by encoded values <NUM>. The values from the lower range map to encoded values <NUM> (<NUM> and <NUM>). The combined result is encoded values <NUM>.

While the values in <FIG> are given in decibels, it may be appreciated that the same or similar concepts would apply if the values were given in voltage, amperes, power, or any other unit of measurement. Conversions between units of measurement and decibels may be calculated in order to, for example, translate an even spacing of adaptive quanta to the units of measurement in which audio data is encoded. Either the sampled values in the audio data can be converted from a unit of measurement to decibels (and the encoded data can be converted from decibels to the unit of measurement), or the fixed and adaptive mapping can be expressed in terms of the unit of measurement.

For example, an audio file that contains sampled values representative of voltage could be encoded using fixed and adaptive quanta also expressed in voltage. Assuming x-total number of quanta, n-number of fixed quanta, and k=x-n number of adaptive quanta, the lowest n-number of sampled voltage values are mapped to the lowest n-number of quanta. The remaining k-number of sampled voltage values are mapped to k remaining quanta. However, the values of the remaining quanta must first be converted from decibels to voltage.

To do so, the log of the ratio of two voltage values (q1, q2) is given as equal to the spread in decibels (s) that is desired. A coefficient of <NUM> may also be multiplied times the log value. The denominator in the ratio is a known-quanta (q1) and the numerator is the unknown quanta (q2) that is next in an increasing series of adaptive quanta. The unknown quanta at each step can be solved for as follows:.

Various technical effects may be appreciated from the foregoing disclosure of enhanced compression - or "squanching" - of audio data such as the reduced size of an audio file that results from converting audio data from one depth to a lesser depth. The resulting audio file can thus be deployed to resource-constrained environments where storage space is at a premium. In addition, decoding the values in the audio file requires fewer processing cycles and/or less power than a typical decompression algorithm, making the strategies disclosed herein suitable for processing-constrained environments, applications, and scenarios.

In some implementations, the adaptive quanta are spaced evenly with respect to each other in the logarithmic (dB) domain. This technique has the technical effect of conserving quanta in the ranges most sensitive to human hearing, allowing those ranges to be encoded with greater fidelity than other ranges.

<FIG> illustrates computer architecture <NUM> that is representative of any system or collection of systems in which the various processes, programs, services, and scenarios disclosed herein may be implemented. Examples of computing devices that may employ computer architecture <NUM> include, but are not limited to, server computers, cloud computing platforms, and data center equipment, as well as any other type of physical or virtual server machine, container, and any variation or combination thereof. Other examples include desktop computers, laptop computers, table computers, Internet of Things (IoT) devices, wearable devices, and any other physical or virtual combination or variation thereof.

Computer architecture <NUM> may be implemented as a single apparatus, system, or device or may be implemented in a distributed manner as multiple apparatuses, systems, or devices. Computer architecture <NUM> includes, but is not limited to, processing system <NUM>, storage system <NUM>, software <NUM>, communication interface system <NUM>, and user interface system <NUM> (optional). Processing system <NUM> is operatively coupled with storage system <NUM>, communication interface system <NUM>, and user interface system <NUM>.

Processing system <NUM> loads and executes software <NUM> from storage system <NUM>. Software <NUM> includes and implements encoding process <NUM>, which is representative of the encoding processes discussed with respect to the preceding Figures. When executed by processing system <NUM> to enhance the user experience with respect to viewing changes in documents, software <NUM> directs processing system <NUM> to operate as described herein for at least the various processes, operational scenarios, and sequences discussed in the foregoing implementations. Computer architecture <NUM> may optionally include additional devices, features, or functionality not discussed for purposes of brevity.

Referring still to <FIG>, processing system <NUM> may comprise a microprocessor and other circuitry that retrieves and executes software <NUM> from storage system <NUM>. Processing system <NUM> may be implemented within a single processing device but may also be distributed across multiple processing devices or sub-systems that cooperate in executing program instructions. Examples of processing system <NUM> include general purpose central processing units, graphical processing units, application specific processors, and logic devices, as well as any other type of processing device, combinations, or variations thereof.

Storage system <NUM> may comprise any computer readable storage media readable by processing system <NUM> and capable of storing software <NUM>. Storage system <NUM> may include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data. Examples of storage media include random access memory, read only memory, magnetic disks, optical disks, flash memory, virtual memory and non-virtual memory, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other suitable storage media. In no case is the computer readable storage media a propagated signal.

Software <NUM> (including encoding process <NUM>) may be implemented in program instructions and among other functions may, when executed by processing system <NUM>, direct processing system <NUM> to operate as described with respect to the various operational scenarios, sequences, and processes illustrated herein. For example, software <NUM> may include program instructions for implementing an encoding process as described herein.

In particular, the program instructions may include various components or modules that cooperate or otherwise interact to carry out the various processes and operational scenarios described herein. The various components or modules may be embodied in compiled or interpreted instructions, or in some other variation or combination of instructions. The various components or modules may be executed in a synchronous or asynchronous manner, serially or in parallel, in a single threaded environment or multi-threaded, or in accordance with any other suitable execution paradigm, variation, or combination thereof. Software <NUM> may include additional processes, programs, or components, such as operating system software, virtualization software, or other application software. Software <NUM> may also comprise firmware or some other form of machine-readable processing instructions executable by processing system <NUM>.

In general, software <NUM> may, when loaded into processing system <NUM> and executed, transform a suitable apparatus, system, or device overall from a generalpurpose computing system into a special-purpose computing system customized to provide enhanced processing of audio data. Indeed, encoding software <NUM> on storage system <NUM> may transform the physical structure of storage system <NUM>. The specific transformation of the physical structure may depend on various factors in different implementations of this description. Examples of such factors may include, but are not limited to, the technology used to implement the storage media of storage system <NUM> and whether the computer-storage media are characterized as primary or secondary storage, as well as other factors.

For example, if the computer readable storage media are implemented as semiconductor-based memory, software <NUM> may transform the physical state of the semiconductor memory when the program instructions are encoded therein, such as by transforming the state of transistors, capacitors, or other discrete circuit elements constituting the semiconductor memory. A similar transformation may occur with respect to magnetic or optical media. Other transformations of physical media are possible without departing from the scope of the present description, with the foregoing examples provided only to facilitate the present discussion.

Communication interface system <NUM> may include communication connections and devices that allow for communication with other computing systems (not shown) over communication networks (not shown). Examples of connections and devices that together allow for inter-system communication may include network interface cards, antennas, power amplifiers, RF circuitry, transceivers, and other communication circuitry. The connections and devices may communicate over communication media to exchange communications with other computing systems or networks of systems, such as metal, glass, air, or any other suitable communication media. The aforementioned media, connections, and devices are well known and need not be discussed at length here.

Communication between computer architecture <NUM> and other computing systems (not shown), may occur over a communication network or networks and in accordance with various communication protocols, combinations of protocols, or variations thereof. Examples include intranets, internets, the Internet, local area networks, wide area networks, wireless networks, wired networks, virtual networks, software defined networks, data center buses and backplanes, or any other type of network, combination of network, or variation thereof. The aforementioned communication networks and protocols are well known and need not be discussed at length here.

Claim 1:
A method for compressing sampled values (<NUM>) of audio data having a dynamic range, the method comprising:
identifying a fixed mapping of a lower range (<NUM>) of the sampled values of the audio data to a subset (<NUM>) of quanta in a set of quanta having a bit depth less than a bit depth of the sampled values wherein the subset of quanta comprises a fixed number of quanta and wherein the fixed mapping comprises a one-to-one mapping of the fixed number of quanta to a same number of the sampled values;
identifying an upper range (<NUM>) of the sampled values of the audio data remaining after the fixed mapping of the lower range of the sampled values, wherein identifying the upper range comprises:
identifying a maximum value of the lower range and dividing the dynamic range at the identified maximum value into the lower range and the upper range;
identifying an adaptive mapping of the upper range of the sampled values to a remaining subset of quanta in the set of quanta, wherein the remaining subset (<NUM>) of quanta comprises a remaining number of quanta and wherein the adaptive mapping comprises a many-to-one mapping of a remainder of the sampled values to the remaining number of quanta;
encoding the lower range of the sampled values based on the fixed mapping; and
encoding the upper range of the sampled values based on the adaptive mapping.