sfmlinstaller

sfmlinstaller Mercurial Source Tree


Root/windows/doc/html/classsf_1_1SoundRecorder.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <head>
        <title>SFML - Simple and Fast Multimedia Library</title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
        <!--<link rel='stylesheet' type='text/css' href="http://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
        <link rel="stylesheet" type="text/css" href="doxygen.css" title="default" media="screen,print" />
    </head>
    <body>
        <div id="banner-container">
            <div id="banner">
                <span id="sfml">SFML</span>
            </div>
        </div>
        <div id="content">
<!-- Generated by Doxygen 1.8.2 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.htm"><span>Main Page</span></a></li>
      <li><a href="modules.htm"><span>Modules</span></a></li>
      <li class="current"><a href="annotated.htm"><span>Classes</span></a></li>
      <li><a href="files.htm"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.htm"><span>Class List</span></a></li>
      <li><a href="classes.htm"><span>Class Index</span></a></li>
      <li><a href="hierarchy.htm"><span>Class Hierarchy</span></a></li>
      <li><a href="functions.htm"><span>Class Members</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><b>sf</b></li><li class="navelem"><a class="el" href="classsf_1_1SoundRecorder.htm">SoundRecorder</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> |
<a href="#pub-static-methods">Static Public Member Functions</a> |
<a href="#pro-methods">Protected Member Functions</a> |
<a href="classsf_1_1SoundRecorder-members.htm">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">sf::SoundRecorder Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span><div class="ingroups"><a class="el" href="group__audio.htm">Audio module</a></div></div>  </div>
</div><!--header-->
<div class="contents">
 
<p>Abstract base class for capturing sound data. 
 <a href="classsf_1_1SoundRecorder.htm#details">More...</a></p>
 
<p><code>#include <<a class="el" href="SoundRecorder_8hpp_source.htm">SoundRecorder.hpp</a>></code></p>
<div class="dynheader">
Inheritance diagram for sf::SoundRecorder:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classsf_1_1SoundRecorder.png" usemap="#sf::SoundRecorder_map" alt=""/>
  <map id="sf::SoundRecorder_map" name="sf::SoundRecorder_map">
