Home | History | Annotate | Download | only in audio
      1 page.title=Floating-Point Audio
      2 @jd:body
      3 
      4 <div id="qv-wrapper">
      5     <div id="qv">
      6       <h2>On this page</h2>
      7 
      8       <ol>
      9         <li><a href="#best">Best Practices for Floating-Point Audio</a></li>
     10         <li><a href="#support">Floating-Point Audio in Android SDK</a></li>
     11         <li><a href="#more">For More Information</a></li>
     12       </ol>
     13     </div>
     14   </div>
     15 
     16 <a href="https://www.youtube.com/watch?v=sIcieUqMml8" class="notice-developers-video">
     17 <div>
     18     <h3>Video</h3>
     19     <p>Will it Float? The Glory and Shame of Floating-Point Audio</p>
     20 </div>
     21 </a>
     22 
     23 <p>Using floating-point numbers to represent audio data can significantly enhance audio
     24  quality in high-performance audio applications. Floating point offers the following
     25  advantages:</p>
     26 
     27 <ul>
     28 <li>Wider dynamic range.</li>
     29 <li>Consistent accuracy across the dynamic range.</li>
     30 <li>More headroom to avoid clipping during intermediate calculations and transients.</li>
     31 </ul>
     32 
     33 <p>While floating-point can enhance audio quality, it does present certain disadvantages:</p>
     34 
     35 <ul>
     36 <li>Floating-point numbers use more memory.</li>
     37 <li>Floating-point operations employ unexpected properties, for example, addition is
     38  not associative.</li>
     39 <li>Floating-point calculations can sometimes lose arithmetic precision due to rounding or
     40  numerically unstable algorithms.</li>
     41 <li>Using floating-point effectively requires greater understanding to achieve accurate
     42  and reproducible results.</li>
     43 </ul>
     44 
     45 <p>
     46   Formerly, floating-point was notorious for being unavailable or slow. This is
     47   still true for low-end and embedded processors. But processors on modern
     48   mobile devices now have hardware floating-point with performance that is
     49   similar (or in some cases even faster) than integer. Modern CPUs also support
     50   <a href="http://en.wikipedia.org/wiki/SIMD" class="external-link">SIMD</a>
     51   (Single instruction, multiple data), which can improve performance further.
     52 </p>
     53 
     54 <h2 id="best">Best Practices for Floating-Point Audio</h2>
     55 <p>The following best practices help you avoid problems with floating-point calculations:</p>
     56 <ul>
     57 <li>Use double precision floating-point for infrequent calculations,
     58 such as computing filter coefficients.</li>
     59 <li>Pay attention to the order of operations.</li>
     60 <li>Declare explicit variables for intermediate values.</li>
     61 <li>Use parentheses liberally.</li>
     62 <li>If you get a NaN or infinity result, use binary search to discover
     63 where it was introduced.</li>
     64 </ul>
     65 
     66 <h2 id="support">Floating-Point Audio in Android SDK</h2>
     67 
     68 <p>For floating-point audio, the audio format encoding
     69  <code>AudioFormat.ENCODING_PCM_FLOAT</code> is used similarly to
     70  <code>ENCODING_PCM_16_BIT</code> or <code>ENCODING_PCM_8_BIT</code> for specifying
     71  AudioTrack data
     72 formats. The corresponding overloaded method <code>AudioTrack.write()</code>
     73  takes in a float array to deliver data.</p>
     74 
     75 <pre>
     76    public int write(float[] audioData,
     77         int offsetInFloats,
     78         int sizeInFloats,
     79         int writeMode)
     80 </pre>
     81 
     82 <h2 id="more">For More Information</h2>
     83 
     84 <p>The following Wikipedia pages are helpful in understanding floating-point audio:</p>
     85 
     86 <ul>
     87 <li><a href="http://en.wikipedia.org/wiki/Audio_bit_depth" class="external-link" >Audio bit depth</a></li>
     88 <li><a href="http://en.wikipedia.org/wiki/Floating_point" class="external-link" >Floating point</a></li>
     89 <li><a href="http://en.wikipedia.org/wiki/IEEE_floating_point" class="external-link" >IEEE 754 floating-point</a></li>
     90 <li><a href="http://en.wikipedia.org/wiki/Loss_of_significance" class="external-link" >Loss of significance</a>
     91  (catastrophic cancellation)</li>
     92 <li><a href="https://en.wikipedia.org/wiki/Numerical_stability" class="external-link" >Numerical stability</a></li>
     93 </ul>
     94 
     95 <p>The following article provides information on those aspects of floating-point that have a
     96  direct impact on designers of computer systems:</p>
     97 <ul>
     98 <li><a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html" class="external-link" >What every
     99  computer scientist should know about floating-point arithmetic</a>
    100 by David Goldberg, Xerox PARC (edited reprint).</li>
    101 </ul>
    102