<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.12"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>gavl: Peak detector</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">gavl </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.12 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> $(function() { initMenu('',false,false,'search.php','Search'); }); </script> <div id="main-nav"></div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Peak detector<div class="ingroups"><a class="el" href="group__audio.html">Audio</a></div></div> </div> </div><!--header--> <div class="contents"> <p>Detect peaks in the volume for steering normalizers and dynamic range compressors. <a href="#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:ga1974488d678c0e0f8fc55a5ecaa24e1c"><td class="memItemLeft" align="right" valign="top">typedef struct gavl_peak_detector_s </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a></td></tr> <tr class="memdesc:ga1974488d678c0e0f8fc55a5ecaa24e1c"><td class="mdescLeft"> </td><td class="mdescRight">Opaque structure for peak detector. <a href="#ga1974488d678c0e0f8fc55a5ecaa24e1c">More...</a><br /></td></tr> <tr class="separator:ga1974488d678c0e0f8fc55a5ecaa24e1c"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:gacfd0d1870f12dc9b2d498317f9487dd4"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC <a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#gacfd0d1870f12dc9b2d498317f9487dd4">gavl_peak_detector_create</a> ()</td></tr> <tr class="memdesc:gacfd0d1870f12dc9b2d498317f9487dd4"><td class="mdescLeft"> </td><td class="mdescRight">Create peak detector. <a href="#gacfd0d1870f12dc9b2d498317f9487dd4">More...</a><br /></td></tr> <tr class="separator:gacfd0d1870f12dc9b2d498317f9487dd4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaffc05b8a605cfab813bf368f27592bb3"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#gaffc05b8a605cfab813bf368f27592bb3">gavl_peak_detector_destroy</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd)</td></tr> <tr class="memdesc:gaffc05b8a605cfab813bf368f27592bb3"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a peak detector and frees all associated memory. <a href="#gaffc05b8a605cfab813bf368f27592bb3">More...</a><br /></td></tr> <tr class="separator:gaffc05b8a605cfab813bf368f27592bb3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga47d5a567add1e12fdb57e55053ce6ecc"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#ga47d5a567add1e12fdb57e55053ce6ecc">gavl_peak_detector_set_format</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd, const <a class="el" href="structgavl__audio__format__t.html">gavl_audio_format_t</a> *format)</td></tr> <tr class="memdesc:ga47d5a567add1e12fdb57e55053ce6ecc"><td class="mdescLeft"> </td><td class="mdescRight">Set format for a peak detector. <a href="#ga47d5a567add1e12fdb57e55053ce6ecc">More...</a><br /></td></tr> <tr class="separator:ga47d5a567add1e12fdb57e55053ce6ecc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga68a33fb2e39b014897bab9cbd6b97c1a"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#ga68a33fb2e39b014897bab9cbd6b97c1a">gavl_peak_detector_update</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd, <a class="el" href="structgavl__audio__frame__t.html">gavl_audio_frame_t</a> *frame)</td></tr> <tr class="memdesc:ga68a33fb2e39b014897bab9cbd6b97c1a"><td class="mdescLeft"> </td><td class="mdescRight">Feed the peak detector with a new frame. <a href="#ga68a33fb2e39b014897bab9cbd6b97c1a">More...</a><br /></td></tr> <tr class="separator:ga68a33fb2e39b014897bab9cbd6b97c1a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gab72a6993c866fe8fb2779604bc7a85e7"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#gab72a6993c866fe8fb2779604bc7a85e7">gavl_peak_detector_get_peak</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd, double *min, double *max, double *abs)</td></tr> <tr class="memdesc:gab72a6993c866fe8fb2779604bc7a85e7"><td class="mdescLeft"> </td><td class="mdescRight">Get the peak volume across all channels. <a href="#gab72a6993c866fe8fb2779604bc7a85e7">More...</a><br /></td></tr> <tr class="separator:gab72a6993c866fe8fb2779604bc7a85e7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga325302b265f717795dc0ac32f7ce33d0"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#ga325302b265f717795dc0ac32f7ce33d0">gavl_peak_detector_get_peaks</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd, double *min, double *max, double *abs)</td></tr> <tr class="memdesc:ga325302b265f717795dc0ac32f7ce33d0"><td class="mdescLeft"> </td><td class="mdescRight">Get the peak volume for all channels separate. <a href="#ga325302b265f717795dc0ac32f7ce33d0">More...</a><br /></td></tr> <tr class="separator:ga325302b265f717795dc0ac32f7ce33d0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4de693cdd4743448c9d45e3a473ec956"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__peak__detection.html#ga4de693cdd4743448c9d45e3a473ec956">gavl_peak_detector_reset</a> (<a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> *pd)</td></tr> <tr class="memdesc:ga4de693cdd4743448c9d45e3a473ec956"><td class="mdescLeft"> </td><td class="mdescRight">Reset a peak detector. <a href="#ga4de693cdd4743448c9d45e3a473ec956">More...</a><br /></td></tr> <tr class="separator:ga4de693cdd4743448c9d45e3a473ec956"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Detect peaks in the volume for steering normalizers and dynamic range compressors. </p> <p>While normalizers and dynamic range controls are out of the scope of gavl, some low-level functionality can be provided </p> <h2 class="groupheader">Typedef Documentation</h2> <a id="ga1974488d678c0e0f8fc55a5ecaa24e1c"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga1974488d678c0e0f8fc55a5ecaa24e1c">§ </a></span>gavl_peak_detector_t</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct gavl_peak_detector_s <a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a></td> </tr> </table> </div><div class="memdoc"> <p>Opaque structure for peak detector. </p> <p>You don't want to know what's inside. </p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a id="gacfd0d1870f12dc9b2d498317f9487dd4"></a> <h2 class="memtitle"><span class="permalink"><a href="#gacfd0d1870f12dc9b2d498317f9487dd4">§ </a></span>gavl_peak_detector_create()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC <a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a>* gavl_peak_detector_create </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Create peak detector. </p> <dl class="section return"><dt>Returns</dt><dd>A newly allocated peak detector </dd></dl> </div> </div> <a id="gaffc05b8a605cfab813bf368f27592bb3"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaffc05b8a605cfab813bf368f27592bb3">§ </a></span>gavl_peak_detector_destroy()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Destroys a peak detector and frees all associated memory. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> </table> </dd> </dl> </div> </div> <a id="ga47d5a567add1e12fdb57e55053ce6ecc"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga47d5a567add1e12fdb57e55053ce6ecc">§ </a></span>gavl_peak_detector_set_format()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_set_format </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="structgavl__audio__format__t.html">gavl_audio_format_t</a> * </td> <td class="paramname"><em>format</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set format for a peak detector. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> <tr><td class="paramname">format</td><td>The format subsequent frames will be passed with</td></tr> </table> </dd> </dl> <p>This function can be called multiple times with one instance. It also calls <a class="el" href="group__peak__detection.html#ga4de693cdd4743448c9d45e3a473ec956">gavl_peak_detector_reset</a>. </p> </div> </div> <a id="ga68a33fb2e39b014897bab9cbd6b97c1a"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga68a33fb2e39b014897bab9cbd6b97c1a">§ </a></span>gavl_peak_detector_update()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_update </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structgavl__audio__frame__t.html">gavl_audio_frame_t</a> * </td> <td class="paramname"><em>frame</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Feed the peak detector with a new frame. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> <tr><td class="paramname">frame</td><td>An audio frame </td></tr> </table> </dd> </dl> </div> </div> <a id="gab72a6993c866fe8fb2779604bc7a85e7"></a> <h2 class="memtitle"><span class="permalink"><a href="#gab72a6993c866fe8fb2779604bc7a85e7">§ </a></span>gavl_peak_detector_get_peak()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_get_peak </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>min</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>max</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>abs</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get the peak volume across all channels. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> <tr><td class="paramname">min</td><td>Returns minimum amplitude </td></tr> <tr><td class="paramname">max</td><td>Returns maximum amplitude </td></tr> <tr><td class="paramname">abs</td><td>Returns maximum absolute amplitude</td></tr> </table> </dd> </dl> <p>The returned amplitudes are normalized such that the minimum amplitude corresponds to -1.0, the maximum amplitude corresponds to 1.0. </p> </div> </div> <a id="ga325302b265f717795dc0ac32f7ce33d0"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga325302b265f717795dc0ac32f7ce33d0">§ </a></span>gavl_peak_detector_get_peaks()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_get_peaks </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>min</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>max</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"><em>abs</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get the peak volume for all channels separate. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> <tr><td class="paramname">min</td><td>Returns minimum amplitude </td></tr> <tr><td class="paramname">max</td><td>Returns maximum amplitude </td></tr> <tr><td class="paramname">abs</td><td>Returns maximum absolute amplitude</td></tr> </table> </dd> </dl> <p>The returned amplitudes are normalized such that the minimum amplitude corresponds to -1.0, the maximum amplitude corresponds to 1.0. </p> </div> </div> <a id="ga4de693cdd4743448c9d45e3a473ec956"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga4de693cdd4743448c9d45e3a473ec956">§ </a></span>gavl_peak_detector_reset()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_peak_detector_reset </td> <td>(</td> <td class="paramtype"><a class="el" href="group__peak__detection.html#ga1974488d678c0e0f8fc55a5ecaa24e1c">gavl_peak_detector_t</a> * </td> <td class="paramname"><em>pd</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Reset a peak detector. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pd</td><td>A peak detector </td></tr> </table> </dd> </dl> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.12 </small></address> </body> </html>