<area href="classsf_1_1SoundBufferRecorder.htm" title="Specialized SoundRecorder which stores the captured audio data into a sound buffer." alt="sf::SoundBufferRecorder" shape="rect" coords="0,56,152,80"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:acc599e61aaa47edaae88cf43f0a43549"><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#acc599e61aaa47edaae88cf43f0a43549">~SoundRecorder</a> ()</td></tr>
<tr class="memdesc:acc599e61aaa47edaae88cf43f0a43549"><td class="mdescLeft"> </td><td class="mdescRight">destructor  <a href="#acc599e61aaa47edaae88cf43f0a43549"></a><br/></td></tr>
<tr class="separator:acc599e61aaa47edaae88cf43f0a43549"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a777e633114f7221cd7554a6ed486259e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a777e633114f7221cd7554a6ed486259e">start</a> (unsigned int sampleRate=44100)</td></tr>
<tr class="memdesc:a777e633114f7221cd7554a6ed486259e"><td class="mdescLeft"> </td><td class="mdescRight">Start the capture.  <a href="#a777e633114f7221cd7554a6ed486259e"></a><br/></td></tr>
<tr class="separator:a777e633114f7221cd7554a6ed486259e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8d9c8346aa9aa409cfed4a1101159c4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a8d9c8346aa9aa409cfed4a1101159c4c">stop</a> ()</td></tr>
<tr class="memdesc:a8d9c8346aa9aa409cfed4a1101159c4c"><td class="mdescLeft"> </td><td class="mdescRight">Stop the capture.  <a href="#a8d9c8346aa9aa409cfed4a1101159c4c"></a><br/></td></tr>
<tr class="separator:a8d9c8346aa9aa409cfed4a1101159c4c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1f3726cbe0a2b2b291b36beea57960d7"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a1f3726cbe0a2b2b291b36beea57960d7">getSampleRate</a> () const </td></tr>
<tr class="memdesc:a1f3726cbe0a2b2b291b36beea57960d7"><td class="mdescLeft"> </td><td class="mdescRight">Get the sample rate.  <a href="#a1f3726cbe0a2b2b291b36beea57960d7"></a><br/></td></tr>
<tr class="separator:a1f3726cbe0a2b2b291b36beea57960d7"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:aab2bd0fee9e48d6cfd449b1cb078ce5a"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#aab2bd0fee9e48d6cfd449b1cb078ce5a">isAvailable</a> ()</td></tr>
<tr class="memdesc:aab2bd0fee9e48d6cfd449b1cb078ce5a"><td class="mdescLeft"> </td><td class="mdescRight">Check if the system supports audio capture.  <a href="#aab2bd0fee9e48d6cfd449b1cb078ce5a"></a><br/></td></tr>
<tr class="separator:aab2bd0fee9e48d6cfd449b1cb078ce5a"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a50ebad413c4f157408a0fa49f23212a9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a50ebad413c4f157408a0fa49f23212a9">SoundRecorder</a> ()</td></tr>
<tr class="memdesc:a50ebad413c4f157408a0fa49f23212a9"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor.  <a href="#a50ebad413c4f157408a0fa49f23212a9"></a><br/></td></tr>
<tr class="separator:a50ebad413c4f157408a0fa49f23212a9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7af418fb036201d3f85745bef78ce77f"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a7af418fb036201d3f85745bef78ce77f">onStart</a> ()</td></tr>
<tr class="memdesc:a7af418fb036201d3f85745bef78ce77f"><td class="mdescLeft"> </td><td class="mdescRight">Start capturing audio data.  <a href="#a7af418fb036201d3f85745bef78ce77f"></a><br/></td></tr>
<tr class="separator:a7af418fb036201d3f85745bef78ce77f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2670124cbe7a87c7e46b4840807f4fd7"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#a2670124cbe7a87c7e46b4840807f4fd7">onProcessSamples</a> (const Int16 *samples, std::size_t sampleCount)=0</td></tr>
<tr class="memdesc:a2670124cbe7a87c7e46b4840807f4fd7"><td class="mdescLeft"> </td><td class="mdescRight">Process a new chunk of recorded samples.  <a href="#a2670124cbe7a87c7e46b4840807f4fd7"></a><br/></td></tr>
<tr class="separator:a2670124cbe7a87c7e46b4840807f4fd7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aefc36138ca1e96c658301280e4a31b64"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classsf_1_1SoundRecorder.htm#aefc36138ca1e96c658301280e4a31b64">onStop</a> ()</td></tr>
<tr class="memdesc:aefc36138ca1e96c658301280e4a31b64"><td class="mdescLeft"> </td><td class="mdescRight">Stop capturing audio data.  <a href="#aefc36138ca1e96c658301280e4a31b64"></a><br/></td></tr>
<tr class="separator:aefc36138ca1e96c658301280e4a31b64"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Abstract base class for capturing sound data. </p>
<p><a class="el" href="classsf_1_1SoundBuffer.htm" title="Storage for audio samples defining a sound.">sf::SoundBuffer</a> provides a simple interface to access the audio recording capabilities of the computer (the microphone).</p>
<p>As an abstract base class, it only cares about capturing sound samples, the task of making something useful with them is left to the derived class. Note that SFML provides a built-in specialization for saving the captured data to a sound buffer (see <a class="el" href="classsf_1_1SoundBufferRecorder.htm" title="Specialized SoundRecorder which stores the captured audio data into a sound buffer.">sf::SoundBufferRecorder</a>).</p>
<p>A derived class has only one virtual function to override: </p>
<ul>
<li>onProcessSamples provides the new chunks of audio samples while the capture happens</li>
</ul>
<p>Moreover, two additionnal virtual functions can be overriden as well if necessary: </p>
<ul>
<li>onStart is called before the capture happens, to perform custom initializations </li>
<li>onStop is called after the capture ends, to perform custom cleanup</li>
</ul>
<p>The audio capture feature may not be supported or activated on every platform, thus it is recommended to check its availability with the <a class="el" href="classsf_1_1SoundRecorder.htm#aab2bd0fee9e48d6cfd449b1cb078ce5a" title="Check if the system supports audio capture.">isAvailable()</a> function. If it returns false, then any attempt to use an audio recorder will fail.</p>
<p>It is important to note that the audio capture happens in a separate thread, so that it doesn't block the rest of the program. In particular, the onProcessSamples and onStop virtual functions (but not onStart) will be called from this separate thread. It is important to keep this in mind, because you may have to take care of synchronization issues if you share data between threads.</p>
<p>Usage example: </p>
<div class="fragment"><div class="line"><span class="keyword">class </span>CustomRecorder : <span class="keyword">public</span> <a class="code" href="classsf_1_1SoundRecorder.htm" title="Abstract base class for capturing sound data.">sf::SoundRecorder</a></div>
<div class="line">{</div>
<div class="line">    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classsf_1_1SoundRecorder.htm#a7af418fb036201d3f85745bef78ce77f" title="Start capturing audio data.">onStart</a>() <span class="comment">// optional</span></div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// Initialize whatever has to be done before the capture starts</span></div>
<div class="line">        ...</div>
<div class="line"></div>
<div class="line">        <span class="comment">// Return true to start playing</span></div>
<div class="line">        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classsf_1_1SoundRecorder.htm#a2670124cbe7a87c7e46b4840807f4fd7" title="Process a new chunk of recorded samples.">onProcessSamples</a>(<span class="keyword">const</span> Int16* samples, std::size_t sampleCount)</div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// Do something with the new chunk of samples (store them, send them, ...)</span></div>
<div class="line">        ...</div>
<div class="line"></div>
<div class="line">        <span class="comment">// Return true to continue playing</span></div>
<div class="line">        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classsf_1_1SoundRecorder.htm#aefc36138ca1e96c658301280e4a31b64" title="Stop capturing audio data.">onStop</a>() <span class="comment">// optional</span></div>
<div class="line">    {</div>
<div class="line">        <span class="comment">// Clean up whatever has to be done after the capture ends</span></div>
<div class="line">        ...</div>
<div class="line">    }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="comment">// Usage</span></div>
<div class="line"><span class="keywordflow">if</span> (CustomRecorder::isAvailable())</div>
<div class="line">{</div>
<div class="line">    CustomRecorder recorder;</div>
<div class="line">    recorder.start();</div>
<div class="line">    ...</div>
<div class="line">    recorder.stop();</div>
<div class="line">}</div>
</div><!-- fragment --><dl class="section see"><dt>See Also</dt><dd><a class="el" href="classsf_1_1SoundBufferRecorder.htm" title="Specialized SoundRecorder which stores the captured audio data into a sound buffer.">sf::SoundBufferRecorder</a> </dd></dl>
 
<p>Definition at line <a class="el" href="SoundRecorder_8hpp_source.htm#l00042">42</a> of file <a class="el" href="SoundRecorder_8hpp_source.htm">SoundRecorder.hpp</a>.</p>
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
<a class="anchor" id="acc599e61aaa47edaae88cf43f0a43549"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual sf::SoundRecorder::~SoundRecorder </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>destructor </p>
 
</div>
</div>
<a class="anchor" id="a50ebad413c4f157408a0fa49f23212a9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">sf::SoundRecorder::SoundRecorder </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>Default constructor. </p>
<p>This constructor is only meant to be called by derived classes. </p>
 
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a1f3726cbe0a2b2b291b36beea57960d7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int sf::SoundRecorder::getSampleRate </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">
 
<p>Get the sample rate. </p>
<p>The sample rate defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality).</p>
<dl class="section return"><dt>Returns</dt><dd>Sample rate, in samples per second </dd></dl>
 
