arduino-audio-tools/classaudio__tools_1_1_variable_speed_ring_buffer_simple.html

218 lines
19 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>arduino-audio-tools: VariableSpeedRingBufferSimple&lt; T &gt; Class Template Reference</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="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.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">arduino-audio-tools
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceaudio__tools.html">audio_tools</a></li><li class="navelem"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html">VariableSpeedRingBufferSimple</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classaudio__tools_1_1_variable_speed_ring_buffer_simple-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">VariableSpeedRingBufferSimple&lt; T &gt; Class Template Reference<div class="ingroups"><a class="el" href="group__main.html">Arduino Audio Tools</a> &raquo; <a class="el" href="group__tools.html">Tools</a> &raquo; <a class="el" href="group__buffers.html">Buffers</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>Very Simple Buffer implementation for Pitch Shift. We write in constant speed, but reading can be done in a variable speed. We will hear some noise when the buffer read and write pointers overrun each other.
<a href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="_pitch_shift_8h_source.html">PitchShift.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for VariableSpeedRingBufferSimple&lt; T &gt;:</div>
<div class="dyncontent">
<div class="center">
<img src="classaudio__tools_1_1_variable_speed_ring_buffer_simple.png" usemap="#VariableSpeedRingBufferSimple_3C_20T_20_3E_map" alt=""/>
<map id="VariableSpeedRingBufferSimple_3C_20T_20_3E_map" name="VariableSpeedRingBufferSimple_3C_20T_20_3E_map">
<area href="classaudio__tools_1_1_base_buffer.html" title="Shared functionality of all buffers." alt="BaseBuffer&lt; T &gt;" shape="rect" coords="0,0,224,24"/>
</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:a742906193223c7c67991342fc2e71a02"><td class="memItemLeft" align="right" valign="top"><a id="a742906193223c7c67991342fc2e71a02"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>VariableSpeedRingBufferSimple</b> (int size=0, float increment=1.0)</td></tr>
<tr class="separator:a742906193223c7c67991342fc2e71a02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8790df7b9c12234348cad32e5652de5a"><td class="memItemLeft" align="right" valign="top"><a id="a8790df7b9c12234348cad32e5652de5a"></a>
virtual T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a8790df7b9c12234348cad32e5652de5a">address</a> ()</td></tr>
<tr class="memdesc:a8790df7b9c12234348cad32e5652de5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns the address of the start of the physical read buffer <br /></td></tr>
<tr class="separator:a8790df7b9c12234348cad32e5652de5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a512cfced3ab951dde7a9a78f1274fe63"><td class="memItemLeft" align="right" valign="top"><a id="a512cfced3ab951dde7a9a78f1274fe63"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a512cfced3ab951dde7a9a78f1274fe63">available</a> ()</td></tr>
<tr class="memdesc:a512cfced3ab951dde7a9a78f1274fe63"><td class="mdescLeft">&#160;</td><td class="mdescRight">provides the number of entries that are available to read <br /></td></tr>
<tr class="separator:a512cfced3ab951dde7a9a78f1274fe63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a473a08fbb41a997860a55213bc367d44"><td class="memItemLeft" align="right" valign="top"><a id="a473a08fbb41a997860a55213bc367d44"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a473a08fbb41a997860a55213bc367d44">availableForWrite</a> ()</td></tr>
<tr class="memdesc:a473a08fbb41a997860a55213bc367d44"><td class="mdescLeft">&#160;</td><td class="mdescRight">provides the number of entries that are available to write <br /></td></tr>
<tr class="separator:a473a08fbb41a997860a55213bc367d44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8bb3912a3ce86b15842e79d0b421204"><td class="memItemLeft" align="right" valign="top"><a id="ac8bb3912a3ce86b15842e79d0b421204"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a> ()</td></tr>
<tr class="memdesc:ac8bb3912a3ce86b15842e79d0b421204"><td class="mdescLeft">&#160;</td><td class="mdescRight">same as reset <br /></td></tr>
<tr class="separator:ac8bb3912a3ce86b15842e79d0b421204"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e526a739923663ae76533d9ad9eb656"><td class="memItemLeft" align="right" valign="top"><a id="a5e526a739923663ae76533d9ad9eb656"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#a5e526a739923663ae76533d9ad9eb656">clearArray</a> (int len)</td></tr>
<tr class="memdesc:a5e526a739923663ae76533d9ad9eb656"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the next len entries. <br /></td></tr>
<tr class="separator:a5e526a739923663ae76533d9ad9eb656"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af337ffd75e4f019ce15302c60715d84b"><td class="memItemLeft" align="right" valign="top"><a id="af337ffd75e4f019ce15302c60715d84b"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>isEmpty</b> ()</td></tr>
<tr class="separator:af337ffd75e4f019ce15302c60715d84b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac0ab007845c29d8d4c9b96a3cbbe2c9"><td class="memItemLeft" align="right" valign="top"><a id="aac0ab007845c29d8d4c9b96a3cbbe2c9"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#aac0ab007845c29d8d4c9b96a3cbbe2c9">isFull</a> ()</td></tr>
<tr class="memdesc:aac0ab007845c29d8d4c9b96a3cbbe2c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">checks if the buffer is full <br /></td></tr>
<tr class="separator:aac0ab007845c29d8d4c9b96a3cbbe2c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e49b863dbcd071ed8d6766f31a59224"><td class="memItemLeft" align="right" valign="top"><a id="a6e49b863dbcd071ed8d6766f31a59224"></a>
T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a6e49b863dbcd071ed8d6766f31a59224">peek</a> ()</td></tr>
<tr class="memdesc:a6e49b863dbcd071ed8d6766f31a59224"><td class="mdescLeft">&#160;</td><td class="mdescRight">peeks the actual entry from the buffer <br /></td></tr>
<tr class="separator:a6e49b863dbcd071ed8d6766f31a59224"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97acc37c2fc08fa60479ac5b9c36e40a"><td class="memItemLeft" align="right" valign="top"><a id="a97acc37c2fc08fa60479ac5b9c36e40a"></a>
T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a97acc37c2fc08fa60479ac5b9c36e40a">read</a> ()</td></tr>
<tr class="memdesc:a97acc37c2fc08fa60479ac5b9c36e40a"><td class="mdescLeft">&#160;</td><td class="mdescRight">reads a single value <br /></td></tr>
<tr class="separator:a97acc37c2fc08fa60479ac5b9c36e40a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a163c69bc2b88421988d60f4efddb1f3f"><td class="memItemLeft" align="right" valign="top"><a id="a163c69bc2b88421988d60f4efddb1f3f"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#a163c69bc2b88421988d60f4efddb1f3f">readArray</a> (T data[], int len)</td></tr>
<tr class="memdesc:a163c69bc2b88421988d60f4efddb1f3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">reads multiple values <br /></td></tr>
<tr class="separator:a163c69bc2b88421988d60f4efddb1f3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a1bfa2c5cba939eed47428794683f22"><td class="memItemLeft" align="right" valign="top"><a id="a9a1bfa2c5cba939eed47428794683f22"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#a9a1bfa2c5cba939eed47428794683f22">readFrames</a> (T data[][2], int len)</td></tr>
<tr class="memdesc:a9a1bfa2c5cba939eed47428794683f22"><td class="mdescLeft">&#160;</td><td class="mdescRight">reads multiple values for array of 2 dimensional frames <br /></td></tr>
<tr class="separator:a9a1bfa2c5cba939eed47428794683f22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d6575aa6f930127c4b12be2a0712e23"><td class="memTemplParams" colspan="2"><a id="a6d6575aa6f930127c4b12be2a0712e23"></a>
template&lt;int rows, int channels&gt; </td></tr>
<tr class="memitem:a6d6575aa6f930127c4b12be2a0712e23"><td class="memTemplItemLeft" align="right" valign="top">int&#160;</td><td class="memTemplItemRight" valign="bottom"><b>readFrames</b> (T(&amp;data)[rows][channels])</td></tr>
<tr class="separator:a6d6575aa6f930127c4b12be2a0712e23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad20897c5c8bd47f5d4005989bead0e55"><td class="memItemLeft" align="right" valign="top"><a id="ad20897c5c8bd47f5d4005989bead0e55"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#ad20897c5c8bd47f5d4005989bead0e55">reset</a> ()</td></tr>
<tr class="memdesc:ad20897c5c8bd47f5d4005989bead0e55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset pointer positions and clear buffer. <br /></td></tr>
<tr class="separator:ad20897c5c8bd47f5d4005989bead0e55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada388d17b93c54a1a0f6edddbe0953ab"><td class="memItemLeft" align="right" valign="top"><a id="ada388d17b93c54a1a0f6edddbe0953ab"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>resize</b> (int size)</td></tr>
<tr class="separator:ada388d17b93c54a1a0f6edddbe0953ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35b9084c78d3884e367a4d2848a9f61a"><td class="memItemLeft" align="right" valign="top"><a id="a35b9084c78d3884e367a4d2848a9f61a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>setIncrement</b> (float increment)</td></tr>
<tr class="separator:a35b9084c78d3884e367a4d2848a9f61a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b6b70701c46e22849f0f363861351cd"><td class="memItemLeft" align="right" valign="top"><a id="a0b6b70701c46e22849f0f363861351cd"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>size</b> ()</td></tr>
<tr class="separator:a0b6b70701c46e22849f0f363861351cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f7e466737f4b476929238c84dd6e923"><td class="memItemLeft" align="right" valign="top"><a id="a9f7e466737f4b476929238c84dd6e923"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_variable_speed_ring_buffer_simple.html#a9f7e466737f4b476929238c84dd6e923">write</a> (T sample)</td></tr>
<tr class="memdesc:a9f7e466737f4b476929238c84dd6e923"><td class="mdescLeft">&#160;</td><td class="mdescRight">write add an entry to the buffer <br /></td></tr>
<tr class="separator:a9f7e466737f4b476929238c84dd6e923"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b6c561aac2af64aafac1946b6e46393"><td class="memItemLeft" align="right" valign="top"><a id="a2b6c561aac2af64aafac1946b6e46393"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#a2b6c561aac2af64aafac1946b6e46393">writeArray</a> (const T data[], int len)</td></tr>
<tr class="memdesc:a2b6c561aac2af64aafac1946b6e46393"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills the buffer data. <br /></td></tr>
<tr class="separator:a2b6c561aac2af64aafac1946b6e46393"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d3100be7fa69e3ddd9896141f143c99"><td class="memItemLeft" align="right" valign="top"><a id="a4d3100be7fa69e3ddd9896141f143c99"></a>
virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaudio__tools_1_1_base_buffer.html#a4d3100be7fa69e3ddd9896141f143c99">writeArrayOverwrite</a> (const T data[], int len)</td></tr>
<tr class="memdesc:a4d3100be7fa69e3ddd9896141f143c99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fills the buffer data and overwrites the oldest data if the buffer is full. <br /></td></tr>
<tr class="separator:a4d3100be7fa69e3ddd9896141f143c99"><td class="memSeparator" colspan="2">&#160;</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:a4ac2b238f94954cb2aeab499fa477cb9"><td class="memItemLeft" align="right" valign="top"><a id="a4ac2b238f94954cb2aeab499fa477cb9"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>setWritePos</b> (int pos)</td></tr>
<tr class="separator:a4ac2b238f94954cb2aeab499fa477cb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:ab25fbc6fb589f9dc94108733994d4f5c"><td class="memItemLeft" align="right" valign="top"><a id="ab25fbc6fb589f9dc94108733994d4f5c"></a>
<a class="el" href="classaudio__tools_1_1_vector.html">Vector</a>&lt; T &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>buffer</b> {0}</td></tr>
<tr class="separator:ab25fbc6fb589f9dc94108733994d4f5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af22ff4ab7a026e6c3b4b08eafb2df027"><td class="memItemLeft" align="right" valign="top"><a id="af22ff4ab7a026e6c3b4b08eafb2df027"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>buffer_size</b> = 0</td></tr>
<tr class="separator:af22ff4ab7a026e6c3b4b08eafb2df027"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd7d9af99b1d6c8219c7e87507fec2e7"><td class="memItemLeft" align="right" valign="top"><a id="abd7d9af99b1d6c8219c7e87507fec2e7"></a>
friend&#160;</td><td class="memItemRight" valign="bottom"><b>NBuffer&lt; T &gt;</b></td></tr>
<tr class="separator:abd7d9af99b1d6c8219c7e87507fec2e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bf14e40fbff08234211c7bc0570d42a"><td class="memItemLeft" align="right" valign="top"><a id="a0bf14e40fbff08234211c7bc0570d42a"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>read_increment</b> = 1.0</td></tr>
<tr class="separator:a0bf14e40fbff08234211c7bc0570d42a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adeed55057f872432091f61ff51120cc5"><td class="memItemLeft" align="right" valign="top"><a id="adeed55057f872432091f61ff51120cc5"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>read_pos_float</b> = 0.0</td></tr>
<tr class="separator:adeed55057f872432091f61ff51120cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89d2c2295a587bc5e3a6e47ac56c3d96"><td class="memItemLeft" align="right" valign="top"><a id="a89d2c2295a587bc5e3a6e47ac56c3d96"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>write_pos</b> = 0</td></tr>
<tr class="separator:a89d2c2295a587bc5e3a6e47ac56c3d96"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename T&gt;<br />
class audio_tools::VariableSpeedRingBufferSimple&lt; T &gt;</h3>
<p>Very Simple Buffer implementation for Pitch Shift. We write in constant speed, but reading can be done in a variable speed. We will hear some noise when the buffer read and write pointers overrun each other. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">T</td><td></td></tr>
</table>
</dd>
</dl>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>src/AudioEffects/<a class="el" href="_pitch_shift_8h_source.html">PitchShift.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>