</div>
</div>
<a class="anchor" id="aab2bd0fee9e48d6cfd449b1cb078ce5a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static bool sf::SoundRecorder::isAvailable </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>Check if the system supports audio capture. </p>
<p>This function should always be called before using the audio capture features. If it returns false, then any attempt to use <a class="el" href="classsf_1_1SoundRecorder.htm" title="Abstract base class for capturing sound data.">sf::SoundRecorder</a> or one of its derived classes will fail.</p>
<dl class="section return"><dt>Returns</dt><dd>True if audio capture is supported, false otherwise </dd></dl>
 
</div>
</div>
<a class="anchor" id="a2670124cbe7a87c7e46b4840807f4fd7"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool sf::SoundRecorder::onProcessSamples </td>
          <td>(</td>
          <td class="paramtype">const Int16 * </td>
          <td class="paramname"><em>samples</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::size_t </td>
          <td class="paramname"><em>sampleCount</em> </td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>Process a new chunk of recorded samples. </p>
<p>This virtual function is called every time a new chunk of recorded data is available. The derived class can then do whatever it wants with it (storing it, playing it, sending it over the network, etc.).</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">samples</td><td>Pointer to the new chunk of recorded samples </td></tr>
    <tr><td class="paramname">sampleCount</td><td>Number of samples pointed by <em>samples</em> </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True to continue the capture, or false to stop it </dd></dl>
 
<p>Implemented in <a class="el" href="classsf_1_1SoundBufferRecorder.htm#a9ceb94de14632ae8c1b78faf603b4767">sf::SoundBufferRecorder</a>.</p>
 
</div>
</div>
<a class="anchor" id="a7af418fb036201d3f85745bef78ce77f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool sf::SoundRecorder::onStart </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>Start capturing audio data. </p>
<p>This virtual function may be overriden by a derived class if something has to be done every time a new capture starts. If not, this function can be ignored; the default implementation does nothing.</p>
<dl class="section return"><dt>Returns</dt><dd>True to start the capture, or false to abort it </dd></dl>
 
<p>Reimplemented in <a class="el" href="classsf_1_1SoundBufferRecorder.htm#a531a7445fc8a48eaf9fc039c83f17c6f">sf::SoundBufferRecorder</a>.</p>
 
</div>
</div>
<a class="anchor" id="aefc36138ca1e96c658301280e4a31b64"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void sf::SoundRecorder::onStop </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
 
<p>Stop capturing audio data. </p>
<p>This virtual function may be overriden by a derived class if something has to be done every time the capture ends. If not, this function can be ignored; the default implementation does nothing. </p>
 
<p>Reimplemented in <a class="el" href="classsf_1_1SoundBufferRecorder.htm#ab8e53849312413431873a5869d509f1e">sf::SoundBufferRecorder</a>.</p>
 
</div>
</div>
<a class="anchor" id="a777e633114f7221cd7554a6ed486259e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void sf::SoundRecorder::start </td>
          <td>(</td>
          <td class="paramtype">unsigned int </td>
          <td class="paramname"><em>sampleRate</em> = <code>44100</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
 
<p>Start the capture. </p>
<p>The <em>sampleRate</em> parameter defines the number of audio samples captured per second. The higher, the better the quality (for example, 44100 samples/sec is CD quality). This function uses its own thread so that it doesn't block the rest of the program while the capture runs. Please note that only one capture can happen at the same time.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">sampleRate</td><td>Desired capture rate, in number of samples per second</td></tr>
  </table>
  </dd>
</dl>
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classsf_1_1SoundRecorder.htm#a8d9c8346aa9aa409cfed4a1101159c4c" title="Stop the capture.">stop</a> </dd></dl>
 
</div>
</div>
<a class="anchor" id="a8d9c8346aa9aa409cfed4a1101159c4c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void sf::SoundRecorder::stop </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
 
<p>Stop the capture. </p>
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classsf_1_1SoundRecorder.htm#a777e633114f7221cd7554a6ed486259e" title="Start the capture.">start</a> </dd></dl>
 
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="SoundRecorder_8hpp_source.htm">SoundRecorder.hpp</a></li>
</ul>
</div><!-- contents -->
        </div>
        <div id="footer-container">
            <div id="footer">
                Copyright � Laurent Gomila  :: 
                Documentation generated by <a href="http://www.doxygen.org/" title="doxygen website">doxygen</a>  :: 
            </div>
        </div>
    <script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
  ga('create', 'UA-41898676-1', 'srchub.org');
  ga('send', 'pageview');
Page rendered in 0.98340s using 11 queries.
Source at commit tip created 11 years 11 months ago.
By Nathan Adams, Initial commit

Archive Download this file

Branches

Tags

Page rendered in 0.98340s using 11 queries.