Release 4.4.0 tarball

This commit is contained in:
Gary Scavone
2013-09-29 23:44:33 +02:00
committed by Stephen Sinclair
parent 3706458166
commit d2ed001eb5
1427 changed files with 44061 additions and 39976 deletions

View File

@@ -8,70 +8,144 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>ADSR.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00016"></a>00016 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef STK_ADSR_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_ADSR_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classADSR.html">00023</a> <span class="keyword">class </span><a class="code" href="classADSR.html">ADSR</a> : <span class="keyword">public</span> <a class="code" href="classEnvelope.html">Envelope</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <span class="keyword">enum</span> { ATTACK, DECAY, SUSTAIN, RELEASE, DONE };
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <a class="code" href="classADSR.html#a0">ADSR</a>(<span class="keywordtype">void</span>);
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <a class="code" href="classADSR.html#a1">~ADSR</a>(<span class="keywordtype">void</span>);
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a2">keyOn</a>(<span class="keywordtype">void</span>);
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a3">keyOff</a>(<span class="keywordtype">void</span>);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a4">setAttackRate</a>(StkFloat rate);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a5">setDecayRate</a>(StkFloat rate);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a6">setSustainLevel</a>(StkFloat level);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a7">setReleaseRate</a>(StkFloat rate);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a8">setAttackTime</a>(StkFloat time);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a9">setDecayTime</a>(StkFloat time);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a10">setReleaseTime</a>(StkFloat time);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a11">setAllTimes</a>(StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a12">setTarget</a>(StkFloat target);
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">int</span> <a class="code" href="classADSR.html#a13">getState</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classADSR.html#a14">setValue</a>(StkFloat value);
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keyword">protected</span>:
<a name="l00076"></a>00076
<a name="l00077"></a>00077 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00078"></a>00078 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 StkFloat attackRate_;
<a name="l00081"></a>00081 StkFloat decayRate_;
<a name="l00082"></a>00082 StkFloat sustainLevel_;
<a name="l00083"></a>00083 StkFloat releaseRate_;
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>ADSR.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ADSR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ADSR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a><a class="code" href="namespacestk.html">00006</a> <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classstk_1_1ADSR.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <span class="keyword">enum</span> {
<a name="l00027"></a><a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba9518c737b76795fa49f997c09e074c8e">00027</a> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba9518c737b76795fa49f997c09e074c8e">ATTACK</a>,
<a name="l00028"></a><a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba75e1deeb861fe2989250b1977018cacf">00028</a> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba75e1deeb861fe2989250b1977018cacf">DECAY</a>,
<a name="l00029"></a><a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba139dc35648a28ddc99a7a606e185f6ad">00029</a> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba139dc35648a28ddc99a7a606e185f6ad">SUSTAIN</a>,
<a name="l00030"></a><a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba7efc189b0b53e581201fd64f357a1756">00030</a> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba7efc189b0b53e581201fd64f357a1756">RELEASE</a>,
<a name="l00031"></a><a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154bac9fd188b8e5ad469e002f7ba3498028b">00031</a> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154bac9fd188b8e5ad469e002f7ba3498028b">DONE</a>
<a name="l00032"></a>00032 };
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <a class="code" href="classstk_1_1ADSR.html#c7473272021307b0dcf1ef602143e144" title="Default constructor.">ADSR</a>( <span class="keywordtype">void</span> );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1ADSR.html#714f0b9deb325050eba819bc1fe22127" title="Class destructor.">~ADSR</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#ad03e82009a20cfb49c1f04bae791631" title="Set target = 1, state = ADSR::ATTACK.">keyOn</a>( <span class="keywordtype">void</span> );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#9400e04b313ab8900a3ba9b693f448e6" title="Set target = 0, state = ADSR::RELEASE.">keyOff</a>( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#ff18347235fd52ce307c4b5de18a9c62" title="Set the attack rate.">setAttackRate</a>( StkFloat rate );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#285f500b1e149aed48dba2a155b95cdd" title="Set the decay rate.">setDecayRate</a>( StkFloat rate );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#85138fb6bbcc7b7cd85ec8449d68f7d8" title="Set the sustain level.">setSustainLevel</a>( StkFloat level );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#29da04231df73c2968c0e9387b43be6e" title="Set the release rate.">setReleaseRate</a>( StkFloat rate );
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#48885319b8175cd4d6312fdf7980f116" title="Set the attack rate based on a time duration.">setAttackTime</a>( StkFloat time );
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#450703c45384ae27eb766551843ce82d" title="Set the decay rate based on a time duration.">setDecayTime</a>( StkFloat time );
<a name="l00063"></a>00063
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#91c14442557cb65286a327f8b297237a" title="Set the release rate based on a time duration.">setReleaseTime</a>( StkFloat time );
<a name="l00066"></a>00066
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#3567b02a0e8ab82d18eb949d362f9708" title="Set sustain level and attack, decay, and release time durations.">setAllTimes</a>( StkFloat aTime, StkFloat dTime, StkFloat sLevel, StkFloat rTime );
<a name="l00069"></a>00069
<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#428eebd510e464ccd7bb4e5728f80d63" title="Set the target value.">setTarget</a>( StkFloat target );
<a name="l00072"></a>00072
<a name="l00074"></a><a class="code" href="classstk_1_1ADSR.html#87f9918cfa4104a841dc5b44f26f8904">00074</a> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1ADSR.html#87f9918cfa4104a841dc5b44f26f8904" title="Return the current envelope state (ATTACK, DECAY, SUSTAIN, RELEASE, DONE).">getState</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> state_; };
<a name="l00075"></a>00075
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ADSR.html#a99bf5fca3885bf8d99a3edc4072a4b5" title="Set to state = ADSR::SUSTAIN with current and target values of value.">setValue</a>( StkFloat value );
<a name="l00078"></a>00078
<a name="l00080"></a><a class="code" href="classstk_1_1ADSR.html#edbcb85346c354139f139b3232f36f39">00080</a> StkFloat <a class="code" href="classstk_1_1ADSR.html#edbcb85346c354139f139b3232f36f39" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00081"></a>00081
<a name="l00083"></a>00083 StkFloat <a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00084"></a>00084
<a name="l00086"></a>00086
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="keyword">protected</span>:
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="keywordtype">int</span> state_;
<a name="l00100"></a>00100 StkFloat value_;
<a name="l00101"></a>00101 StkFloat target_;
<a name="l00102"></a>00102 StkFloat attackRate_;
<a name="l00103"></a>00103 StkFloat decayRate_;
<a name="l00104"></a>00104 StkFloat releaseRate_;
<a name="l00105"></a>00105 StkFloat sustainLevel_;
<a name="l00106"></a>00106 };
<a name="l00107"></a>00107
<a name="l00108"></a><a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975">00108</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">ADSR :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00109"></a>00109 {
<a name="l00110"></a>00110 <span class="keywordflow">switch</span> ( state_ ) {
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keywordflow">case</span> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba9518c737b76795fa49f997c09e074c8e">ATTACK</a>:
<a name="l00113"></a>00113 value_ += attackRate_;
<a name="l00114"></a>00114 <span class="keywordflow">if</span> ( value_ &gt;= target_ ) {
<a name="l00115"></a>00115 value_ = target_;
<a name="l00116"></a>00116 target_ = sustainLevel_;
<a name="l00117"></a>00117 state_ = <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba75e1deeb861fe2989250b1977018cacf">DECAY</a>;
<a name="l00118"></a>00118 }
<a name="l00119"></a>00119 lastFrame_[0] = value_;
<a name="l00120"></a>00120 <span class="keywordflow">break</span>;
<a name="l00121"></a>00121
<a name="l00122"></a>00122 <span class="keywordflow">case</span> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba75e1deeb861fe2989250b1977018cacf">DECAY</a>:
<a name="l00123"></a>00123 value_ -= decayRate_;
<a name="l00124"></a>00124 <span class="keywordflow">if</span> ( value_ &lt;= sustainLevel_ ) {
<a name="l00125"></a>00125 value_ = sustainLevel_;
<a name="l00126"></a>00126 state_ = <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba139dc35648a28ddc99a7a606e185f6ad">SUSTAIN</a>;
<a name="l00127"></a>00127 }
<a name="l00128"></a>00128 lastFrame_[0] = value_;
<a name="l00129"></a>00129 <span class="keywordflow">break</span>;
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="keywordflow">case</span> <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154ba7efc189b0b53e581201fd64f357a1756">RELEASE</a>:
<a name="l00132"></a>00132 value_ -= releaseRate_;
<a name="l00133"></a>00133 <span class="keywordflow">if</span> ( value_ &lt;= 0.0 ) {
<a name="l00134"></a>00134 value_ = (StkFloat) 0.0;
<a name="l00135"></a>00135 state_ = <a class="code" href="classstk_1_1ADSR.html#e1cdd1f2886d69a76fcd5b1e0e9154bac9fd188b8e5ad469e002f7ba3498028b">DONE</a>;
<a name="l00136"></a>00136 }
<a name="l00137"></a>00137 lastFrame_[0] = value_;
<a name="l00138"></a>00138
<a name="l00139"></a>00139 }
<a name="l00140"></a>00140
<a name="l00141"></a>00141 <span class="keywordflow">return</span> value_;
<a name="l00142"></a>00142 }
<a name="l00143"></a>00143
<a name="l00144"></a><a class="code" href="classstk_1_1ADSR.html#97a617c65e62aadb4f88bd10cf437a6a">00144</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">ADSR :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00145"></a>00145 {
<a name="l00146"></a>00146 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00147"></a>00147 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00148"></a>00148 errorString_ &lt;&lt; <span class="stringliteral">"ADSR::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00149"></a>00149 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00150"></a>00150 }
<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span>
<a name="l00153"></a>00153 StkFloat *samples = &amp;frames[channel];
<a name="l00154"></a>00154 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00155"></a>00155 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00156"></a>00156 *samples = <a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">ADSR::tick</a>();
<a name="l00157"></a>00157
<a name="l00158"></a>00158 <span class="keywordflow">return</span> frames;
<a name="l00159"></a>00159 }
<a name="l00160"></a>00160
<a name="l00161"></a>00161 } <span class="comment">// stk namespace</span>
<a name="l00162"></a>00162
<a name="l00163"></a>00163 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,53 +8,114 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Asymp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef STK_ASYMP_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_ASYMP_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="keyword">const</span> StkFloat TARGET_THRESHOLD = 0.000001;
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Asymp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ASYMP_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ASYMP_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a><a class="code" href="classAsymp.html">00033</a> <span class="keyword">class </span><a class="code" href="classAsymp.html">Asymp</a> : <span class="keyword">public</span> <a class="code" href="classEnvelope.html">Envelope</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">public</span>:
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classAsymp.html#a0">Asymp</a>(<span class="keywordtype">void</span>);
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classAsymp.html#a1">~Asymp</a>(<span class="keywordtype">void</span>);
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a2">keyOn</a>(<span class="keywordtype">void</span>);
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a3">keyOff</a>(<span class="keywordtype">void</span>);
<a name="l00048"></a>00048
<a name="l00033"></a>00033 <span class="keyword">const</span> StkFloat TARGET_THRESHOLD = 0.000001;
<a name="l00034"></a>00034
<a name="l00035"></a><a class="code" href="classstk_1_1Asymp.html">00035</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Asymp.html" title="STK asymptotic curve envelope class.">Asymp</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037 <span class="keyword">public</span>:
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1Asymp.html#d8ea9fc5621a1d8b81001d459de265a0" title="Default constructor.">Asymp</a>( <span class="keywordtype">void</span> );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1Asymp.html#d869abbd938c263a2c177de636f5a57c" title="Class destructor.">~Asymp</a>( <span class="keywordtype">void</span> );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#51f0aad846eb6bda4c20eb63534786e2" title="Set target = 1.">keyOn</a>( <span class="keywordtype">void</span> );
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#082e765dc3bd6b452e92b602af7a1042" title="Set target = 0.">keyOff</a>( <span class="keywordtype">void</span> );
<a name="l00050"></a>00050
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a4">setTau</a>(StkFloat tau);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a5">setTime</a>(StkFloat time);
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classAsymp.html#a6">setTarget</a>(StkFloat target);
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="keyword">protected</span>:
<a name="l00052"></a>00052
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#ebd8ebaf6f6c9570d3ee78e1bcbbcbd2" title="Set the asymptotic rate via the time factor tau (must be &amp;gt; 0).">setTau</a>( StkFloat tau );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#ca998e9c4ae86b4958da59fc9433268c" title="Set the asymptotic rate based on a time duration (must be &amp;gt; 0).">setTime</a>( StkFloat time );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#7b0f7025ba5f268f1e5ce097b209f0ec" title="Set the target value.">setTarget</a>( StkFloat target );
<a name="l00065"></a>00065
<a name="l00066"></a>00066 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00067"></a>00067 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Asymp.html#81881bb8aca615f69bbbfd56267f971c" title="Set current and target values to value.">setValue</a>( StkFloat value );
<a name="l00068"></a>00068
<a name="l00069"></a>00069 StkFloat factor_;
<a name="l00070"></a>00070 StkFloat constant_;
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00070"></a><a class="code" href="classstk_1_1Asymp.html#aba01ef0ac1a493a14a73c3b29259bde">00070</a> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Asymp.html#aba01ef0ac1a493a14a73c3b29259bde" title="Return the current envelope state (0 = at target, 1 otherwise).">getState</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> state_; };
<a name="l00071"></a>00071
<a name="l00073"></a><a class="code" href="classstk_1_1Asymp.html#eb868c171e07206e2d5d30f8ce8f4436">00073</a> StkFloat <a class="code" href="classstk_1_1Asymp.html#eb868c171e07206e2d5d30f8ce8f4436" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00074"></a>00074
<a name="l00076"></a>00076 StkFloat <a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00077"></a>00077
<a name="l00079"></a>00079
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keyword">protected</span>:
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00091"></a>00091
<a name="l00092"></a>00092 StkFloat value_;
<a name="l00093"></a>00093 StkFloat target_;
<a name="l00094"></a>00094 StkFloat factor_;
<a name="l00095"></a>00095 StkFloat constant_;
<a name="l00096"></a>00096 <span class="keywordtype">int</span> state_;
<a name="l00097"></a>00097 };
<a name="l00098"></a>00098
<a name="l00099"></a><a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e">00099</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e" title="Compute and return one output sample.">Asymp :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00100"></a>00100 {
<a name="l00101"></a>00101 <span class="keywordflow">if</span> ( state_ ) {
<a name="l00102"></a>00102
<a name="l00103"></a>00103 value_ = factor_ * value_ + constant_;
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="comment">// Check threshold.</span>
<a name="l00106"></a>00106 <span class="keywordflow">if</span> ( target_ &gt; value_ ) {
<a name="l00107"></a>00107 <span class="keywordflow">if</span> ( target_ - value_ &lt;= TARGET_THRESHOLD ) {
<a name="l00108"></a>00108 value_ = target_;
<a name="l00109"></a>00109 state_ = 0;
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112 <span class="keywordflow">else</span> {
<a name="l00113"></a>00113 <span class="keywordflow">if</span> ( value_ - target_ &lt;= TARGET_THRESHOLD ) {
<a name="l00114"></a>00114 value_ = target_;
<a name="l00115"></a>00115 state_ = 0;
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117 }
<a name="l00118"></a>00118 lastFrame_[0] = value_;
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="keywordflow">return</span> value_;
<a name="l00122"></a>00122 }
<a name="l00123"></a>00123
<a name="l00124"></a><a class="code" href="classstk_1_1Asymp.html#2647bc013816f026915b1e92ddd6a322">00124</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e" title="Compute and return one output sample.">Asymp :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00125"></a>00125 {
<a name="l00126"></a>00126 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00128"></a>00128 errorString_ &lt;&lt; <span class="stringliteral">"Asymp::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00129"></a>00129 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00130"></a>00130 }
<a name="l00131"></a>00131 <span class="preprocessor">#endif</span>
<a name="l00132"></a>00132 <span class="preprocessor"></span>
<a name="l00133"></a>00133 StkFloat *samples = &amp;frames[channel];
<a name="l00134"></a>00134 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00135"></a>00135 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00136"></a>00136 *samples = <a class="code" href="classstk_1_1Asymp.html#64df3b44aa1033b642d7a8a93659580e" title="Compute and return one output sample.">Asymp::tick</a>();
<a name="l00137"></a>00137
<a name="l00138"></a>00138 <span class="keywordflow">return</span> frames;
<a name="l00139"></a>00139 }
<a name="l00140"></a>00140
<a name="l00141"></a>00141 } <span class="comment">// stk namespace</span>
<a name="l00142"></a>00142
<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,85 +8,91 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BandedWG.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef STK_BANDEDWG_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define STK_BANDEDWG_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_BANDED_MODES = 20;
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "BowTable.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "BiQuad.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BandedWG.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BANDEDWG_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BANDEDWG_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "BowTable.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="keyword">namespace </span>stk {
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00041"></a>00041 <span class="comment">/***************************************************/</span>
<a name="l00042"></a>00042
<a name="l00043"></a><a class="code" href="classBandedWG.html">00043</a> <span class="keyword">class </span><a class="code" href="classBandedWG.html">BandedWG</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00044"></a>00044 {
<a name="l00045"></a>00045 <span class="keyword">public</span>:
<a name="l00047"></a>00047 <a class="code" href="classBandedWG.html#a0">BandedWG</a>();
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <a class="code" href="classBandedWG.html#a1">~BandedWG</a>();
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a2">clear</a>();
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a3">setStrikePosition</a>(StkFloat position);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a4">setPreset</a>(<span class="keywordtype">int</span> preset);
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a5">setFrequency</a>(StkFloat frequency);
<a name="l00063"></a>00063
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a6">startBowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00066"></a>00066
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a7">stopBowing</a>(StkFloat rate);
<a name="l00069"></a>00069
<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a8">pluck</a>(StkFloat amp);
<a name="l00072"></a>00072
<a name="l00074"></a>00074 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a9">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00075"></a>00075
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a10">noteOff</a>(StkFloat amplitude);
<a name="l00078"></a>00078
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classBandedWG.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keyword">protected</span>:
<a name="l00043"></a>00043 <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_BANDED_MODES = 20;
<a name="l00044"></a>00044
<a name="l00045"></a><a class="code" href="classstk_1_1BandedWG.html">00045</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BandedWG.html" title="Banded waveguide modeling class.">BandedWG</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00046"></a>00046 {
<a name="l00047"></a>00047 <span class="keyword">public</span>:
<a name="l00049"></a>00049 <a class="code" href="classstk_1_1BandedWG.html#d449f248adaa49344c2bd25be4a7872d" title="Class constructor.">BandedWG</a>( <span class="keywordtype">void</span> );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <a class="code" href="classstk_1_1BandedWG.html#c4044055c28bad672c9537b985d18289" title="Class destructor.">~BandedWG</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#182dbf5d75aebf5714bd6df15b0df90c" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#4394ee4cd1c84a8b3f92713e60715c4d" title="Set strike position (0.0 - 1.0).">setStrikePosition</a>( StkFloat position );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#b1e3a367eef86e6cb372b4ee232e1804" title="Select a preset.">setPreset</a>( <span class="keywordtype">int</span> preset );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#cf104d4ed663b5f0cd034c8025f4d420" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#37b20c2554e7100241a99758f5a4433e" title="Apply bow velocity/pressure to instrument with given amplitude and rate of increase...">startBowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#a14786c32af030311e2118db3b68a892" title="Decrease bow velocity/breath pressure with given rate of decrease.">stopBowing</a>( StkFloat rate );
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#271573afaa2dc655446482bad6745cc1" title="Pluck the instrument with given amplitude.">pluck</a>( StkFloat amp );
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#8f334ae49b7baf561d74a0b6ec3c4f9a" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00077"></a>00077
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#c9c3c3ec0e821b1a080774bb55d3b881" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00080"></a>00080
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BandedWG.html#16baac1cc6612332d6d0aa40a661c137" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keywordtype">bool</span> doPluck_;
<a name="l00087"></a>00087 <span class="keywordtype">bool</span> trackVelocity_;
<a name="l00088"></a>00088 <span class="keywordtype">int</span> nModes_;
<a name="l00089"></a>00089 <span class="keywordtype">int</span> presetModes_;
<a name="l00090"></a>00090 <a class="code" href="classBowTable.html">BowTable</a> bowTable_;
<a name="l00091"></a>00091 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00092"></a>00092 <a class="code" href="classBiQuad.html">BiQuad</a> bandpass_[MAX_BANDED_MODES];
<a name="l00093"></a>00093 <a class="code" href="classDelayL.html">DelayL</a> delay_[MAX_BANDED_MODES];
<a name="l00094"></a>00094 StkFloat maxVelocity_;
<a name="l00095"></a>00095 StkFloat modes_[MAX_BANDED_MODES];
<a name="l00096"></a>00096 StkFloat frequency_;
<a name="l00097"></a>00097 StkFloat baseGain_;
<a name="l00098"></a>00098 StkFloat gains_[MAX_BANDED_MODES];
<a name="l00099"></a>00099 StkFloat basegains_[MAX_BANDED_MODES];
<a name="l00100"></a>00100 StkFloat excitation_[MAX_BANDED_MODES];
<a name="l00101"></a>00101 StkFloat integrationConstant_;
<a name="l00102"></a>00102 StkFloat velocityInput_;
<a name="l00103"></a>00103 StkFloat bowVelocity_;
<a name="l00104"></a>00104 StkFloat bowTarget_;
<a name="l00105"></a>00105 StkFloat bowPosition_;
<a name="l00106"></a>00106 StkFloat strikeAmp_;
<a name="l00107"></a>00107 <span class="keywordtype">int</span> strikePosition_;
<a name="l00108"></a>00108
<a name="l00109"></a>00109 };
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00085"></a>00085 StkFloat <a class="code" href="classstk_1_1BandedWG.html#44f37146d33354afb085806bd8340497" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="keyword">protected</span>:
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="keywordtype">bool</span> doPluck_;
<a name="l00090"></a>00090 <span class="keywordtype">bool</span> trackVelocity_;
<a name="l00091"></a>00091 <span class="keywordtype">int</span> nModes_;
<a name="l00092"></a>00092 <span class="keywordtype">int</span> presetModes_;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1BowTable.html" title="STK bowed string table class.">BowTable</a> bowTable_;
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> bandpass_[MAX_BANDED_MODES];
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delay_[MAX_BANDED_MODES];
<a name="l00097"></a>00097 StkFloat maxVelocity_;
<a name="l00098"></a>00098 StkFloat modes_[MAX_BANDED_MODES];
<a name="l00099"></a>00099 StkFloat frequency_;
<a name="l00100"></a>00100 StkFloat baseGain_;
<a name="l00101"></a>00101 StkFloat gains_[MAX_BANDED_MODES];
<a name="l00102"></a>00102 StkFloat basegains_[MAX_BANDED_MODES];
<a name="l00103"></a>00103 StkFloat excitation_[MAX_BANDED_MODES];
<a name="l00104"></a>00104 StkFloat integrationConstant_;
<a name="l00105"></a>00105 StkFloat velocityInput_;
<a name="l00106"></a>00106 StkFloat bowVelocity_;
<a name="l00107"></a>00107 StkFloat bowTarget_;
<a name="l00108"></a>00108 StkFloat bowPosition_;
<a name="l00109"></a>00109 StkFloat strikeAmp_;
<a name="l00110"></a>00110 <span class="keywordtype">int</span> strikePosition_;
<a name="l00111"></a>00111
<a name="l00112"></a>00112 };
<a name="l00113"></a>00113
<a name="l00114"></a>00114 } <span class="comment">// stk namespace</span>
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,38 +8,69 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BeeThree.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <span class="preprocessor">#ifndef STK_BEETHREE_H</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define STK_BEETHREE_H</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "FM.h"</span>
<a name="l00039"></a>00039
<a name="l00040"></a><a class="code" href="classBeeThree.html">00040</a> <span class="keyword">class </span><a class="code" href="classBeeThree.html">BeeThree</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00041"></a>00041 {
<a name="l00042"></a>00042 <span class="keyword">public</span>:
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <a class="code" href="classBeeThree.html#a0">BeeThree</a>();
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <a class="code" href="classBeeThree.html#a1">~BeeThree</a>();
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classBeeThree.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BeeThree.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BEETHREE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BEETHREE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00040"></a>00040 <span class="comment">/***************************************************/</span>
<a name="l00041"></a>00041
<a name="l00042"></a><a class="code" href="classstk_1_1BeeThree.html">00042</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BeeThree.html" title="STK Hammond-oid organ FM synthesis instrument.">BeeThree</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044 <span class="keyword">public</span>:
<a name="l00046"></a>00046
<a name="l00049"></a>00049 <a class="code" href="classstk_1_1BeeThree.html#b4534210b85a2c4798bf1c88b348c20a" title="Class constructor.">BeeThree</a>( <span class="keywordtype">void</span> );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <a class="code" href="classstk_1_1BeeThree.html#f2a0c982731438cf6200b3e5642a288d" title="Class destructor.">~BeeThree</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BeeThree.html#480c0fe8d4c2df9c00b82b192dd7eae4" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00058"></a>00058 };
<a name="l00058"></a>00058 StkFloat <a class="code" href="classstk_1_1BeeThree.html#4649b9471bde3b978c20fcafcbef0fc7" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00060"></a>00060 <span class="keyword">protected</span>:
<a name="l00061"></a>00061
<a name="l00062"></a>00062 };
<a name="l00063"></a>00063
<a name="l00064"></a><a class="code" href="classstk_1_1BeeThree.html#4649b9471bde3b978c20fcafcbef0fc7">00064</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BeeThree.html#4649b9471bde3b978c20fcafcbef0fc7" title="Compute and return one output sample.">BeeThree :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00065"></a>00065 {
<a name="l00066"></a>00066 <span class="keyword">register</span> StkFloat temp;
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keywordflow">if</span> ( modDepth_ &gt; 0.0 ) {
<a name="l00069"></a>00069 temp = 1.0 + ( modDepth_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * 0.1 );
<a name="l00070"></a>00070 waves_[0]-&gt;setFrequency( baseFrequency_ * temp * ratios_[0] );
<a name="l00071"></a>00071 waves_[1]-&gt;setFrequency( baseFrequency_ * temp * ratios_[1] );
<a name="l00072"></a>00072 waves_[2]-&gt;setFrequency( baseFrequency_ * temp * ratios_[2] );
<a name="l00073"></a>00073 waves_[3]-&gt;setFrequency( baseFrequency_ * temp * ratios_[3] );
<a name="l00074"></a>00074 }
<a name="l00075"></a>00075
<a name="l00076"></a>00076 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00077"></a>00077 temp = control1_ * 2.0 * gains_[3] * adsr_[3]-&gt;tick() * waves_[3]-&gt;tick();
<a name="l00078"></a>00078 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( temp );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 temp += control2_ * 2.0 * gains_[2] * adsr_[2]-&gt;tick() * waves_[2]-&gt;tick();
<a name="l00081"></a>00081 temp += gains_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00082"></a>00082 temp += gains_[0] * adsr_[0]-&gt;tick() * waves_[0]-&gt;tick();
<a name="l00083"></a>00083
<a name="l00084"></a>00084 lastFrame_[0] = temp * 0.125;
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a>00088 } <span class="comment">// stk namespace</span>
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,97 +8,140 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BiQuad.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_BIQUAD_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_BIQUAD_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BiQuad.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BIQUAD_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BIQUAD_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classBiQuad.html">00020</a> <span class="keyword">class </span><a class="code" href="classBiQuad.html">BiQuad</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00020"></a><a class="code" href="classstk_1_1BiQuad.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classBiQuad.html#a0">BiQuad</a>();
<a name="l00025"></a>00025 <a class="code" href="classstk_1_1BiQuad.html#91aab9d1b4833e156edcf59cbe276e3f" title="Default constructor creates a second-order pass-through filter.">BiQuad</a>();
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <span class="keyword">virtual</span> <a class="code" href="classBiQuad.html#a1">~BiQuad</a>();
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1BiQuad.html#d7e81be1c4e5c5ab69474f6df2610984" title="Class destructor.">~BiQuad</a>();
<a name="l00029"></a>00029
<a name="l00031"></a><a class="code" href="classBiQuad.html#a2">00031</a> <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a2">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00031"></a><a class="code" href="classstk_1_1BiQuad.html#ab468cd1aa79b95442b15bb04d8bb211">00031</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#ab468cd1aa79b95442b15bb04d8bb211" title="A function to enable/disable the automatic updating of class data when the STK sample...">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#eed58196cf798f664cddbb9a8564c7b5" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat b1, StkFloat b2, StkFloat a1, StkFloat a2, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a4">setB0</a>(StkFloat b0);
<a name="l00037"></a><a class="code" href="classstk_1_1BiQuad.html#26ee25d08116b20f326001166f087853">00037</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#26ee25d08116b20f326001166f087853" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a5">setB1</a>(StkFloat b1);
<a name="l00040"></a><a class="code" href="classstk_1_1BiQuad.html#dd364ed410b3ed2a2b29b8a5fea127c8">00040</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#dd364ed410b3ed2a2b29b8a5fea127c8" title="Set the b[1] coefficient value.">setB1</a>( StkFloat b1 ) { b_[1] = b1; };
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a6">setB2</a>(StkFloat b2);
<a name="l00043"></a><a class="code" href="classstk_1_1BiQuad.html#208a654dd3393ed0b2b86ad56d9cf3e1">00043</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#208a654dd3393ed0b2b86ad56d9cf3e1" title="Set the b[2] coefficient value.">setB2</a>( StkFloat b2 ) { b_[2] = b2; };
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a7">setA1</a>(StkFloat a1);
<a name="l00046"></a><a class="code" href="classstk_1_1BiQuad.html#1c9799e47163fe8a59fd85196c089cb3">00046</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#1c9799e47163fe8a59fd85196c089cb3" title="Set the a[1] coefficient value.">setA1</a>( StkFloat a1 ) { a_[1] = a1; };
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a8">setA2</a>(StkFloat a2);
<a name="l00049"></a><a class="code" href="classstk_1_1BiQuad.html#e28afd560df11435ea54f128d23b9383">00049</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#e28afd560df11435ea54f128d23b9383" title="Set the a[2] coefficient value.">setA2</a>( StkFloat a2 ) { a_[2] = a2; };
<a name="l00050"></a>00050
<a name="l00052"></a>00052
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a9">setResonance</a>(StkFloat frequency, StkFloat radius, <span class="keywordtype">bool</span> normalize = <span class="keyword">false</span>);
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#55aaa01fd4156f1fac1168f526e3d969" title="Sets the filter coefficients for a resonance at frequency (in Hz).">setResonance</a>( StkFloat frequency, StkFloat radius, <span class="keywordtype">bool</span> normalize = <span class="keyword">false</span> );
<a name="l00064"></a>00064
<a name="l00066"></a>00066
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a10">setNotch</a>(StkFloat frequency, StkFloat radius);
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#e10a26fc319ba357bc92df4e528c2d8f" title="Set the filter coefficients for a notch at frequency (in Hz).">setNotch</a>( StkFloat frequency, StkFloat radius );
<a name="l00073"></a>00073
<a name="l00075"></a>00075
<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a11">setEqualGainZeroes</a>();
<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BiQuad.html#28881f5876ce5bdcc846367cca9363f7" title="Sets the filter zeroes for equal resonance gain.">setEqualGainZeroes</a>( <span class="keywordtype">void</span> );
<a name="l00082"></a>00082
<a name="l00084"></a>00084
<a name="l00088"></a>00088 <span class="keywordtype">void</span> <a class="code" href="classBiQuad.html#a12">setGain</a>(StkFloat gain);
<a name="l00089"></a>00089
<a name="l00091"></a>00091 StkFloat <a class="code" href="classBiQuad.html#a13">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00092"></a>00092
<a name="l00094"></a>00094 StkFloat <a class="code" href="classBiQuad.html#a14">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00095"></a>00095
<a name="l00097"></a>00097 <span class="keyword">virtual</span> StkFloat <a class="code" href="classBiQuad.html#a15">tick</a>(StkFloat sample);
<a name="l00098"></a>00098
<a name="l00100"></a>00100
<a name="l00106"></a>00106 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBiQuad.html#a15">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="keyword">protected</span>:
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="comment">// This function must be implemented in all subclasses. It is used</span>
<a name="l00111"></a>00111 <span class="comment">// to get around a C++ problem with overloaded virtual functions.</span>
<a name="l00112"></a>00112 <span class="keyword">virtual</span> StkFloat computeSample( StkFloat input );
<a name="l00084"></a><a class="code" href="classstk_1_1BiQuad.html#412f224363b1a222423ecf0cd7be9063">00084</a> StkFloat <a class="code" href="classstk_1_1BiQuad.html#412f224363b1a222423ecf0cd7be9063" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00085"></a>00085
<a name="l00087"></a>00087 StkFloat <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( StkFloat input );
<a name="l00088"></a>00088
<a name="l00090"></a>00090
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00099"></a>00099
<a name="l00101"></a>00101
<a name="l00109"></a>00109 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="keyword">protected</span>:
<a name="l00112"></a>00112
<a name="l00113"></a>00113 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00114"></a>00114 };
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="keyword">inline</span> StkFloat BiQuad :: computeSample( StkFloat input )
<a name="l00116"></a><a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635">00116</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">BiQuad :: tick</a>( StkFloat input )
<a name="l00117"></a>00117 {
<a name="l00118"></a>00118 inputs_[0] = gain_ * input;
<a name="l00119"></a>00119 outputs_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
<a name="l00120"></a>00120 outputs_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
<a name="l00119"></a>00119 lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
<a name="l00120"></a>00120 lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
<a name="l00121"></a>00121 inputs_[2] = inputs_[1];
<a name="l00122"></a>00122 inputs_[1] = inputs_[0];
<a name="l00123"></a>00123 outputs_[2] = outputs_[1];
<a name="l00124"></a>00124 outputs_[1] = outputs_[0];
<a name="l00124"></a>00124 outputs_[1] = lastFrame_[0];
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="keywordflow">return</span> outputs_[0];
<a name="l00126"></a>00126 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00127"></a>00127 }
<a name="l00128"></a>00128
<a name="l00129"></a><a class="code" href="classBiQuad.html#a15">00129</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classBiQuad.html#a15">BiQuad :: tick</a>( StkFloat input )
<a name="l00129"></a><a class="code" href="classstk_1_1BiQuad.html#f903e41217838470a5f267a20b905a12">00129</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">BiQuad :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00130"></a>00130 {
<a name="l00131"></a>00131 <span class="keywordflow">return</span> this-&gt;computeSample( input );
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133
<a name="l00134"></a><a class="code" href="classBiQuad.html#a16">00134</a> <span class="keyword">inline</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classBiQuad.html#a15">BiQuad :: tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00135"></a>00135 {
<a name="l00136"></a>00136 <span class="keywordflow">return</span> <a class="code" href="classFilter.html#a10">Filter::tick</a>( frames, channel );
<a name="l00137"></a>00137 }
<a name="l00138"></a>00138
<a name="l00139"></a>00139 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00131"></a>00131 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00132"></a>00132 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00133"></a>00133 errorString_ &lt;&lt; <span class="stringliteral">"BiQuad::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00134"></a>00134 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136 <span class="preprocessor">#endif</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span>
<a name="l00138"></a>00138 StkFloat *samples = &amp;frames[channel];
<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00140"></a>00140 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00141"></a>00141 inputs_[0] = gain_ * *samples;
<a name="l00142"></a>00142 *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
<a name="l00143"></a>00143 *samples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
<a name="l00144"></a>00144 inputs_[2] = inputs_[1];
<a name="l00145"></a>00145 inputs_[1] = inputs_[0];
<a name="l00146"></a>00146 outputs_[2] = outputs_[1];
<a name="l00147"></a>00147 outputs_[1] = *samples;
<a name="l00148"></a>00148 }
<a name="l00149"></a>00149
<a name="l00150"></a>00150 lastFrame_[0] = outputs_[1];
<a name="l00151"></a>00151 <span class="keywordflow">return</span> frames;
<a name="l00152"></a>00152 }
<a name="l00153"></a>00153
<a name="l00154"></a><a class="code" href="classstk_1_1BiQuad.html#c9836f0e074ea9516727f27eb9b411aa">00154</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">BiQuad :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00155"></a>00155 {
<a name="l00156"></a>00156 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00158"></a>00158 errorString_ &lt;&lt; <span class="stringliteral">"BiQuad::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00159"></a>00159 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00160"></a>00160 }
<a name="l00161"></a>00161 <span class="preprocessor">#endif</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span>
<a name="l00163"></a>00163 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00164"></a>00164 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00165"></a>00165 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00166"></a>00166 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00167"></a>00167 inputs_[0] = gain_ * *iSamples;
<a name="l00168"></a>00168 *oSamples = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
<a name="l00169"></a>00169 *oSamples -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
<a name="l00170"></a>00170 inputs_[2] = inputs_[1];
<a name="l00171"></a>00171 inputs_[1] = inputs_[0];
<a name="l00172"></a>00172 outputs_[2] = outputs_[1];
<a name="l00173"></a>00173 outputs_[1] = *oSamples;
<a name="l00174"></a>00174 }
<a name="l00175"></a>00175
<a name="l00176"></a>00176 lastFrame_[0] = outputs_[1];
<a name="l00177"></a>00177 <span class="keywordflow">return</span> iFrames;
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179
<a name="l00180"></a>00180 } <span class="comment">// stk namespace</span>
<a name="l00181"></a>00181
<a name="l00182"></a>00182 <span class="preprocessor">#endif</span>
<a name="l00183"></a>00183 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,53 +8,121 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BlitSaw.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef STK_BLITSAW_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLITSAW_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classBlitSaw.html">00027</a> <span class="keyword">class </span><a class="code" href="classBlitSaw.html">BlitSaw</a>: <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00031"></a>00031 <a class="code" href="classBlitSaw.html#a0">BlitSaw</a>( StkFloat frequency = 220.0 );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <a class="code" href="classBlitSaw.html#a1">~BlitSaw</a>();
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classBlitSaw.html#a2">reset</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classBlitSaw.html#a3">setFrequency</a>( StkFloat frequency );
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classBlitSaw.html#a4">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="keyword">protected</span>:
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00060"></a>00060 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00063"></a>00063 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00064"></a>00064 StkFloat rate_;
<a name="l00065"></a>00065 StkFloat phase_;
<a name="l00066"></a>00066 StkFloat p_;
<a name="l00067"></a>00067 StkFloat C2_;
<a name="l00068"></a>00068 StkFloat a_;
<a name="l00069"></a>00069 StkFloat state_;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BlitSaw.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BLITSAW_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLITSAW_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;limits&gt;</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1BlitSaw.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BlitSaw.html" title="STK band-limited sawtooth wave class.">BlitSaw</a>: <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035 <a class="code" href="classstk_1_1BlitSaw.html#8a245ef05cc58c521edaded5c6cdd5ee" title="Class constructor.">BlitSaw</a>( StkFloat frequency = 220.0 );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1BlitSaw.html#24cd2cc9852ce73252a99f7eff63879b" title="Class destructor.">~BlitSaw</a>();
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSaw.html#3010cf9a0905368b857df2d332968036" title="Resets the oscillator state and phase to 0.">reset</a>();
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSaw.html#fa6f1103a61221eebf5f49f3a7df4145" title="Set the sawtooth oscillator rate in terms of a frequency in Hz.">setFrequency</a>( StkFloat frequency );
<a name="l00045"></a>00045
<a name="l00047"></a>00047
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSaw.html#8abd2b9a5b8d26926a383c1e56605545" title="Set the number of harmonics generated in the signal.">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00060"></a>00060
<a name="l00062"></a><a class="code" href="classstk_1_1BlitSaw.html#254758ecd4166cc4e7d6fced5650a198">00062</a> StkFloat <a class="code" href="classstk_1_1BlitSaw.html#254758ecd4166cc4e7d6fced5650a198" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00063"></a>00063
<a name="l00065"></a>00065 StkFloat <a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00066"></a>00066
<a name="l00068"></a>00068
<a name="l00075"></a>00075 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="keyword">protected</span>:
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00082"></a>00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00083"></a>00083 StkFloat rate_;
<a name="l00084"></a>00084 StkFloat phase_;
<a name="l00085"></a>00085 StkFloat p_;
<a name="l00086"></a>00086 StkFloat C2_;
<a name="l00087"></a>00087 StkFloat a_;
<a name="l00088"></a>00088 StkFloat state_;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 };
<a name="l00091"></a>00091
<a name="l00092"></a><a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c">00092</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c" title="Compute and return one output sample.">BlitSaw :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 <span class="comment">// The code below implements the BLIT algorithm of Stilson and</span>
<a name="l00095"></a>00095 <span class="comment">// Smith, followed by a summation and filtering operation to produce</span>
<a name="l00096"></a>00096 <span class="comment">// a sawtooth waveform. After experimenting with various approaches</span>
<a name="l00097"></a>00097 <span class="comment">// to calculate the average value of the BLIT over one period, I</span>
<a name="l00098"></a>00098 <span class="comment">// found that an estimate of C2_ = 1.0 / period (in samples) worked</span>
<a name="l00099"></a>00099 <span class="comment">// most consistently. A "leaky integrator" is then applied to the</span>
<a name="l00100"></a>00100 <span class="comment">// difference of the BLIT output and C2_. (GPS - 1 October 2005)</span>
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="comment">// A fully optimized version of this code would replace the two sin </span>
<a name="l00103"></a>00103 <span class="comment">// calls with a pair of fast sin oscillators, for which stable fast </span>
<a name="l00104"></a>00104 <span class="comment">// two-multiply algorithms are well known. In the spirit of STK,</span>
<a name="l00105"></a>00105 <span class="comment">// which favors clarity over performance, the optimization has </span>
<a name="l00106"></a>00106 <span class="comment">// not been made here.</span>
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="comment">// Avoid a divide by zero, or use of a denormalized divisor </span>
<a name="l00109"></a>00109 <span class="comment">// at the sinc peak, which has a limiting value of m_ / p_.</span>
<a name="l00110"></a>00110 StkFloat tmp, denominator = sin( phase_ );
<a name="l00111"></a>00111 <span class="keywordflow">if</span> ( fabs(denominator) &lt;= std::numeric_limits&lt;StkFloat&gt;::epsilon() )
<a name="l00112"></a>00112 tmp = a_;
<a name="l00113"></a>00113 <span class="keywordflow">else</span> {
<a name="l00114"></a>00114 tmp = sin( m_ * phase_ );
<a name="l00115"></a>00115 tmp /= p_ * denominator;
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117
<a name="l00118"></a>00118 tmp += state_ - C2_;
<a name="l00119"></a>00119 state_ = tmp * 0.995;
<a name="l00120"></a>00120
<a name="l00121"></a>00121 phase_ += rate_;
<a name="l00122"></a>00122 <span class="keywordflow">if</span> ( phase_ &gt;= PI ) phase_ -= PI;
<a name="l00123"></a>00123
<a name="l00124"></a>00124 lastFrame_[0] = tmp;
<a name="l00125"></a>00125 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00126"></a>00126 }
<a name="l00127"></a>00127
<a name="l00128"></a><a class="code" href="classstk_1_1BlitSaw.html#b53f6ba99ef5c4f8982f6c0f07bf2e1d">00128</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c" title="Compute and return one output sample.">BlitSaw :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00129"></a>00129 {
<a name="l00130"></a>00130 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00131"></a>00131 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00132"></a>00132 errorString_ &lt;&lt; <span class="stringliteral">"BlitSaw::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00133"></a>00133 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00134"></a>00134 }
<a name="l00135"></a>00135 <span class="preprocessor">#endif</span>
<a name="l00136"></a>00136 <span class="preprocessor"></span>
<a name="l00137"></a>00137
<a name="l00138"></a>00138 StkFloat *samples = &amp;frames[channel];
<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00140"></a>00140 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00141"></a>00141 *samples = <a class="code" href="classstk_1_1BlitSaw.html#03536a1f1823ea41649b4a62ba98007c" title="Compute and return one output sample.">BlitSaw::tick</a>();
<a name="l00142"></a>00142
<a name="l00143"></a>00143 <span class="keywordflow">return</span> frames;
<a name="l00144"></a>00144 }
<a name="l00145"></a>00145
<a name="l00146"></a>00146 } <span class="comment">// stk namespace</span>
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,58 +8,126 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BlitSquare.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="preprocessor">#ifndef STK_BLITSQUARE_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLITSQUARE_H</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classBlitSquare.html">00038</a> <span class="keyword">class </span><a class="code" href="classBlitSquare.html">BlitSquare</a>: <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042 <a class="code" href="classBlitSquare.html#a0">BlitSquare</a>( StkFloat frequency = 220.0 );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classBlitSquare.html#a1">~BlitSquare</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classBlitSquare.html#a2">reset</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051
<a name="l00054"></a><a class="code" href="classBlitSquare.html#a3">00054</a> <span class="keywordtype">void</span> <a class="code" href="classBlitSquare.html#a3">setPhase</a>( StkFloat phase ) { phase_ = PI * phase; };
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BlitSquare.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BLITSQUARE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLITSQUARE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;limits&gt;</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00040"></a>00040 <span class="comment">/***************************************************/</span>
<a name="l00041"></a>00041
<a name="l00042"></a><a class="code" href="classstk_1_1BlitSquare.html">00042</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BlitSquare.html" title="STK band-limited square wave class.">BlitSquare</a>: <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044 <span class="keyword">public</span>:
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1BlitSquare.html#2cb3aee415a6ee75fa85b01e4e85d70b" title="Default constructor that initializes BLIT frequency to 220 Hz.">BlitSquare</a>( StkFloat frequency = 220.0 );
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <a class="code" href="classstk_1_1BlitSquare.html#4bc6e424ca1631f353f55846084634ef" title="Class destructor.">~BlitSquare</a>();
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSquare.html#8f6dbe07d7f64b24cc9a41f6208dd6c4" title="Resets the oscillator state and phase to 0.">reset</a>();
<a name="l00053"></a>00053
<a name="l00055"></a>00055
<a name="l00057"></a>00057
<a name="l00060"></a><a class="code" href="classBlitSquare.html#a4">00060</a> StkFloat <a class="code" href="classBlitSquare.html#a4">getPhase</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> phase_ / PI; };
<a name="l00058"></a><a class="code" href="classstk_1_1BlitSquare.html#eface58980a3ec865131f3cad59bbbef">00058</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSquare.html#eface58980a3ec865131f3cad59bbbef" title="Set the phase of the signal.">setPhase</a>( StkFloat phase ) { phase_ = PI * phase; };
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classBlitSquare.html#a5">setFrequency</a>( StkFloat frequency );
<a name="l00064"></a>00064
<a name="l00066"></a>00066
<a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classBlitSquare.html#a6">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="keyword">protected</span>:
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00083"></a>00083 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00086"></a>00086 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00087"></a>00087 StkFloat rate_;
<a name="l00088"></a>00088 StkFloat phase_;
<a name="l00089"></a>00089 StkFloat p_;
<a name="l00090"></a>00090 StkFloat a_;
<a name="l00091"></a>00091 StkFloat lastBlitOutput_;
<a name="l00092"></a>00092 StkFloat dcbState_;
<a name="l00093"></a>00093 };
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00064"></a><a class="code" href="classstk_1_1BlitSquare.html#bbda8cb84bcd36fc6d96130e9832a6af">00064</a> StkFloat <a class="code" href="classstk_1_1BlitSquare.html#bbda8cb84bcd36fc6d96130e9832a6af" title="Get the current phase of the signal.">getPhase</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> phase_ / PI; };
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSquare.html#8d0d8e0a12987ebccc56c09c7e7dbd6a" title="Set the impulse train rate in terms of a frequency in Hz.">setFrequency</a>( StkFloat frequency );
<a name="l00068"></a>00068
<a name="l00070"></a>00070
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlitSquare.html#94521b4224d0873f5e783c721c123b21" title="Set the number of harmonics generated in the signal.">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00083"></a>00083
<a name="l00085"></a><a class="code" href="classstk_1_1BlitSquare.html#77972e4e1c53600bf80cf692601ccae1">00085</a> StkFloat <a class="code" href="classstk_1_1BlitSquare.html#77972e4e1c53600bf80cf692601ccae1" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00086"></a>00086
<a name="l00088"></a>00088 StkFloat <a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00089"></a>00089
<a name="l00091"></a>00091
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keyword">protected</span>:
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00106"></a>00106 StkFloat rate_;
<a name="l00107"></a>00107 StkFloat phase_;
<a name="l00108"></a>00108 StkFloat p_;
<a name="l00109"></a>00109 StkFloat a_;
<a name="l00110"></a>00110 StkFloat lastBlitOutput_;
<a name="l00111"></a>00111 StkFloat dcbState_;
<a name="l00112"></a>00112 };
<a name="l00113"></a>00113
<a name="l00114"></a><a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817">00114</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817" title="Compute and return one output sample.">BlitSquare :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00115"></a>00115 {
<a name="l00116"></a>00116 StkFloat temp = lastBlitOutput_;
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="comment">// A fully optimized version of this would replace the two sin calls</span>
<a name="l00119"></a>00119 <span class="comment">// with a pair of fast sin oscillators, for which stable fast </span>
<a name="l00120"></a>00120 <span class="comment">// two-multiply algorithms are well known. In the spirit of STK,</span>
<a name="l00121"></a>00121 <span class="comment">// which favors clarity over performance, the optimization has </span>
<a name="l00122"></a>00122 <span class="comment">// not been made here.</span>
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="comment">// Avoid a divide by zero, or use of a denomralized divisor</span>
<a name="l00125"></a>00125 <span class="comment">// at the sinc peak, which has a limiting value of 1.0.</span>
<a name="l00126"></a>00126 StkFloat denominator = sin( phase_ );
<a name="l00127"></a>00127 <span class="keywordflow">if</span> ( fabs( denominator ) &lt; std::numeric_limits&lt;StkFloat&gt;::epsilon() ) {
<a name="l00128"></a>00128 <span class="comment">// Inexact comparison safely distinguishes betwen *close to zero*, and *close to PI*.</span>
<a name="l00129"></a>00129 <span class="keywordflow">if</span> ( phase_ &lt; 0.1f || phase_ &gt; TWO_PI - 0.1f )
<a name="l00130"></a>00130 lastBlitOutput_ = a_;
<a name="l00131"></a>00131 <span class="keywordflow">else</span>
<a name="l00132"></a>00132 lastBlitOutput_ = -a_;
<a name="l00133"></a>00133 }
<a name="l00134"></a>00134 <span class="keywordflow">else</span> {
<a name="l00135"></a>00135 lastBlitOutput_ = sin( m_ * phase_ );
<a name="l00136"></a>00136 lastBlitOutput_ /= p_ * denominator;
<a name="l00137"></a>00137 }
<a name="l00138"></a>00138
<a name="l00139"></a>00139 lastBlitOutput_ += temp;
<a name="l00140"></a>00140
<a name="l00141"></a>00141 <span class="comment">// Now apply DC blocker.</span>
<a name="l00142"></a>00142 lastFrame_[0] = lastBlitOutput_ - dcbState_ + 0.999 * lastFrame_[0];
<a name="l00143"></a>00143 dcbState_ = lastBlitOutput_;
<a name="l00144"></a>00144
<a name="l00145"></a>00145 phase_ += rate_;
<a name="l00146"></a>00146 <span class="keywordflow">if</span> ( phase_ &gt;= TWO_PI ) phase_ -= TWO_PI;
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00149"></a>00149 }
<a name="l00150"></a>00150
<a name="l00151"></a><a class="code" href="classstk_1_1BlitSquare.html#7df894d40b3d6effbb2a09819356258d">00151</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817" title="Compute and return one output sample.">BlitSquare :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00152"></a>00152 {
<a name="l00153"></a>00153 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00154"></a>00154 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00155"></a>00155 errorString_ &lt;&lt; <span class="stringliteral">"BlitSquare::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00156"></a>00156 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00157"></a>00157 }
<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>
<a name="l00160"></a>00160 StkFloat *samples = &amp;frames[channel];
<a name="l00161"></a>00161 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00162"></a>00162 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00163"></a>00163 *samples = <a class="code" href="classstk_1_1BlitSquare.html#04366d55cecb4c8a726ea0519683d817" title="Compute and return one output sample.">BlitSquare::tick</a>();
<a name="l00164"></a>00164
<a name="l00165"></a>00165 <span class="keywordflow">return</span> frames;
<a name="l00166"></a>00166 }
<a name="l00167"></a>00167
<a name="l00168"></a>00168 } <span class="comment">// stk namespace</span>
<a name="l00169"></a>00169
<a name="l00170"></a>00170 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,56 +8,116 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Blit.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_BLIT_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLIT_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classBlit.html">00029</a> <span class="keyword">class </span><a class="code" href="classBlit.html">Blit</a>: <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033 <a class="code" href="classBlit.html#a0">Blit</a>( StkFloat frequency = 220.0 );
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <a class="code" href="classBlit.html#a1">~Blit</a>();
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classBlit.html#a2">reset</a>();
<a name="l00040"></a>00040
<a name="l00042"></a>00042
<a name="l00045"></a><a class="code" href="classBlit.html#a3">00045</a> <span class="keywordtype">void</span> <a class="code" href="classBlit.html#a3">setPhase</a>( StkFloat phase ) { phase_ = PI * phase; };
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Blit.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BLIT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLIT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;limits&gt;</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a><a class="code" href="classstk_1_1Blit.html">00033</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Blit.html" title="STK band-limited impulse train class.">Blit</a>: <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">public</span>:
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1Blit.html#63c5e6dca28aa3b3c01808e049f3da33" title="Default constructor that initializes BLIT frequency to 220 Hz.">Blit</a>( StkFloat frequency = 220.0 );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1Blit.html#bed25206cc6cdb5fa8d667e7db0056a9" title="Class destructor.">~Blit</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Blit.html#bbe50319cd6ed762c15e148a8abb4920" title="Resets the oscillator state and phase to 0.">reset</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046
<a name="l00048"></a>00048
<a name="l00051"></a><a class="code" href="classBlit.html#a4">00051</a> StkFloat <a class="code" href="classBlit.html#a4">getPhase</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> phase_ / PI; };
<a name="l00049"></a><a class="code" href="classstk_1_1Blit.html#58e2197cedfc366145b729256bf365cb">00049</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Blit.html#58e2197cedfc366145b729256bf365cb" title="Set the phase of the signal.">setPhase</a>( StkFloat phase ) { phase_ = PI * phase; };
<a name="l00050"></a>00050
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classBlit.html#a5">setFrequency</a>( StkFloat frequency );
<a name="l00055"></a>00055
<a name="l00057"></a>00057
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classBlit.html#a6">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="keyword">protected</span>:
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00074"></a>00074 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00077"></a>00077 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00078"></a>00078 StkFloat rate_;
<a name="l00079"></a>00079 StkFloat phase_;
<a name="l00080"></a>00080 StkFloat p_;
<a name="l00081"></a>00081
<a name="l00082"></a>00082 };
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00055"></a><a class="code" href="classstk_1_1Blit.html#01fb40970e8905e47b7f39a1fb01589f">00055</a> StkFloat <a class="code" href="classstk_1_1Blit.html#01fb40970e8905e47b7f39a1fb01589f" title="Get the current phase of the signal.">getPhase</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> phase_ / PI; };
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Blit.html#5571562e489947c4beccc206ecccfbdd" title="Set the impulse train rate in terms of a frequency in Hz.">setFrequency</a>( StkFloat frequency );
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Blit.html#5a1fd506ab12ae614afaf0e402d24d30" title="Set the number of harmonics generated in the signal.">setHarmonics</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics = 0 );
<a name="l00074"></a>00074
<a name="l00076"></a><a class="code" href="classstk_1_1Blit.html#530af82a27731734af4f4b58bce283de">00076</a> StkFloat <a class="code" href="classstk_1_1Blit.html#530af82a27731734af4f4b58bce283de" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00077"></a>00077
<a name="l00079"></a>00079 StkFloat <a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00080"></a>00080
<a name="l00082"></a>00082
<a name="l00089"></a>00089 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keyword">protected</span>:
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <span class="keywordtype">void</span> updateHarmonics( <span class="keywordtype">void</span> );
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nHarmonics_;
<a name="l00096"></a>00096 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_;
<a name="l00097"></a>00097 StkFloat rate_;
<a name="l00098"></a>00098 StkFloat phase_;
<a name="l00099"></a>00099 StkFloat p_;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 };
<a name="l00102"></a>00102
<a name="l00103"></a><a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717">00103</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717" title="Compute and return one output sample.">Blit :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00104"></a>00104 {
<a name="l00105"></a>00105 <span class="comment">// The code below implements the SincM algorithm of Stilson and</span>
<a name="l00106"></a>00106 <span class="comment">// Smith with an additional scale factor of P / M applied to</span>
<a name="l00107"></a>00107 <span class="comment">// normalize the output.</span>
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="comment">// A fully optimized version of this code would replace the two sin</span>
<a name="l00110"></a>00110 <span class="comment">// calls with a pair of fast sin oscillators, for which stable fast</span>
<a name="l00111"></a>00111 <span class="comment">// two-multiply algorithms are well known. In the spirit of STK,</span>
<a name="l00112"></a>00112 <span class="comment">// which favors clarity over performance, the optimization has not</span>
<a name="l00113"></a>00113 <span class="comment">// been made here.</span>
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="comment">// Avoid a divide by zero at the sinc peak, which has a limiting</span>
<a name="l00116"></a>00116 <span class="comment">// value of 1.0.</span>
<a name="l00117"></a>00117 StkFloat tmp, denominator = sin( phase_ );
<a name="l00118"></a>00118 <span class="keywordflow">if</span> ( denominator &lt;= std::numeric_limits&lt;StkFloat&gt;::epsilon() )
<a name="l00119"></a>00119 tmp = 1.0;
<a name="l00120"></a>00120 <span class="keywordflow">else</span> {
<a name="l00121"></a>00121 tmp = sin( m_ * phase_ );
<a name="l00122"></a>00122 tmp /= m_ * denominator;
<a name="l00123"></a>00123 }
<a name="l00124"></a>00124
<a name="l00125"></a>00125 phase_ += rate_;
<a name="l00126"></a>00126 <span class="keywordflow">if</span> ( phase_ &gt;= PI ) phase_ -= PI;
<a name="l00127"></a>00127
<a name="l00128"></a>00128 lastFrame_[0] = tmp;
<a name="l00129"></a>00129 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00130"></a>00130 }
<a name="l00131"></a>00131
<a name="l00132"></a><a class="code" href="classstk_1_1Blit.html#20a3634131ff890641931c1d04df19ad">00132</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717" title="Compute and return one output sample.">Blit :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00133"></a>00133 {
<a name="l00134"></a>00134 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00136"></a>00136 errorString_ &lt;&lt; <span class="stringliteral">"Blit::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00137"></a>00137 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00138"></a>00138 }
<a name="l00139"></a>00139 <span class="preprocessor">#endif</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span>
<a name="l00141"></a>00141 StkFloat *samples = &amp;frames[channel];
<a name="l00142"></a>00142 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00143"></a>00143 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00144"></a>00144 *samples = <a class="code" href="classstk_1_1Blit.html#528b8dc95499b11d6173cf065d62c717" title="Compute and return one output sample.">Blit::tick</a>();
<a name="l00145"></a>00145
<a name="l00146"></a>00146 <span class="keywordflow">return</span> frames;
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148
<a name="l00149"></a>00149 } <span class="comment">// stk namespace</span>
<a name="l00150"></a>00150
<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,68 +8,96 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BlowBotl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="preprocessor">#ifndef STK_BLOWBOTL_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWBOTL_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "JetTable.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classBlowBotl.html">00030</a> <span class="keyword">class </span><a class="code" href="classBlowBotl.html">BlowBotl</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00034"></a>00034
<a name="l00037"></a>00037 <a class="code" href="classBlowBotl.html#a0">BlowBotl</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classBlowBotl.html#a1">~BlowBotl</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a2">clear</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a4">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a5">stopBlowing</a>(StkFloat rate);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a6">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a7">noteOff</a>(StkFloat amplitude);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classBlowBotl.html#a8">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BlowBotl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BLOWBOTL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWBOTL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "JetTable.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keyword">namespace </span>stk {
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a><a class="code" href="classstk_1_1BlowBotl.html">00032</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BlowBotl.html" title="STK blown bottle instrument class.">BlowBotl</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00033"></a>00033 {
<a name="l00034"></a>00034 <span class="keyword">public</span>:
<a name="l00036"></a>00036
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1BlowBotl.html#a505b4fc32ffe974b5840163395c321c" title="Class constructor.">BlowBotl</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1BlowBotl.html#dae826b0487471da1779761b0f885cb8" title="Class destructor.">~BlowBotl</a>( <span class="keywordtype">void</span> );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#271161f45e0a706d8ccd299f9aaf2ada" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#75b679cd641bb4bae9bc4ac3021a03e3" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#926d428669edf9c87a1f88faf01550c4" title="Apply breath velocity to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#91a174c3501aafbbfe6841f6915fe4f3" title="Decrease breath velocity with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#faf3f964cbdf99eddd7af99626169c02" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#132c87a453ecf25301243dc62f57f587" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowBotl.html#21a4b2aaaac7afcc67b4abe5ed833bfd" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00064"></a>00064
<a name="l00065"></a>00065 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classJetTable.html">JetTable</a> jetTable_;
<a name="l00068"></a>00068 <a class="code" href="classBiQuad.html">BiQuad</a> resonator_;
<a name="l00069"></a>00069 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
<a name="l00070"></a>00070 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00071"></a>00071 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00072"></a>00072 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00073"></a>00073 StkFloat maxPressure_;
<a name="l00074"></a>00074 StkFloat noiseGain_;
<a name="l00075"></a>00075 StkFloat vibratoGain_;
<a name="l00076"></a>00076 StkFloat outputGain_;
<a name="l00077"></a>00077
<a name="l00078"></a>00078 };
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00066"></a>00066 StkFloat <a class="code" href="classstk_1_1BlowBotl.html#68501c2422994c8dca50086b3d944119" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keyword">protected</span>:
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <a class="code" href="classstk_1_1JetTable.html" title="STK jet table class.">JetTable</a> jetTable_;
<a name="l00071"></a>00071 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> resonator_;
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> dcBlock_;
<a name="l00073"></a>00073 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00074"></a>00074 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00075"></a>00075 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00076"></a>00076 StkFloat maxPressure_;
<a name="l00077"></a>00077 StkFloat noiseGain_;
<a name="l00078"></a>00078 StkFloat vibratoGain_;
<a name="l00079"></a>00079 StkFloat outputGain_;
<a name="l00080"></a>00080
<a name="l00081"></a>00081 };
<a name="l00082"></a>00082
<a name="l00083"></a><a class="code" href="classstk_1_1BlowBotl.html#68501c2422994c8dca50086b3d944119">00083</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BlowBotl.html#68501c2422994c8dca50086b3d944119" title="Compute and return one output sample.">BlowBotl :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00084"></a>00084 {
<a name="l00085"></a>00085 StkFloat breathPressure;
<a name="l00086"></a>00086 StkFloat randPressure;
<a name="l00087"></a>00087 StkFloat pressureDiff;
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="comment">// Calculate the breath pressure (envelope + vibrato)</span>
<a name="l00090"></a>00090 breathPressure = maxPressure_ * adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00091"></a>00091 breathPressure += vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00092"></a>00092
<a name="l00093"></a>00093 pressureDiff = breathPressure - resonator_.<a class="code" href="classstk_1_1BiQuad.html#412f224363b1a222423ecf0cd7be9063" title="Return the last computed output value.">lastOut</a>();
<a name="l00094"></a>00094
<a name="l00095"></a>00095 randPressure = noiseGain_ * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00096"></a>00096 randPressure *= breathPressure;
<a name="l00097"></a>00097 randPressure *= (1.0 + pressureDiff);
<a name="l00098"></a>00098
<a name="l00099"></a>00099 resonator_.<a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( breathPressure + randPressure - ( jetTable_.<a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">tick</a>( pressureDiff ) * pressureDiff ) );
<a name="l00100"></a>00100 lastFrame_[0] = 0.2 * outputGain_ * dcBlock_.<a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( pressureDiff );
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104
<a name="l00105"></a>00105 } <span class="comment">// stk namespace</span>
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,78 +8,119 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BlowHole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="preprocessor">#ifndef STK_BLOWHOLE_H</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWHOLE_H</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00047"></a>00047
<a name="l00048"></a><a class="code" href="classBlowHole.html">00048</a> <span class="keyword">class </span><a class="code" href="classBlowHole.html">BlowHole</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00049"></a>00049 {
<a name="l00050"></a>00050 <span class="keyword">public</span>:
<a name="l00052"></a>00052
<a name="l00055"></a>00055 <a class="code" href="classBlowHole.html#a0">BlowHole</a>(StkFloat lowestFrequency);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <a class="code" href="classBlowHole.html#a1">~BlowHole</a>();
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a2">clear</a>();
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a4">setTonehole</a>(StkFloat newValue);
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a5">setVent</a>(StkFloat newValue);
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a6">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a7">stopBlowing</a>(StkFloat rate);
<a name="l00077"></a>00077
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a8">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00080"></a>00080
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a9">noteOff</a>(StkFloat amplitude);
<a name="l00083"></a>00083
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classBlowHole.html#a10">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BlowHole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BLOWHOLE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BLOWHOLE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="keyword">namespace </span>stk {
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="comment">/***************************************************/</span>
<a name="l00048"></a>00048 <span class="comment">/***************************************************/</span>
<a name="l00049"></a>00049
<a name="l00050"></a><a class="code" href="classstk_1_1BlowHole.html">00050</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BlowHole.html" title="STK clarinet physical model with one register hole and one tonehole.">BlowHole</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00051"></a>00051 {
<a name="l00052"></a>00052 <span class="keyword">public</span>:
<a name="l00054"></a>00054
<a name="l00057"></a>00057 <a class="code" href="classstk_1_1BlowHole.html#7f0aed9f79544d930c7f91dfa3e0efd9" title="Class constructor.">BlowHole</a>( StkFloat lowestFrequency );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <a class="code" href="classstk_1_1BlowHole.html#691a14023e9283d12b0105dd886fba86" title="Class destructor.">~BlowHole</a>( <span class="keywordtype">void</span> );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#43b829201197f2d0f0e8a72072e6798a" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#023aa77cd11c9dc3a8013242ff92f982" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#aacb152624133d82e311b9e0b8218289" title="Set the tonehole state (0.0 = closed, 1.0 = fully open).">setTonehole</a>( StkFloat newValue );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#11c8a4a8483acf0f3e73c1d00008daff" title="Set the register hole state (0.0 = closed, 1.0 = fully open).">setVent</a>( StkFloat newValue );
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#1be64a601f2fbc8e9efaec5a53c55866" title="Apply breath pressure to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00076"></a>00076
<a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#eb4dfd7d75b1996e15833c0928ed39c4" title="Decrease breath pressure with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00079"></a>00079
<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#67e071cb26c1bba35e32f168d59b9be1" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00082"></a>00082
<a name="l00084"></a>00084 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#bc3743ac2c8a9620c44cca41ce73e5b0" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00085"></a>00085
<a name="l00087"></a>00087 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BlowHole.html#0d8ad0201c455894acb1416ffb21614b" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <a class="code" href="classDelayL.html">DelayL</a> delays_[3];
<a name="l00092"></a>00092 <a class="code" href="classReedTable.html">ReedTable</a> reedTable_;
<a name="l00093"></a>00093 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<a name="l00094"></a>00094 <a class="code" href="classPoleZero.html">PoleZero</a> tonehole_;
<a name="l00095"></a>00095 <a class="code" href="classPoleZero.html">PoleZero</a> vent_;
<a name="l00096"></a>00096 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<a name="l00097"></a>00097 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00098"></a>00098 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00099"></a>00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00100"></a>00100 StkFloat scatter_;
<a name="l00101"></a>00101 StkFloat thCoeff_;
<a name="l00102"></a>00102 StkFloat rhGain_;
<a name="l00103"></a>00103 StkFloat outputGain_;
<a name="l00104"></a>00104 StkFloat noiseGain_;
<a name="l00105"></a>00105 StkFloat vibratoGain_;
<a name="l00106"></a>00106
<a name="l00107"></a>00107 };
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00090"></a>00090 StkFloat <a class="code" href="classstk_1_1BlowHole.html#3438c72b975481dae7d51f33f6f6fd94" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="keyword">protected</span>:
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delays_[3];
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1ReedTable.html" title="STK reed table class.">ReedTable</a> reedTable_;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter_;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> tonehole_;
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> vent_;
<a name="l00099"></a>00099 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> envelope_;
<a name="l00100"></a>00100 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00101"></a>00101 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00102"></a>00102 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00103"></a>00103 StkFloat scatter_;
<a name="l00104"></a>00104 StkFloat thCoeff_;
<a name="l00105"></a>00105 StkFloat rhGain_;
<a name="l00106"></a>00106 StkFloat outputGain_;
<a name="l00107"></a>00107 StkFloat noiseGain_;
<a name="l00108"></a>00108 StkFloat vibratoGain_;
<a name="l00109"></a>00109
<a name="l00110"></a>00110 };
<a name="l00111"></a>00111
<a name="l00112"></a><a class="code" href="classstk_1_1BlowHole.html#3438c72b975481dae7d51f33f6f6fd94">00112</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BlowHole.html#3438c72b975481dae7d51f33f6f6fd94" title="Compute and return one output sample.">BlowHole :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00113"></a>00113 {
<a name="l00114"></a>00114 StkFloat pressureDiff;
<a name="l00115"></a>00115 StkFloat breathPressure;
<a name="l00116"></a>00116 StkFloat temp;
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="comment">// Calculate the breath pressure (envelope + noise + vibrato)</span>
<a name="l00119"></a>00119 breathPressure = envelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00120"></a>00120 breathPressure += breathPressure * noiseGain_ * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00121"></a>00121 breathPressure += breathPressure * vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00122"></a>00122
<a name="l00123"></a>00123 <span class="comment">// Calculate the differential pressure = reflected - mouthpiece pressures</span>
<a name="l00124"></a>00124 pressureDiff = delays_[0].<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>() - breathPressure;
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="comment">// Do two-port junction scattering for register vent</span>
<a name="l00127"></a>00127 StkFloat pa = breathPressure + pressureDiff * reedTable_.<a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>( pressureDiff );
<a name="l00128"></a>00128 StkFloat pb = delays_[1].<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>();
<a name="l00129"></a>00129 vent_.<a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( pa+pb );
<a name="l00130"></a>00130
<a name="l00131"></a>00131 lastFrame_[0] = delays_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( vent_.<a class="code" href="classstk_1_1PoleZero.html#03edf036d1619bb5d33bb41701833232" title="Return the last computed output value.">lastOut</a>()+pb );
<a name="l00132"></a>00132 lastFrame_[0] *= outputGain_;
<a name="l00133"></a>00133
<a name="l00134"></a>00134 <span class="comment">// Do three-port junction scattering (under tonehole)</span>
<a name="l00135"></a>00135 pa += vent_.<a class="code" href="classstk_1_1PoleZero.html#03edf036d1619bb5d33bb41701833232" title="Return the last computed output value.">lastOut</a>();
<a name="l00136"></a>00136 pb = delays_[2].<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>();
<a name="l00137"></a>00137 StkFloat pth = tonehole_.<a class="code" href="classstk_1_1PoleZero.html#03edf036d1619bb5d33bb41701833232" title="Return the last computed output value.">lastOut</a>();
<a name="l00138"></a>00138 temp = scatter_ * (pa + pb - 2 * pth);
<a name="l00139"></a>00139
<a name="l00140"></a>00140 delays_[2].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>(pa + temp) * -0.95 );
<a name="l00141"></a>00141 delays_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( pb + temp );
<a name="l00142"></a>00142 tonehole_.<a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( pa + pb - pth + temp );
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00145"></a>00145 }
<a name="l00146"></a>00146
<a name="l00147"></a>00147 } <span class="comment">// stk namespace</span>
<a name="l00148"></a>00148
<a name="l00149"></a>00149 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,45 +8,120 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>BowTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_BOWTABL_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWTABL_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Function.h"</span>
<a name="l00016"></a>00016
<a name="l00017"></a><a class="code" href="classBowTable.html">00017</a> <span class="keyword">class </span><a class="code" href="classBowTable.html">BowTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
<a name="l00018"></a>00018 {
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021 <a class="code" href="classBowTable.html#a0">BowTable</a>();
<a name="l00022"></a>00022
<a name="l00024"></a>00024 <a class="code" href="classBowTable.html#a1">~BowTable</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>BowTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BOWTABL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWTABL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Function.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1BowTable.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1BowTable.html" title="STK bowed string table class.">BowTable</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Function.html" title="STK abstract function parent class.">Function</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a><a class="code" href="classstk_1_1BowTable.html#25d0985fd6821a7e1608af1e8f51952a">00024</a> <a class="code" href="classstk_1_1BowTable.html#25d0985fd6821a7e1608af1e8f51952a" title="Default constructor.">BowTable</a>( <span class="keywordtype">void</span> ) : offset_(0.0), slope_(0.1) {};
<a name="l00025"></a>00025
<a name="l00027"></a>00027
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classBowTable.html#a2">setOffset</a>(StkFloat offset);
<a name="l00033"></a><a class="code" href="classstk_1_1BowTable.html#9adcc3c36085b73d3b877828071a3b2c">00033</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BowTable.html#9adcc3c36085b73d3b877828071a3b2c" title="Set the table offset value.">setOffset</a>( StkFloat offset ) { offset_ = offset; };
<a name="l00034"></a>00034
<a name="l00036"></a>00036
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classBowTable.html#a3">setSlope</a>(StkFloat slope);
<a name="l00040"></a><a class="code" href="classstk_1_1BowTable.html#d8391e46941ff9f49b78bf4f77c35143">00040</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1BowTable.html#d8391e46941ff9f49b78bf4f77c35143" title="Set the table slope value.">setSlope</a>( StkFloat slope ) { slope_ = slope; };
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <span class="keyword">protected</span>:
<a name="l00043"></a>00043
<a name="l00044"></a>00044 StkFloat computeSample( StkFloat input );
<a name="l00045"></a>00045
<a name="l00046"></a>00046 StkFloat offset_;
<a name="l00047"></a>00047 StkFloat slope_;
<a name="l00048"></a>00048
<a name="l00049"></a>00049 };
<a name="l00050"></a>00050
<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00043"></a>00043 StkFloat <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">tick</a>( StkFloat input );
<a name="l00044"></a>00044
<a name="l00046"></a>00046
<a name="l00054"></a>00054 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00055"></a>00055
<a name="l00057"></a>00057
<a name="l00065"></a>00065 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keyword">protected</span>:
<a name="l00068"></a>00068
<a name="l00069"></a>00069 StkFloat offset_;
<a name="l00070"></a>00070 StkFloat slope_;
<a name="l00071"></a>00071
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073
<a name="l00074"></a><a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19">00074</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">BowTable :: tick</a>( StkFloat input )
<a name="l00075"></a>00075 {
<a name="l00076"></a>00076 <span class="comment">// The input represents differential string vs. bow velocity.</span>
<a name="l00077"></a>00077 StkFloat sample = input + offset_; <span class="comment">// add bias to input</span>
<a name="l00078"></a>00078 sample *= slope_; <span class="comment">// then scale it</span>
<a name="l00079"></a>00079 lastFrame_[0] = (StkFloat) fabs( (<span class="keywordtype">double</span>) sample ) + (StkFloat) 0.75;
<a name="l00080"></a>00080 lastFrame_[0] = (StkFloat) pow( lastFrame_[0], (StkFloat) -4.0 );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="comment">// Set minimum friction to 0.0</span>
<a name="l00083"></a>00083 <span class="comment">// if ( lastFrame_[0] &lt; 0.0 ) lastFrame_[0] = 0.0;</span>
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="comment">// Set maximum friction to 1.0.</span>
<a name="l00086"></a>00086 <span class="keywordflow">if</span> ( lastFrame_[0] &gt; 1.0 ) lastFrame_[0] = (StkFloat) 1.0;
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00089"></a>00089 }
<a name="l00090"></a>00090
<a name="l00091"></a><a class="code" href="classstk_1_1BowTable.html#8ad2766def014b62dcbbd8765e133246">00091</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">BowTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00092"></a>00092 {
<a name="l00093"></a>00093 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00094"></a>00094 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00095"></a>00095 errorString_ &lt;&lt; <span class="stringliteral">"BowTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00097"></a>00097 }
<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span>
<a name="l00100"></a>00100 StkFloat *samples = &amp;frames[channel];
<a name="l00101"></a>00101 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00102"></a>00102 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00103"></a>00103 *samples = *samples + offset_;
<a name="l00104"></a>00104 *samples *= slope_;
<a name="l00105"></a>00105 *samples = (StkFloat) fabs( (<span class="keywordtype">double</span>) *samples ) + 0.75;
<a name="l00106"></a>00106 *samples = (StkFloat) pow( *samples, (StkFloat) -4.0 );
<a name="l00107"></a>00107 <span class="keywordflow">if</span> ( *samples &gt; 1.0) *samples = 1.0;
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109
<a name="l00110"></a>00110 lastFrame_[0] = *(samples-hop);
<a name="l00111"></a>00111 <span class="keywordflow">return</span> frames;
<a name="l00112"></a>00112 }
<a name="l00113"></a>00113
<a name="l00114"></a><a class="code" href="classstk_1_1BowTable.html#af72f823f210b18f417337ac7181cde5">00114</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">BowTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00115"></a>00115 {
<a name="l00116"></a>00116 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00118"></a>00118 errorString_ &lt;&lt; <span class="stringliteral">"BowTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00119"></a>00119 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121 <span class="preprocessor">#endif</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span>
<a name="l00123"></a>00123 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00124"></a>00124 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00126"></a>00126 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00127"></a>00127 *oSamples = *iSamples + offset_;
<a name="l00128"></a>00128 *oSamples *= slope_;
<a name="l00129"></a>00129 *oSamples = (StkFloat) fabs( (<span class="keywordtype">double</span>) *oSamples ) + 0.75;
<a name="l00130"></a>00130 *oSamples = (StkFloat) pow( *oSamples, (StkFloat) -4.0 );
<a name="l00131"></a>00131 <span class="keywordflow">if</span> ( *oSamples &gt; 1.0) *oSamples = 1.0;
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133
<a name="l00134"></a>00134 lastFrame_[0] = *(oSamples-oHop);
<a name="l00135"></a>00135 <span class="keywordflow">return</span> iFrames;
<a name="l00136"></a>00136 }
<a name="l00137"></a>00137
<a name="l00138"></a>00138 } <span class="comment">// stk namespace</span>
<a name="l00139"></a>00139
<a name="l00140"></a>00140 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,70 +8,97 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Bowed.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_BOWED_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWED_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "BowTable.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00034"></a>00034
<a name="l00035"></a><a class="code" href="classBowed.html">00035</a> <span class="keyword">class </span><a class="code" href="classBowed.html">Bowed</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037 <span class="keyword">public</span>:
<a name="l00039"></a>00039 <a class="code" href="classBowed.html#a0">Bowed</a>(StkFloat lowestFrequency);
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <a class="code" href="classBowed.html#a1">~Bowed</a>();
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a2">clear</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a4">setVibrato</a>(StkFloat gain);
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a5">startBowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a6">stopBowing</a>(StkFloat rate);
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a8">noteOff</a>(StkFloat amplitude);
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classBowed.html#a9">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Bowed.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BOWED_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BOWED_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "BowTable.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keyword">namespace </span>stk {
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classstk_1_1Bowed.html">00037</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Bowed.html" title="STK bowed string instrument class.">Bowed</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">public</span>:
<a name="l00041"></a>00041 <a class="code" href="classstk_1_1Bowed.html#b776c34c271de25c0cd036946d764158" title="Class constructor, taking the lowest desired playing frequency.">Bowed</a>( StkFloat lowestFrequency );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <a class="code" href="classstk_1_1Bowed.html#8067e4808bf7576922be4698f853c96c" title="Class destructor.">~Bowed</a>( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#8d522c36a35b86f90a06cf135fc83b11" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#02dbcfbd0766fee8a2e75a8df809e62c" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#7cf229e206a61259d381cf153a1c5096" title="Set vibrato gain.">setVibrato</a>( StkFloat gain );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#519d511ddcc1cf23e897aeacdfe45020" title="Apply breath pressure to instrument with given amplitude and rate of increase.">startBowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#ae2a57d8e23536fd37a00af1fe07f21c" title="Decrease breath pressure with given rate of decrease.">stopBowing</a>( StkFloat rate );
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#4ebaf6bd27d90975e7b0aea0ee727dc1" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00063"></a>00063
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#b86db568328b51e4adfae8b62987fc85" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00066"></a>00066
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Bowed.html#d066af9bb1340b6fcf9002d6922021f4" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00069"></a>00069
<a name="l00070"></a>00070 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <a class="code" href="classDelayL.html">DelayL</a> neckDelay_;
<a name="l00073"></a>00073 <a class="code" href="classDelayL.html">DelayL</a> bridgeDelay_;
<a name="l00074"></a>00074 <a class="code" href="classBowTable.html">BowTable</a> bowTable_;
<a name="l00075"></a>00075 <a class="code" href="classOnePole.html">OnePole</a> stringFilter_;
<a name="l00076"></a>00076 <a class="code" href="classBiQuad.html">BiQuad</a> bodyFilter_;
<a name="l00077"></a>00077 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00078"></a>00078 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00079"></a>00079 StkFloat maxVelocity_;
<a name="l00080"></a>00080 StkFloat baseDelay_;
<a name="l00081"></a>00081 StkFloat vibratoGain_;
<a name="l00082"></a>00082 StkFloat betaRatio_;
<a name="l00083"></a>00083
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00071"></a>00071 StkFloat <a class="code" href="classstk_1_1Bowed.html#4d583369f0b22335fff8cee3ce6f2750" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keyword">protected</span>:
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> neckDelay_;
<a name="l00076"></a>00076 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> bridgeDelay_;
<a name="l00077"></a>00077 <a class="code" href="classstk_1_1BowTable.html" title="STK bowed string table class.">BowTable</a> bowTable_;
<a name="l00078"></a>00078 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> stringFilter_;
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> bodyFilter_;
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00081"></a>00081 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00082"></a>00082 StkFloat maxVelocity_;
<a name="l00083"></a>00083 StkFloat baseDelay_;
<a name="l00084"></a>00084 StkFloat vibratoGain_;
<a name="l00085"></a>00085 StkFloat betaRatio_;
<a name="l00086"></a>00086
<a name="l00087"></a>00087 };
<a name="l00088"></a>00088
<a name="l00089"></a><a class="code" href="classstk_1_1Bowed.html#4d583369f0b22335fff8cee3ce6f2750">00089</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Bowed.html#4d583369f0b22335fff8cee3ce6f2750" title="Compute and return one output sample.">Bowed :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00090"></a>00090 {
<a name="l00091"></a>00091 StkFloat bowVelocity = maxVelocity_ * adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00092"></a>00092 StkFloat bridgeRefl = -stringFilter_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( bridgeDelay_.<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>() );
<a name="l00093"></a>00093 StkFloat nutRefl = -neckDelay_.<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>();
<a name="l00094"></a>00094 StkFloat stringVel = bridgeRefl + nutRefl; <span class="comment">// Sum is string velocity</span>
<a name="l00095"></a>00095 StkFloat velDiff = bowVelocity - stringVel; <span class="comment">// Differential velocity</span>
<a name="l00096"></a>00096 StkFloat newVel = velDiff * bowTable_.<a class="code" href="classstk_1_1BowTable.html#8dc58c69ecda1471dce6d142cb5f4b19" title="Take one sample input and map to one sample of output.">tick</a>( velDiff ); <span class="comment">// Non-Linear bow function</span>
<a name="l00097"></a>00097 neckDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>(bridgeRefl + newVel); <span class="comment">// Do string propagations</span>
<a name="l00098"></a>00098 bridgeDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>(nutRefl + newVel);
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keywordflow">if</span> ( vibratoGain_ &gt; 0.0 ) {
<a name="l00101"></a>00101 neckDelay_.<a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( (baseDelay_ * (1.0 - betaRatio_) ) +
<a name="l00102"></a>00102 (baseDelay_ * vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>()) );
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104
<a name="l00105"></a>00105 lastFrame_[0] = bodyFilter_.<a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( bridgeDelay_.<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>() );
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109
<a name="l00110"></a>00110 } <span class="comment">// stk namespace</span>
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,69 +8,94 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Brass.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef STK_BRASS_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define STK_BRASS_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00032"></a>00032
<a name="l00033"></a><a class="code" href="classBrass.html">00033</a> <span class="keyword">class </span><a class="code" href="classBrass.html">Brass</a>: <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">public</span>:
<a name="l00037"></a>00037
<a name="l00040"></a>00040 <a class="code" href="classBrass.html#a0">Brass</a>(StkFloat lowestFrequency);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classBrass.html#a1">~Brass</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a2">clear</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a4">setLip</a>(StkFloat frequency);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a5">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a6">stopBlowing</a>(StkFloat rate);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a8">noteOff</a>(StkFloat amplitude);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classBrass.html#a9">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Brass.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_BRASS_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_BRASS_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="keyword">namespace </span>stk {
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034
<a name="l00035"></a><a class="code" href="classstk_1_1Brass.html">00035</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Brass.html" title="STK simple brass instrument class.">Brass</a>: <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037 <span class="keyword">public</span>:
<a name="l00039"></a>00039
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1Brass.html#96b223221f536efdaad4e724db01f11b" title="Class constructor, taking the lowest desired playing frequency.">Brass</a>( StkFloat lowestFrequency );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1Brass.html#474528a75bd4fb88cdb9c783d73df8f6" title="Class destructor.">~Brass</a>( );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#64e48334efdc8f2508c29c5ea4281f2d" title="Reset and clear all internal state.">clear</a>( );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#5e99e7fee1b92138566a46c828df93e8" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#2e1a150328504050499c5cb9fa0e536f" title="Set the lips frequency.">setLip</a>( StkFloat frequency );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#02533e02818e2848fb6480106a54ce94" title="Apply breath pressure to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#8bf1624aca6283fafb830a3f22546199" title="Decrease breath pressure with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#e74eba698f27abd43e66e825f5ce72da" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#32e2a6d2c9285bb5cf033d8a6b90e3c9" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Brass.html#4d75ac361d11fcc870a330d393dbad80" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00070"></a>00070
<a name="l00071"></a>00071 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
<a name="l00074"></a>00074 <a class="code" href="classBiQuad.html">BiQuad</a> lipFilter_;
<a name="l00075"></a>00075 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
<a name="l00076"></a>00076 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00077"></a>00077 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00078"></a>00078 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00079"></a>00079 StkFloat lipTarget_;
<a name="l00080"></a>00080 StkFloat slideTarget_;
<a name="l00081"></a>00081 StkFloat vibratoGain_;
<a name="l00082"></a>00082 StkFloat maxPressure_;
<a name="l00083"></a>00083
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00072"></a>00072 StkFloat <a class="code" href="classstk_1_1Brass.html#4af1b7c4c1b374b65e04ccaa90886321" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">protected</span>:
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine_;
<a name="l00077"></a>00077 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> lipFilter_;
<a name="l00078"></a>00078 <a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> dcBlock_;
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00082"></a>00082 StkFloat lipTarget_;
<a name="l00083"></a>00083 StkFloat slideTarget_;
<a name="l00084"></a>00084 StkFloat vibratoGain_;
<a name="l00085"></a>00085 StkFloat maxPressure_;
<a name="l00086"></a>00086
<a name="l00087"></a>00087 };
<a name="l00088"></a>00088
<a name="l00089"></a><a class="code" href="classstk_1_1Brass.html#4af1b7c4c1b374b65e04ccaa90886321">00089</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Brass.html#4af1b7c4c1b374b65e04ccaa90886321" title="Compute and return one output sample.">Brass :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00090"></a>00090 {
<a name="l00091"></a>00091 StkFloat breathPressure = maxPressure_ * adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00092"></a>00092 breathPressure += vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00093"></a>00093
<a name="l00094"></a>00094 StkFloat mouthPressure = 0.3 * breathPressure;
<a name="l00095"></a>00095 StkFloat borePressure = 0.85 * delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>();
<a name="l00096"></a>00096 StkFloat deltaPressure = mouthPressure - borePressure; <span class="comment">// Differential pressure.</span>
<a name="l00097"></a>00097 deltaPressure = lipFilter_.<a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( deltaPressure ); <span class="comment">// Force - &gt; position.</span>
<a name="l00098"></a>00098 deltaPressure *= deltaPressure; <span class="comment">// Basic position to area mapping.</span>
<a name="l00099"></a>00099 <span class="keywordflow">if</span> ( deltaPressure &gt; 1.0 ) deltaPressure = 1.0; <span class="comment">// Non-linear saturation.</span>
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="comment">// The following input scattering assumes the mouthPressure = area.</span>
<a name="l00102"></a>00102 lastFrame_[0] = deltaPressure * mouthPressure + ( 1.0 - deltaPressure) * borePressure;
<a name="l00103"></a>00103 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( dcBlock_.<a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( lastFrame_[0] ) );
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107
<a name="l00108"></a>00108 } <span class="comment">// stk namespace</span>
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,51 +8,137 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Chorus.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="preprocessor">#ifndef STK_CHORUS_H</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define STK_CHORUS_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span>
<a name="l00014"></a>00014 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classChorus.html">00018</a> <span class="keyword">class </span><a class="code" href="classChorus.html">Chorus</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00022"></a>00022
<a name="l00025"></a>00025 <a class="code" href="classChorus.html#a0">Chorus</a>( StkFloat baseDelay = 6000 );
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classChorus.html#a1">~Chorus</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Chorus.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_CHORUS_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_CHORUS_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classstk_1_1Chorus.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Chorus.html" title="STK chorus effect class.">Chorus</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00025"></a>00025
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1Chorus.html#529f668e66188ae5a42e4cc30779059f" title="Class constructor, taking the median desired delay length.">Chorus</a>( StkFloat baseDelay = 6000 );
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a2">clear</a>();
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Chorus.html#63acbdd04d13110712c36a5cac5d972d" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a3">setModDepth</a>(StkFloat depth);
<a name="l00034"></a><a class="code" href="classstk_1_1Chorus.html#cb3a55518c919dafa6c19698c1ab3389">00034</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Chorus.html#cb3a55518c919dafa6c19698c1ab3389" title="Set modulation depth.">setModDepth</a>( StkFloat depth ) { modDepth_ = depth; };
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classChorus.html#a4">setModFrequency</a>(StkFloat frequency);
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Chorus.html#a4372095b8526d62ff9cfbdb03f21c4d" title="Set modulation frequency.">setModFrequency</a>( StkFloat frequency );
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="keyword">protected</span>:
<a name="l00040"></a>00040
<a name="l00041"></a>00041 StkFloat computeSample( StkFloat input );
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <a class="code" href="classDelayL.html">DelayL</a> delayLine_[2];
<a name="l00044"></a>00044 <a class="code" href="classSineWave.html">SineWave</a> mods_[2];
<a name="l00045"></a>00045 StkFloat baseLength_;
<a name="l00046"></a>00046 StkFloat modDepth_;
<a name="l00047"></a>00047
<a name="l00048"></a>00048 };
<a name="l00048"></a>00048 StkFloat <a class="code" href="classstk_1_1Chorus.html#abcc110787ec3b443c21845b2f06bb3c" title="Return the specified channel value of the last computed stereo frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00049"></a>00049
<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00051"></a>00051
<a name="l00058"></a>00058 StkFloat <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00070"></a>00070 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00071"></a>00071
<a name="l00073"></a>00073
<a name="l00082"></a>00082 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="keyword">protected</span>:
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delayLine_[2];
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> mods_[2];
<a name="l00088"></a>00088 StkFloat baseLength_;
<a name="l00089"></a>00089 StkFloat modDepth_;
<a name="l00090"></a>00090
<a name="l00091"></a>00091 };
<a name="l00092"></a>00092
<a name="l00093"></a><a class="code" href="classstk_1_1Chorus.html#abcc110787ec3b443c21845b2f06bb3c">00093</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Chorus.html#abcc110787ec3b443c21845b2f06bb3c" title="Return the specified channel value of the last computed stereo frame.">Chorus :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00094"></a>00094 {
<a name="l00095"></a>00095 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00097"></a>00097 errorString_ &lt;&lt; <span class="stringliteral">"Chorus::lastOut(): channel argument must be less than 2!"</span>;
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00099"></a>00099 }
<a name="l00100"></a>00100 <span class="preprocessor">#endif</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span>
<a name="l00102"></a>00102 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104
<a name="l00105"></a><a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf">00105</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">Chorus :: tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00106"></a>00106 {
<a name="l00107"></a>00107 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00109"></a>00109 errorString_ &lt;&lt; <span class="stringliteral">"Chorus::tick(): channel argument must be less than 2!"</span>;
<a name="l00110"></a>00110 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
<a name="l00113"></a>00113 <span class="preprocessor"></span>
<a name="l00114"></a>00114 delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( baseLength_ * 0.707 * ( 1.0 + modDepth_ * mods_[0].<a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>() ) );
<a name="l00115"></a>00115 delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( baseLength_ * 0.5 * ( 1.0 - modDepth_ * mods_[1].<a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>() ) );
<a name="l00116"></a>00116 lastFrame_[0] = effectMix_ * ( delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( input ) - input ) + input;
<a name="l00117"></a>00117 lastFrame_[1] = effectMix_ * ( delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( input ) - input ) + input;
<a name="l00118"></a>00118 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120
<a name="l00121"></a><a class="code" href="classstk_1_1Chorus.html#ef55c6fb93a1d00498ae436868f84501">00121</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">Chorus :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00122"></a>00122 {
<a name="l00123"></a>00123 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00124"></a>00124 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - 1 ) {
<a name="l00125"></a>00125 errorString_ &lt;&lt; <span class="stringliteral">"Chorus::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00126"></a>00126 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00127"></a>00127 }
<a name="l00128"></a>00128 <span class="preprocessor">#endif</span>
<a name="l00129"></a>00129 <span class="preprocessor"></span>
<a name="l00130"></a>00130 StkFloat *samples = &amp;frames[channel];
<a name="l00131"></a>00131 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - 1;
<a name="l00132"></a>00132 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00133"></a>00133 *samples = effectMix_ * ( delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( *samples ) - *samples ) + *samples;
<a name="l00134"></a>00134 samples++;
<a name="l00135"></a>00135 *samples = effectMix_ * ( delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( *samples ) - *samples ) + *samples;
<a name="l00136"></a>00136 }
<a name="l00137"></a>00137
<a name="l00138"></a>00138 lastFrame_[0] = *(samples-hop);
<a name="l00139"></a>00139 lastFrame_[1] = *(samples-hop+1);
<a name="l00140"></a>00140 <span class="keywordflow">return</span> frames;
<a name="l00141"></a>00141 }
<a name="l00142"></a>00142
<a name="l00143"></a><a class="code" href="classstk_1_1Chorus.html#bdb8802a83f6b89716316399138e3032">00143</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Chorus.html#31d5c48d5b4a030040f6bb6b5e2c99cf" title="Input one sample to the effect and return the specified channel value of the computed...">Chorus :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00144"></a>00144 {
<a name="l00145"></a>00145 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00146"></a>00146 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - 1 ) {
<a name="l00147"></a>00147 errorString_ &lt;&lt; <span class="stringliteral">"Chorus::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00148"></a>00148 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00149"></a>00149 }
<a name="l00150"></a>00150 <span class="preprocessor">#endif</span>
<a name="l00151"></a>00151 <span class="preprocessor"></span>
<a name="l00152"></a>00152 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00153"></a>00153 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00154"></a>00154 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00155"></a>00155 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00156"></a>00156 *oSamples++ = effectMix_ * ( delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( *iSamples ) - *iSamples ) + *iSamples;
<a name="l00157"></a>00157 *oSamples = effectMix_ * ( delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( *iSamples ) - *iSamples ) + *iSamples;
<a name="l00158"></a>00158 }
<a name="l00159"></a>00159
<a name="l00160"></a>00160 lastFrame_[0] = *(oSamples-oHop);
<a name="l00161"></a>00161 lastFrame_[1] = *(oSamples-oHop+1);
<a name="l00162"></a>00162 <span class="keywordflow">return</span> iFrames;
<a name="l00163"></a>00163 }
<a name="l00164"></a>00164
<a name="l00165"></a>00165 } <span class="comment">// stk namespace</span>
<a name="l00166"></a>00166
<a name="l00167"></a>00167 <span class="preprocessor">#endif</span>
<a name="l00168"></a>00168 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,68 +8,99 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Clarinet.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef STK_CLARINET_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_CLARINET_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classClarinet.html">00036</a> <span class="keyword">class </span><a class="code" href="classClarinet.html">Clarinet</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040
<a name="l00043"></a>00043 <a class="code" href="classClarinet.html#a0">Clarinet</a>(StkFloat lowestFrequency);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classClarinet.html#a1">~Clarinet</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a2">clear</a>();
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a4">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a5">stopBlowing</a>(StkFloat rate);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a6">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a7">noteOff</a>(StkFloat amplitude);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classClarinet.html#a8">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Clarinet.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_CLARINET_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_CLARINET_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keyword">namespace </span>stk {
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1Clarinet.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Clarinet.html" title="STK clarinet physical model class.">Clarinet</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1Clarinet.html#82e32a30e6d9664ac9fe748070bec23c" title="Class constructor, taking the lowest desired playing frequency.">Clarinet</a>( StkFloat lowestFrequency );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classstk_1_1Clarinet.html#5166db9f4cf180fa189ba2e135affe34" title="Class destructor.">~Clarinet</a>( <span class="keywordtype">void</span> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#7eae4377eb4178067c2dba704032a2d1" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#f7c1cda6af97908c9b81b1be0c2a896d" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#0e4d016135c3ee291f4d74e9b030caee" title="Apply breath pressure to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#e33627365f66f30c3685dc72cd7fadce" title="Decrease breath pressure with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#35f9158176c1b654c74bdf6f1296df67" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#501413064397d1650e18edac92a98b2e" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Clarinet.html#63582205ab940101f5f9419fc717ff78" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00070"></a>00070
<a name="l00071"></a>00071 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <a class="code" href="classDelayL.html">DelayL</a> delayLine_;
<a name="l00074"></a>00074 <a class="code" href="classReedTable.html">ReedTable</a> reedTable_;
<a name="l00075"></a>00075 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<a name="l00076"></a>00076 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<a name="l00077"></a>00077 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00078"></a>00078 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00079"></a>00079 <span class="keywordtype">long</span> length_;
<a name="l00080"></a>00080 StkFloat outputGain_;
<a name="l00081"></a>00081 StkFloat noiseGain_;
<a name="l00082"></a>00082 StkFloat vibratoGain_;
<a name="l00083"></a>00083
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00072"></a>00072 StkFloat <a class="code" href="classstk_1_1Clarinet.html#4cd08bca954ad434bc636eda957ca8d5" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">protected</span>:
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delayLine_;
<a name="l00077"></a>00077 <a class="code" href="classstk_1_1ReedTable.html" title="STK reed table class.">ReedTable</a> reedTable_;
<a name="l00078"></a>00078 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter_;
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> envelope_;
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00081"></a>00081 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00082"></a>00082 <span class="keywordtype">long</span> length_;
<a name="l00083"></a>00083 StkFloat outputGain_;
<a name="l00084"></a>00084 StkFloat noiseGain_;
<a name="l00085"></a>00085 StkFloat vibratoGain_;
<a name="l00086"></a>00086
<a name="l00087"></a>00087 };
<a name="l00088"></a>00088
<a name="l00089"></a><a class="code" href="classstk_1_1Clarinet.html#4cd08bca954ad434bc636eda957ca8d5">00089</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Clarinet.html#4cd08bca954ad434bc636eda957ca8d5" title="Compute and return one output sample.">Clarinet :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00090"></a>00090 {
<a name="l00091"></a>00091 StkFloat pressureDiff;
<a name="l00092"></a>00092 StkFloat breathPressure;
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="comment">// Calculate the breath pressure (envelope + noise + vibrato)</span>
<a name="l00095"></a>00095 breathPressure = envelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00096"></a>00096 breathPressure += breathPressure * noiseGain_ * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00097"></a>00097 breathPressure += breathPressure * vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="comment">// Perform commuted loss filtering.</span>
<a name="l00100"></a>00100 pressureDiff = -0.95 * filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( delayLine_.<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>() );
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="comment">// Calculate pressure difference of reflected and mouthpiece pressures.</span>
<a name="l00103"></a>00103 pressureDiff = pressureDiff - breathPressure;
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="comment">// Perform non-linear scattering using pressure difference in reed function.</span>
<a name="l00106"></a>00106 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>(breathPressure + pressureDiff * reedTable_.<a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>(pressureDiff));
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="comment">// Apply output gain.</span>
<a name="l00109"></a>00109 lastFrame_[0] *= outputGain_;
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00112"></a>00112 }
<a name="l00113"></a>00113
<a name="l00114"></a>00114 } <span class="comment">// stk namespace</span>
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,55 +8,156 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>DelayA.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef STK_DELAYA_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYA_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classDelayA.html">00027</a> <span class="keyword">class </span><a class="code" href="classDelayA.html">DelayA</a> : <span class="keyword">public</span> <a class="code" href="classDelay.html">Delay</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <a class="code" href="classDelayA.html#a0">DelayA</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>DelayA.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_DELAYA_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYA_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027
<a name="l00028"></a><a class="code" href="classstk_1_1DelayA.html">00028</a> <span class="keyword">class </span><a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00029"></a>00029 {
<a name="l00030"></a>00030 <span class="keyword">public</span>:
<a name="l00031"></a>00031
<a name="l00033"></a>00033
<a name="l00035"></a>00035
<a name="l00040"></a>00040 <a class="code" href="classDelayA.html#a0">DelayA</a>(StkFloat delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classDelayA.html#a2">~DelayA</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classDelayA.html#a3">clear</a>();
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1DelayA.html#9beb31f924bca961df99c1ea7789c42d" title="Default constructor creates a delay-line with maximum length of 4095 samples and...">DelayA</a>( StkFloat delay = 0.5, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay = 4095 );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classstk_1_1DelayA.html#b6f2ee45d350b4bb3515fcdaf25a986a" title="Class destructor.">~DelayA</a>();
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1DelayA.html#e5e59f497eb84280fd94d60257ffae69" title="Clears all internal states of the delay line.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00047"></a>00047
<a name="l00049"></a>00049
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classDelayA.html#a4">setDelay</a>(StkFloat delay);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 StkFloat <a class="code" href="classDelayA.html#a5">getDelay</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00061"></a>00061 StkFloat <a class="code" href="classDelayA.html#a6">nextOut</a>(<span class="keywordtype">void</span>);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1DelayA.html#b10bb5eb8316ce8b3c6667bdf4c98389" title="Set the maximum delay-line length.">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00055"></a>00055
<a name="l00057"></a>00057
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1DelayA.html#83ddc9bdf2f5059159160fdac0e25eda" title="Set the delay-line length.">setDelay</a>( StkFloat delay );
<a name="l00061"></a>00061
<a name="l00063"></a><a class="code" href="classstk_1_1DelayA.html#363d9ccc50acbd1f3bb533aa1ab3d9c7">00063</a> StkFloat <a class="code" href="classstk_1_1DelayA.html#363d9ccc50acbd1f3bb533aa1ab3d9c7" title="Return the current delay-line length.">getDelay</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> delay_; };
<a name="l00064"></a>00064
<a name="l00065"></a>00065 StkFloat computeSample( StkFloat input );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 StkFloat alpha_;
<a name="l00068"></a>00068 StkFloat coeff_;
<a name="l00069"></a>00069 StkFloat apInput_;
<a name="l00070"></a>00070 StkFloat nextOutput_;
<a name="l00071"></a>00071 <span class="keywordtype">bool</span> doNextOut_;
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00071"></a>00071 StkFloat <a class="code" href="classstk_1_1DelayA.html#355422e50c1d2e89385f11aafffd064d" title="Return the value at tapDelay samples from the delay-line input.">contentsAt</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> tapDelay );
<a name="l00072"></a>00072
<a name="l00074"></a><a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566">00074</a> StkFloat <a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00075"></a>00075
<a name="l00077"></a>00077
<a name="l00080"></a>00080 StkFloat <a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314" title="Return the value which will be output by the next call to tick().">nextOut</a>( <span class="keywordtype">void</span> );
<a name="l00081"></a>00081
<a name="l00083"></a>00083 StkFloat <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00084"></a>00084
<a name="l00086"></a>00086
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00095"></a>00095
<a name="l00097"></a>00097
<a name="l00105"></a>00105 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="keyword">protected</span>:
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
<a name="l00110"></a>00110 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outPoint_;
<a name="l00111"></a>00111 StkFloat delay_;
<a name="l00112"></a>00112 StkFloat alpha_;
<a name="l00113"></a>00113 StkFloat coeff_;
<a name="l00114"></a>00114 StkFloat apInput_;
<a name="l00115"></a>00115 StkFloat nextOutput_;
<a name="l00116"></a>00116 <span class="keywordtype">bool</span> doNextOut_;
<a name="l00117"></a>00117 };
<a name="l00118"></a>00118
<a name="l00119"></a><a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314">00119</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314" title="Return the value which will be output by the next call to tick().">DelayA :: nextOut</a>( <span class="keywordtype">void</span> )
<a name="l00120"></a>00120 {
<a name="l00121"></a>00121 <span class="keywordflow">if</span> ( doNextOut_ ) {
<a name="l00122"></a>00122 <span class="comment">// Do allpass interpolation delay.</span>
<a name="l00123"></a>00123 nextOutput_ = -coeff_ * lastFrame_[0];
<a name="l00124"></a>00124 nextOutput_ += apInput_ + ( coeff_ * inputs_[outPoint_] );
<a name="l00125"></a>00125 doNextOut_ = <span class="keyword">false</span>;
<a name="l00126"></a>00126 }
<a name="l00127"></a>00127
<a name="l00128"></a>00128 <span class="keywordflow">return</span> nextOutput_;
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00131"></a><a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74">00131</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">DelayA :: tick</a>( StkFloat input )
<a name="l00132"></a>00132 {
<a name="l00133"></a>00133 inputs_[inPoint_++] = input * gain_;
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="comment">// Increment input pointer modulo length.</span>
<a name="l00136"></a>00136 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00137"></a>00137 inPoint_ = 0;
<a name="l00138"></a>00138
<a name="l00139"></a>00139 lastFrame_[0] = <a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00140"></a>00140 doNextOut_ = <span class="keyword">true</span>;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="comment">// Save the allpass input and increment modulo length.</span>
<a name="l00143"></a>00143 apInput_ = inputs_[outPoint_++];
<a name="l00144"></a>00144 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00145"></a>00145 outPoint_ = 0;
<a name="l00146"></a>00146
<a name="l00147"></a>00147 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00148"></a>00148 }
<a name="l00149"></a>00149
<a name="l00150"></a><a class="code" href="classstk_1_1DelayA.html#57c568d56e5ed35926cfc23f83d48d98">00150</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">DelayA :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00151"></a>00151 {
<a name="l00152"></a>00152 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00153"></a>00153 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00154"></a>00154 errorString_ &lt;&lt; <span class="stringliteral">"DelayA::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00155"></a>00155 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00156"></a>00156 }
<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span>
<a name="l00159"></a>00159 StkFloat *samples = &amp;frames[channel];
<a name="l00160"></a>00160 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00161"></a>00161 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00162"></a>00162 inputs_[inPoint_++] = *samples * gain_;
<a name="l00163"></a>00163 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00164"></a>00164 *samples = <a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00165"></a>00165 lastFrame_[0] = *samples;
<a name="l00166"></a>00166 doNextOut_ = <span class="keyword">true</span>;
<a name="l00167"></a>00167 apInput_ = inputs_[outPoint_++];
<a name="l00168"></a>00168 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00169"></a>00169 }
<a name="l00170"></a>00170
<a name="l00171"></a>00171 <span class="keywordflow">return</span> frames;
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173
<a name="l00174"></a><a class="code" href="classstk_1_1DelayA.html#94a2998c9b2d1697ed9a747973be0a89">00174</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">DelayA :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00175"></a>00175 {
<a name="l00176"></a>00176 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00177"></a>00177 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00178"></a>00178 errorString_ &lt;&lt; <span class="stringliteral">"DelayA::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00179"></a>00179 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00180"></a>00180 }
<a name="l00181"></a>00181 <span class="preprocessor">#endif</span>
<a name="l00182"></a>00182 <span class="preprocessor"></span>
<a name="l00183"></a>00183 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00184"></a>00184 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00185"></a>00185 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00186"></a>00186 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00187"></a>00187 inputs_[inPoint_++] = *iSamples * gain_;
<a name="l00188"></a>00188 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00189"></a>00189 *oSamples = <a class="code" href="classstk_1_1DelayA.html#08c8ade17cea4a54844f90d976b14314" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00190"></a>00190 lastFrame_[0] = *oSamples;
<a name="l00191"></a>00191 doNextOut_ = <span class="keyword">true</span>;
<a name="l00192"></a>00192 apInput_ = inputs_[outPoint_++];
<a name="l00193"></a>00193 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00194"></a>00194 }
<a name="l00195"></a>00195
<a name="l00196"></a>00196 <span class="keywordflow">return</span> iFrames;
<a name="l00197"></a>00197 }
<a name="l00198"></a>00198
<a name="l00199"></a>00199 } <span class="comment">// stk namespace</span>
<a name="l00200"></a>00200
<a name="l00201"></a>00201 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,52 +8,154 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>DelayL.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef STK_DELAYL_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYL_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classDelayL.html">00030</a> <span class="keyword">class </span><a class="code" href="classDelayL.html">DelayL</a> : <span class="keyword">public</span> <a class="code" href="classDelay.html">Delay</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <a class="code" href="classDelayL.html#a0">DelayL</a>();
<a name="l00036"></a>00036
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>DelayL.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_DELAYL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAYL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classstk_1_1DelayL.html">00027</a> <span class="keyword">class </span><a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00030"></a>00030
<a name="l00032"></a>00032
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1DelayL.html#d60f2222397e19fe524fc3b76b59b846" title="Default constructor creates a delay-line with maximum length of 4095 samples and...">DelayL</a>( StkFloat delay = 0.0, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay = 4095 );
<a name="l00038"></a>00038
<a name="l00043"></a>00043 <a class="code" href="classDelayL.html#a0">DelayL</a>(StkFloat delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classDelayL.html#a2">~DelayL</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classDelayL.html#a3">setDelay</a>(StkFloat delay);
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1DelayL.html#8f9b49c7b098d9e379baf44b0c345457" title="Class destructor.">~DelayL</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1DelayL.html#18b40806591654a9c9c32603990fce40" title="Set the maximum delay-line length.">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00051"></a>00051
<a name="l00053"></a>00053
<a name="l00055"></a>00055 StkFloat <a class="code" href="classDelayL.html#a4">getDelay</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00061"></a>00061 StkFloat <a class="code" href="classDelayL.html#a5">nextOut</a>(<span class="keywordtype">void</span>);
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( StkFloat delay );
<a name="l00057"></a>00057
<a name="l00059"></a><a class="code" href="classstk_1_1DelayL.html#af2d5ef7dba47ff1fb279c327021beb0">00059</a> StkFloat <a class="code" href="classstk_1_1DelayL.html#af2d5ef7dba47ff1fb279c327021beb0" title="Return the current delay-line length.">getDelay</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> delay_; };
<a name="l00060"></a>00060
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<a name="l00064"></a>00064
<a name="l00065"></a>00065 StkFloat computeSample( StkFloat input );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 StkFloat alpha_;
<a name="l00068"></a>00068 StkFloat omAlpha_;
<a name="l00069"></a>00069 StkFloat nextOutput_;
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> doNextOut_;
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00067"></a>00067 StkFloat <a class="code" href="classstk_1_1DelayL.html#7a84a3a188f2de7cc05f81ad06e04874" title="Return the value at tapDelay samples from the delay-line input.">contentsAt</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> tapDelay );
<a name="l00068"></a>00068
<a name="l00070"></a><a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9">00070</a> StkFloat <a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00071"></a>00071
<a name="l00073"></a>00073
<a name="l00076"></a>00076 StkFloat <a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8" title="Return the value which will be output by the next call to tick().">nextOut</a>( <span class="keywordtype">void</span> );
<a name="l00077"></a>00077
<a name="l00079"></a>00079 StkFloat <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00080"></a>00080
<a name="l00082"></a>00082
<a name="l00090"></a>00090 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00091"></a>00091
<a name="l00093"></a>00093
<a name="l00101"></a>00101 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="keyword">protected</span>:
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
<a name="l00106"></a>00106 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outPoint_;
<a name="l00107"></a>00107 StkFloat delay_;
<a name="l00108"></a>00108 StkFloat alpha_;
<a name="l00109"></a>00109 StkFloat omAlpha_;
<a name="l00110"></a>00110 StkFloat nextOutput_;
<a name="l00111"></a>00111 <span class="keywordtype">bool</span> doNextOut_;
<a name="l00112"></a>00112 };
<a name="l00113"></a>00113
<a name="l00114"></a><a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8">00114</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8" title="Return the value which will be output by the next call to tick().">DelayL :: nextOut</a>( <span class="keywordtype">void</span> )
<a name="l00115"></a>00115 {
<a name="l00116"></a>00116 <span class="keywordflow">if</span> ( doNextOut_ ) {
<a name="l00117"></a>00117 <span class="comment">// First 1/2 of interpolation</span>
<a name="l00118"></a>00118 nextOutput_ = inputs_[outPoint_] * omAlpha_;
<a name="l00119"></a>00119 <span class="comment">// Second 1/2 of interpolation</span>
<a name="l00120"></a>00120 <span class="keywordflow">if</span> (outPoint_+1 &lt; inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>())
<a name="l00121"></a>00121 nextOutput_ += inputs_[outPoint_+1] * alpha_;
<a name="l00122"></a>00122 <span class="keywordflow">else</span>
<a name="l00123"></a>00123 nextOutput_ += inputs_[0] * alpha_;
<a name="l00124"></a>00124 doNextOut_ = <span class="keyword">false</span>;
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 <span class="keywordflow">return</span> nextOutput_;
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129
<a name="l00130"></a><a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f">00130</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">DelayL :: tick</a>( StkFloat input )
<a name="l00131"></a>00131 {
<a name="l00132"></a>00132 inputs_[inPoint_++] = input * gain_;
<a name="l00133"></a>00133
<a name="l00134"></a>00134 <span class="comment">// Increment input pointer modulo length.</span>
<a name="l00135"></a>00135 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00136"></a>00136 inPoint_ = 0;
<a name="l00137"></a>00137
<a name="l00138"></a>00138 lastFrame_[0] = <a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00139"></a>00139 doNextOut_ = <span class="keyword">true</span>;
<a name="l00140"></a>00140
<a name="l00141"></a>00141 <span class="comment">// Increment output pointer modulo length.</span>
<a name="l00142"></a>00142 <span class="keywordflow">if</span> ( ++outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00143"></a>00143 outPoint_ = 0;
<a name="l00144"></a>00144
<a name="l00145"></a>00145 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00146"></a>00146 }
<a name="l00147"></a>00147
<a name="l00148"></a><a class="code" href="classstk_1_1DelayL.html#cdc5d41de53c53d9d4b39ee8a46fb96c">00148</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">DelayL :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00149"></a>00149 {
<a name="l00150"></a>00150 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00151"></a>00151 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00152"></a>00152 errorString_ &lt;&lt; <span class="stringliteral">"DelayL::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00153"></a>00153 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00154"></a>00154 }
<a name="l00155"></a>00155 <span class="preprocessor">#endif</span>
<a name="l00156"></a>00156 <span class="preprocessor"></span>
<a name="l00157"></a>00157 StkFloat *samples = &amp;frames[channel];
<a name="l00158"></a>00158 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00159"></a>00159 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00160"></a>00160 inputs_[inPoint_++] = *samples * gain_;
<a name="l00161"></a>00161 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00162"></a>00162 *samples = <a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00163"></a>00163 doNextOut_ = <span class="keyword">true</span>;
<a name="l00164"></a>00164 <span class="keywordflow">if</span> ( ++outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00165"></a>00165 }
<a name="l00166"></a>00166
<a name="l00167"></a>00167 lastFrame_[0] = *(samples-hop);
<a name="l00168"></a>00168 <span class="keywordflow">return</span> frames;
<a name="l00169"></a>00169 }
<a name="l00170"></a>00170
<a name="l00171"></a><a class="code" href="classstk_1_1DelayL.html#56ee486fb01fbf45d5a3dbad754a838e">00171</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">DelayL :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00172"></a>00172 {
<a name="l00173"></a>00173 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00174"></a>00174 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00175"></a>00175 errorString_ &lt;&lt; <span class="stringliteral">"DelayL::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00176"></a>00176 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00177"></a>00177 }
<a name="l00178"></a>00178 <span class="preprocessor">#endif</span>
<a name="l00179"></a>00179 <span class="preprocessor"></span>
<a name="l00180"></a>00180 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00181"></a>00181 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00182"></a>00182 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00183"></a>00183 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00184"></a>00184 inputs_[inPoint_++] = *iSamples * gain_;
<a name="l00185"></a>00185 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00186"></a>00186 *oSamples = <a class="code" href="classstk_1_1DelayL.html#bfe69d19690fab75b6026dab96870fb8" title="Return the value which will be output by the next call to tick().">nextOut</a>();
<a name="l00187"></a>00187 doNextOut_ = <span class="keyword">true</span>;
<a name="l00188"></a>00188 <span class="keywordflow">if</span> ( ++outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00189"></a>00189 }
<a name="l00190"></a>00190
<a name="l00191"></a>00191 lastFrame_[0] = *(oSamples-oHop);
<a name="l00192"></a>00192 <span class="keywordflow">return</span> iFrames;
<a name="l00193"></a>00193 }
<a name="l00194"></a>00194
<a name="l00195"></a>00195 } <span class="comment">// stk namespace</span>
<a name="l00196"></a>00196
<a name="l00197"></a>00197 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,71 +8,133 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Delay.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#ifndef STK_DELAY_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAY_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00025"></a>00025
<a name="l00026"></a><a class="code" href="classDelay.html">00026</a> <span class="keyword">class </span><a class="code" href="classDelay.html">Delay</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00027"></a>00027 {
<a name="l00028"></a>00028 <span class="keyword">public</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Delay.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_DELAY_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_DELAY_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a><a class="code" href="classstk_1_1Delay.html">00024</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00025"></a>00025 {
<a name="l00026"></a>00026 <span class="keyword">public</span>:
<a name="l00027"></a>00027
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <a class="code" href="classDelay.html#a0">Delay</a>();
<a name="l00032"></a>00032
<a name="l00034"></a>00034
<a name="l00039"></a>00039 <a class="code" href="classDelay.html#a0">Delay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay);
<a name="l00034"></a>00034 <a class="code" href="classstk_1_1Delay.html#9644532bfea44fae046e54f2509cf1ef" title="The default constructor creates a delay-line with maximum length of 4095 samples...">Delay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay = 4095 );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1Delay.html#24b6ed6c7c5fc6d15935ec2a118b6b4f" title="Class destructor.">~Delay</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keyword">virtual</span> <a class="code" href="classDelay.html#a2">~Delay</a>();
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a3">clear</a>();
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Delay.html#0cf4c8da14bd4105eef06e35caaf1532" title="Set the maximum delay-line length.">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00048"></a>00048
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a4">setMaximumDelay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay);
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classDelay.html#a5">setDelay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classDelay.html#a6">getDelay</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00050"></a>00050
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Delay.html#5eaeed55ea0c7b30ed66fedd6ef52fc2" title="Set the delay-line length.">setDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00054"></a>00054
<a name="l00056"></a><a class="code" href="classstk_1_1Delay.html#7ae307dc997ff07ff986ca5c4d287441">00056</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1Delay.html#7ae307dc997ff07ff986ca5c4d287441" title="Return the current delay-line length.">getDelay</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> delay_; };
<a name="l00057"></a>00057
<a name="l00059"></a>00059
<a name="l00064"></a>00064 StkFloat <a class="code" href="classstk_1_1Delay.html#7d4c9c21e752f860ba683e9849d14665" title="Return the value at tapDelay samples from the delay-line input.">contentsAt</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> tapDelay );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 StkFloat <a class="code" href="classDelay.html#a7">energy</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00067"></a><a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2">00067</a> StkFloat <a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00068"></a>00068
<a name="l00070"></a>00070
<a name="l00075"></a>00075 StkFloat <a class="code" href="classDelay.html#a8">contentsAt</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> tapDelay);
<a name="l00076"></a>00076
<a name="l00078"></a>00078 StkFloat <a class="code" href="classDelay.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00079"></a>00079
<a name="l00081"></a>00081
<a name="l00084"></a>00084 <span class="keyword">virtual</span> StkFloat <a class="code" href="classDelay.html#a10">nextOut</a>(<span class="keywordtype">void</span>);
<a name="l00085"></a>00085
<a name="l00087"></a>00087 <span class="keyword">virtual</span> StkFloat <a class="code" href="classDelay.html#a11">tick</a>(StkFloat sample);
<a name="l00088"></a>00088
<a name="l00090"></a>00090
<a name="l00096"></a>00096 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classDelay.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="keyword">protected</span>:
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="comment">// This function must be implemented in all subclasses. It is used</span>
<a name="l00101"></a>00101 <span class="comment">// to get around a C++ problem with overloaded virtual functions.</span>
<a name="l00102"></a>00102 <span class="keyword">virtual</span> StkFloat computeSample( StkFloat input );
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outPoint_;
<a name="l00106"></a>00106 StkFloat delay_;
<a name="l00107"></a>00107 };
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="preprocessor">#endif</span>
<a name="l00110"></a>00110 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00073"></a><a class="code" href="classstk_1_1Delay.html#2433e3246551f4fdf1366884cd2ae426">00073</a> StkFloat <a class="code" href="classstk_1_1Delay.html#2433e3246551f4fdf1366884cd2ae426" title="Return the value that will be output by the next call to tick().">nextOut</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> inputs_[outPoint_]; };
<a name="l00074"></a>00074
<a name="l00076"></a>00076 StkFloat <a class="code" href="classstk_1_1Delay.html#240830690cd8fa26e0604fd82c65dda1" title="Calculate and return the signal energy in the delay-line.">energy</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00077"></a>00077
<a name="l00079"></a>00079 StkFloat <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00080"></a>00080
<a name="l00082"></a>00082
<a name="l00090"></a>00090 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00091"></a>00091
<a name="l00093"></a>00093
<a name="l00101"></a>00101 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="keyword">protected</span>:
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
<a name="l00106"></a>00106 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outPoint_;
<a name="l00107"></a>00107 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay_;
<a name="l00108"></a>00108 };
<a name="l00109"></a>00109
<a name="l00110"></a><a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9">00110</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">Delay :: tick</a>( StkFloat input )
<a name="l00111"></a>00111 {
<a name="l00112"></a>00112 inputs_[inPoint_++] = input * gain_;
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="comment">// Check for end condition</span>
<a name="l00115"></a>00115 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00116"></a>00116 inPoint_ = 0;
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="comment">// Read out next value</span>
<a name="l00119"></a>00119 lastFrame_[0] = inputs_[outPoint_++];
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00122"></a>00122 outPoint_ = 0;
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a><a class="code" href="classstk_1_1Delay.html#93fe8e45acb933889be812f35810f977">00127</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">Delay :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00128"></a>00128 {
<a name="l00129"></a>00129 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00130"></a>00130 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00131"></a>00131 errorString_ &lt;&lt; <span class="stringliteral">"Delay::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00132"></a>00132 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00133"></a>00133 }
<a name="l00134"></a>00134 <span class="preprocessor">#endif</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span>
<a name="l00136"></a>00136 StkFloat *samples = &amp;frames[channel];
<a name="l00137"></a>00137 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00138"></a>00138 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00139"></a>00139 inputs_[inPoint_++] = *samples * gain_;
<a name="l00140"></a>00140 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00141"></a>00141 *samples = inputs_[outPoint_++];
<a name="l00142"></a>00142 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00143"></a>00143 }
<a name="l00144"></a>00144
<a name="l00145"></a>00145 lastFrame_[0] = *(samples-hop);
<a name="l00146"></a>00146 <span class="keywordflow">return</span> frames;
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148
<a name="l00149"></a><a class="code" href="classstk_1_1Delay.html#de0d544e45e535fd792fe70a2a22da6f">00149</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">Delay :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00150"></a>00150 {
<a name="l00151"></a>00151 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00153"></a>00153 errorString_ &lt;&lt; <span class="stringliteral">"Delay::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00154"></a>00154 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00155"></a>00155 }
<a name="l00156"></a>00156 <span class="preprocessor">#endif</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span>
<a name="l00158"></a>00158 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00159"></a>00159 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00160"></a>00160 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00161"></a>00161 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00162"></a>00162 inputs_[inPoint_++] = *iSamples * gain_;
<a name="l00163"></a>00163 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00164"></a>00164 *oSamples = inputs_[outPoint_++];
<a name="l00165"></a>00165 <span class="keywordflow">if</span> ( outPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_ = 0;
<a name="l00166"></a>00166 }
<a name="l00167"></a>00167
<a name="l00168"></a>00168 lastFrame_[0] = *(oSamples-oHop);
<a name="l00169"></a>00169 <span class="keywordflow">return</span> iFrames;
<a name="l00170"></a>00170 }
<a name="l00171"></a>00171
<a name="l00172"></a>00172 } <span class="comment">// stk namespace</span>
<a name="l00173"></a>00173
<a name="l00174"></a>00174 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,52 +8,82 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Drummer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00016"></a>00016 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef STK_DRUMMER_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_DRUMMER_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "FileWvIn.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_NUMWAVES = 11;
<a name="l00026"></a>00026 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_POLYPHONY = 4;
<a name="l00027"></a>00027
<a name="l00028"></a><a class="code" href="classDrummer.html">00028</a> <span class="keyword">class </span><a class="code" href="classDrummer.html">Drummer</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00029"></a>00029 {
<a name="l00030"></a>00030 <span class="keyword">public</span>:
<a name="l00032"></a>00032
<a name="l00035"></a>00035 <a class="code" href="classDrummer.html#a0">Drummer</a>();
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classDrummer.html#a1">~Drummer</a>();
<a name="l00039"></a>00039
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Drummer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_DRUMMER_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_DRUMMER_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "FileWvIn.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_NUMWAVES = 11;
<a name="l00028"></a>00028 <span class="keyword">const</span> <span class="keywordtype">int</span> DRUM_POLYPHONY = 4;
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classstk_1_1Drummer.html">00030</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Drummer.html" title="STK drum sample player class.">Drummer</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00034"></a>00034
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1Drummer.html#f5262dd2b29ae453323c0a514d79d26a" title="Class constructor.">Drummer</a>( <span class="keywordtype">void</span> );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1Drummer.html#365fb4b2c501129f2efd6edfad1f5453" title="Class destructor.">~Drummer</a>( <span class="keywordtype">void</span> );
<a name="l00041"></a>00041
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classDrummer.html#a2">noteOn</a>(StkFloat instrument, StkFloat amplitude);
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classDrummer.html#a3">noteOff</a>(StkFloat amplitude);
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keyword">protected</span>:
<a name="l00043"></a>00043
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Drummer.html#5ea03a0ef9a3db02942799b5cbca2ea2" title="Start a note with the given drum type and amplitude.">noteOn</a>( StkFloat instrument, StkFloat amplitude );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Drummer.html#a735313fbdf7f1201fcb167874ecc7cc" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00053"></a>00053
<a name="l00054"></a>00054 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <a class="code" href="classFileWvIn.html">FileWvIn</a> waves_[DRUM_POLYPHONY];
<a name="l00057"></a>00057 <a class="code" href="classOnePole.html">OnePole</a> filters_[DRUM_POLYPHONY];
<a name="l00058"></a>00058 std::vector&lt;int&gt; soundOrder_;
<a name="l00059"></a>00059 std::vector&lt;int&gt; soundNumber_;
<a name="l00060"></a>00060 <span class="keywordtype">int</span> nSounding_;
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00055"></a>00055 StkFloat <a class="code" href="classstk_1_1Drummer.html#d65c63bfad0ffac03db7f56cf706e4ba" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="keyword">protected</span>:
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <a class="code" href="classstk_1_1FileWvIn.html" title="STK audio file input class.">FileWvIn</a> waves_[DRUM_POLYPHONY];
<a name="l00060"></a>00060 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filters_[DRUM_POLYPHONY];
<a name="l00061"></a>00061 std::vector&lt;int&gt; soundOrder_;
<a name="l00062"></a>00062 std::vector&lt;int&gt; soundNumber_;
<a name="l00063"></a>00063 <span class="keywordtype">int</span> nSounding_;
<a name="l00064"></a>00064 };
<a name="l00065"></a>00065
<a name="l00066"></a><a class="code" href="classstk_1_1Drummer.html#d65c63bfad0ffac03db7f56cf706e4ba">00066</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Drummer.html#d65c63bfad0ffac03db7f56cf706e4ba" title="Compute and return one output sample.">Drummer :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00067"></a>00067 {
<a name="l00068"></a>00068 lastFrame_[0] = 0.0;
<a name="l00069"></a>00069 <span class="keywordflow">if</span> ( nSounding_ == 0 ) <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i=0; i&lt;DRUM_POLYPHONY; i++ ) {
<a name="l00072"></a>00072 <span class="keywordflow">if</span> ( soundOrder_[i] &gt;= 0 ) {
<a name="l00073"></a>00073 <span class="keywordflow">if</span> ( waves_[i].isFinished() ) {
<a name="l00074"></a>00074 <span class="comment">// Re-order the list.</span>
<a name="l00075"></a>00075 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> j=0; j&lt;DRUM_POLYPHONY; j++ ) {
<a name="l00076"></a>00076 <span class="keywordflow">if</span> ( soundOrder_[j] &gt; soundOrder_[i] )
<a name="l00077"></a>00077 soundOrder_[j] -= 1;
<a name="l00078"></a>00078 }
<a name="l00079"></a>00079 soundOrder_[i] = -1;
<a name="l00080"></a>00080 nSounding_--;
<a name="l00081"></a>00081 }
<a name="l00082"></a>00082 <span class="keywordflow">else</span>
<a name="l00083"></a>00083 lastFrame_[0] += filters_[i].<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( waves_[i].<a class="code" href="classstk_1_1Drummer.html#d65c63bfad0ffac03db7f56cf706e4ba" title="Compute and return one output sample.">tick</a>() );
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085 }
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00088"></a>00088 }
<a name="l00089"></a>00089
<a name="l00090"></a>00090 } <span class="comment">// stk namespace</span>
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,48 +8,105 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Echo.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Echo.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ECHO_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ECHO_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="preprocessor">#ifndef STK_ECHO_H</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define STK_ECHO_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span>
<a name="l00014"></a>00014 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00016"></a>00016
<a name="l00017"></a><a class="code" href="classEcho.html">00017</a> <span class="keyword">class </span><a class="code" href="classEcho.html">Echo</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00018"></a>00018 {
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021
<a name="l00024"></a>00024 <a class="code" href="classEcho.html#a0">Echo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maximumDelay = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) <a class="code" href="classStk.html#e0">Stk::sampleRate</a>() );
<a name="l00025"></a>00025
<a name="l00027"></a>00027 <a class="code" href="classEcho.html#a1">~Echo</a>();
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a2">clear</a>();
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a3">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classEcho.html#a4">setDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keyword">protected</span>:
<a name="l00017"></a>00017 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018
<a name="l00019"></a><a class="code" href="classstk_1_1Echo.html">00019</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Echo.html" title="STK echo effect class.">Echo</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00020"></a>00020 {
<a name="l00021"></a>00021 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00026"></a>00026 <a class="code" href="classstk_1_1Echo.html#5f3320986d5c9b02ad10663ff11b6505" title="Class constructor, taking the longest desired delay length (one second default value)...">Echo</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maximumDelay = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>() );
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Echo.html#253e0f8e4c628b431fdfcb6d880548c2" title="Reset and clear all internal state.">clear</a>();
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Echo.html#421a6f5f06f8e7df09edd179d397da7d" title="Set the maximum delay line length in samples.">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Echo.html#e58ea12a2864481cb7049c10810867ce" title="Set the delay line length in samples.">setDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00036"></a>00036
<a name="l00038"></a><a class="code" href="classstk_1_1Echo.html#00a2a5949133a06680b026db7b21cc51">00038</a> StkFloat <a class="code" href="classstk_1_1Echo.html#00a2a5949133a06680b026db7b21cc51" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00039"></a>00039
<a name="l00040"></a>00040 StkFloat computeSample( StkFloat input );
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <a class="code" href="classDelay.html">Delay</a> delayLine_;
<a name="l00043"></a>00043 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00041"></a>00041 StkFloat <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">tick</a>( StkFloat input );
<a name="l00042"></a>00042
<a name="l00044"></a>00044
<a name="l00045"></a>00045 };
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00052"></a>00052 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00053"></a>00053
<a name="l00055"></a>00055
<a name="l00063"></a>00063 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keyword">protected</span>:
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> delayLine_;
<a name="l00068"></a>00068 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00069"></a>00069
<a name="l00070"></a>00070 };
<a name="l00071"></a>00071
<a name="l00072"></a><a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91">00072</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">Echo :: tick</a>( StkFloat input )
<a name="l00073"></a>00073 {
<a name="l00074"></a>00074 lastFrame_[0] = effectMix_ * ( delayLine_.<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( input ) - input ) + input;
<a name="l00075"></a>00075 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00076"></a>00076 }
<a name="l00077"></a>00077
<a name="l00078"></a><a class="code" href="classstk_1_1Echo.html#efe863b7aa43d6a94c2a56bd31a30e7d">00078</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">Echo :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00079"></a>00079 {
<a name="l00080"></a>00080 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00082"></a>00082 errorString_ &lt;&lt; <span class="stringliteral">"Echo::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00083"></a>00083 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085 <span class="preprocessor">#endif</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span>
<a name="l00087"></a>00087 StkFloat *samples = &amp;frames[channel];
<a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00089"></a>00089 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00090"></a>00090 *samples = effectMix_ * ( delayLine_.<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( *samples ) - *samples ) + *samples;
<a name="l00091"></a>00091 }
<a name="l00092"></a>00092
<a name="l00093"></a>00093 lastFrame_[0] = *(samples-hop);
<a name="l00094"></a>00094 <span class="keywordflow">return</span> frames;
<a name="l00095"></a>00095 }
<a name="l00096"></a>00096
<a name="l00097"></a><a class="code" href="classstk_1_1Echo.html#1778a7da06b222afbe9281c886f678d8">00097</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Echo.html#4cfb2c2dd350717cd8151749d3a32f91" title="Input one sample to the effect and return one output.">Echo :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00098"></a>00098 {
<a name="l00099"></a>00099 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00101"></a>00101 errorString_ &lt;&lt; <span class="stringliteral">"Echo::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00102"></a>00102 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104 <span class="preprocessor">#endif</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span>
<a name="l00106"></a>00106 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00107"></a>00107 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00108"></a>00108 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00109"></a>00109 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00110"></a>00110 *oSamples = effectMix_ * ( delayLine_.<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( *iSamples ) - *iSamples ) + *iSamples;
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112
<a name="l00113"></a>00113 lastFrame_[0] = *(oSamples-oHop);
<a name="l00114"></a>00114 <span class="keywordflow">return</span> iFrames;
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116
<a name="l00117"></a>00117 } <span class="comment">// stk namespace</span>
<a name="l00118"></a>00118
<a name="l00119"></a>00119 <span class="preprocessor">#endif</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,61 +8,81 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Effect.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#ifndef STK_EFFECT_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_EFFECT_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a><a class="code" href="classEffect.html">00017</a> <span class="keyword">class </span><a class="code" href="classEffect.html">Effect</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00018"></a>00018 {
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021 <a class="code" href="classEffect.html#a0">Effect</a>();
<a name="l00022"></a>00022
<a name="l00024"></a>00024 <span class="keyword">virtual</span> <a class="code" href="classEffect.html#a1">~Effect</a>();
<a name="l00025"></a>00025
<a name="l00027"></a>00027 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEffect.html#a2">clear</a>() = 0;
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keywordtype">void</span> <a class="code" href="classEffect.html#a3">setEffectMix</a>(StkFloat mix);
<a name="l00031"></a>00031
<a name="l00033"></a>00033 StkFloat <a class="code" href="classEffect.html#a4">lastOut</a>() <span class="keyword">const</span>;
<a name="l00034"></a>00034
<a name="l00036"></a>00036 StkFloat <a class="code" href="classEffect.html#a5">lastOutLeft</a>() <span class="keyword">const</span>;
<a name="l00037"></a>00037
<a name="l00039"></a>00039 StkFloat <a class="code" href="classEffect.html#a6">lastOutRight</a>() <span class="keyword">const</span>;
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Effect.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_EFFECT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_EFFECT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classstk_1_1Effect.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00025"></a><a class="code" href="classstk_1_1Effect.html#f6eb27819aed132dd1edf2ce9640893e">00025</a> <a class="code" href="classstk_1_1Effect.html#f6eb27819aed132dd1edf2ce9640893e" title="Class constructor.">Effect</a>( <span class="keywordtype">void</span> ) { lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( 1, 1, 0.0 ); };
<a name="l00026"></a>00026
<a name="l00028"></a><a class="code" href="classstk_1_1Effect.html#bfdef9ce644c251607acfd183e3d7f7b">00028</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Effect.html#bfdef9ce644c251607acfd183e3d7f7b" title="Return the number of output channels for the class.">channelsOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(); };
<a name="l00029"></a>00029
<a name="l00031"></a><a class="code" href="classstk_1_1Effect.html#3d7e2b8942bf7adcc71dfc6dccbb7aa0">00031</a> <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Effect.html#3d7e2b8942bf7adcc71dfc6dccbb7aa0" title="Return an StkFrames reference to the last output sample frame.">lastFrame</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Effect.html#0598128d1edc97729951310cc5df5171" title="Reset and clear all internal state.">clear</a>() = 0;
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Effect.html#b4facbc9b317f18c139577e52fd69c3d" title="Set the mixture of input and &amp;quot;effected&amp;quot; levels in the output (0.0 = input...">setEffectMix</a>( StkFloat mix );
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="keyword">protected</span>:
<a name="l00040"></a>00040
<a name="l00042"></a>00042 StkFloat <a class="code" href="classEffect.html#a7">tick</a>( StkFloat input );
<a name="l00041"></a>00041 <span class="comment">// Returns true if argument value is prime.</span>
<a name="l00042"></a>00042 <span class="keywordtype">bool</span> isPrime( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number );
<a name="l00043"></a>00043
<a name="l00045"></a>00045
<a name="l00051"></a>00051 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classEffect.html#a7">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="keyword">protected</span>:
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="comment">// This abstract function must be implemented in all subclasses.</span>
<a name="l00056"></a>00056 <span class="comment">// It is used to get around a C++ problem with overloaded virtual</span>
<a name="l00057"></a>00057 <span class="comment">// functions.</span>
<a name="l00058"></a>00058 <span class="keyword">virtual</span> StkFloat computeSample( StkFloat input ) = 0;
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="comment">// Returns true if argument value is prime.</span>
<a name="l00061"></a>00061 <span class="keywordtype">bool</span> isPrime( <span class="keywordtype">int</span> number );
<a name="l00062"></a>00062
<a name="l00063"></a>00063 StkFloat lastOutput_[2];
<a name="l00064"></a>00064 StkFloat effectMix_;
<a name="l00065"></a>00065
<a name="l00066"></a>00066 };
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00044"></a>00044 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> lastFrame_;
<a name="l00045"></a>00045 StkFloat effectMix_;
<a name="l00046"></a>00046
<a name="l00047"></a>00047 };
<a name="l00048"></a>00048
<a name="l00049"></a><a class="code" href="classstk_1_1Effect.html#b4facbc9b317f18c139577e52fd69c3d">00049</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Effect.html#b4facbc9b317f18c139577e52fd69c3d" title="Set the mixture of input and &amp;quot;effected&amp;quot; levels in the output (0.0 = input...">Effect :: setEffectMix</a>( StkFloat mix )
<a name="l00050"></a>00050 {
<a name="l00051"></a>00051 <span class="keywordflow">if</span> ( mix &lt; 0.0 ) {
<a name="l00052"></a>00052 errorString_ &lt;&lt; <span class="stringliteral">"Effect::setEffectMix: mix parameter is less than zero ... setting to zero!"</span>;
<a name="l00053"></a>00053 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00054"></a>00054 effectMix_ = 0.0;
<a name="l00055"></a>00055 }
<a name="l00056"></a>00056 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( mix &gt; 1.0 ) {
<a name="l00057"></a>00057 errorString_ &lt;&lt; <span class="stringliteral">"Effect::setEffectMix: mix parameter is greater than 1.0 ... setting to one!"</span>;
<a name="l00058"></a>00058 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00059"></a>00059 effectMix_ = 1.0;
<a name="l00060"></a>00060 }
<a name="l00061"></a>00061 <span class="keywordflow">else</span>
<a name="l00062"></a>00062 effectMix_ = mix;
<a name="l00063"></a>00063 }
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keyword">inline</span> <span class="keywordtype">bool</span> Effect :: isPrime( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> number )
<a name="l00066"></a>00066 {
<a name="l00067"></a>00067 <span class="keywordflow">if</span> ( number == 2 ) <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00068"></a>00068 <span class="keywordflow">if</span> ( number &amp; 1 ) {
<a name="l00069"></a>00069 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i=3; i&lt;(int)sqrt((<span class="keywordtype">double</span>)number)+1; i+=2 )
<a name="l00070"></a>00070 <span class="keywordflow">if</span> ( (number % i) == 0 ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00071"></a>00071 <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// prime</span>
<a name="l00072"></a>00072 }
<a name="l00073"></a>00073 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// even</span>
<a name="l00074"></a>00074 }
<a name="l00075"></a>00075
<a name="l00076"></a>00076 } <span class="comment">// stk namespace</span>
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
<a name="l00079"></a>00079 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,60 +8,149 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Envelope.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016 <span class="preprocessor">#ifndef STK_ENVELOPE_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_ENVELOPE_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "Generator.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Envelope.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ENVELOPE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ENVELOPE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classEnvelope.html">00021</a> <span class="keyword">class </span><a class="code" href="classEnvelope.html">Envelope</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00021"></a><a class="code" href="classstk_1_1Envelope.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <a class="code" href="classEnvelope.html#a0">Envelope</a>(<span class="keywordtype">void</span>);
<a name="l00026"></a>00026 <a class="code" href="classstk_1_1Envelope.html#86ea29237a8d94c109388654703a0039" title="Default constructor.">Envelope</a>( <span class="keywordtype">void</span> );
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <a class="code" href="classEnvelope.html#a0">Envelope</a>( <span class="keyword">const</span> <a class="code" href="classEnvelope.html">Envelope</a>&amp; e );
<a name="l00029"></a>00029 <a class="code" href="classstk_1_1Envelope.html#64365d24b6cdd3ea3bdcaa1abcbcb60a" title="Class destructor.">~Envelope</a>( <span class="keywordtype">void</span> );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keyword">virtual</span> <a class="code" href="classEnvelope.html#a2">~Envelope</a>(<span class="keywordtype">void</span>);
<a name="l00032"></a>00032 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a>&amp; <a class="code" href="classstk_1_1Envelope.html#42a1acf6a4606163056ad7d4122d2281" title="Assignment operator.">operator= </a>( <span class="keyword">const</span> <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a>&amp; e );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <a class="code" href="classEnvelope.html">Envelope</a>&amp; <a class="code" href="classEnvelope.html#a3">operator= </a>( <span class="keyword">const</span> <a class="code" href="classEnvelope.html">Envelope</a>&amp; e );
<a name="l00035"></a><a class="code" href="classstk_1_1Envelope.html#18cf8f21ef70227bd5cd17f53752bd0f">00035</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#18cf8f21ef70227bd5cd17f53752bd0f" title="Set target = 1.">keyOn</a>( <span class="keywordtype">void</span> ) { this-&gt;<a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">setTarget</a>( 1.0 ); };
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a4">keyOn</a>(<span class="keywordtype">void</span>);
<a name="l00038"></a><a class="code" href="classstk_1_1Envelope.html#9dbefb15f8d64aac3969f77d38791774">00038</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#9dbefb15f8d64aac3969f77d38791774" title="Set target = 0.">keyOff</a>( <span class="keywordtype">void</span> ) { this-&gt;<a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">setTarget</a>( 0.0 ); };
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a5">keyOff</a>(<span class="keywordtype">void</span>);
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#de99b5c7cb974f71f1d2919868d774a0" title="Set the rate.">setRate</a>( StkFloat rate );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a6">setRate</a>(StkFloat rate);
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#deeb1676f9111980a0c1a48a6780c8f7" title="Set the rate based on a time duration.">setTime</a>( StkFloat time );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a7">setTime</a>(StkFloat time);
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">setTarget</a>( StkFloat target );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a8">setTarget</a>(StkFloat target);
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#b8164a90c57616dc8bd55a6e5ba02fb6" title="Set current and target values to value.">setValue</a>( StkFloat value );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classEnvelope.html#a9">setValue</a>(StkFloat value);
<a name="l00053"></a><a class="code" href="classstk_1_1Envelope.html#ddb2084add959a65733805bc2c1c39a9">00053</a> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Envelope.html#ddb2084add959a65733805bc2c1c39a9" title="Return the current envelope state (0 = at target, 1 otherwise).">getState</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> state_; };
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classEnvelope.html#a10">getState</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00056"></a><a class="code" href="classstk_1_1Envelope.html#31044eab6eaf668ba7e74ea17bed109d">00056</a> StkFloat <a class="code" href="classstk_1_1Envelope.html#31044eab6eaf668ba7e74ea17bed109d" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="keyword">protected</span>:
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00061"></a>00061 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00059"></a>00059 StkFloat <a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00060"></a>00060
<a name="l00062"></a>00062
<a name="l00063"></a>00063 StkFloat value_;
<a name="l00064"></a>00064 StkFloat target_;
<a name="l00065"></a>00065 StkFloat rate_;
<a name="l00066"></a>00066 <span class="keywordtype">int</span> state_;
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00069"></a>00069 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="keyword">protected</span>:
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00074"></a>00074
<a name="l00075"></a>00075 StkFloat value_;
<a name="l00076"></a>00076 StkFloat target_;
<a name="l00077"></a>00077 StkFloat rate_;
<a name="l00078"></a>00078 <span class="keywordtype">int</span> state_;
<a name="l00079"></a>00079 };
<a name="l00080"></a>00080
<a name="l00081"></a><a class="code" href="classstk_1_1Envelope.html#de99b5c7cb974f71f1d2919868d774a0">00081</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#de99b5c7cb974f71f1d2919868d774a0" title="Set the rate.">Envelope :: setRate</a>( StkFloat rate )
<a name="l00082"></a>00082 {
<a name="l00083"></a>00083 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( rate &lt; 0.0 ) {
<a name="l00085"></a>00085 errorString_ &lt;&lt; <span class="stringliteral">"Envelope::setRate: negative rates not allowed ... correcting!"</span>;
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00087"></a>00087 rate_ = -rate;
<a name="l00088"></a>00088 }
<a name="l00089"></a>00089 <span class="keywordflow">else</span>
<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span> rate_ = rate;
<a name="l00092"></a>00092 }
<a name="l00093"></a>00093
<a name="l00094"></a><a class="code" href="classstk_1_1Envelope.html#deeb1676f9111980a0c1a48a6780c8f7">00094</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#deeb1676f9111980a0c1a48a6780c8f7" title="Set the rate based on a time duration.">Envelope :: setTime</a>( StkFloat time )
<a name="l00095"></a>00095 {
<a name="l00096"></a>00096 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( time &lt; 0.0 ) {
<a name="l00098"></a>00098 errorString_ &lt;&lt; <span class="stringliteral">"Envelope::setTime: negative times not allowed ... correcting!"</span>;
<a name="l00099"></a>00099 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00100"></a>00100 rate_ = 1.0 / ( -time * <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>() );
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102 <span class="keywordflow">else</span>
<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
<a name="l00104"></a>00104 <span class="preprocessor"></span> rate_ = 1.0 / ( time * <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>() );
<a name="l00105"></a>00105 }
<a name="l00106"></a>00106
<a name="l00107"></a><a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e">00107</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">Envelope :: setTarget</a>( StkFloat target )
<a name="l00108"></a>00108 {
<a name="l00109"></a>00109 target_ = target;
<a name="l00110"></a>00110 <span class="keywordflow">if</span> ( value_ != target_ ) state_ = 1;
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112
<a name="l00113"></a><a class="code" href="classstk_1_1Envelope.html#b8164a90c57616dc8bd55a6e5ba02fb6">00113</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Envelope.html#b8164a90c57616dc8bd55a6e5ba02fb6" title="Set current and target values to value.">Envelope :: setValue</a>( StkFloat value )
<a name="l00114"></a>00114 {
<a name="l00115"></a>00115 state_ = 0;
<a name="l00116"></a>00116 target_ = value;
<a name="l00117"></a>00117 value_ = value;
<a name="l00118"></a>00118 }
<a name="l00119"></a>00119
<a name="l00120"></a><a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601">00120</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">Envelope :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00121"></a>00121 {
<a name="l00122"></a>00122 <span class="keywordflow">if</span> ( state_ ) {
<a name="l00123"></a>00123 <span class="keywordflow">if</span> ( target_ &gt; value_ ) {
<a name="l00124"></a>00124 value_ += rate_;
<a name="l00125"></a>00125 <span class="keywordflow">if</span> ( value_ &gt;= target_ ) {
<a name="l00126"></a>00126 value_ = target_;
<a name="l00127"></a>00127 state_ = 0;
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130 <span class="keywordflow">else</span> {
<a name="l00131"></a>00131 value_ -= rate_;
<a name="l00132"></a>00132 <span class="keywordflow">if</span> ( value_ &lt;= target_ ) {
<a name="l00133"></a>00133 value_ = target_;
<a name="l00134"></a>00134 state_ = 0;
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136 }
<a name="l00137"></a>00137 lastFrame_[0] = value_;
<a name="l00138"></a>00138 }
<a name="l00139"></a>00139
<a name="l00140"></a>00140 <span class="keywordflow">return</span> value_;
<a name="l00141"></a>00141 }
<a name="l00142"></a>00142
<a name="l00143"></a><a class="code" href="classstk_1_1Envelope.html#9341c9dea4fd54c360a4a23254319cf7">00143</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">Envelope :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00144"></a>00144 {
<a name="l00145"></a>00145 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00146"></a>00146 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00147"></a>00147 errorString_ &lt;&lt; <span class="stringliteral">"Envelope::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00148"></a>00148 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00149"></a>00149 }
<a name="l00150"></a>00150 <span class="preprocessor">#endif</span>
<a name="l00151"></a>00151 <span class="preprocessor"></span>
<a name="l00152"></a>00152 StkFloat *samples = &amp;frames[channel];
<a name="l00153"></a>00153 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00154"></a>00154 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00155"></a>00155 *samples = <a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00156"></a>00156
<a name="l00157"></a>00157 <span class="keywordflow">return</span> frames;
<a name="l00158"></a>00158 }
<a name="l00159"></a>00159
<a name="l00160"></a>00160 } <span class="comment">// stk namespace</span>
<a name="l00161"></a>00161
<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,46 +8,77 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FMVoices.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="preprocessor">#ifndef STK_FMVOICES_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_FMVOICES_H</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "FM.h"</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classFMVoices.html">00038</a> <span class="keyword">class </span><a class="code" href="classFMVoices.html">FMVoices</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classFMVoices.html#a0">FMVoices</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classFMVoices.html#a1">~FMVoices</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a2">setFrequency</a>(StkFloat frequency);
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFMVoices.html#a4">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FMVoices.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FMVOICES_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FMVOICES_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00038"></a>00038 <span class="comment">/***************************************************/</span>
<a name="l00039"></a>00039
<a name="l00040"></a><a class="code" href="classstk_1_1FMVoices.html">00040</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FMVoices.html" title="STK singing FM synthesis instrument.">FMVoices</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00041"></a>00041 {
<a name="l00042"></a>00042 <span class="keyword">public</span>:
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <a class="code" href="classstk_1_1FMVoices.html#27d5570c83cad660a53f04d86d01c888" title="Class constructor.">FMVoices</a>( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1FMVoices.html#8ff218d379ec020a38e1bc7203409e37" title="Class destructor.">~FMVoices</a>( <span class="keywordtype">void</span> );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FMVoices.html#f47a92f6892f3a5bef5226d4772fc8cb" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FMVoices.html#f2fd5dd9af61db94ff1cb556e8e5cf4c" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FMVoices.html#24e17888ff4e01edff96d81461d670a8" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00060"></a>00060
<a name="l00061"></a>00061 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keywordtype">int</span> currentVowel_;
<a name="l00064"></a>00064 StkFloat tilt_[3];
<a name="l00065"></a>00065 StkFloat mods_[3];
<a name="l00066"></a>00066 };
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00062"></a>00062 StkFloat <a class="code" href="classstk_1_1FMVoices.html#31111029e36d00230586250df7b4d887" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="keyword">protected</span>:
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="keywordtype">int</span> currentVowel_;
<a name="l00067"></a>00067 StkFloat tilt_[3];
<a name="l00068"></a>00068 StkFloat mods_[3];
<a name="l00069"></a>00069 };
<a name="l00070"></a>00070
<a name="l00071"></a><a class="code" href="classstk_1_1FMVoices.html#31111029e36d00230586250df7b4d887">00071</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1FMVoices.html#31111029e36d00230586250df7b4d887" title="Compute and return one output sample.">FMVoices :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00072"></a>00072 {
<a name="l00073"></a>00073 <span class="keyword">register</span> StkFloat temp, temp2;
<a name="l00074"></a>00074
<a name="l00075"></a>00075 temp = gains_[3] * adsr_[3]-&gt;tick() * waves_[3]-&gt;tick();
<a name="l00076"></a>00076 temp2 = vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * modDepth_ * 0.1;
<a name="l00077"></a>00077
<a name="l00078"></a>00078 waves_[0]-&gt;setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[0]);
<a name="l00079"></a>00079 waves_[1]-&gt;setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[1]);
<a name="l00080"></a>00080 waves_[2]-&gt;setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[2]);
<a name="l00081"></a>00081 waves_[3]-&gt;setFrequency(baseFrequency_ * (1.0 + temp2) * ratios_[3]);
<a name="l00082"></a>00082
<a name="l00083"></a>00083 waves_[0]-&gt;addPhaseOffset(temp * mods_[0]);
<a name="l00084"></a>00084 waves_[1]-&gt;addPhaseOffset(temp * mods_[1]);
<a name="l00085"></a>00085 waves_[2]-&gt;addPhaseOffset(temp * mods_[2]);
<a name="l00086"></a>00086 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00087"></a>00087 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( temp );
<a name="l00088"></a>00088 temp = gains_[0] * tilt_[0] * adsr_[0]-&gt;tick() * waves_[0]-&gt;tick();
<a name="l00089"></a>00089 temp += gains_[1] * tilt_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00090"></a>00090 temp += gains_[2] * tilt_[2] * adsr_[2]-&gt;tick() * waves_[2]-&gt;tick();
<a name="l00091"></a>00091
<a name="l00092"></a>00092 lastFrame_[0] = temp * 0.33;
<a name="l00093"></a>00093 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095
<a name="l00096"></a>00096 } <span class="comment">// stk namespace</span>
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,82 +8,88 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FM.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef STK_FM_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_FM_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "WaveLoop.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "TwoZero.h"</span>
<a name="l00034"></a>00034
<a name="l00035"></a><a class="code" href="classFM.html">00035</a> <span class="keyword">class </span><a class="code" href="classFM.html">FM</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00036"></a>00036 {
<a name="l00037"></a>00037 <span class="keyword">public</span>:
<a name="l00039"></a>00039
<a name="l00042"></a>00042 <a class="code" href="classFM.html#a0">FM</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> operators = 4 );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keyword">virtual</span> <a class="code" href="classFM.html#a1">~FM</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a2">clear</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a3">loadWaves</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **filenames);
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFM.html#a4">setFrequency</a>(StkFloat frequency);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a5">setRatio</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat ratio);
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a6">setGain</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat gain);
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a7">setModulationSpeed</a>(StkFloat mSpeed);
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a8">setModulationDepth</a>(StkFloat mDepth);
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a9">setControl1</a>(StkFloat cVal);
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a10">setControl2</a>(StkFloat cVal);
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a11">keyOn</a>();
<a name="l00076"></a>00076
<a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a12">keyOff</a>();
<a name="l00079"></a>00079
<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="classFM.html#a13">noteOff</a>(StkFloat amplitude);
<a name="l00082"></a>00082
<a name="l00084"></a>00084 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFM.html#a14">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FM.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FM_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FM_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "FileLoop.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "TwoZero.h"</span>
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="keyword">namespace </span>stk {
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classstk_1_1FM.html">00037</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">public</span>:
<a name="l00041"></a>00041
<a name="l00044"></a>00044 <a class="code" href="classstk_1_1FM.html#f4732c22ce00743e1f751880fa07aa15" title="Class constructor, taking the number of wave/envelope operators to control.">FM</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> operators = 4 );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1FM.html#aba7e8bff02d105e146f8b62b20a27b9" title="Class destructor.">~FM</a>( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#c5697f9929afd43379e8720f2f271b2d" title="Reset and clear all wave and envelope states.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#0a32c8327e842bb71ce945024d583941" title="Load the rawwave filenames in waves.">loadWaves</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> **filenames );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#8182c605d51ec623f90f4e07c2b90891" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#58f0898b677750a259036f628ec1a91b" title="Set the frequency ratio for the specified wave.">setRatio</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat ratio );
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#65a8c54556f0c288871876ffad4d9eef" title="Set the gain for the specified wave.">setGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> waveIndex, StkFloat gain );
<a name="l00063"></a>00063
<a name="l00065"></a><a class="code" href="classstk_1_1FM.html#33e5d60131014a12a435c0ef20d104b6">00065</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#33e5d60131014a12a435c0ef20d104b6" title="Set the modulation speed in Hz.">setModulationSpeed</a>( StkFloat mSpeed ) { vibrato_.<a class="code" href="classstk_1_1SineWave.html#1047a43714bc2e40c7e31e8f7e34adbc" title="Set the data interpolation rate based on a looping frequency.">setFrequency</a>( mSpeed ); };
<a name="l00066"></a>00066
<a name="l00068"></a><a class="code" href="classstk_1_1FM.html#11584256f23153551bc13b59518b415a">00068</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#11584256f23153551bc13b59518b415a" title="Set the modulation depth.">setModulationDepth</a>( StkFloat mDepth ) { modDepth_ = mDepth; };
<a name="l00069"></a>00069
<a name="l00071"></a><a class="code" href="classstk_1_1FM.html#0425269a8fc0cc6bb7471d65b54b8a1a">00071</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#0425269a8fc0cc6bb7471d65b54b8a1a" title="Set the value of control1.">setControl1</a>( StkFloat cVal ) { control1_ = cVal * 2.0; };
<a name="l00072"></a>00072
<a name="l00074"></a><a class="code" href="classstk_1_1FM.html#d7e7d7067c8893040ef3bdf8a1fbe9ca">00074</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#d7e7d7067c8893040ef3bdf8a1fbe9ca" title="Set the value of control1.">setControl2</a>( StkFloat cVal ) { control2_ = cVal * 2.0; };
<a name="l00075"></a>00075
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#fc46280177d770404919f20ccf88e4ff" title="Start envelopes toward &amp;quot;on&amp;quot; targets.">keyOn</a>( <span class="keywordtype">void</span> );
<a name="l00078"></a>00078
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#7235e94a153df135330a591511269f7c" title="Start envelopes toward &amp;quot;off&amp;quot; targets.">keyOff</a>( <span class="keywordtype">void</span> );
<a name="l00081"></a>00081
<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#56cc61b1923dba2ff80859df4904d4f9" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00084"></a>00084
<a name="l00086"></a>00086 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FM.html#1db9d177363fb7d8dedb20fa0c9104f1" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> ) = 0;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 std::vector&lt;ADSR *&gt; adsr_;
<a name="l00091"></a>00091 std::vector&lt;WaveLoop *&gt; waves_;
<a name="l00092"></a>00092 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00093"></a>00093 <a class="code" href="classTwoZero.html">TwoZero</a> twozero_;
<a name="l00094"></a>00094 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nOperators_;
<a name="l00095"></a>00095 StkFloat baseFrequency_;
<a name="l00096"></a>00096 std::vector&lt;StkFloat&gt; ratios_;
<a name="l00097"></a>00097 std::vector&lt;StkFloat&gt; gains_;
<a name="l00098"></a>00098 StkFloat modDepth_;
<a name="l00099"></a>00099 StkFloat control1_;
<a name="l00100"></a>00100 StkFloat control2_;
<a name="l00101"></a>00101 StkFloat fmGains_[100];
<a name="l00102"></a>00102 StkFloat fmSusLevels_[16];
<a name="l00103"></a>00103 StkFloat fmAttTimes_[32];
<a name="l00104"></a>00104
<a name="l00105"></a>00105 };
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00089"></a>00089 <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1FM.html#81f351fd8732fd6e686735b7b45a4241" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ) = 0;
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keyword">protected</span>:
<a name="l00092"></a>00092
<a name="l00093"></a>00093 std::vector&lt;ADSR *&gt; adsr_;
<a name="l00094"></a>00094 std::vector&lt;FileLoop *&gt; waves_;
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1TwoZero.html" title="STK two-zero filter class.">TwoZero</a> twozero_;
<a name="l00097"></a>00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nOperators_;
<a name="l00098"></a>00098 StkFloat baseFrequency_;
<a name="l00099"></a>00099 std::vector&lt;StkFloat&gt; ratios_;
<a name="l00100"></a>00100 std::vector&lt;StkFloat&gt; gains_;
<a name="l00101"></a>00101 StkFloat modDepth_;
<a name="l00102"></a>00102 StkFloat control1_;
<a name="l00103"></a>00103 StkFloat control2_;
<a name="l00104"></a>00104 StkFloat fmGains_[100];
<a name="l00105"></a>00105 StkFloat fmSusLevels_[16];
<a name="l00106"></a>00106 StkFloat fmAttTimes_[32];
<a name="l00107"></a>00107
<a name="l00108"></a>00108 };
<a name="l00109"></a>00109
<a name="l00110"></a>00110 } <span class="comment">// stk namespace</span>
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -0,0 +1,95 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FileLoop.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILELOOP_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILELOOP_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FileWvIn.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a><a class="code" href="classstk_1_1FileLoop.html">00026</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FileLoop.html" title="STK file looping / oscillator class.">FileLoop</a> : <span class="keyword">protected</span> <a class="code" href="classstk_1_1FileWvIn.html" title="STK audio file input class.">FileWvIn</a>
<a name="l00027"></a>00027 {
<a name="l00028"></a>00028 <span class="keyword">public</span>:
<a name="l00030"></a>00030 <a class="code" href="classstk_1_1FileLoop.html#0d977aae11d75d0327057add00fa7f84" title="Default constructor.">FileLoop</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <a class="code" href="classstk_1_1FileLoop.html#0d977aae11d75d0327057add00fa7f84" title="Default constructor.">FileLoop</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span>,
<a name="l00034"></a>00034 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1FileLoop.html#b6f0e0f9a5cc9c99627d0e12db007905" title="Class destructor.">~FileLoop</a>( <span class="keywordtype">void</span> );
<a name="l00038"></a>00038
<a name="l00040"></a>00040
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#5905940c0dd046a95ca9c2a1d72983de" title="Open the specified file and load its data.">openFile</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span> );
<a name="l00050"></a>00050
<a name="l00052"></a><a class="code" href="classstk_1_1FileLoop.html#51688a9e84b2f9e5a9c4e62588b65c52">00052</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#51688a9e84b2f9e5a9c4e62588b65c52" title="Close a file if one is open.">closeFile</a>( <span class="keywordtype">void</span> ) { <a class="code" href="classstk_1_1FileLoop.html#51688a9e84b2f9e5a9c4e62588b65c52" title="Close a file if one is open.">FileWvIn::closeFile</a>(); };
<a name="l00053"></a>00053
<a name="l00055"></a><a class="code" href="classstk_1_1FileLoop.html#2c539902d697d0b87334ca7dc4f3ce69">00055</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#2c539902d697d0b87334ca7dc4f3ce69" title="Clear outputs and reset time (file) pointer to zero.">reset</a>( <span class="keywordtype">void</span> ) { <a class="code" href="classstk_1_1FileLoop.html#2c539902d697d0b87334ca7dc4f3ce69" title="Clear outputs and reset time (file) pointer to zero.">FileWvIn::reset</a>(); };
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00062"></a><a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b">00062</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b" title="Normalize data to a maximum of +-1.0.">normalize</a>( <span class="keywordtype">void</span> ) { <a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b" title="Normalize data to a maximum of +-1.0.">FileWvIn::normalize</a>( 1.0 ); };
<a name="l00063"></a>00063
<a name="l00065"></a>00065
<a name="l00069"></a><a class="code" href="classstk_1_1FileLoop.html#a1ac0c8d19f412f66f5fdb89854e2833">00069</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#a1ac0c8d19f412f66f5fdb89854e2833" title="Normalize data to a maximum of +-peak.">normalize</a>( StkFloat peak ) { <a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b" title="Normalize data to a maximum of +-1.0.">FileWvIn::normalize</a>( peak ); };
<a name="l00070"></a>00070
<a name="l00072"></a><a class="code" href="classstk_1_1FileLoop.html#d86d4f64c44a6f2488779fef24fc1ee7">00072</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1FileLoop.html#d86d4f64c44a6f2488779fef24fc1ee7" title="Return the file size in sample frames.">getSize</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); };
<a name="l00073"></a>00073
<a name="l00075"></a>00075
<a name="l00080"></a><a class="code" href="classstk_1_1FileLoop.html#a18006c800c7dac1ddd277c987fe0003">00080</a> StkFloat <a class="code" href="classstk_1_1FileLoop.html#a18006c800c7dac1ddd277c987fe0003" title="Return the input file sample rate in Hz (not the data read rate).">getFileRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classstk_1_1StkFrames.html#4dbbcbdc8db39a803e0861976f7f3522" title="Return the sample rate associated with the StkFrames data.">dataRate</a>(); };
<a name="l00081"></a>00081
<a name="l00083"></a>00083
<a name="l00086"></a>00086 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#13e1f693bc8a29d9051a400087347a3c" title="Set the data read rate in samples. The rate can be negative.">setRate</a>( StkFloat rate );
<a name="l00087"></a>00087
<a name="l00089"></a>00089
<a name="l00095"></a><a class="code" href="classstk_1_1FileLoop.html#ec8f94d8514b266acd83106ed0f24ead">00095</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#ec8f94d8514b266acd83106ed0f24ead" title="Set the data interpolation rate based on a looping frequency.">setFrequency</a>( StkFloat frequency ) { this-&gt;<a class="code" href="classstk_1_1FileLoop.html#13e1f693bc8a29d9051a400087347a3c" title="Set the data read rate in samples. The rate can be negative.">setRate</a>( file_.<a class="code" href="classstk_1_1FileRead.html#6a83d925dd5bd18c4299ea42cc0ea488" title="Return the file size in sample frames.">fileSize</a>() * frequency / <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>() ); };
<a name="l00096"></a>00096
<a name="l00098"></a>00098 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#1986db79fd04b93f4d10b8cdf75bca34" title="Increment the read pointer by time samples, modulo file size.">addTime</a>( StkFloat time );
<a name="l00099"></a>00099
<a name="l00101"></a>00101
<a name="l00106"></a>00106 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#8e24d6f9292a9443fbc21e4e8797f482" title="Increment current read pointer by angle, relative to a looping frequency.">addPhase</a>( StkFloat angle );
<a name="l00107"></a>00107
<a name="l00109"></a>00109
<a name="l00114"></a>00114 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileLoop.html#fe462794ba202dd879d29c39e76ae111" title="Add a phase offset to the current read pointer.">addPhaseOffset</a>( StkFloat angle );
<a name="l00115"></a>00115
<a name="l00117"></a>00117
<a name="l00126"></a><a class="code" href="classstk_1_1FileLoop.html#826b6dd0968c5abd1020a9fe629a4ffd">00126</a> StkFloat <a class="code" href="classstk_1_1FileLoop.html#826b6dd0968c5abd1020a9fe629a4ffd" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) { <span class="keywordflow">return</span> <a class="code" href="classstk_1_1FileLoop.html#826b6dd0968c5abd1020a9fe629a4ffd" title="Return the specified channel value of the last computed frame.">FileWvIn::lastOut</a>( channel ); };
<a name="l00127"></a>00127
<a name="l00129"></a>00129
<a name="l00138"></a>00138 StkFloat <a class="code" href="classstk_1_1FileLoop.html#037b31918134ed1839a8b48de774ab95" title="Compute a sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00139"></a>00139
<a name="l00141"></a>00141
<a name="l00150"></a>00150 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FileLoop.html#037b31918134ed1839a8b48de774ab95" title="Compute a sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00151"></a>00151
<a name="l00152"></a>00152 <span class="keyword">protected</span>:
<a name="l00153"></a>00153
<a name="l00154"></a>00154 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> firstFrame_;
<a name="l00155"></a>00155 StkFloat phaseOffset_;
<a name="l00156"></a>00156
<a name="l00157"></a>00157 };
<a name="l00158"></a>00158
<a name="l00159"></a>00159 } <span class="comment">// stk namespace</span>
<a name="l00160"></a>00160
<a name="l00161"></a>00161 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,80 +8,86 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FileRead.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef STK_FILEREAD_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEREAD_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classFileRead.html">00037</a> <span class="keyword">class </span><a class="code" href="classFileRead.html">FileRead</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">public</span>:
<a name="l00041"></a>00041 <a class="code" href="classFileRead.html#a0">FileRead</a>();
<a name="l00042"></a>00042
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FileRead.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILEREAD_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEREAD_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037 <span class="comment">/***************************************************/</span>
<a name="l00038"></a>00038
<a name="l00039"></a><a class="code" href="classstk_1_1FileRead.html">00039</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FileRead.html" title="STK audio file input class.">FileRead</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041 <span class="keyword">public</span>:
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1FileRead.html#9b8c55af1ca997dd3b808afcc54f3089" title="Default constructor.">FileRead</a>( <span class="keywordtype">void</span> );
<a name="l00044"></a>00044
<a name="l00050"></a>00050 <a class="code" href="classFileRead.html#a0">FileRead</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00051"></a>00051 StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>, StkFloat rate = 22050.0 );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <a class="code" href="classFileRead.html#a2">~FileRead</a>();
<a name="l00055"></a>00055
<a name="l00046"></a>00046
<a name="l00052"></a>00052 <a class="code" href="classstk_1_1FileRead.html#9b8c55af1ca997dd3b808afcc54f3089" title="Default constructor.">FileRead</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00053"></a>00053 StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>, StkFloat rate = 22050.0 );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <a class="code" href="classstk_1_1FileRead.html#24802c0e1846ea9f420f40293af4cde4" title="Class destructor.">~FileRead</a>( <span class="keywordtype">void</span> );
<a name="l00057"></a>00057
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classFileRead.html#a3">open</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00064"></a>00064 StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>, StkFloat rate = 22050.0 );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classFileRead.html#a4">close</a>( <span class="keywordtype">void</span> );
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> <a class="code" href="classFileRead.html#a5">isOpen</a>( <span class="keywordtype">void</span> );
<a name="l00071"></a>00071
<a name="l00073"></a><a class="code" href="classFileRead.html#a6">00073</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classFileRead.html#a6">fileSize</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fileSize_; };
<a name="l00074"></a>00074
<a name="l00076"></a><a class="code" href="classFileRead.html#a7">00076</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classFileRead.html#a7">channels</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> channels_; };
<a name="l00077"></a>00077
<a name="l00059"></a>00059
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileRead.html#cc11b53871e05af1b0342e2cc1fc3157" title="Open the specified file and determine its formatting.">open</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00066"></a>00066 StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>, StkFloat rate = 22050.0 );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileRead.html#56d09169c0cca8623823579c7f80808a" title="If a file is open, close it.">close</a>( <span class="keywordtype">void</span> );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1FileRead.html#3f30ed2a9f45493f0369aa2edbf38f70" title="Returns true if a file is currently open.">isOpen</a>( <span class="keywordtype">void</span> );
<a name="l00073"></a>00073
<a name="l00075"></a><a class="code" href="classstk_1_1FileRead.html#6a83d925dd5bd18c4299ea42cc0ea488">00075</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1FileRead.html#6a83d925dd5bd18c4299ea42cc0ea488" title="Return the file size in sample frames.">fileSize</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fileSize_; };
<a name="l00076"></a>00076
<a name="l00078"></a><a class="code" href="classstk_1_1FileRead.html#4c0c35f1817a4984b325967f1e7bcd81">00078</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1FileRead.html#4c0c35f1817a4984b325967f1e7bcd81" title="Return the number of audio channels in the file.">channels</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> channels_; };
<a name="l00079"></a>00079
<a name="l00084"></a><a class="code" href="classFileRead.html#a8">00084</a> StkFloat <a class="code" href="classFileRead.html#a8">fileRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fileRate_; };
<a name="l00085"></a>00085
<a name="l00081"></a>00081
<a name="l00086"></a><a class="code" href="classstk_1_1FileRead.html#7d6ba525b2f8ae693d953cb7f4b7c199">00086</a> StkFloat <a class="code" href="classstk_1_1FileRead.html#7d6ba525b2f8ae693d953cb7f4b7c199" title="Return the file sample rate in Hz.">fileRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fileRate_; };
<a name="l00087"></a>00087
<a name="l00099"></a>00099 <span class="keywordtype">void</span> <a class="code" href="classFileRead.html#a9">read</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> startFrame = 0, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span> );
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="keyword">protected</span>:
<a name="l00089"></a>00089
<a name="l00101"></a>00101 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileRead.html#8eefe5d1479789c02ac2dfa76ba143f8" title="Read sample frames from the file into an StkFrames object.">read</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> startFrame = 0, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span> );
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="comment">// Get STK RAW file information.</span>
<a name="l00104"></a>00104 <span class="keywordtype">bool</span> getRawInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels,
<a name="l00105"></a>00105 StkFormat format, StkFloat rate );
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="comment">// Get WAV file header information.</span>
<a name="l00108"></a>00108 <span class="keywordtype">bool</span> getWavInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="comment">// Get SND (AU) file header information.</span>
<a name="l00111"></a>00111 <span class="keywordtype">bool</span> getSndInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00112"></a>00112
<a name="l00113"></a>00113 <span class="comment">// Get AIFF file header information.</span>
<a name="l00114"></a>00114 <span class="keywordtype">bool</span> getAifInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="comment">// Get MAT-file header information.</span>
<a name="l00117"></a>00117 <span class="keywordtype">bool</span> getMatInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00118"></a>00118
<a name="l00119"></a>00119 FILE *fd_;
<a name="l00120"></a>00120 <span class="keywordtype">bool</span> byteswap_;
<a name="l00121"></a>00121 <span class="keywordtype">bool</span> wavFile_;
<a name="l00122"></a>00122 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fileSize_;
<a name="l00123"></a>00123 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dataOffset_;
<a name="l00124"></a>00124 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
<a name="l00125"></a>00125 StkFormat dataType_;
<a name="l00126"></a>00126 StkFloat fileRate_;
<a name="l00127"></a>00127 };
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00103"></a>00103 <span class="keyword">protected</span>:
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="comment">// Get STK RAW file information.</span>
<a name="l00106"></a>00106 <span class="keywordtype">bool</span> getRawInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels,
<a name="l00107"></a>00107 StkFormat format, StkFloat rate );
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="comment">// Get WAV file header information.</span>
<a name="l00110"></a>00110 <span class="keywordtype">bool</span> getWavInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="comment">// Get SND (AU) file header information.</span>
<a name="l00113"></a>00113 <span class="keywordtype">bool</span> getSndInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="comment">// Get AIFF file header information.</span>
<a name="l00116"></a>00116 <span class="keywordtype">bool</span> getAifInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="comment">// Get MAT-file header information.</span>
<a name="l00119"></a>00119 <span class="keywordtype">bool</span> getMatInfo( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00120"></a>00120
<a name="l00121"></a>00121 FILE *fd_;
<a name="l00122"></a>00122 <span class="keywordtype">bool</span> byteswap_;
<a name="l00123"></a>00123 <span class="keywordtype">bool</span> wavFile_;
<a name="l00124"></a>00124 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fileSize_;
<a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dataOffset_;
<a name="l00126"></a>00126 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
<a name="l00127"></a>00127 StkFormat dataType_;
<a name="l00128"></a>00128 StkFloat fileRate_;
<a name="l00129"></a>00129 };
<a name="l00130"></a>00130
<a name="l00131"></a>00131 } <span class="comment">// stk namespace</span>
<a name="l00132"></a>00132
<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,91 +8,97 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FileWrite.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_FILEWRITE_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWRITE_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classFileWrite.html">00029</a> <span class="keyword">class </span><a class="code" href="classFileWrite.html">FileWrite</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> FILE_TYPE;
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FileWrite.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILEWRITE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWRITE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1FileWrite.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FileWrite.html" title="STK audio file output class.">FileWrite</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00034"></a>00034
<a name="l00035"></a><a class="code" href="classFileWrite.html#s0">00035</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classFileWrite.html#s0">FILE_RAW</a>;
<a name="l00036"></a><a class="code" href="classFileWrite.html#s1">00036</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classFileWrite.html#s1">FILE_WAV</a>;
<a name="l00037"></a><a class="code" href="classFileWrite.html#s2">00037</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classFileWrite.html#s2">FILE_SND</a>;
<a name="l00038"></a><a class="code" href="classFileWrite.html#s3">00038</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classFileWrite.html#s3">FILE_AIF</a>;
<a name="l00039"></a><a class="code" href="classFileWrite.html#s4">00039</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classFileWrite.html#s4">FILE_MAT</a>;
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <a class="code" href="classFileWrite.html#a0">FileWrite</a>();
<a name="l00035"></a>00035 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> FILE_TYPE;
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classstk_1_1FileWrite.html#c9e286cfc8037327eef493439e78f31e">00037</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classstk_1_1FileWrite.html#c9e286cfc8037327eef493439e78f31e">FILE_RAW</a>;
<a name="l00038"></a><a class="code" href="classstk_1_1FileWrite.html#800875bbcac8f137ed94f5606d55f8c6">00038</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classstk_1_1FileWrite.html#800875bbcac8f137ed94f5606d55f8c6">FILE_WAV</a>;
<a name="l00039"></a><a class="code" href="classstk_1_1FileWrite.html#1ae24c549fc9fa2c8ef4a6ff94ccc345">00039</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classstk_1_1FileWrite.html#1ae24c549fc9fa2c8ef4a6ff94ccc345">FILE_SND</a>;
<a name="l00040"></a><a class="code" href="classstk_1_1FileWrite.html#678074f8bfa198627ed8ee9f52a42c0e">00040</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classstk_1_1FileWrite.html#678074f8bfa198627ed8ee9f52a42c0e">FILE_AIF</a>;
<a name="l00041"></a><a class="code" href="classstk_1_1FileWrite.html#d06e073000f613c43c48707c724d104e">00041</a> <span class="keyword">static</span> <span class="keyword">const</span> FILE_TYPE <a class="code" href="classstk_1_1FileWrite.html#d06e073000f613c43c48707c724d104e">FILE_MAT</a>;
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <a class="code" href="classstk_1_1FileWrite.html#b362583b465c41ac0b411722621e9d3d" title="Default constructor.">FileWrite</a>( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00048"></a>00048 <a class="code" href="classFileWrite.html#a0">FileWrite</a>( std::string fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, FILE_TYPE type = <a class="code" href="classFileWrite.html#s1">FILE_WAV</a>, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <a class="code" href="classFileWrite.html#a2">~FileWrite</a>();
<a name="l00052"></a>00052
<a name="l00047"></a>00047
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1FileWrite.html#b362583b465c41ac0b411722621e9d3d" title="Default constructor.">FileWrite</a>( std::string fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, FILE_TYPE type = <a class="code" href="classstk_1_1FileWrite.html#800875bbcac8f137ed94f5606d55f8c6">FILE_WAV</a>, Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a> );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1FileWrite.html#c4da2511c8d0640ec5484f88bd704747" title="Class destructor.">~FileWrite</a>();
<a name="l00054"></a>00054
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classFileWrite.html#a3">open</a>( std::string fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00058"></a>00058 FileWrite::FILE_TYPE type = <a class="code" href="classFileWrite.html#s1">FILE_WAV</a>, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a> );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classFileWrite.html#a4">close</a>( <span class="keywordtype">void</span> );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">bool</span> <a class="code" href="classFileWrite.html#a5">isOpen</a>( <span class="keywordtype">void</span> );
<a name="l00065"></a>00065
<a name="l00056"></a>00056
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWrite.html#7575ddb275c902207b7b6518bb5a4ed9" title="Create a file of the specified type and name and output samples to it in the given...">open</a>( std::string fileName, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00060"></a>00060 FileWrite::FILE_TYPE type = <a class="code" href="classstk_1_1FileWrite.html#800875bbcac8f137ed94f5606d55f8c6">FILE_WAV</a>, Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a> );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWrite.html#99a19988a4dd8d608b74421cfb6cbc69" title="If a file is open, write out samples in the queue and then close it.">close</a>( <span class="keywordtype">void</span> );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1FileWrite.html#636436624aa39eb5ba3401a9279a173e" title="Returns true if a file is currently open.">isOpen</a>( <span class="keywordtype">void</span> );
<a name="l00067"></a>00067
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classFileWrite.html#a6">write</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; buffer );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">protected</span>:
<a name="l00069"></a>00069
<a name="l00074"></a>00074 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWrite.html#d33ca8e729c14296af6dce457445832e" title="Write sample frames from the StkFrames object to the file.">write</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; buffer );
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="comment">// Write STK RAW file header.</span>
<a name="l00077"></a>00077 <span class="keywordtype">bool</span> setRawFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="comment">// Write WAV file header.</span>
<a name="l00080"></a>00080 <span class="keywordtype">bool</span> setWavFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="comment">// Close WAV file, updating the header.</span>
<a name="l00083"></a>00083 <span class="keywordtype">void</span> closeWavFile( <span class="keywordtype">void</span> );
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="comment">// Write SND (AU) file header.</span>
<a name="l00086"></a>00086 <span class="keywordtype">bool</span> setSndFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="comment">// Close SND file, updating the header.</span>
<a name="l00089"></a>00089 <span class="keywordtype">void</span> closeSndFile( <span class="keywordtype">void</span> );
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="comment">// Write AIFF file header.</span>
<a name="l00092"></a>00092 <span class="keywordtype">bool</span> setAifFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="comment">// Close AIFF file, updating the header.</span>
<a name="l00095"></a>00095 <span class="keywordtype">void</span> closeAifFile( <span class="keywordtype">void</span> );
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="comment">// Write MAT-file header.</span>
<a name="l00098"></a>00098 <span class="keywordtype">bool</span> setMatFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="comment">// Close MAT-file, updating the header.</span>
<a name="l00101"></a>00101 <span class="keywordtype">void</span> closeMatFile( <span class="keywordtype">void</span> );
<a name="l00102"></a>00102
<a name="l00103"></a>00103 FILE *fd_;
<a name="l00104"></a>00104 FILE_TYPE fileType_;
<a name="l00105"></a>00105 StkFormat dataType_;
<a name="l00106"></a>00106 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
<a name="l00107"></a>00107 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> frameCounter_;
<a name="l00108"></a>00108 <span class="keywordtype">bool</span> byteswap_;
<a name="l00109"></a>00109
<a name="l00110"></a>00110 };
<a name="l00076"></a>00076 <span class="keyword">protected</span>:
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="comment">// Write STK RAW file header.</span>
<a name="l00079"></a>00079 <span class="keywordtype">bool</span> setRawFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="comment">// Write WAV file header.</span>
<a name="l00082"></a>00082 <span class="keywordtype">bool</span> setWavFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="comment">// Close WAV file, updating the header.</span>
<a name="l00085"></a>00085 <span class="keywordtype">void</span> closeWavFile( <span class="keywordtype">void</span> );
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="comment">// Write SND (AU) file header.</span>
<a name="l00088"></a>00088 <span class="keywordtype">bool</span> setSndFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="comment">// Close SND file, updating the header.</span>
<a name="l00091"></a>00091 <span class="keywordtype">void</span> closeSndFile( <span class="keywordtype">void</span> );
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <span class="comment">// Write AIFF file header.</span>
<a name="l00094"></a>00094 <span class="keywordtype">bool</span> setAifFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="comment">// Close AIFF file, updating the header.</span>
<a name="l00097"></a>00097 <span class="keywordtype">void</span> closeAifFile( <span class="keywordtype">void</span> );
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="comment">// Write MAT-file header.</span>
<a name="l00100"></a>00100 <span class="keywordtype">bool</span> setMatFile( <span class="keyword">const</span> <span class="keywordtype">char</span> *fileName );
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="comment">// Close MAT-file, updating the header.</span>
<a name="l00103"></a>00103 <span class="keywordtype">void</span> closeMatFile( <span class="keywordtype">void</span> );
<a name="l00104"></a>00104
<a name="l00105"></a>00105 FILE *fd_;
<a name="l00106"></a>00106 FILE_TYPE fileType_;
<a name="l00107"></a>00107 StkFormat dataType_;
<a name="l00108"></a>00108 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
<a name="l00109"></a>00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> frameCounter_;
<a name="l00110"></a>00110 <span class="keywordtype">bool</span> byteswap_;
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00112"></a>00112 };
<a name="l00113"></a>00113
<a name="l00114"></a>00114 } <span class="comment">// stk namespace</span>
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,84 +8,109 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FileWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <span class="preprocessor">#ifndef STK_FILEWVIN_H</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWVIN_H</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "FileRead.h"</span>
<a name="l00039"></a>00039
<a name="l00040"></a><a class="code" href="classFileWvIn.html">00040</a> <span class="keyword">class </span><a class="code" href="classFileWvIn.html">FileWvIn</a> : <span class="keyword">public</span> <a class="code" href="classWvIn.html">WvIn</a>
<a name="l00041"></a>00041 {
<a name="l00042"></a>00042 <span class="keyword">public</span>:
<a name="l00044"></a>00044 <a class="code" href="classFileWvIn.html#a0">FileWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00045"></a>00045
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FileWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILEWVIN_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWVIN_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "FileRead.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00040"></a>00040 <span class="comment">/***************************************************/</span>
<a name="l00041"></a>00041
<a name="l00042"></a><a class="code" href="classstk_1_1FileWvIn.html">00042</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FileWvIn.html" title="STK audio file input class.">FileWvIn</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvIn.html" title="STK audio input abstract base class.">WvIn</a>
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044 <span class="keyword">public</span>:
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1FileWvIn.html#0562e85c4cb0d1565d9697da966add94" title="Default constructor.">FileWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00047"></a>00047
<a name="l00051"></a>00051 <a class="code" href="classFileWvIn.html#a0">FileWvIn</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span>,
<a name="l00052"></a>00052 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keyword">virtual</span> <a class="code" href="classFileWvIn.html#a2">~FileWvIn</a>();
<a name="l00056"></a>00056
<a name="l00049"></a>00049
<a name="l00053"></a>00053 <a class="code" href="classstk_1_1FileWvIn.html#0562e85c4cb0d1565d9697da966add94" title="Default constructor.">FileWvIn</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span>,
<a name="l00054"></a>00054 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold = 1000000, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize = 1024 );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <a class="code" href="classstk_1_1FileWvIn.html#d63f10df8795ce5cb6348b0bb1ad884e" title="Class destructor.">~FileWvIn</a>( <span class="keywordtype">void</span> );
<a name="l00058"></a>00058
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a3">openFile</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span> );
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a4">closeFile</a>( <span class="keywordtype">void</span> );
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a5">reset</a>( <span class="keywordtype">void</span> );
<a name="l00074"></a>00074
<a name="l00060"></a>00060
<a name="l00069"></a>00069 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#7986664cd986cbacf4fb19e5c77deda1" title="Open the specified file and load its data.">openFile</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>, <span class="keywordtype">bool</span> doNormalize = <span class="keyword">true</span> );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#e586a93b45a979881d9bd6fc1cb364cb" title="Close a file if one is open.">closeFile</a>( <span class="keywordtype">void</span> );
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#c7dfd47e46a083d434e63c9d1b8c3d28" title="Clear outputs and reset time (file) pointer to zero.">reset</a>( <span class="keywordtype">void</span> );
<a name="l00076"></a>00076
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a6">normalize</a>( <span class="keywordtype">void</span> );
<a name="l00081"></a>00081
<a name="l00078"></a>00078
<a name="l00082"></a>00082 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#aecd1950fca3a5513e0efe4e86754b11" title="Normalize data to a maximum of +-1.0.">normalize</a>( <span class="keywordtype">void</span> );
<a name="l00083"></a>00083
<a name="l00087"></a>00087 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a6">normalize</a>( StkFloat peak );
<a name="l00088"></a>00088
<a name="l00090"></a><a class="code" href="classFileWvIn.html#a8">00090</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classFileWvIn.html#a8">getSize</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classStkFrames.html#a13">frames</a>(); };
<a name="l00091"></a>00091
<a name="l00085"></a>00085
<a name="l00089"></a>00089 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#aecd1950fca3a5513e0efe4e86754b11" title="Normalize data to a maximum of +-1.0.">normalize</a>( StkFloat peak );
<a name="l00090"></a>00090
<a name="l00092"></a><a class="code" href="classstk_1_1FileWvIn.html#a8ef94c3ed01af0efc9e968f09207a26">00092</a> <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1FileWvIn.html#a8ef94c3ed01af0efc9e968f09207a26" title="Return the file size in sample frames.">getSize</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); };
<a name="l00093"></a>00093
<a name="l00098"></a><a class="code" href="classFileWvIn.html#a9">00098</a> StkFloat <a class="code" href="classFileWvIn.html#a9">getFileRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classStkFrames.html#a15">dataRate</a>(); };
<a name="l00099"></a>00099
<a name="l00101"></a><a class="code" href="classFileWvIn.html#a10">00101</a> <span class="keywordtype">bool</span> <a class="code" href="classFileWvIn.html#a10">isFinished</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> finished_; };
<a name="l00102"></a>00102
<a name="l00095"></a>00095
<a name="l00100"></a><a class="code" href="classstk_1_1FileWvIn.html#867b7b7fdb60e5194e25d7a85a26ec0b">00100</a> <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1FileWvIn.html#867b7b7fdb60e5194e25d7a85a26ec0b" title="Return the input file sample rate in Hz (not the data read rate).">getFileRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.<a class="code" href="classstk_1_1StkFrames.html#4dbbcbdc8db39a803e0861976f7f3522" title="Return the sample rate associated with the StkFrames data.">dataRate</a>(); };
<a name="l00101"></a>00101
<a name="l00103"></a><a class="code" href="classstk_1_1FileWvIn.html#ca9ad0c12af3323e7bbf877513b0d10b">00103</a> <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1FileWvIn.html#ca9ad0c12af3323e7bbf877513b0d10b" title="Query whether reading is complete.">isFinished</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> finished_; };
<a name="l00104"></a>00104
<a name="l00107"></a>00107 <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a11">setRate</a>( StkFloat rate );
<a name="l00108"></a>00108
<a name="l00106"></a>00106
<a name="l00109"></a>00109 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#acd97ad5f30f9cdc8201b4244aa69901" title="Set the data read rate in samples. The rate can be negative.">setRate</a>( StkFloat rate );
<a name="l00110"></a>00110
<a name="l00113"></a>00113 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a12">addTime</a>( StkFloat time );
<a name="l00114"></a>00114
<a name="l00112"></a>00112
<a name="l00115"></a>00115 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#b2ccf7cc65c36a1ecfbb3b7d5707ea48" title="Increment the read pointer by time samples.">addTime</a>( StkFloat time );
<a name="l00116"></a>00116
<a name="l00122"></a><a class="code" href="classFileWvIn.html#a13">00122</a> <span class="keywordtype">void</span> <a class="code" href="classFileWvIn.html#a13">setInterpolate</a>( <span class="keywordtype">bool</span> doInterpolate ) { interpolate_ = doInterpolate; };
<a name="l00123"></a>00123
<a name="l00124"></a>00124 StkFloat lastOut( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00118"></a>00118
<a name="l00124"></a><a class="code" href="classstk_1_1FileWvIn.html#129c1e0b51497e6b09ad6aa37ad4d969">00124</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvIn.html#129c1e0b51497e6b09ad6aa37ad4d969" title="Turn linear interpolation on/off.">setInterpolate</a>( <span class="keywordtype">bool</span> doInterpolate ) { interpolate_ = doInterpolate; };
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="keyword">protected</span>:
<a name="l00127"></a>00127
<a name="l00128"></a>00128 <span class="keyword">virtual</span> <span class="keywordtype">void</span> computeFrame( <span class="keywordtype">void</span> );
<a name="l00129"></a>00129 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <a class="code" href="classFileRead.html">FileRead</a> file_;
<a name="l00132"></a>00132 <span class="keywordtype">bool</span> finished_;
<a name="l00133"></a>00133 <span class="keywordtype">bool</span> interpolate_;
<a name="l00134"></a>00134 <span class="keywordtype">bool</span> normalizing_;
<a name="l00135"></a>00135 <span class="keywordtype">bool</span> chunking_;
<a name="l00136"></a>00136 StkFloat time_;
<a name="l00137"></a>00137 StkFloat rate_;
<a name="l00138"></a>00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold_;
<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize_;
<a name="l00140"></a>00140 <span class="keywordtype">long</span> chunkPointer_;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 };
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00136"></a>00136 StkFloat <a class="code" href="classstk_1_1FileWvIn.html#d17c12e8d51f90f59f0d0c9f6d626608" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00137"></a>00137
<a name="l00139"></a>00139
<a name="l00148"></a>00148 <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1FileWvIn.html#da668a0bc0bf89e155ef341de00babc2" title="Compute a sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00149"></a>00149
<a name="l00151"></a>00151
<a name="l00159"></a>00159 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FileWvIn.html#da668a0bc0bf89e155ef341de00babc2" title="Compute a sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00160"></a>00160
<a name="l00161"></a>00161 <span class="keyword">protected</span>:
<a name="l00162"></a>00162
<a name="l00163"></a>00163 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00164"></a>00164
<a name="l00165"></a>00165 <a class="code" href="classstk_1_1FileRead.html" title="STK audio file input class.">FileRead</a> file_;
<a name="l00166"></a>00166 <span class="keywordtype">bool</span> finished_;
<a name="l00167"></a>00167 <span class="keywordtype">bool</span> interpolate_;
<a name="l00168"></a>00168 <span class="keywordtype">bool</span> normalizing_;
<a name="l00169"></a>00169 <span class="keywordtype">bool</span> chunking_;
<a name="l00170"></a>00170 StkFloat time_;
<a name="l00171"></a>00171 StkFloat rate_;
<a name="l00172"></a>00172 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkThreshold_;
<a name="l00173"></a>00173 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> chunkSize_;
<a name="l00174"></a>00174 <span class="keywordtype">long</span> chunkPointer_;
<a name="l00175"></a>00175
<a name="l00176"></a>00176 };
<a name="l00177"></a>00177
<a name="l00178"></a><a class="code" href="classstk_1_1FileWvIn.html#d17c12e8d51f90f59f0d0c9f6d626608">00178</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1FileWvIn.html#d17c12e8d51f90f59f0d0c9f6d626608" title="Return the specified channel value of the last computed frame.">FileWvIn :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00179"></a>00179 {
<a name="l00180"></a>00180 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00181"></a>00181 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= data_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00182"></a>00182 errorString_ &lt;&lt; <span class="stringliteral">"FileWvIn::lastOut(): channel argument and soundfile data are incompatible!"</span>;
<a name="l00183"></a>00183 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00184"></a>00184 }
<a name="l00185"></a>00185 <span class="preprocessor">#endif</span>
<a name="l00186"></a>00186 <span class="preprocessor"></span>
<a name="l00187"></a>00187 <span class="keywordflow">if</span> ( finished_ ) <span class="keywordflow">return</span> 0.0;
<a name="l00188"></a>00188 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00189"></a>00189 }
<a name="l00190"></a>00190
<a name="l00191"></a>00191 } <span class="comment">// stk namespace</span>
<a name="l00192"></a>00192
<a name="l00193"></a>00193 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,64 +8,72 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FileWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_FILEWVOUT_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWVOUT_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "FileWrite.h"</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classFileWvOut.html">00030</a> <span class="keyword">class </span><a class="code" href="classFileWvOut.html">FileWvOut</a> : <span class="keyword">public</span> <a class="code" href="classWvOut.html">WvOut</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FileWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILEWVOUT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILEWVOUT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "FileWrite.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a><a class="code" href="classstk_1_1FileWvOut.html">00032</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FileWvOut.html" title="STK audio file output class.">FileWvOut</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvOut.html" title="STK audio output abstract base class.">WvOut</a>
<a name="l00033"></a>00033 {
<a name="l00034"></a>00034 <span class="keyword">public</span>:
<a name="l00035"></a>00035
<a name="l00039"></a>00039 <a class="code" href="classFileWvOut.html#a0">FileWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames = 1024 );
<a name="l00040"></a>00040
<a name="l00037"></a>00037
<a name="l00041"></a>00041 <a class="code" href="classstk_1_1FileWvOut.html#6f0168fca20a3c9d6d5f2baedf03ec1b" title="Default constructor with optional output buffer size argument.">FileWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames = 1024 );
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classFileWvOut.html#a0">FileWvOut</a>( std::string fileName,
<a name="l00046"></a>00046 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00047"></a>00047 FileWrite::FILE_TYPE type = <a class="code" href="classFileWrite.html#s1">FileWrite::FILE_WAV</a>,
<a name="l00048"></a>00048 Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>,
<a name="l00049"></a>00049 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames = 1024 );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keyword">virtual</span> <a class="code" href="classFileWvOut.html#a2">~FileWvOut</a>();
<a name="l00053"></a>00053
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <a class="code" href="classstk_1_1FileWvOut.html#6f0168fca20a3c9d6d5f2baedf03ec1b" title="Default constructor with optional output buffer size argument.">FileWvOut</a>( std::string fileName,
<a name="l00048"></a>00048 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00049"></a>00049 FileWrite::FILE_TYPE type = <a class="code" href="classstk_1_1FileWrite.html#800875bbcac8f137ed94f5606d55f8c6">FileWrite::FILE_WAV</a>,
<a name="l00050"></a>00050 Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>,
<a name="l00051"></a>00051 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames = 1024 );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1FileWvOut.html#dd13d21d51f639961977b63cb481c36e" title="Class destructor.">~FileWvOut</a>();
<a name="l00055"></a>00055
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classFileWvOut.html#a3">openFile</a>( std::string fileName,
<a name="l00061"></a>00061 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels,
<a name="l00062"></a>00062 FileWrite::FILE_TYPE type,
<a name="l00063"></a>00063 Stk::StkFormat format );
<a name="l00064"></a>00064
<a name="l00057"></a>00057
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvOut.html#31dde577d41a65018c3e03001de8d645" title="Open a new file with the specified parameters.">openFile</a>( std::string fileName,
<a name="l00063"></a>00063 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels,
<a name="l00064"></a>00064 FileWrite::FILE_TYPE type,
<a name="l00065"></a>00065 Stk::StkFormat format );
<a name="l00066"></a>00066
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classFileWvOut.html#a4">closeFile</a>( <span class="keywordtype">void</span> );
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="keyword">protected</span>:
<a name="l00068"></a>00068
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvOut.html#54cbced5ce278b0d16fa800e8445103c" title="Close a file if one is open.">closeFile</a>( <span class="keywordtype">void</span> );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keywordtype">void</span> computeSample( <span class="keyword">const</span> StkFloat sample );
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="keywordtype">void</span> computeFrames( <span class="keyword">const</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="keywordtype">void</span> incrementFrame( <span class="keywordtype">void</span> );
<a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvOut.html#9d3505aea3cd3c4d6822f05a2679dc41" title="Output a single sample to all channels in a sample frame.">tick</a>( <span class="keyword">const</span> StkFloat sample );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <a class="code" href="classFileWrite.html">FileWrite</a> file_;
<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames_;
<a name="l00082"></a>00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferIndex_;
<a name="l00083"></a>00083 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iData_;
<a name="l00084"></a>00084
<a name="l00085"></a>00085 };
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00081"></a>00081
<a name="l00087"></a>00087 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FileWvOut.html#9d3505aea3cd3c4d6822f05a2679dc41" title="Output a single sample to all channels in a sample frame.">tick</a>( <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="keyword">protected</span>:
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keywordtype">void</span> incrementFrame( <span class="keywordtype">void</span> );
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1FileWrite.html" title="STK audio file output class.">FileWrite</a> file_;
<a name="l00094"></a>00094 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferFrames_;
<a name="l00095"></a>00095 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferIndex_;
<a name="l00096"></a>00096 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iData_;
<a name="l00097"></a>00097
<a name="l00098"></a>00098 };
<a name="l00099"></a>00099
<a name="l00100"></a>00100 } <span class="comment">// stk namespace</span>
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,67 +8,75 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Filter.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028 <span class="comment">/***************************************************/</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Filter.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FILTER_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILTER_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classstk_1_1Filter.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00025"></a><a class="code" href="classstk_1_1Filter.html#fc70117c0133d4a5d9a651ceb691d7c0">00025</a> <a class="code" href="classstk_1_1Filter.html#fc70117c0133d4a5d9a651ceb691d7c0" title="Class constructor.">Filter</a>( <span class="keywordtype">void</span> ) { gain_ = 1.0; channelsIn_ = 1; lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( 1, 1, 0.0 ); };
<a name="l00026"></a>00026
<a name="l00028"></a><a class="code" href="classstk_1_1Filter.html#48f23ab6613be35e3be8aceaf5adfdd7">00028</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Filter.html#48f23ab6613be35e3be8aceaf5adfdd7" title="Return the number of input channels for the class.">channelsIn</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> channelsIn_; };
<a name="l00029"></a>00029
<a name="l00030"></a>00030 <span class="preprocessor">#ifndef STK_FILTER_H</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define STK_FILTER_H</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00031"></a><a class="code" href="classstk_1_1Filter.html#4f1ed97c9ad8aef32e54b48da03f5275">00031</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Filter.html#4f1ed97c9ad8aef32e54b48da03f5275" title="Return the number of output channels for the class.">channelsOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(); };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Filter.html#670b9cc23ac798d3239cb819e801363c" title="Clears all internal states of the filter.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classFilter.html">00036</a> <span class="keyword">class </span><a class="code" href="classFilter.html">Filter</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classFilter.html#a0">Filter</a>(<span class="keywordtype">void</span>);
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00047"></a>00047 <a class="code" href="classFilter.html#a0">Filter</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients );
<a name="l00037"></a>00037
<a name="l00041"></a><a class="code" href="classstk_1_1Filter.html#827b1bd3a99fa9af408cbd4eb559d212">00041</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Filter.html#827b1bd3a99fa9af408cbd4eb559d212" title="Set the filter gain.">setGain</a>( StkFloat gain ) { gain_ = gain; };
<a name="l00042"></a>00042
<a name="l00044"></a><a class="code" href="classstk_1_1Filter.html#f21e11b72ea59af4585c59600a0980c2">00044</a> StkFloat <a class="code" href="classstk_1_1Filter.html#f21e11b72ea59af4585c59600a0980c2" title="Return the current filter gain.">getGain</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gain_; };
<a name="l00045"></a>00045
<a name="l00047"></a><a class="code" href="classstk_1_1Filter.html#b2d944f649693511dced1df249f0abe6">00047</a> <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Filter.html#b2d944f649693511dced1df249f0abe6" title="Return an StkFrames reference to the last output sample frame.">lastFrame</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_; };
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keyword">virtual</span> <a class="code" href="classFilter.html#a2">~Filter</a>(<span class="keywordtype">void</span>);
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00054"></a>00054
<a name="l00056"></a>00056
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a4">setCoefficients</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00050"></a>00050
<a name="l00058"></a>00058 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Filter.html#3260a238824c4a748ac057b84b7d3f21" title="Take a channel of the StkFrames object as inputs to the filter and replace with corresponding...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) = 0;
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="keyword">protected</span>:
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channelsIn_;
<a name="l00063"></a>00063 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> lastFrame_;
<a name="l00064"></a>00064
<a name="l00066"></a>00066
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a5">setNumerator</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00074"></a>00074
<a name="l00076"></a>00076
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a6">setDenominator</a>( std::vector&lt;StkFloat&gt; &amp;aCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00086"></a>00086
<a name="l00088"></a>00088
<a name="l00092"></a>00092 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFilter.html#a7">setGain</a>(StkFloat gain);
<a name="l00093"></a>00093
<a name="l00095"></a>00095 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00096"></a>00096
<a name="l00098"></a>00098 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00099"></a>00099
<a name="l00101"></a>00101 <span class="keyword">virtual</span> StkFloat <a class="code" href="classFilter.html#a10">tick</a>( StkFloat input );
<a name="l00102"></a>00102
<a name="l00104"></a>00104
<a name="l00110"></a>00110 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFilter.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keyword">protected</span>:
<a name="l00113"></a>00113
<a name="l00114"></a>00114 StkFloat gain_;
<a name="l00115"></a>00115 std::vector&lt;StkFloat&gt; b_;
<a name="l00116"></a>00116 std::vector&lt;StkFloat&gt; a_;
<a name="l00117"></a>00117 std::vector&lt;StkFloat&gt; outputs_;
<a name="l00118"></a>00118 std::vector&lt;StkFloat&gt; inputs_;
<a name="l00119"></a>00119
<a name="l00120"></a>00120 };
<a name="l00121"></a>00121
<a name="l00122"></a>00122 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00065"></a>00065 StkFloat gain_;
<a name="l00066"></a>00066 std::vector&lt;StkFloat&gt; b_;
<a name="l00067"></a>00067 std::vector&lt;StkFloat&gt; a_;
<a name="l00068"></a>00068 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> outputs_;
<a name="l00069"></a>00069 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> inputs_;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a><a class="code" href="classstk_1_1Filter.html#670b9cc23ac798d3239cb819e801363c">00073</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Filter.html#670b9cc23ac798d3239cb819e801363c" title="Clears all internal states of the filter.">Filter :: clear</a>( <span class="keywordtype">void</span> )
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
<a name="l00076"></a>00076 <span class="keywordflow">for</span> ( i=0; i&lt;inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>(); i++ )
<a name="l00077"></a>00077 inputs_[i] = 0.0;
<a name="l00078"></a>00078 <span class="keywordflow">for</span> ( i=0; i&lt;outputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>(); i++ )
<a name="l00079"></a>00079 outputs_[i] = 0.0;
<a name="l00080"></a>00080 <span class="keywordflow">for</span> ( i=0; i&lt;lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>(); i++ )
<a name="l00081"></a>00081 lastFrame_[i] = 0.0;
<a name="l00082"></a>00082 }
<a name="l00083"></a>00083
<a name="l00084"></a>00084 } <span class="comment">// stk namespace</span>
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

131
doc/html/Fir_8h-source.html Normal file
View File

@@ -0,0 +1,131 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Fir.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FIR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FIR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classstk_1_1Fir.html">00030</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Fir.html" title="STK general finite impulse response filter class.">Fir</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00034"></a>00034 <a class="code" href="classstk_1_1Fir.html#4ad986b7f644d3e22e75b0744b2f948a" title="Default constructor creates a zero-order pass-through &amp;quot;filter&amp;quot;.">Fir</a>( <span class="keywordtype">void</span> );
<a name="l00035"></a>00035
<a name="l00037"></a>00037
<a name="l00041"></a>00041 <a class="code" href="classstk_1_1Fir.html#4ad986b7f644d3e22e75b0744b2f948a" title="Default constructor creates a zero-order pass-through &amp;quot;filter&amp;quot;.">Fir</a>( std::vector&lt;StkFloat&gt; &amp;coefficients );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <a class="code" href="classstk_1_1Fir.html#2a9db698672fcac97a77d95f3891b68f" title="Class destructor.">~Fir</a>( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00047"></a>00047
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Fir.html#a3f72042fb8b13e9dcc31acbff4e1672" title="Set filter coefficients.">setCoefficients</a>( std::vector&lt;StkFloat&gt; &amp;coefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00053"></a>00053
<a name="l00055"></a><a class="code" href="classstk_1_1Fir.html#5182288d564977bf172439f6ecaf2377">00055</a> StkFloat <a class="code" href="classstk_1_1Fir.html#5182288d564977bf172439f6ecaf2377" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00056"></a>00056
<a name="l00058"></a>00058 StkFloat <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00069"></a>00069 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00070"></a>00070
<a name="l00072"></a>00072
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keyword">protected</span>:
<a name="l00083"></a>00083
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a><a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793">00086</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">Fir :: tick</a>( StkFloat input )
<a name="l00087"></a>00087 {
<a name="l00088"></a>00088 lastFrame_[0] = 0.0;
<a name="l00089"></a>00089 inputs_[0] = gain_ * input;
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00092"></a>00092 lastFrame_[0] += b_[i] * inputs_[i];
<a name="l00093"></a>00093 inputs_[i] = inputs_[i-1];
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 lastFrame_[0] += b_[0] * inputs_[0];
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099
<a name="l00100"></a><a class="code" href="classstk_1_1Fir.html#602e5ce0cd93f5103796ffd50ed8c988">00100</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">Fir :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00101"></a>00101 {
<a name="l00102"></a>00102 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00104"></a>00104 errorString_ &lt;&lt; <span class="stringliteral">"Fir::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00105"></a>00105 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span>
<a name="l00109"></a>00109 StkFloat *samples = &amp;frames[channel];
<a name="l00110"></a>00110 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00111"></a>00111 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j=0; j&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); j++, samples += hop ) {
<a name="l00112"></a>00112 inputs_[0] = gain_ * *samples;
<a name="l00113"></a>00113 *samples = 0.0;
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="keywordflow">for</span> ( i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00116"></a>00116 *samples += b_[i] * inputs_[i];
<a name="l00117"></a>00117 inputs_[i] = inputs_[i-1];
<a name="l00118"></a>00118 }
<a name="l00119"></a>00119 *samples += b_[0] * inputs_[0];
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
<a name="l00122"></a>00122 lastFrame_[0] = *(samples-hop);
<a name="l00123"></a>00123 <span class="keywordflow">return</span> frames;
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125
<a name="l00126"></a><a class="code" href="classstk_1_1Fir.html#53bcdfc2e9ad757d2ec549529b7a9738">00126</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Fir.html#fc5fd95f6bf72edaf4ee3060ca947793" title="Input one sample to the filter and return one output.">Fir :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00127"></a>00127 {
<a name="l00128"></a>00128 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00129"></a>00129 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00130"></a>00130 errorString_ &lt;&lt; <span class="stringliteral">"Fir::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00131"></a>00131 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span>
<a name="l00135"></a>00135 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00136"></a>00136 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00137"></a>00137 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00138"></a>00138 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j=0; j&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); j++, iSamples += iHop, oSamples += oHop ) {
<a name="l00139"></a>00139 inputs_[0] = gain_ * *iSamples;
<a name="l00140"></a>00140 *oSamples = 0.0;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="keywordflow">for</span> ( i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00143"></a>00143 *oSamples += b_[i] * inputs_[i];
<a name="l00144"></a>00144 inputs_[i] = inputs_[i-1];
<a name="l00145"></a>00145 }
<a name="l00146"></a>00146 *oSamples += b_[0] * inputs_[0];
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148
<a name="l00149"></a>00149 lastFrame_[0] = *(oSamples-oHop);
<a name="l00150"></a>00150 <span class="keywordflow">return</span> iFrames;
<a name="l00151"></a>00151 }
<a name="l00152"></a>00152
<a name="l00153"></a>00153 } <span class="comment">// stk namespace</span>
<a name="l00154"></a>00154
<a name="l00155"></a>00155 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,82 +8,109 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Flute.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef STK_FLUTE_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define STK_FLUTE_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "JetTable.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classFlute.html">00037</a> <span class="keyword">class </span><a class="code" href="classFlute.html">Flute</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">public</span>:
<a name="l00041"></a>00041
<a name="l00044"></a>00044 <a class="code" href="classFlute.html#a0">Flute</a>(StkFloat lowestFrequency);
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <a class="code" href="classFlute.html#a1">~Flute</a>();
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a2">clear</a>();
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a4">setJetReflection</a>(StkFloat coefficient);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a5">setEndReflection</a>(StkFloat coefficient);
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a6">setJetDelay</a>(StkFloat aRatio);
<a name="l00063"></a>00063
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a7">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00066"></a>00066
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a8">stopBlowing</a>(StkFloat rate);
<a name="l00069"></a>00069
<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a9">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00072"></a>00072
<a name="l00074"></a>00074 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a10">noteOff</a>(StkFloat amplitude);
<a name="l00075"></a>00075
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classFlute.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Flute.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FLUTE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FLUTE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "JetTable.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "PoleZero.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="keyword">namespace </span>stk {
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037 <span class="comment">/***************************************************/</span>
<a name="l00038"></a>00038
<a name="l00039"></a><a class="code" href="classstk_1_1Flute.html">00039</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Flute.html" title="STK flute physical model class.">Flute</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041 <span class="keyword">public</span>:
<a name="l00043"></a>00043
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1Flute.html#9769eef3340651acc31b4997e9985e57" title="Class constructor, taking the lowest desired playing frequency.">Flute</a>( StkFloat lowestFrequency );
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <a class="code" href="classstk_1_1Flute.html#76120aedfc0bab94416917d173f8a74e" title="Class destructor.">~Flute</a>( <span class="keywordtype">void</span> );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#4554fc4feffd469b83d02dd4e5471ffa" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#ea66780681552de9d12af6bb91f297da" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#0732403c66b3667f5f6a8c80e90046e0" title="Set the reflection coefficient for the jet delay (-1.0 - 1.0).">setJetReflection</a>( StkFloat coefficient );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#7c0ef95a3170dafde08b65ee47102969" title="Set the reflection coefficient for the air column delay (-1.0 - 1.0).">setEndReflection</a>( StkFloat coefficient );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#d37a862df945987f91e3164813ce911b" title="Set the length of the jet delay in terms of a ratio of jet delay to air column delay...">setJetDelay</a>( StkFloat aRatio );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#33b58e80c6ebbd5bd45f90a7a1c6a025" title="Apply breath velocity to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#65b8e74b1a99bc8bada4e80ebd512058" title="Decrease breath velocity with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#f76a46645fd6ed5d3c15dc4bcde3d928" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#e371e0d2366ef9fae8d12898204e7b31" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00077"></a>00077
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Flute.html#968b3799338e39df35dcf94fe7ee90a2" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00080"></a>00080
<a name="l00081"></a>00081 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <a class="code" href="classDelayL.html">DelayL</a> jetDelay_;
<a name="l00084"></a>00084 <a class="code" href="classDelayL.html">DelayL</a> boreDelay_;
<a name="l00085"></a>00085 <a class="code" href="classJetTable.html">JetTable</a> jetTable_;
<a name="l00086"></a>00086 <a class="code" href="classOnePole.html">OnePole</a> filter_;
<a name="l00087"></a>00087 <a class="code" href="classPoleZero.html">PoleZero</a> dcBlock_;
<a name="l00088"></a>00088 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00089"></a>00089 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00090"></a>00090 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00091"></a>00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00092"></a>00092 StkFloat lastFrequency_;
<a name="l00093"></a>00093 StkFloat maxPressure_;
<a name="l00094"></a>00094 StkFloat jetReflection_;
<a name="l00095"></a>00095 StkFloat endReflection_;
<a name="l00096"></a>00096 StkFloat noiseGain_;
<a name="l00097"></a>00097 StkFloat vibratoGain_;
<a name="l00098"></a>00098 StkFloat outputGain_;
<a name="l00099"></a>00099 StkFloat jetRatio_;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 };
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00082"></a>00082 StkFloat <a class="code" href="classstk_1_1Flute.html#b8f307f9a26ef2756ec4c0ea05f3acbe" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="keyword">protected</span>:
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> jetDelay_;
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> boreDelay_;
<a name="l00088"></a>00088 <a class="code" href="classstk_1_1JetTable.html" title="STK jet table class.">JetTable</a> jetTable_;
<a name="l00089"></a>00089 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filter_;
<a name="l00090"></a>00090 <a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> dcBlock_;
<a name="l00091"></a>00091 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00092"></a>00092 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00094"></a>00094 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00095"></a>00095 StkFloat lastFrequency_;
<a name="l00096"></a>00096 StkFloat maxPressure_;
<a name="l00097"></a>00097 StkFloat jetReflection_;
<a name="l00098"></a>00098 StkFloat endReflection_;
<a name="l00099"></a>00099 StkFloat noiseGain_;
<a name="l00100"></a>00100 StkFloat vibratoGain_;
<a name="l00101"></a>00101 StkFloat outputGain_;
<a name="l00102"></a>00102 StkFloat jetRatio_;
<a name="l00103"></a>00103
<a name="l00104"></a>00104 };
<a name="l00105"></a>00105
<a name="l00106"></a><a class="code" href="classstk_1_1Flute.html#b8f307f9a26ef2756ec4c0ea05f3acbe">00106</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Flute.html#b8f307f9a26ef2756ec4c0ea05f3acbe" title="Compute and return one output sample.">Flute :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00107"></a>00107 {
<a name="l00108"></a>00108 StkFloat pressureDiff;
<a name="l00109"></a>00109 StkFloat breathPressure;
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="comment">// Calculate the breath pressure (envelope + noise + vibrato)</span>
<a name="l00112"></a>00112 breathPressure = maxPressure_ * adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00113"></a>00113 breathPressure += breathPressure * ( noiseGain_ * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>() + vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() );
<a name="l00114"></a>00114
<a name="l00115"></a>00115 StkFloat temp = filter_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( boreDelay_.<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>() );
<a name="l00116"></a>00116 temp = dcBlock_.<a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( temp ); <span class="comment">// Block DC on reflection.</span>
<a name="l00117"></a>00117
<a name="l00118"></a>00118 pressureDiff = breathPressure - (jetReflection_ * temp);
<a name="l00119"></a>00119 pressureDiff = jetDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( pressureDiff );
<a name="l00120"></a>00120 pressureDiff = jetTable_.<a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">tick</a>( pressureDiff ) + (endReflection_ * temp);
<a name="l00121"></a>00121 lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( pressureDiff );
<a name="l00122"></a>00122
<a name="l00123"></a>00123 lastFrame_[0] *= outputGain_;
<a name="l00124"></a>00124 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 } <span class="comment">// stk namespace</span>
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,65 +8,148 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>FormSwep.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_FORMSWEP_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_FORMSWEP_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "BiQuad.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>FormSwep.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FORMSWEP_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FORMSWEP_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classFormSwep.html">00020</a> <span class="keyword">class </span><a class="code" href="classFormSwep.html">FormSwep</a> : <span class="keyword">public</span> <a class="code" href="classBiQuad.html">BiQuad</a>
<a name="l00020"></a><a class="code" href="classstk_1_1FormSwep.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1FormSwep.html" title="STK sweepable formant filter class.">FormSwep</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classFormSwep.html#a0">FormSwep</a>();
<a name="l00025"></a>00025 <a class="code" href="classstk_1_1FormSwep.html#eb0093d5962acf4b5d582730e8c8bab9" title="Default constructor creates a second-order pass-through filter.">FormSwep</a>( <span class="keywordtype">void</span> );
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classFormSwep.html#a1">~FormSwep</a>();
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1FormSwep.html#c02cd2882f67e8ed9c315dfbf10b05a9" title="Class destructor.">~FormSwep</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a2">setResonance</a>(StkFloat frequency, StkFloat radius);
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a3">setStates</a>(StkFloat frequency, StkFloat radius, StkFloat gain = 1.0);
<a name="l00031"></a><a class="code" href="classstk_1_1FormSwep.html#91096ebd684df25fc36a759f642b2200">00031</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#91096ebd684df25fc36a759f642b2200" title="A function to enable/disable the automatic updating of class data when the STK sample...">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#a6fe339cc937260c46e8c169a58d8529" title="Sets the filter coefficients for a resonance at frequency (in Hz).">setResonance</a>( StkFloat frequency, StkFloat radius );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a4">setTargets</a>(StkFloat frequency, StkFloat radius, StkFloat gain = 1.0);
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#3aede7b088dbe2ca98b3398a5f953ae7" title="Set both the current and target resonance parameters.">setStates</a>( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 );
<a name="l00049"></a>00049
<a name="l00051"></a>00051
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a5">setSweepRate</a>(StkFloat rate);
<a name="l00060"></a>00060
<a name="l00062"></a>00062
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classFormSwep.html#a6">setSweepTime</a>(StkFloat time);
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<a name="l00070"></a>00070
<a name="l00071"></a>00071 StkFloat computeSample( StkFloat input );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="keywordtype">bool</span> dirty_;
<a name="l00074"></a>00074 StkFloat frequency_;
<a name="l00075"></a>00075 StkFloat radius_;
<a name="l00076"></a>00076 StkFloat startFrequency_;
<a name="l00077"></a>00077 StkFloat startRadius_;
<a name="l00078"></a>00078 StkFloat startGain_;
<a name="l00079"></a>00079 StkFloat targetFrequency_;
<a name="l00080"></a>00080 StkFloat targetRadius_;
<a name="l00081"></a>00081 StkFloat targetGain_;
<a name="l00082"></a>00082 StkFloat deltaFrequency_;
<a name="l00083"></a>00083 StkFloat deltaRadius_;
<a name="l00084"></a>00084 StkFloat deltaGain_;
<a name="l00085"></a>00085 StkFloat sweepState_;
<a name="l00086"></a>00086 StkFloat sweepRate_;
<a name="l00087"></a>00087
<a name="l00088"></a>00088 };
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#2f00d2edf80fbf8f74a284c68caf07d6" title="Set target resonance parameters.">setTargets</a>( StkFloat frequency, StkFloat radius, StkFloat gain = 1.0 );
<a name="l00052"></a>00052
<a name="l00054"></a>00054
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#27ba31acdbe8334da1830e14872fd226" title="Set the sweep rate (between 0.0 - 1.0).">setSweepRate</a>( StkFloat rate );
<a name="l00063"></a>00063
<a name="l00065"></a>00065
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1FormSwep.html#242edcbe2a6f88393357b5a5ccec43e8" title="Set the sweep rate in terms of a time value in seconds.">setSweepTime</a>( StkFloat time );
<a name="l00071"></a>00071
<a name="l00073"></a><a class="code" href="classstk_1_1FormSwep.html#3d8405c24e8539b389daf86fccfe5d70">00073</a> StkFloat <a class="code" href="classstk_1_1FormSwep.html#3d8405c24e8539b389daf86fccfe5d70" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00074"></a>00074
<a name="l00076"></a>00076 StkFloat <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( StkFloat input );
<a name="l00077"></a>00077
<a name="l00079"></a>00079
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00088"></a>00088
<a name="l00090"></a>00090
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keyword">protected</span>:
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="keywordtype">bool</span> dirty_;
<a name="l00105"></a>00105 StkFloat frequency_;
<a name="l00106"></a>00106 StkFloat radius_;
<a name="l00107"></a>00107 StkFloat startFrequency_;
<a name="l00108"></a>00108 StkFloat startRadius_;
<a name="l00109"></a>00109 StkFloat startGain_;
<a name="l00110"></a>00110 StkFloat targetFrequency_;
<a name="l00111"></a>00111 StkFloat targetRadius_;
<a name="l00112"></a>00112 StkFloat targetGain_;
<a name="l00113"></a>00113 StkFloat deltaFrequency_;
<a name="l00114"></a>00114 StkFloat deltaRadius_;
<a name="l00115"></a>00115 StkFloat deltaGain_;
<a name="l00116"></a>00116 StkFloat sweepState_;
<a name="l00117"></a>00117 StkFloat sweepRate_;
<a name="l00118"></a>00118
<a name="l00119"></a>00119 };
<a name="l00120"></a>00120
<a name="l00121"></a><a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774">00121</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">FormSwep :: tick</a>( StkFloat input )
<a name="l00122"></a>00122 {
<a name="l00123"></a>00123 <span class="keywordflow">if</span> ( dirty_ ) {
<a name="l00124"></a>00124 sweepState_ += sweepRate_;
<a name="l00125"></a>00125 <span class="keywordflow">if</span> ( sweepState_ &gt;= 1.0 ) {
<a name="l00126"></a>00126 sweepState_ = 1.0;
<a name="l00127"></a>00127 dirty_ = <span class="keyword">false</span>;
<a name="l00128"></a>00128 radius_ = targetRadius_;
<a name="l00129"></a>00129 frequency_ = targetFrequency_;
<a name="l00130"></a>00130 gain_ = targetGain_;
<a name="l00131"></a>00131 }
<a name="l00132"></a>00132 <span class="keywordflow">else</span> {
<a name="l00133"></a>00133 radius_ = startRadius_ + (deltaRadius_ * sweepState_);
<a name="l00134"></a>00134 frequency_ = startFrequency_ + (deltaFrequency_ * sweepState_);
<a name="l00135"></a>00135 gain_ = startGain_ + (deltaGain_ * sweepState_);
<a name="l00136"></a>00136 }
<a name="l00137"></a>00137 this-&gt;<a class="code" href="classstk_1_1FormSwep.html#a6fe339cc937260c46e8c169a58d8529" title="Sets the filter coefficients for a resonance at frequency (in Hz).">setResonance</a>( frequency_, radius_ );
<a name="l00138"></a>00138 }
<a name="l00139"></a>00139
<a name="l00140"></a>00140 inputs_[0] = gain_ * input;
<a name="l00141"></a>00141 lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2];
<a name="l00142"></a>00142 lastFrame_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1];
<a name="l00143"></a>00143 inputs_[2] = inputs_[1];
<a name="l00144"></a>00144 inputs_[1] = inputs_[0];
<a name="l00145"></a>00145 outputs_[2] = outputs_[1];
<a name="l00146"></a>00146 outputs_[1] = lastFrame_[0];
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00149"></a>00149 }
<a name="l00150"></a>00150
<a name="l00151"></a><a class="code" href="classstk_1_1FormSwep.html#27f68dc2bb3fa41322ae49cf59cc9884">00151</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">FormSwep :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00152"></a>00152 {
<a name="l00153"></a>00153 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00154"></a>00154 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00155"></a>00155 errorString_ &lt;&lt; <span class="stringliteral">"FormSwep::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00156"></a>00156 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00157"></a>00157 }
<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>
<a name="l00160"></a>00160 StkFloat *samples = &amp;frames[channel];
<a name="l00161"></a>00161 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00162"></a>00162 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00163"></a>00163 *samples = <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( *samples );
<a name="l00164"></a>00164
<a name="l00165"></a>00165 <span class="keywordflow">return</span> frames;
<a name="l00166"></a>00166 }
<a name="l00167"></a>00167
<a name="l00168"></a><a class="code" href="classstk_1_1FormSwep.html#8a16af2b4e169946cedb8fec2bb1417a">00168</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">FormSwep :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00169"></a>00169 {
<a name="l00170"></a>00170 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00171"></a>00171 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00172"></a>00172 errorString_ &lt;&lt; <span class="stringliteral">"FormSwep::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00173"></a>00173 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00174"></a>00174 }
<a name="l00175"></a>00175 <span class="preprocessor">#endif</span>
<a name="l00176"></a>00176 <span class="preprocessor"></span>
<a name="l00177"></a>00177 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00178"></a>00178 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00179"></a>00179 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00180"></a>00180 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop )
<a name="l00181"></a>00181 *oSamples = <a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( *iSamples );
<a name="l00182"></a>00182
<a name="l00183"></a>00183 <span class="keywordflow">return</span> iFrames;
<a name="l00184"></a>00184 }
<a name="l00185"></a>00185
<a name="l00186"></a>00186 } <span class="comment">// stk namespace</span>
<a name="l00187"></a>00187
<a name="l00188"></a>00188 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,49 +8,45 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Function.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_FUNCTION_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_FUNCTION_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a><a class="code" href="classFunction.html">00018</a> <span class="keyword">class </span><a class="code" href="classFunction.html">Function</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00022"></a>00022 <a class="code" href="classFunction.html#a0">Function</a>();
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <span class="keyword">virtual</span> <a class="code" href="classFunction.html#a1">~Function</a>();
<a name="l00026"></a>00026
<a name="l00028"></a><a class="code" href="classFunction.html#a2">00028</a> <span class="keyword">virtual</span> StkFloat <a class="code" href="classFunction.html#a2">lastOut</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastOutput_; };
<a name="l00029"></a>00029
<a name="l00031"></a>00031 StkFloat <a class="code" href="classFunction.html#a3">tick</a>( StkFloat input );
<a name="l00032"></a>00032
<a name="l00034"></a>00034
<a name="l00040"></a>00040 <span class="keyword">virtual</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classFunction.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <span class="keyword">protected</span>:
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <span class="comment">// This abstract function must be implemented in all subclasses.</span>
<a name="l00045"></a>00045 <span class="comment">// It is used to get around a C++ problem with overloaded virtual</span>
<a name="l00046"></a>00046 <span class="comment">// functions.</span>
<a name="l00047"></a>00047 <span class="keyword">virtual</span> StkFloat computeSample( StkFloat input ) = 0;
<a name="l00048"></a>00048
<a name="l00049"></a>00049 StkFloat lastOutput_;
<a name="l00050"></a>00050
<a name="l00051"></a>00051 };
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Function.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_FUNCTION_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_FUNCTION_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1Function.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Function.html" title="STK abstract function parent class.">Function</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a><a class="code" href="classstk_1_1Function.html#21648ab236a66f3f0155bdb911f9f3c3">00024</a> <a class="code" href="classstk_1_1Function.html#21648ab236a66f3f0155bdb911f9f3c3" title="Class constructor.">Function</a>( <span class="keywordtype">void</span> ) { lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( 1, 1, 0.0 ); };
<a name="l00025"></a>00025
<a name="l00027"></a><a class="code" href="classstk_1_1Function.html#e79bd6d0c9f53693b4ca28948d94fc25">00027</a> StkFloat <a class="code" href="classstk_1_1Function.html#e79bd6d0c9f53693b4ca28948d94fc25" title="Return the last computed output sample.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1Function.html#2545fede83a8afcbe11b3bcf3e4d9f42" title="Take one sample input and compute one sample of output.">tick</a>( StkFloat input ) = 0;
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="keyword">protected</span>:
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> lastFrame_;
<a name="l00035"></a>00035
<a name="l00036"></a>00036 };
<a name="l00037"></a>00037
<a name="l00038"></a>00038 } <span class="comment">// stk namespace</span>
<a name="l00039"></a>00039
<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,49 +8,47 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Generator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_GENERATOR_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_GENERATOR_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00016"></a>00016
<a name="l00017"></a><a class="code" href="classGenerator.html">00017</a> <span class="keyword">class </span><a class="code" href="classGenerator.html">Generator</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00018"></a>00018 {
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021 <a class="code" href="classGenerator.html#a0">Generator</a>( <span class="keywordtype">void</span> );
<a name="l00022"></a>00022
<a name="l00024"></a>00024 <span class="keyword">virtual</span> <a class="code" href="classGenerator.html#a1">~Generator</a>( <span class="keywordtype">void</span> );
<a name="l00025"></a>00025
<a name="l00027"></a><a class="code" href="classGenerator.html#a2">00027</a> <span class="keyword">virtual</span> StkFloat <a class="code" href="classGenerator.html#a2">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastOutput_; };
<a name="l00028"></a>00028
<a name="l00030"></a>00030 StkFloat <a class="code" href="classGenerator.html#a3">tick</a>( <span class="keywordtype">void</span> );
<a name="l00031"></a>00031
<a name="l00033"></a>00033
<a name="l00039"></a>00039 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classGenerator.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00040"></a>00040
<a name="l00041"></a>00041 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Generator.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_GENERATOR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_GENERATOR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1Generator.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a><a class="code" href="classstk_1_1Generator.html#c7f11d287fb903b04985c2f81dbf9a5d">00025</a> <a class="code" href="classstk_1_1Generator.html#c7f11d287fb903b04985c2f81dbf9a5d" title="Class constructor.">Generator</a>( <span class="keywordtype">void</span> ) { lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( 1, 1, 0.0 ); };
<a name="l00026"></a>00026
<a name="l00028"></a><a class="code" href="classstk_1_1Generator.html#9f9de4c495217ef8490a9d2d1fdabe11">00028</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Generator.html#9f9de4c495217ef8490a9d2d1fdabe11" title="Return the number of output channels for the class.">channelsOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(); };
<a name="l00029"></a>00029
<a name="l00031"></a><a class="code" href="classstk_1_1Generator.html#499ad65aa6d939983863ffb922008654">00031</a> <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Generator.html#499ad65aa6d939983863ffb922008654" title="Return an StkFrames reference to the last output sample frame.">lastFrame</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034
<a name="l00041"></a>00041 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Generator.html#86bb0421223cf27e25704d5f27b97425" title="Fill the StkFrames object with computed sample frames, starting at the specified...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) = 0;
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="comment">// This abstract function must be implemented in all subclasses.</span>
<a name="l00044"></a>00044 <span class="comment">// It is used to get around a C++ problem with overloaded virtual</span>
<a name="l00045"></a>00045 <span class="comment">// functions.</span>
<a name="l00046"></a>00046 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> ) = 0;
<a name="l00043"></a>00043 <span class="keyword">protected</span>:
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> lastFrame_;
<a name="l00046"></a>00046 };
<a name="l00047"></a>00047
<a name="l00048"></a>00048 StkFloat lastOutput_;
<a name="l00048"></a>00048 } <span class="comment">// stk namespace</span>
<a name="l00049"></a>00049
<a name="l00050"></a>00050 };
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,102 +8,148 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Granulate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00016"></a>00016 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef STK_GRANULATE_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_GRANULATE_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00025"></a>00025
<a name="l00026"></a><a class="code" href="classGranulate.html">00026</a> <span class="keyword">class </span><a class="code" href="classGranulate.html">Granulate</a>: <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00027"></a>00027 {
<a name="l00028"></a>00028 <span class="keyword">public</span>:
<a name="l00030"></a>00030 <a class="code" href="classGranulate.html#a0">Granulate</a>( <span class="keywordtype">void</span> );
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <a class="code" href="classGranulate.html#a0">Granulate</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nVoices, std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span> );
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <a class="code" href="classGranulate.html#a2">~Granulate</a>();
<a name="l00037"></a>00037
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Granulate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_GRANULATE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_GRANULATE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027
<a name="l00028"></a><a class="code" href="classstk_1_1Granulate.html">00028</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Granulate.html" title="STK granular synthesis class.">Granulate</a>: <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00029"></a>00029 {
<a name="l00030"></a>00030 <span class="keyword">public</span>:
<a name="l00032"></a>00032 <a class="code" href="classstk_1_1Granulate.html#78af615a331de9b643dfabb8e106883f" title="Default constructor.">Granulate</a>( <span class="keywordtype">void</span> );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <a class="code" href="classstk_1_1Granulate.html#78af615a331de9b643dfabb8e106883f" title="Default constructor.">Granulate</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nVoices, std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span> );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1Granulate.html#42eb1f39bd88eb8d4ca55972e7711313" title="Class destructor.">~Granulate</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a3">openFile</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span> );
<a name="l00044"></a>00044
<a name="l00041"></a>00041
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#6227f127a77b4fc581028033cd7658d8" title="Load a monophonic soundfile to be &amp;quot;granulated&amp;quot;.">openFile</a>( std::string fileName, <span class="keywordtype">bool</span> typeRaw = <span class="keyword">false</span> );
<a name="l00046"></a>00046
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a4">reset</a>();
<a name="l00051"></a>00051
<a name="l00048"></a>00048
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#9b7b17ae856f3a9ece6ec462285f456c" title="Reset the file pointer and all existing grains to the file start.">reset</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a5">setVoices</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nVoices = 1 );
<a name="l00059"></a>00059
<a name="l00055"></a>00055
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#735f3ebe8fa2cacfba2c4722a56fd417" title="Set the number of simultaneous grain &amp;quot;voices&amp;quot; to use.">setVoices</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nVoices = 1 );
<a name="l00061"></a>00061
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a6">setStretch</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stretchFactor = 1 );
<a name="l00068"></a>00068
<a name="l00063"></a>00063
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#abd711f2b71bbcd28412d5cb73c085d6" title="Set the stretch factor used for grain playback (1 - 1000).">setStretch</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stretchFactor = 1 );
<a name="l00070"></a>00070
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a7">setGrainParameters</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> duration = 30, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rampPercent = 50,
<a name="l00086"></a>00086 <span class="keywordtype">int</span> offset = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> delay = 0 );
<a name="l00087"></a>00087
<a name="l00072"></a>00072
<a name="l00087"></a>00087 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#9b7c15080256f920646d36bfa0ed3734" title="Set global grain parameters used to determine individual grain settings.">setGrainParameters</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> duration = 30, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rampPercent = 50,
<a name="l00088"></a>00088 <span class="keywordtype">int</span> offset = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> delay = 0 );
<a name="l00089"></a>00089
<a name="l00097"></a>00097 <span class="keywordtype">void</span> <a class="code" href="classGranulate.html#a8">setRandomFactor</a>( StkFloat randomness = 0.1 );
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="keyword">enum</span> GrainState {
<a name="l00100"></a>00100 GRAIN_STOPPED,
<a name="l00101"></a>00101 GRAIN_FADEIN,
<a name="l00102"></a>00102 GRAIN_SUSTAIN,
<a name="l00103"></a>00103 GRAIN_FADEOUT
<a name="l00104"></a>00104 };
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="keyword">protected</span>:
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="keyword">struct </span>Grain {
<a name="l00109"></a>00109 StkFloat eScaler;
<a name="l00110"></a>00110 StkFloat eRate;
<a name="l00111"></a>00111 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> attackCount;
<a name="l00112"></a>00112 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sustainCount;
<a name="l00113"></a>00113 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> decayCount;
<a name="l00114"></a>00114 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delayCount;
<a name="l00115"></a>00115 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> counter;
<a name="l00116"></a>00116 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pointer;
<a name="l00117"></a>00117 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> startPointer;
<a name="l00118"></a>00118 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> repeats;
<a name="l00119"></a>00119 GrainState state;
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="comment">// Default constructor.</span>
<a name="l00122"></a>00122 Grain()
<a name="l00123"></a>00123 :eScaler(0.0), eRate(0.0), attackCount(0), sustainCount(0), decayCount(0),
<a name="l00124"></a>00124 delayCount(0), counter(0), pointer(0), startPointer(0), repeats(0), state(GRAIN_STOPPED) {}
<a name="l00125"></a>00125 };
<a name="l00126"></a>00126
<a name="l00127"></a>00127 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00128"></a>00128 <span class="keywordtype">void</span> calculateGrain( Granulate::Grain&amp; grain );
<a name="l00129"></a>00129
<a name="l00130"></a>00130 <a class="code" href="classStkFrames.html">StkFrames</a> data_;
<a name="l00131"></a>00131 std::vector&lt;Grain&gt; grains_;
<a name="l00132"></a>00132 <a class="code" href="classNoise.html">Noise</a> noise;
<a name="l00133"></a>00133 <span class="keywordtype">long</span> gPointer_;
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="comment">// Global grain parameters.</span>
<a name="l00136"></a>00136 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDuration_;
<a name="l00137"></a>00137 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gRampPercent_;
<a name="l00138"></a>00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDelay_;
<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gStretch_;
<a name="l00140"></a>00140 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stretchCounter_;
<a name="l00141"></a>00141 <span class="keywordtype">int</span> gOffset_;
<a name="l00142"></a>00142 StkFloat gRandomFactor_;
<a name="l00143"></a>00143 StkFloat gain_;
<a name="l00144"></a>00144
<a name="l00145"></a>00145 };
<a name="l00091"></a>00091
<a name="l00099"></a>00099 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Granulate.html#02b7b85f21999d4b350beff6a925bd25" title="This factor is used when setting individual grain parameters (0.0 - 1.0).">setRandomFactor</a>( StkFloat randomness = 0.1 );
<a name="l00100"></a>00100
<a name="l00102"></a>00102
<a name="l00110"></a>00110 StkFloat <a class="code" href="classstk_1_1Granulate.html#60db060a365fc32fe789cb9bcd042dd3" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00111"></a>00111
<a name="l00113"></a>00113 StkFloat <a class="code" href="classstk_1_1Granulate.html#0f8b162c9c309b3cbec3802138a53c24" title="Compute one sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00114"></a>00114
<a name="l00116"></a>00116
<a name="l00123"></a>00123 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Granulate.html#0f8b162c9c309b3cbec3802138a53c24" title="Compute one sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00124"></a>00124
<a name="l00125"></a>00125 <span class="keyword">enum</span> GrainState {
<a name="l00126"></a>00126 GRAIN_STOPPED,
<a name="l00127"></a>00127 GRAIN_FADEIN,
<a name="l00128"></a>00128 GRAIN_SUSTAIN,
<a name="l00129"></a>00129 GRAIN_FADEOUT
<a name="l00130"></a>00130 };
<a name="l00131"></a>00131
<a name="l00132"></a>00132 <span class="keyword">protected</span>:
<a name="l00133"></a>00133
<a name="l00134"></a>00134 <span class="keyword">struct </span>Grain {
<a name="l00135"></a>00135 StkFloat eScaler;
<a name="l00136"></a>00136 StkFloat eRate;
<a name="l00137"></a>00137 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> attackCount;
<a name="l00138"></a>00138 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sustainCount;
<a name="l00139"></a>00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> decayCount;
<a name="l00140"></a>00140 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delayCount;
<a name="l00141"></a>00141 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> counter;
<a name="l00142"></a>00142 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pointer;
<a name="l00143"></a>00143 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> startPointer;
<a name="l00144"></a>00144 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> repeats;
<a name="l00145"></a>00145 GrainState state;
<a name="l00146"></a>00146
<a name="l00147"></a>00147 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00147"></a>00147 <span class="comment">// Default constructor.</span>
<a name="l00148"></a>00148 Grain()
<a name="l00149"></a>00149 :eScaler(0.0), eRate(0.0), attackCount(0), sustainCount(0), decayCount(0),
<a name="l00150"></a>00150 delayCount(0), counter(0), pointer(0), startPointer(0), repeats(0), state(GRAIN_STOPPED) {}
<a name="l00151"></a>00151 };
<a name="l00152"></a>00152
<a name="l00153"></a>00153 <span class="keywordtype">void</span> calculateGrain( Granulate::Grain&amp; grain );
<a name="l00154"></a>00154
<a name="l00155"></a>00155 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> data_;
<a name="l00156"></a>00156 std::vector&lt;Grain&gt; grains_;
<a name="l00157"></a>00157 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise;
<a name="l00158"></a>00158 <span class="keywordtype">long</span> gPointer_;
<a name="l00159"></a>00159
<a name="l00160"></a>00160 <span class="comment">// Global grain parameters.</span>
<a name="l00161"></a>00161 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDuration_;
<a name="l00162"></a>00162 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gRampPercent_;
<a name="l00163"></a>00163 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gDelay_;
<a name="l00164"></a>00164 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> gStretch_;
<a name="l00165"></a>00165 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stretchCounter_;
<a name="l00166"></a>00166 <span class="keywordtype">int</span> gOffset_;
<a name="l00167"></a>00167 StkFloat gRandomFactor_;
<a name="l00168"></a>00168 StkFloat gain_;
<a name="l00169"></a>00169
<a name="l00170"></a>00170 };
<a name="l00171"></a>00171
<a name="l00172"></a><a class="code" href="classstk_1_1Granulate.html#60db060a365fc32fe789cb9bcd042dd3">00172</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Granulate.html#60db060a365fc32fe789cb9bcd042dd3" title="Return the specified channel value of the last computed frame.">Granulate :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00173"></a>00173 {
<a name="l00174"></a>00174 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00175"></a>00175 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00176"></a>00176 errorString_ &lt;&lt; <span class="stringliteral">"Granulate::lastOut(): channel argument is invalid!"</span>;
<a name="l00177"></a>00177 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179 <span class="preprocessor">#endif</span>
<a name="l00180"></a>00180 <span class="preprocessor"></span>
<a name="l00181"></a>00181 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00182"></a>00182 }
<a name="l00183"></a>00183
<a name="l00184"></a><a class="code" href="classstk_1_1Granulate.html#a9cc119b1515c5596a95d72f4b65b0c0">00184</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Granulate.html#0f8b162c9c309b3cbec3802138a53c24" title="Compute one sample frame and return the specified channel value.">Granulate :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00185"></a>00185 {
<a name="l00186"></a>00186 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00187"></a>00187 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00188"></a>00188 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - nChannels ) {
<a name="l00189"></a>00189 errorString_ &lt;&lt; <span class="stringliteral">"Granulate::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00190"></a>00190 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00191"></a>00191 }
<a name="l00192"></a>00192 <span class="preprocessor">#endif</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span>
<a name="l00194"></a>00194 StkFloat *samples = &amp;frames[channel];
<a name="l00195"></a>00195 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j, hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - nChannels;
<a name="l00196"></a>00196 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00197"></a>00197 *samples++ = <a class="code" href="classstk_1_1Granulate.html#0f8b162c9c309b3cbec3802138a53c24" title="Compute one sample frame and return the specified channel value.">tick</a>();
<a name="l00198"></a>00198 <span class="keywordflow">for</span> ( j=1; j&lt;nChannels; j++ )
<a name="l00199"></a>00199 *samples++ = lastFrame_[j];
<a name="l00200"></a>00200 }
<a name="l00201"></a>00201
<a name="l00202"></a>00202 <span class="keywordflow">return</span> frames;
<a name="l00203"></a>00203 }
<a name="l00204"></a>00204
<a name="l00205"></a>00205 } <span class="comment">// stk namespace</span>
<a name="l00206"></a>00206
<a name="l00207"></a>00207 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,38 +8,72 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>HevyMetl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="preprocessor">#ifndef STK_HEVYMETL_H</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_HEVYMETL_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "FM.h"</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classHevyMetl.html">00036</a> <span class="keyword">class </span><a class="code" href="classHevyMetl.html">HevyMetl</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040
<a name="l00043"></a>00043 <a class="code" href="classHevyMetl.html#a0">HevyMetl</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classHevyMetl.html#a1">~HevyMetl</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classHevyMetl.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00050"></a>00050
<a name="l00051"></a>00051 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>HevyMetl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_HEVYMETL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_HEVYMETL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1HevyMetl.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1HevyMetl.html" title="STK heavy metal FM synthesis instrument.">HevyMetl</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1HevyMetl.html#61e000b4c2a8ba021e43e8074be44390" title="Class constructor.">HevyMetl</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classstk_1_1HevyMetl.html#03b76a27541928bf9e7d156f9709a8f0" title="Class destructor.">~HevyMetl</a>( <span class="keywordtype">void</span> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1HevyMetl.html#a7401a5cb44a69edaad304aac41b6eda" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00052"></a>00052
<a name="l00053"></a>00053 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00054"></a>00054 };
<a name="l00054"></a>00054 StkFloat <a class="code" href="classstk_1_1HevyMetl.html#0261504b82845034be67ac573d564ff7" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00056"></a>00056 <span class="keyword">protected</span>:
<a name="l00057"></a>00057
<a name="l00058"></a>00058 };
<a name="l00059"></a>00059
<a name="l00060"></a><a class="code" href="classstk_1_1HevyMetl.html#0261504b82845034be67ac573d564ff7">00060</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1HevyMetl.html#0261504b82845034be67ac573d564ff7" title="Compute and return one output sample.">HevyMetl :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00061"></a>00061 {
<a name="l00062"></a>00062 <span class="keyword">register</span> StkFloat temp;
<a name="l00063"></a>00063
<a name="l00064"></a>00064 temp = vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * modDepth_ * 0.2;
<a name="l00065"></a>00065 waves_[0]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
<a name="l00066"></a>00066 waves_[1]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]);
<a name="l00067"></a>00067 waves_[2]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]);
<a name="l00068"></a>00068 waves_[3]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]);
<a name="l00069"></a>00069
<a name="l00070"></a>00070 temp = gains_[2] * adsr_[2]-&gt;tick() * waves_[2]-&gt;tick();
<a name="l00071"></a>00071 waves_[1]-&gt;addPhaseOffset( temp );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00074"></a>00074 temp = (1.0 - (control2_ * 0.5)) * gains_[3] * adsr_[3]-&gt;<a class="code" href="classstk_1_1HevyMetl.html#0261504b82845034be67ac573d564ff7" title="Compute and return one output sample.">tick</a>() * waves_[3]-&gt;tick();
<a name="l00075"></a>00075 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00076"></a>00076
<a name="l00077"></a>00077 temp += control2_ * 0.5 * gains_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00078"></a>00078 temp = temp * control1_;
<a name="l00079"></a>00079
<a name="l00080"></a>00080 waves_[0]-&gt;addPhaseOffset( temp );
<a name="l00081"></a>00081 temp = gains_[0] * adsr_[0]-&gt;tick() * waves_[0]-&gt;tick();
<a name="l00082"></a>00082
<a name="l00083"></a>00083 lastFrame_[0] = temp * 0.5;
<a name="l00084"></a>00084 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00085"></a>00085 }
<a name="l00086"></a>00086
<a name="l00087"></a>00087 } <span class="comment">// stk namespace</span>
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

156
doc/html/Iir_8h-source.html Normal file
View File

@@ -0,0 +1,156 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Iir.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_IIR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_IIR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033
<a name="l00034"></a><a class="code" href="classstk_1_1Iir.html">00034</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Iir.html" title="STK general infinite impulse response filter class.">Iir</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036 <span class="keyword">public</span>:
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1Iir.html#1d63797b4caf775de8d351ec0c15a4c0" title="Default constructor creates a zero-order pass-through &amp;quot;filter&amp;quot;.">Iir</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1Iir.html#1d63797b4caf775de8d351ec0c15a4c0" title="Default constructor creates a zero-order pass-through &amp;quot;filter&amp;quot;.">Iir</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classstk_1_1Iir.html#c15361cbfa19e6e4f73a155abc1459a8" title="Class destructor.">~Iir</a>( <span class="keywordtype">void</span> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Iir.html#a0249b92dcec86ae83688debedb8d95b" title="Set filter coefficients.">setCoefficients</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, std::vector&lt;StkFloat&gt; &amp;aCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Iir.html#7a1473446857a14cdbb33cb5afde076c" title="Set numerator coefficients.">setNumerator</a>( std::vector&lt;StkFloat&gt; &amp;bCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00069"></a>00069
<a name="l00071"></a>00071
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Iir.html#e67cc04a452edfbd80f1a27097ea0187" title="Set denominator coefficients.">setDenominator</a>( std::vector&lt;StkFloat&gt; &amp;aCoefficients, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00081"></a>00081
<a name="l00083"></a><a class="code" href="classstk_1_1Iir.html#5dcae9330f2c52d2bfa1647e6b250a14">00083</a> StkFloat <a class="code" href="classstk_1_1Iir.html#5dcae9330f2c52d2bfa1647e6b250a14" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00084"></a>00084
<a name="l00086"></a>00086 StkFloat <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00087"></a>00087
<a name="l00089"></a>00089
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00098"></a>00098
<a name="l00100"></a>00100
<a name="l00108"></a>00108 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="keyword">protected</span>:
<a name="l00111"></a>00111
<a name="l00112"></a>00112 };
<a name="l00113"></a>00113
<a name="l00114"></a><a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84">00114</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">Iir :: tick</a>( StkFloat input )
<a name="l00115"></a>00115 {
<a name="l00116"></a>00116 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
<a name="l00117"></a>00117
<a name="l00118"></a>00118 outputs_[0] = 0.0;
<a name="l00119"></a>00119 inputs_[0] = gain_ * input;
<a name="l00120"></a>00120 <span class="keywordflow">for</span> ( i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00121"></a>00121 outputs_[0] += b_[i] * inputs_[i];
<a name="l00122"></a>00122 inputs_[i] = inputs_[i-1];
<a name="l00123"></a>00123 }
<a name="l00124"></a>00124 outputs_[0] += b_[0] * inputs_[0];
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="keywordflow">for</span> ( i=a_.size()-1; i&gt;0; i-- ) {
<a name="l00127"></a>00127 outputs_[0] += -a_[i] * outputs_[i];
<a name="l00128"></a>00128 outputs_[i] = outputs_[i-1];
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00131"></a>00131 lastFrame_[0] = outputs_[0];
<a name="l00132"></a>00132 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00133"></a>00133 }
<a name="l00134"></a>00134
<a name="l00135"></a><a class="code" href="classstk_1_1Iir.html#d03f40e022b2adfe942d30908ec34793">00135</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">Iir :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00136"></a>00136 {
<a name="l00137"></a>00137 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00138"></a>00138 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00139"></a>00139 errorString_ &lt;&lt; <span class="stringliteral">"Iir::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00140"></a>00140 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00141"></a>00141 }
<a name="l00142"></a>00142 <span class="preprocessor">#endif</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span>
<a name="l00144"></a>00144 StkFloat *samples = &amp;frames[channel];
<a name="l00145"></a>00145 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00146"></a>00146 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j=0; j&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); j++, samples += hop ) {
<a name="l00147"></a>00147 outputs_[0] = 0.0;
<a name="l00148"></a>00148 inputs_[0] = gain_ * *samples;
<a name="l00149"></a>00149 <span class="keywordflow">for</span> ( i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00150"></a>00150 outputs_[0] += b_[i] * inputs_[i];
<a name="l00151"></a>00151 inputs_[i] = inputs_[i-1];
<a name="l00152"></a>00152 }
<a name="l00153"></a>00153 outputs_[0] += b_[0] * inputs_[0];
<a name="l00154"></a>00154
<a name="l00155"></a>00155 <span class="keywordflow">for</span> ( i=a_.size()-1; i&gt;0; i-- ) {
<a name="l00156"></a>00156 outputs_[0] += -a_[i] * outputs_[i];
<a name="l00157"></a>00157 outputs_[i] = outputs_[i-1];
<a name="l00158"></a>00158 }
<a name="l00159"></a>00159
<a name="l00160"></a>00160 *samples = outputs_[0];
<a name="l00161"></a>00161 }
<a name="l00162"></a>00162
<a name="l00163"></a>00163 lastFrame_[0] = *(samples-hop);
<a name="l00164"></a>00164 <span class="keywordflow">return</span> frames;
<a name="l00165"></a>00165 }
<a name="l00166"></a>00166
<a name="l00167"></a><a class="code" href="classstk_1_1Iir.html#60919d8e000bf83613bdd5e002d750f1">00167</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Iir.html#9b79bb8ba512052a4b90444c9d2d0d84" title="Input one sample to the filter and return one output.">Iir :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00168"></a>00168 {
<a name="l00169"></a>00169 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00170"></a>00170 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00171"></a>00171 errorString_ &lt;&lt; <span class="stringliteral">"Iir::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00172"></a>00172 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00173"></a>00173 }
<a name="l00174"></a>00174 <span class="preprocessor">#endif</span>
<a name="l00175"></a>00175 <span class="preprocessor"></span>
<a name="l00176"></a>00176 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00177"></a>00177 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00178"></a>00178 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00179"></a>00179 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j=0; j&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); j++, iSamples += iHop, oSamples += oHop ) {
<a name="l00180"></a>00180 outputs_[0] = 0.0;
<a name="l00181"></a>00181 inputs_[0] = gain_ * *iSamples;
<a name="l00182"></a>00182 <span class="keywordflow">for</span> ( i=b_.size()-1; i&gt;0; i-- ) {
<a name="l00183"></a>00183 outputs_[0] += b_[i] * inputs_[i];
<a name="l00184"></a>00184 inputs_[i] = inputs_[i-1];
<a name="l00185"></a>00185 }
<a name="l00186"></a>00186 outputs_[0] += b_[0] * inputs_[0];
<a name="l00187"></a>00187
<a name="l00188"></a>00188 <span class="keywordflow">for</span> ( i=a_.size()-1; i&gt;0; i-- ) {
<a name="l00189"></a>00189 outputs_[0] += -a_[i] * outputs_[i];
<a name="l00190"></a>00190 outputs_[i] = outputs_[i-1];
<a name="l00191"></a>00191 }
<a name="l00192"></a>00192
<a name="l00193"></a>00193 *oSamples = outputs_[0];
<a name="l00194"></a>00194 }
<a name="l00195"></a>00195
<a name="l00196"></a>00196 lastFrame_[0] = *(oSamples-oHop);
<a name="l00197"></a>00197 <span class="keywordflow">return</span> iFrames;
<a name="l00198"></a>00198 }
<a name="l00199"></a>00199
<a name="l00200"></a>00200 } <span class="comment">// stk namespace</span>
<a name="l00201"></a>00201
<a name="l00202"></a>00202 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,79 +8,107 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>InetWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="preprocessor">#ifndef STK_INETWVIN_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define STK_INETWVIN_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "TcpServer.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "UdpSocket.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "Thread.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00037"></a>00037 <span class="keywordtype">bool</span> finished;
<a name="l00038"></a>00038 <span class="keywordtype">void</span> *object;
<a name="l00039"></a>00039 } ThreadInfo;
<a name="l00040"></a>00040
<a name="l00041"></a><a class="code" href="classInetWvIn.html">00041</a> <span class="keyword">class </span><a class="code" href="classInetWvIn.html">InetWvIn</a> : <span class="keyword">public</span> <a class="code" href="classWvIn.html">WvIn</a>
<a name="l00042"></a>00042 {
<a name="l00043"></a>00043 <span class="keyword">public</span>:
<a name="l00045"></a>00045
<a name="l00048"></a>00048 <a class="code" href="classInetWvIn.html#a0">InetWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames = 1024, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers = 8 );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <a class="code" href="classInetWvIn.html#a1">~InetWvIn</a>();
<a name="l00052"></a>00052
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>InetWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_INETWVIN_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_INETWVIN_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "TcpServer.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "UdpSocket.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "Thread.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="keyword">namespace </span>stk {
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00039"></a>00039 <span class="keywordtype">bool</span> finished;
<a name="l00040"></a>00040 <span class="keywordtype">void</span> *object;
<a name="l00041"></a>00041 } ThreadInfo;
<a name="l00042"></a>00042
<a name="l00043"></a><a class="code" href="classstk_1_1InetWvIn.html">00043</a> <span class="keyword">class </span><a class="code" href="classstk_1_1InetWvIn.html" title="STK internet streaming input class.">InetWvIn</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvIn.html" title="STK audio input abstract base class.">WvIn</a>
<a name="l00044"></a>00044 {
<a name="l00045"></a>00045 <span class="keyword">public</span>:
<a name="l00047"></a>00047
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1InetWvIn.html#d97edafdfb9db2aee77b11d3086113a4" title="Default constructor.">InetWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames = 1024, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers = 8 );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <a class="code" href="classstk_1_1InetWvIn.html#760628dfbbca0a11142d28ff5cabd8b5" title="Class destructor.">~InetWvIn</a>();
<a name="l00054"></a>00054
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classInetWvIn.html#a2">listen</a>( <span class="keywordtype">int</span> port = 2006, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00062"></a>00062 Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>,
<a name="l00063"></a>00063 Socket::ProtocolType protocol = Socket::PROTO_TCP );
<a name="l00064"></a>00064
<a name="l00056"></a>00056
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1InetWvIn.html#f36ff382737f0fb84bc38046c01b4ce8" title="Wait for a (new) socket connection with specified protocol, port, data channels and...">listen</a>( <span class="keywordtype">int</span> port = 2006, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1,
<a name="l00064"></a>00064 Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>,
<a name="l00065"></a>00065 Socket::ProtocolType protocol = Socket::PROTO_TCP );
<a name="l00066"></a>00066
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> <a class="code" href="classInetWvIn.html#a3">isConnected</a>( <span class="keywordtype">void</span> );
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="comment">// Called by the thread routine to receive data via the socket connection</span>
<a name="l00073"></a>00073 <span class="comment">// and fill the socket buffer. This is not intended for general use but</span>
<a name="l00074"></a>00074 <span class="comment">// had to be made public for access from the thread.</span>
<a name="l00075"></a>00075 <span class="keywordtype">void</span> receive( <span class="keywordtype">void</span> );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="keyword">protected</span>:
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="comment">// Read buffered socket data into the data buffer ... will block if none available.</span>
<a name="l00080"></a>00080 <span class="keywordtype">int</span> readData( <span class="keywordtype">void</span> );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">void</span> computeFrame( <span class="keywordtype">void</span> );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <a class="code" href="classSocket.html">Socket</a> *soket_;
<a name="l00085"></a>00085 <a class="code" href="classThread.html">Thread</a> thread_;
<a name="l00086"></a>00086 <a class="code" href="classMutex.html">Mutex</a> mutex_;
<a name="l00087"></a>00087 <span class="keywordtype">char</span> *buffer_;
<a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames_;
<a name="l00089"></a>00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferBytes_;
<a name="l00090"></a>00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytesFilled_;
<a name="l00091"></a>00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers_;
<a name="l00092"></a>00092 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> writePoint_;
<a name="l00093"></a>00093 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> readPoint_;
<a name="l00094"></a>00094 <span class="keywordtype">long</span> bufferCounter_;
<a name="l00095"></a>00095 <span class="keywordtype">int</span> dataBytes_;
<a name="l00096"></a>00096 <span class="keywordtype">bool</span> connected_;
<a name="l00097"></a>00097 <span class="keywordtype">int</span> fd_;
<a name="l00098"></a>00098 ThreadInfo threadInfo_;
<a name="l00099"></a>00099 Stk::StkFormat dataType_;
<a name="l00068"></a>00068
<a name="l00072"></a>00072 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1InetWvIn.html#8b54226eabcd0c58d93fcc0792fa7e02" title="Returns true is an input connection exists or input data remains in the queue.">isConnected</a>( <span class="keywordtype">void</span> );
<a name="l00073"></a>00073
<a name="l00075"></a>00075
<a name="l00084"></a>00084 StkFloat <a class="code" href="classstk_1_1InetWvIn.html#cfd578027b2bbcbe4ceefa11e49e8cd2" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00085"></a>00085
<a name="l00087"></a>00087
<a name="l00097"></a>00097 StkFloat <a class="code" href="classstk_1_1InetWvIn.html#2109090620c80013ef3ae68cb975fb17" title="Compute a sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00098"></a>00098
<a name="l00100"></a>00100
<a name="l00101"></a>00101 };
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00109"></a>00109 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1InetWvIn.html#2109090620c80013ef3ae68cb975fb17" title="Compute a sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="comment">// Called by the thread routine to receive data via the socket connection</span>
<a name="l00112"></a>00112 <span class="comment">// and fill the socket buffer. This is not intended for general use but</span>
<a name="l00113"></a>00113 <span class="comment">// must be public for access from the thread.</span>
<a name="l00114"></a>00114 <span class="keywordtype">void</span> receive( <span class="keywordtype">void</span> );
<a name="l00115"></a>00115
<a name="l00116"></a>00116 <span class="keyword">protected</span>:
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="comment">// Read buffered socket data into the data buffer ... will block if none available.</span>
<a name="l00119"></a>00119 <span class="keywordtype">int</span> readData( <span class="keywordtype">void</span> );
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a> *soket_;
<a name="l00122"></a>00122 <a class="code" href="classstk_1_1Thread.html" title="STK thread class.">Thread</a> thread_;
<a name="l00123"></a>00123 <a class="code" href="classstk_1_1Mutex.html" title="STK mutex class.">Mutex</a> mutex_;
<a name="l00124"></a>00124 <span class="keywordtype">char</span> *buffer_;
<a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames_;
<a name="l00126"></a>00126 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferBytes_;
<a name="l00127"></a>00127 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytesFilled_;
<a name="l00128"></a>00128 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nBuffers_;
<a name="l00129"></a>00129 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> writePoint_;
<a name="l00130"></a>00130 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> readPoint_;
<a name="l00131"></a>00131 <span class="keywordtype">long</span> bufferCounter_;
<a name="l00132"></a>00132 <span class="keywordtype">int</span> dataBytes_;
<a name="l00133"></a>00133 <span class="keywordtype">bool</span> connected_;
<a name="l00134"></a>00134 <span class="keywordtype">int</span> fd_;
<a name="l00135"></a>00135 ThreadInfo threadInfo_;
<a name="l00136"></a>00136 Stk::StkFormat dataType_;
<a name="l00137"></a>00137
<a name="l00138"></a>00138 };
<a name="l00139"></a>00139
<a name="l00140"></a><a class="code" href="classstk_1_1InetWvIn.html#cfd578027b2bbcbe4ceefa11e49e8cd2">00140</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1InetWvIn.html#cfd578027b2bbcbe4ceefa11e49e8cd2" title="Return the specified channel value of the last computed frame.">InetWvIn :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00141"></a>00141 {
<a name="l00142"></a>00142 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00143"></a>00143 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= data_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00144"></a>00144 errorString_ &lt;&lt; <span class="stringliteral">"InetWvIn::lastOut(): channel argument and data stream are incompatible!"</span>;
<a name="l00145"></a>00145 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00146"></a>00146 }
<a name="l00147"></a>00147 <span class="preprocessor">#endif</span>
<a name="l00148"></a>00148 <span class="preprocessor"></span>
<a name="l00149"></a>00149 <span class="comment">// If no connection and we've output all samples in the queue, return.</span>
<a name="l00150"></a>00150 <span class="keywordflow">if</span> ( !connected_ &amp;&amp; bytesFilled_ == 0 &amp;&amp; bufferCounter_ == 0 ) <span class="keywordflow">return</span> 0.0;
<a name="l00151"></a>00151
<a name="l00152"></a>00152 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00153"></a>00153 }
<a name="l00154"></a>00154
<a name="l00155"></a>00155 } <span class="comment">// stk namespace</span>
<a name="l00156"></a>00156
<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,63 +8,71 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>InetWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef STK_INETWVOUT_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define STK_INETWVOUT_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classInetWvOut.html">00029</a> <span class="keyword">class </span><a class="code" href="classInetWvOut.html">InetWvOut</a> : <span class="keyword">public</span> <a class="code" href="classWvOut.html">WvOut</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033 <a class="code" href="classInetWvOut.html#a0">InetWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> packetFrames = 1024 );
<a name="l00034"></a>00034
<a name="l00036"></a>00036
<a name="l00039"></a>00039 <a class="code" href="classInetWvOut.html#a0">InetWvOut</a>( <span class="keywordtype">int</span> port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
<a name="l00040"></a>00040 std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>,
<a name="l00041"></a>00041 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> packetFrames = 1024 );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <a class="code" href="classInetWvOut.html#a2">~InetWvOut</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>InetWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_INETWVOUT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_INETWVOUT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a><a class="code" href="classstk_1_1InetWvOut.html">00032</a> <span class="keyword">class </span><a class="code" href="classstk_1_1InetWvOut.html" title="STK internet streaming output class.">InetWvOut</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvOut.html" title="STK audio output abstract base class.">WvOut</a>
<a name="l00033"></a>00033 {
<a name="l00034"></a>00034 <span class="keyword">public</span>:
<a name="l00036"></a>00036 <a class="code" href="classstk_1_1InetWvOut.html#cc7c0b00c68cb76d1b15e7187d67a966" title="Default constructor ... the socket is not instantiated.">InetWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> packetFrames = 1024 );
<a name="l00037"></a>00037
<a name="l00039"></a>00039
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1InetWvOut.html#cc7c0b00c68cb76d1b15e7187d67a966" title="Default constructor ... the socket is not instantiated.">InetWvOut</a>( <span class="keywordtype">int</span> port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
<a name="l00043"></a>00043 std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>,
<a name="l00044"></a>00044 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> packetFrames = 1024 );
<a name="l00045"></a>00045
<a name="l00047"></a>00047
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classInetWvOut.html#a3">connect</a>( <span class="keywordtype">int</span> port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
<a name="l00051"></a>00051 std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classInetWvOut.html#a4">disconnect</a>(<span class="keywordtype">void</span>);
<a name="l00047"></a>00047 <a class="code" href="classstk_1_1InetWvOut.html#e58f286de491788df700479f88b3c625" title="Class destructor.">~InetWvOut</a>();
<a name="l00048"></a>00048
<a name="l00050"></a>00050
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1InetWvOut.html#4c8b6fb25c6d751b7929bec9a2d04a53" title="Connect to the specified host and port and prepare to stream nChannels of data in...">connect</a>( <span class="keywordtype">int</span> port, Socket::ProtocolType protocol = Socket::PROTO_TCP,
<a name="l00054"></a>00054 std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a> );
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="keyword">protected</span>:
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="keywordtype">void</span> computeSample( <span class="keyword">const</span> StkFloat sample );
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="keywordtype">void</span> computeFrames( <span class="keyword">const</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keywordtype">void</span> incrementFrame( <span class="keywordtype">void</span> );
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="comment">// Write a buffer of length frames via the socket connection.</span>
<a name="l00065"></a>00065 <span class="keywordtype">void</span> writeData( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> frames );
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1InetWvOut.html#2314d2e2d005c5b08aa24d21075af638" title="If a connection is open, write out remaining samples in the queue and then disconnect...">disconnect</a>( <span class="keywordtype">void</span> );
<a name="l00058"></a>00058
<a name="l00060"></a>00060
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1InetWvOut.html#800f77228d851a2d276fae6a24bcdc9a" title="Output a single sample to all channels in a sample frame.">tick</a>( <span class="keyword">const</span> StkFloat sample );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keywordtype">char</span> *buffer_;
<a name="l00068"></a>00068 <a class="code" href="classSocket.html">Socket</a> *soket_;
<a name="l00069"></a>00069 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames_;
<a name="l00070"></a>00070 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferBytes_;
<a name="l00071"></a>00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferIndex_;
<a name="l00072"></a>00072 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> iData_;
<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dataBytes_;
<a name="l00074"></a>00074 Stk::StkFormat dataType_;
<a name="l00075"></a>00075 };
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00068"></a>00068
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1InetWvOut.html#800f77228d851a2d276fae6a24bcdc9a" title="Output a single sample to all channels in a sample frame.">tick</a>( <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="keyword">protected</span>:
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="keywordtype">void</span> incrementFrame( <span class="keywordtype">void</span> );
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <span class="comment">// Write a buffer of length frames via the socket connection.</span>
<a name="l00084"></a>00084 <span class="keywordtype">void</span> writeData( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> frames );
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keywordtype">char</span> *buffer_;
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a> *soket_;
<a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferFrames_;
<a name="l00089"></a>00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferBytes_;
<a name="l00090"></a>00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bufferIndex_;
<a name="l00091"></a>00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> iData_;
<a name="l00092"></a>00092 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dataBytes_;
<a name="l00093"></a>00093 Stk::StkFormat dataType_;
<a name="l00094"></a>00094 };
<a name="l00095"></a>00095
<a name="l00096"></a>00096 } <span class="comment">// stk namespace</span>
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,60 +8,112 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Instrmnt.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_INSTRMNT_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_INSTRMNT_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00016"></a>00016
<a name="l00017"></a><a class="code" href="classInstrmnt.html">00017</a> <span class="keyword">class </span><a class="code" href="classInstrmnt.html">Instrmnt</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00018"></a>00018 {
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021 <a class="code" href="classInstrmnt.html#a0">Instrmnt</a>();
<a name="l00022"></a>00022
<a name="l00024"></a>00024 <span class="keyword">virtual</span> <a class="code" href="classInstrmnt.html#a1">~Instrmnt</a>();
<a name="l00025"></a>00025
<a name="l00027"></a>00027 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude) = 0;
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a3">noteOff</a>(StkFloat amplitude) = 0;
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a4">setFrequency</a>(StkFloat frequency);
<a name="l00034"></a>00034
<a name="l00036"></a>00036 StkFloat <a class="code" href="classInstrmnt.html#a5">lastOut</a>() <span class="keyword">const</span>;
<a name="l00037"></a>00037
<a name="l00039"></a>00039 StkFloat <a class="code" href="classInstrmnt.html#a6">lastOutLeft</a>() <span class="keyword">const</span>;
<a name="l00040"></a>00040
<a name="l00042"></a>00042 StkFloat <a class="code" href="classInstrmnt.html#a7">lastOutRight</a>() <span class="keyword">const</span>;
<a name="l00043"></a>00043
<a name="l00045"></a>00045 StkFloat <a class="code" href="classInstrmnt.html#a8">tick</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048
<a name="l00054"></a>00054 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classInstrmnt.html#a8">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Instrmnt.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_INSTRMNT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_INSTRMNT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018
<a name="l00019"></a><a class="code" href="classstk_1_1Instrmnt.html">00019</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00020"></a>00020 {
<a name="l00021"></a>00021 <span class="keyword">public</span>:
<a name="l00023"></a><a class="code" href="classstk_1_1Instrmnt.html#6f3c4dc01e0484f0ca4a3b14f1b7caf0">00023</a> <a class="code" href="classstk_1_1Instrmnt.html#6f3c4dc01e0484f0ca4a3b14f1b7caf0" title="Class constructor.">Instrmnt</a>( <span class="keywordtype">void</span> ) { lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( 1, 1, 0.0 ); };
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#0736ccd253b446660938d51909a32f44" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude ) = 0;
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#582c77e71cd2c5cb46ba6f78fa0ac6a2" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude ) = 0;
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#597efc508ad367a308fa11b8cbdc96a7" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#5aecf9f4d4dcecdbef8271c7fe62b2cf" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00036"></a>00036
<a name="l00038"></a><a class="code" href="classstk_1_1Instrmnt.html#32564b611598653fce5e708821b3fcb4">00038</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Instrmnt.html#32564b611598653fce5e708821b3fcb4" title="Return the number of output channels for the class.">channelsOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(); };
<a name="l00039"></a>00039
<a name="l00041"></a><a class="code" href="classstk_1_1Instrmnt.html#277ac5149ec22c33d794dfd462a82d2b">00041</a> <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Instrmnt.html#277ac5149ec22c33d794dfd462a82d2b" title="Return an StkFrames reference to the last output sample frame.">lastFrame</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_; };
<a name="l00042"></a>00042
<a name="l00044"></a>00044
<a name="l00052"></a>00052 StkFloat <a class="code" href="classstk_1_1Instrmnt.html#aa6bd5e4a5be7f9b0be967daf012872e" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00053"></a>00053
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classInstrmnt.html#a10">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="comment">// This abstract function must be implemented in all subclasses.</span>
<a name="l00062"></a>00062 <span class="comment">// It is used to get around a C++ problem with overloaded virtual</span>
<a name="l00063"></a>00063 <span class="comment">// functions.</span>
<a name="l00064"></a>00064 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> ) = 0;
<a name="l00065"></a>00065
<a name="l00066"></a>00066 StkFloat lastOutput_;
<a name="l00067"></a>00067
<a name="l00068"></a>00068 };
<a name="l00058"></a>00058 <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1Instrmnt.html#d5d070c1fc6f93124dfed2a27b8e3cf1" title="Compute one sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) = 0;
<a name="l00059"></a>00059
<a name="l00061"></a>00061
<a name="l00068"></a>00068 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Instrmnt.html#d5d070c1fc6f93124dfed2a27b8e3cf1" title="Compute one sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00070"></a>00070 <span class="keyword">protected</span>:
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> lastFrame_;
<a name="l00073"></a>00073
<a name="l00074"></a>00074 };
<a name="l00075"></a>00075
<a name="l00076"></a><a class="code" href="classstk_1_1Instrmnt.html#597efc508ad367a308fa11b8cbdc96a7">00076</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#597efc508ad367a308fa11b8cbdc96a7" title="Set instrument parameters for a particular frequency.">Instrmnt :: setFrequency</a>(StkFloat frequency)
<a name="l00077"></a>00077 {
<a name="l00078"></a>00078 errorString_ &lt;&lt; <span class="stringliteral">"Instrmnt::setFrequency: virtual setFrequency function call!"</span>;
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00080"></a>00080 }
<a name="l00081"></a>00081
<a name="l00082"></a><a class="code" href="classstk_1_1Instrmnt.html#aa6bd5e4a5be7f9b0be967daf012872e">00082</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Instrmnt.html#aa6bd5e4a5be7f9b0be967daf012872e" title="Return the specified channel value of the last computed frame.">Instrmnt :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00083"></a>00083 {
<a name="l00084"></a>00084 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00086"></a>00086 errorString_ &lt;&lt; <span class="stringliteral">"Instrmnt::lastOut(): channel argument is invalid!"</span>;
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00088"></a>00088 }
<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>
<a name="l00091"></a>00091 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00092"></a>00092 }
<a name="l00093"></a>00093
<a name="l00094"></a><a class="code" href="classstk_1_1Instrmnt.html#4abfe94b5fc8d87b47729fe317222eb9">00094</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Instrmnt.html#d5d070c1fc6f93124dfed2a27b8e3cf1" title="Compute one sample frame and return the specified channel value.">Instrmnt :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00095"></a>00095 {
<a name="l00096"></a>00096 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00097"></a>00097 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - nChannels ) {
<a name="l00099"></a>00099 errorString_ &lt;&lt; <span class="stringliteral">"Instrmnt::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00100"></a>00100 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102 <span class="preprocessor">#endif</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span>
<a name="l00104"></a>00104 StkFloat *samples = &amp;frames[channel];
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j, hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - nChannels;
<a name="l00106"></a>00106 <span class="keywordflow">if</span> ( nChannels == 1 ) {
<a name="l00107"></a>00107 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00108"></a>00108 *samples++ = <a class="code" href="classstk_1_1Instrmnt.html#d5d070c1fc6f93124dfed2a27b8e3cf1" title="Compute one sample frame and return the specified channel value.">tick</a>();
<a name="l00109"></a>00109 }
<a name="l00110"></a>00110 <span class="keywordflow">else</span> {
<a name="l00111"></a>00111 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00112"></a>00112 *samples++ = <a class="code" href="classstk_1_1Instrmnt.html#d5d070c1fc6f93124dfed2a27b8e3cf1" title="Compute one sample frame and return the specified channel value.">tick</a>();
<a name="l00113"></a>00113 <span class="keywordflow">for</span> ( j=1; j&lt;nChannels; j++ )
<a name="l00114"></a>00114 *samples++ = lastFrame_[j];
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="keywordflow">return</span> frames;
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120
<a name="l00121"></a><a class="code" href="classstk_1_1Instrmnt.html#5aecf9f4d4dcecdbef8271c7fe62b2cf">00121</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Instrmnt.html#5aecf9f4d4dcecdbef8271c7fe62b2cf" title="Perform the control change specified by number and value (0.0 - 128.0).">Instrmnt :: controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value )
<a name="l00122"></a>00122 {
<a name="l00123"></a>00123 errorString_ &lt;&lt; <span class="stringliteral">"Instrmnt::controlChange: virtual function call!"</span>;
<a name="l00124"></a>00124 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::WARNING );
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 } <span class="comment">// stk namespace</span>
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,49 +8,126 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>JCRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015 <span class="comment">/***************************************************/</span>
<a name="l00016"></a>00016
<a name="l00017"></a>00017 <span class="preprocessor">#ifndef STK_JCREV_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define STK_JCREV_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classJCRev.html">00023</a> <span class="keyword">class </span><a class="code" href="classJCRev.html">JCRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00027"></a>00027 <a class="code" href="classJCRev.html#a0">JCRev</a>( StkFloat T60 = 1.0 );
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <a class="code" href="classJCRev.html#a1">~JCRev</a>();
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classJCRev.html#a2">clear</a>();
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classJCRev.html#a3">setT60</a>( StkFloat T60 );
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>JCRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_JCREV_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_JCREV_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a><a class="code" href="classstk_1_1JCRev.html">00024</a> <span class="keyword">class </span><a class="code" href="classstk_1_1JCRev.html" title="John Chowning&amp;#39;s reverberator class.">JCRev</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00025"></a>00025 {
<a name="l00026"></a>00026 <span class="keyword">public</span>:
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1JCRev.html#5b9f0e2b7acc1fcb94a663353f1253dd" title="Class constructor taking a T60 decay time argument (one second default value).">JCRev</a>( StkFloat T60 = 1.0 );
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1JCRev.html#bf92e9783e4a738b6d3a3350bfae986e" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1JCRev.html#8f4caa6de1e662c76b853ebab814a2eb" title="Set the reverberation T60 decay time.">setT60</a>( StkFloat T60 );
<a name="l00035"></a>00035
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keyword">protected</span>:
<a name="l00039"></a>00039
<a name="l00040"></a>00040 StkFloat computeSample( StkFloat input );
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[3];
<a name="l00043"></a>00043 <a class="code" href="classDelay.html">Delay</a> combDelays_[4];
<a name="l00044"></a>00044 <a class="code" href="classDelay.html">Delay</a> outLeftDelay_;
<a name="l00045"></a>00045 <a class="code" href="classDelay.html">Delay</a> outRightDelay_;
<a name="l00046"></a>00046 StkFloat allpassCoefficient_;
<a name="l00047"></a>00047 StkFloat combCoefficient_[4];
<a name="l00045"></a>00045 StkFloat <a class="code" href="classstk_1_1JCRev.html#599e46bcfbc2b4b9a30a30d67580412b" title="Return the specified channel value of the last computed stereo frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00046"></a>00046
<a name="l00048"></a>00048
<a name="l00049"></a>00049 };
<a name="l00050"></a>00050
<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00055"></a>00055 StkFloat <a class="code" href="classstk_1_1JCRev.html#d667b48a6dbd663f2d7c49e201325f00" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00067"></a>00067 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JCRev.html#d667b48a6dbd663f2d7c49e201325f00" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00068"></a>00068
<a name="l00070"></a>00070
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JCRev.html#d667b48a6dbd663f2d7c49e201325f00" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="keyword">protected</span>:
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> allpassDelays_[3];
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> combDelays_[4];
<a name="l00085"></a>00085 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> outLeftDelay_;
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> outRightDelay_;
<a name="l00087"></a>00087 StkFloat allpassCoefficient_;
<a name="l00088"></a>00088 StkFloat combCoefficient_[4];
<a name="l00089"></a>00089
<a name="l00090"></a>00090 };
<a name="l00091"></a>00091
<a name="l00092"></a><a class="code" href="classstk_1_1JCRev.html#599e46bcfbc2b4b9a30a30d67580412b">00092</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1JCRev.html#599e46bcfbc2b4b9a30a30d67580412b" title="Return the specified channel value of the last computed stereo frame.">JCRev :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00096"></a>00096 errorString_ &lt;&lt; <span class="stringliteral">"JCRev::lastOut(): channel argument must be less than 2!"</span>;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span>
<a name="l00101"></a>00101 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00102"></a>00102 }
<a name="l00103"></a>00103
<a name="l00104"></a><a class="code" href="classstk_1_1JCRev.html#d667b48a6dbd663f2d7c49e201325f00">00104</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1JCRev.html#d667b48a6dbd663f2d7c49e201325f00" title="Input one sample to the effect and return the specified channel value of the computed...">JCRev :: tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00108"></a>00108 errorString_ &lt;&lt; <span class="stringliteral">"JCRev::tick(): channel argument must be less than 2!"</span>;
<a name="l00109"></a>00109 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span>
<a name="l00113"></a>00113 StkFloat temp, temp0, temp1, temp2, temp3, temp4, temp5, temp6;
<a name="l00114"></a>00114 StkFloat filtout;
<a name="l00115"></a>00115
<a name="l00116"></a>00116 temp = allpassDelays_[0].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00117"></a>00117 temp0 = allpassCoefficient_ * temp;
<a name="l00118"></a>00118 temp0 += input;
<a name="l00119"></a>00119 allpassDelays_[0].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp0);
<a name="l00120"></a>00120 temp0 = -(allpassCoefficient_ * temp0) + temp;
<a name="l00121"></a>00121
<a name="l00122"></a>00122 temp = allpassDelays_[1].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00123"></a>00123 temp1 = allpassCoefficient_ * temp;
<a name="l00124"></a>00124 temp1 += temp0;
<a name="l00125"></a>00125 allpassDelays_[1].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp1);
<a name="l00126"></a>00126 temp1 = -(allpassCoefficient_ * temp1) + temp;
<a name="l00127"></a>00127
<a name="l00128"></a>00128 temp = allpassDelays_[2].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00129"></a>00129 temp2 = allpassCoefficient_ * temp;
<a name="l00130"></a>00130 temp2 += temp1;
<a name="l00131"></a>00131 allpassDelays_[2].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp2);
<a name="l00132"></a>00132 temp2 = -(allpassCoefficient_ * temp2) + temp;
<a name="l00133"></a>00133
<a name="l00134"></a>00134 temp3 = temp2 + (combCoefficient_[0] * combDelays_[0].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00135"></a>00135 temp4 = temp2 + (combCoefficient_[1] * combDelays_[1].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00136"></a>00136 temp5 = temp2 + (combCoefficient_[2] * combDelays_[2].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00137"></a>00137 temp6 = temp2 + (combCoefficient_[3] * combDelays_[3].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00138"></a>00138
<a name="l00139"></a>00139 combDelays_[0].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp3);
<a name="l00140"></a>00140 combDelays_[1].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp4);
<a name="l00141"></a>00141 combDelays_[2].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp5);
<a name="l00142"></a>00142 combDelays_[3].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp6);
<a name="l00143"></a>00143
<a name="l00144"></a>00144 filtout = temp3 + temp4 + temp5 + temp6;
<a name="l00145"></a>00145
<a name="l00146"></a>00146 lastFrame_[0] = effectMix_ * (outLeftDelay_.<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(filtout));
<a name="l00147"></a>00147 lastFrame_[1] = effectMix_ * (outRightDelay_.<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(filtout));
<a name="l00148"></a>00148 temp = (1.0 - effectMix_) * input;
<a name="l00149"></a>00149 lastFrame_[0] += temp;
<a name="l00150"></a>00150 lastFrame_[1] += temp;
<a name="l00151"></a>00151
<a name="l00152"></a>00152 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00153"></a>00153 }
<a name="l00154"></a>00154
<a name="l00155"></a>00155 } <span class="comment">// stk namespace</span>
<a name="l00156"></a>00156
<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,36 +8,99 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>JetTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016 <span class="preprocessor">#ifndef STK_JETTABL_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_JETTABL_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "Function.h"</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classJetTable.html">00021</a> <span class="keyword">class </span><a class="code" href="classJetTable.html">JetTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00025"></a>00025 <a class="code" href="classJetTable.html#a0">JetTable</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>JetTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_JETTABL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_JETTABL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Function.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classstk_1_1JetTable.html">00023</a> <span class="keyword">class </span><a class="code" href="classstk_1_1JetTable.html" title="STK jet table class.">JetTable</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Function.html" title="STK abstract function parent class.">Function</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classJetTable.html#a1">~JetTable</a>();
<a name="l00028"></a>00028 StkFloat <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">tick</a>( StkFloat input );
<a name="l00029"></a>00029
<a name="l00030"></a>00030 <span class="keyword">protected</span>:
<a name="l00031"></a>00031
<a name="l00032"></a>00032 StkFloat computeSample( StkFloat input );
<a name="l00033"></a>00033
<a name="l00034"></a>00034 };
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00040"></a>00040
<a name="l00042"></a>00042
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00051"></a>00051
<a name="l00052"></a>00052 };
<a name="l00053"></a>00053
<a name="l00054"></a><a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6">00054</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">JetTable :: tick</a>( StkFloat input )
<a name="l00055"></a>00055 {
<a name="l00056"></a>00056 <span class="comment">// Perform "table lookup" using a polynomial</span>
<a name="l00057"></a>00057 <span class="comment">// calculation (x^3 - x), which approximates</span>
<a name="l00058"></a>00058 <span class="comment">// the jet sigmoid behavior.</span>
<a name="l00059"></a>00059 lastFrame_[0] = input * (input * input - 1.0);
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="comment">// Saturate at +/- 1.0.</span>
<a name="l00062"></a>00062 <span class="keywordflow">if</span> ( lastFrame_[0] &gt; 1.0 ) lastFrame_[0] = 1.0;
<a name="l00063"></a>00063 <span class="keywordflow">if</span> ( lastFrame_[0] &lt; -1.0 ) lastFrame_[0] = -1.0;
<a name="l00064"></a>00064 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00065"></a>00065 }
<a name="l00066"></a>00066
<a name="l00067"></a><a class="code" href="classstk_1_1JetTable.html#e17ee82b1ed7b185713b4ae0b7c2b0cd">00067</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">JetTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00068"></a>00068 {
<a name="l00069"></a>00069 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00071"></a>00071 errorString_ &lt;&lt; <span class="stringliteral">"JetTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00073"></a>00073 }
<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span>
<a name="l00076"></a>00076 StkFloat *samples = &amp;frames[channel];
<a name="l00077"></a>00077 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00078"></a>00078 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00079"></a>00079 *samples = *samples * (*samples * *samples - 1.0);
<a name="l00080"></a>00080 <span class="keywordflow">if</span> ( *samples &gt; 1.0) *samples = 1.0;
<a name="l00081"></a>00081 <span class="keywordflow">if</span> ( *samples &lt; -1.0) *samples = -1.0;
<a name="l00082"></a>00082 }
<a name="l00083"></a>00083
<a name="l00084"></a>00084 lastFrame_[0] = *(samples-hop);
<a name="l00085"></a>00085 <span class="keywordflow">return</span> frames;
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a><a class="code" href="classstk_1_1JetTable.html#7b261fd07b2325348ef14e3f0ebf8429">00088</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1JetTable.html#3fb5333e6305abdeee7cd83a10ef76b6" title="Take one sample input and map to one sample of output.">JetTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00092"></a>00092 errorString_ &lt;&lt; <span class="stringliteral">"JetTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00098"></a>00098 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00099"></a>00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00100"></a>00100 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00101"></a>00101 *oSamples = *oSamples * (*oSamples * *oSamples - 1.0);
<a name="l00102"></a>00102 <span class="keywordflow">if</span> ( *oSamples &gt; 1.0) *oSamples = 1.0;
<a name="l00103"></a>00103 <span class="keywordflow">if</span> ( *oSamples &lt; -1.0) *oSamples = -1.0;
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105
<a name="l00106"></a>00106 lastFrame_[0] = *(oSamples-oHop);
<a name="l00107"></a>00107 <span class="keywordflow">return</span> iFrames;
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109
<a name="l00110"></a>00110 } <span class="comment">// stk namespace</span>
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,51 +8,87 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Mandolin.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029
<a name="l00030"></a>00030 <span class="preprocessor">#ifndef STK_MANDOLIN_H</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define STK_MANDOLIN_H</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "PluckTwo.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "FileWvIn.h"</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classMandolin.html">00036</a> <span class="keyword">class </span><a class="code" href="classMandolin.html">Mandolin</a> : <span class="keyword">public</span> <a class="code" href="classPluckTwo.html">PluckTwo</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classMandolin.html#a0">Mandolin</a>(StkFloat lowestFrequency);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classMandolin.html#a1">~Mandolin</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a2">pluck</a>(StkFloat amplitude);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a2">pluck</a>(StkFloat amplitude,StkFloat position);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a4">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a5">setBodySize</a>(StkFloat size);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classMandolin.html#a6">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Mandolin.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MANDOLIN_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MANDOLIN_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "PluckTwo.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "FileWvIn.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1Mandolin.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Mandolin.html" title="STK mandolin instrument model class.">Mandolin</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1PluckTwo.html" title="STK enhanced plucked string model class.">PluckTwo</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1Mandolin.html#5b2aaaf5697cbe57df62b568982f6300" title="Class constructor, taking the lowest desired playing frequency.">Mandolin</a>( StkFloat lowestFrequency );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1Mandolin.html#92d50a0f0c1c974683bf4685cfc6ff86" title="Class destructor.">~Mandolin</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mandolin.html#3a2398d39b72e1c330f81f6545ac0f5c" title="Pluck the strings with the given amplitude (0.0 - 1.0) using the current frequency...">pluck</a>( StkFloat amplitude );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mandolin.html#3a2398d39b72e1c330f81f6545ac0f5c" title="Pluck the strings with the given amplitude (0.0 - 1.0) using the current frequency...">pluck</a>( StkFloat amplitude,StkFloat position );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mandolin.html#8b60733652e54f1d6c93d63c915c9ca7" title="Start a note with the given frequency and amplitude (0.0 - 1.0).">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mandolin.html#21a5b0669b013cfd9c7142174530f629" title="Set the body size (a value of 1.0 produces the &amp;quot;default&amp;quot; size).">setBodySize</a>( StkFloat size );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mandolin.html#bf341aa5e7d751012178ff7b853b73a1" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <a class="code" href="classFileWvIn.html">FileWvIn</a> *soundfile_[12];
<a name="l00065"></a>00065 <span class="keywordtype">int</span> mic_;
<a name="l00066"></a>00066 <span class="keywordtype">long</span> dampTime_;
<a name="l00067"></a>00067 <span class="keywordtype">bool</span> waveDone_;
<a name="l00068"></a>00068 };
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00063"></a>00063 StkFloat <a class="code" href="classstk_1_1Mandolin.html#99f5b51e76c97299dd8c58f27a6d0e62" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keyword">protected</span>:
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classstk_1_1FileWvIn.html" title="STK audio file input class.">FileWvIn</a> *soundfile_[12];
<a name="l00068"></a>00068 <span class="keywordtype">int</span> mic_;
<a name="l00069"></a>00069 <span class="keywordtype">long</span> dampTime_;
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> waveDone_;
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a><a class="code" href="classstk_1_1Mandolin.html#99f5b51e76c97299dd8c58f27a6d0e62">00073</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Mandolin.html#99f5b51e76c97299dd8c58f27a6d0e62" title="Compute and return one output sample.">Mandolin :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075 StkFloat temp = 0.0;
<a name="l00076"></a>00076 <span class="keywordflow">if</span> ( !waveDone_ ) {
<a name="l00077"></a>00077 <span class="comment">// Scale the pluck excitation with comb</span>
<a name="l00078"></a>00078 <span class="comment">// filtering for the duration of the file.</span>
<a name="l00079"></a>00079 temp = soundfile_[mic_]-&gt;<a class="code" href="classstk_1_1FileWvIn.html#da668a0bc0bf89e155ef341de00babc2" title="Compute a sample frame and return the specified channel value.">tick</a>() * pluckAmplitude_;
<a name="l00080"></a>00080 temp = temp - combDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00081"></a>00081 waveDone_ = soundfile_[mic_]-&gt;<a class="code" href="classstk_1_1FileWvIn.html#ca9ad0c12af3323e7bbf877513b0d10b" title="Query whether reading is complete.">isFinished</a>();
<a name="l00082"></a>00082 }
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="comment">// Damping hack to help avoid overflow on re-plucking.</span>
<a name="l00085"></a>00085 <span class="keywordflow">if</span> ( dampTime_ &gt;=0 ) {
<a name="l00086"></a>00086 dampTime_ -= 1;
<a name="l00087"></a>00087 <span class="comment">// Calculate 1st delay filtered reflection plus pluck excitation.</span>
<a name="l00088"></a>00088 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( temp + (delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * 0.7) ) );
<a name="l00089"></a>00089 <span class="comment">// Calculate 2nd delay just like the 1st.</span>
<a name="l00090"></a>00090 lastFrame_[0] += delayLine2_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( filter2_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( temp + (delayLine2_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * 0.7) ) );
<a name="l00091"></a>00091 }
<a name="l00092"></a>00092 <span class="keywordflow">else</span> { <span class="comment">// No damping hack after 1 period.</span>
<a name="l00093"></a>00093 <span class="comment">// Calculate 1st delay filtered reflection plus pluck excitation.</span>
<a name="l00094"></a>00094 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( temp + (delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * loopGain_) ) );
<a name="l00095"></a>00095 <span class="comment">// Calculate 2nd delay just like the 1st.</span>
<a name="l00096"></a>00096 lastFrame_[0] += delayLine2_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( filter2_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( temp + (delayLine2_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * loopGain_) ) );
<a name="l00097"></a>00097 }
<a name="l00098"></a>00098
<a name="l00099"></a>00099 lastFrame_[0] *= 0.3;
<a name="l00100"></a>00100 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102
<a name="l00103"></a>00103 } <span class="comment">// stk namespace</span>
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,81 +8,87 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Mesh2D.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="preprocessor">#ifndef STK_MESH2D_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESH2D_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="keyword">const</span> <span class="keywordtype">short</span> NXMAX = 12;
<a name="l00034"></a>00034 <span class="keyword">const</span> <span class="keywordtype">short</span> NYMAX = 12;
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classMesh2D.html">00036</a> <span class="keyword">class </span><a class="code" href="classMesh2D.html">Mesh2D</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classMesh2D.html#a0">Mesh2D</a>(<span class="keywordtype">short</span> nX, <span class="keywordtype">short</span> nY);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classMesh2D.html#a1">~Mesh2D</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a2">clear</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a3">setNX</a>(<span class="keywordtype">short</span> lenX);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a4">setNY</a>(<span class="keywordtype">short</span> lenY);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a5">setInputPosition</a>(StkFloat xFactor, StkFloat yFactor);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a6">setDecay</a>(StkFloat decayFactor);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a8">noteOff</a>(StkFloat amplitude);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 StkFloat <a class="code" href="classMesh2D.html#a9">energy</a>();
<a name="l00068"></a>00068
<a name="l00070"></a>00070 StkFloat <a class="code" href="classMesh2D.html#a10">inputTick</a>( StkFloat input );
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classMesh2D.html#a11">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Mesh2D.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MESH2D_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESH2D_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <span class="keyword">const</span> <span class="keywordtype">short</span> NXMAX = 12;
<a name="l00036"></a>00036 <span class="keyword">const</span> <span class="keywordtype">short</span> NYMAX = 12;
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1Mesh2D.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Mesh2D.html" title="Two-dimensional rectilinear waveguide mesh class.">Mesh2D</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1Mesh2D.html#156fdff6515dbcd4b493ce0ef051a174" title="Class constructor, taking the x and y dimensions in samples.">Mesh2D</a>( <span class="keywordtype">short</span> nX, <span class="keywordtype">short</span> nY );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1Mesh2D.html#c4abd6b5190587d69c7c2b13870fb646" title="Class destructor.">~Mesh2D</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#49f56b4865dc041ae874fbc1b80e967b" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#ccbad29fd6364f7c2d439bcf837590ec" title="Set the x dimension size in samples.">setNX</a>( <span class="keywordtype">short</span> lenX );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#4c4c54ad29fcee5654bd2ebaed29d916" title="Set the y dimension size in samples.">setNY</a>( <span class="keywordtype">short</span> lenY );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#9cdfa80ecccf3f12dc184003458ba3a3" title="Set the x, y input position on a 0.0 - 1.0 scale.">setInputPosition</a>( StkFloat xFactor, StkFloat yFactor );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#b7b3d950e40308e7060e5ff9a62a8b8d" title="Set the loss filters gains (0.0 - 1.0).">setDecay</a>( StkFloat decayFactor );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#7915dae1032ace5960c85790a7b93e0f" title="Impulse the mesh with the given amplitude (frequency ignored).">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#0580962b3cc0dbac092581d0fc15127b" title="Stop a note with the given amplitude (speed of decay) ... currently ignored.">noteOff</a>( StkFloat amplitude );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 StkFloat <a class="code" href="classstk_1_1Mesh2D.html#52d9552b67edea0fc6ff3e949d6331a0" title="Calculate and return the signal energy stored in the mesh.">energy</a>( <span class="keywordtype">void</span> );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 StkFloat <a class="code" href="classstk_1_1Mesh2D.html#688bed8725ef2d8bf4c6465251bd8b86" title="Input a sample to the mesh and compute one output sample.">inputTick</a>( StkFloat input );
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mesh2D.html#cc618a91b288305785644d852cfdaf83" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00078"></a>00078
<a name="l00079"></a>00079 StkFloat tick0();
<a name="l00080"></a>00080 StkFloat tick1();
<a name="l00081"></a>00081 <span class="keywordtype">void</span> clearMesh();
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <span class="keywordtype">short</span> NX_, NY_;
<a name="l00084"></a>00084 <span class="keywordtype">short</span> xInput_, yInput_;
<a name="l00085"></a>00085 <a class="code" href="classOnePole.html">OnePole</a> filterX_[NXMAX];
<a name="l00086"></a>00086 <a class="code" href="classOnePole.html">OnePole</a> filterY_[NYMAX];
<a name="l00087"></a>00087 StkFloat v_[NXMAX-1][NYMAX-1]; <span class="comment">// junction velocities</span>
<a name="l00088"></a>00088 StkFloat vxp_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
<a name="l00089"></a>00089 StkFloat vxm_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
<a name="l00090"></a>00090 StkFloat vyp_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
<a name="l00091"></a>00091 StkFloat vym_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <span class="comment">// Alternate buffers</span>
<a name="l00094"></a>00094 StkFloat vxp1_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
<a name="l00095"></a>00095 StkFloat vxm1_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
<a name="l00096"></a>00096 StkFloat vyp1_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
<a name="l00097"></a>00097 StkFloat vym1_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="keywordtype">int</span> counter_; <span class="comment">// time in samples</span>
<a name="l00100"></a>00100 };
<a name="l00078"></a>00078 StkFloat <a class="code" href="classstk_1_1Mesh2D.html#e8a7e86e4774d8738098c79ab0d5e00a" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="keyword">protected</span>:
<a name="l00081"></a>00081
<a name="l00082"></a>00082 StkFloat tick0();
<a name="l00083"></a>00083 StkFloat tick1();
<a name="l00084"></a>00084 <span class="keywordtype">void</span> clearMesh();
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keywordtype">short</span> NX_, NY_;
<a name="l00087"></a>00087 <span class="keywordtype">short</span> xInput_, yInput_;
<a name="l00088"></a>00088 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filterX_[NXMAX];
<a name="l00089"></a>00089 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filterY_[NYMAX];
<a name="l00090"></a>00090 StkFloat v_[NXMAX-1][NYMAX-1]; <span class="comment">// junction velocities</span>
<a name="l00091"></a>00091 StkFloat vxp_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
<a name="l00092"></a>00092 StkFloat vxm_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
<a name="l00093"></a>00093 StkFloat vyp_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
<a name="l00094"></a>00094 StkFloat vym_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="comment">// Alternate buffers</span>
<a name="l00097"></a>00097 StkFloat vxp1_[NXMAX][NYMAX]; <span class="comment">// positive-x velocity wave</span>
<a name="l00098"></a>00098 StkFloat vxm1_[NXMAX][NYMAX]; <span class="comment">// negative-x velocity wave</span>
<a name="l00099"></a>00099 StkFloat vyp1_[NXMAX][NYMAX]; <span class="comment">// positive-y velocity wave</span>
<a name="l00100"></a>00100 StkFloat vym1_[NXMAX][NYMAX]; <span class="comment">// negative-y velocity wave</span>
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00102"></a>00102 <span class="keywordtype">int</span> counter_; <span class="comment">// time in samples</span>
<a name="l00103"></a>00103 };
<a name="l00104"></a>00104
<a name="l00105"></a>00105 } <span class="comment">// stk namespace</span>
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,101 +8,102 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Messager.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00033"></a>00033 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <span class="preprocessor">#ifndef STK_MESSAGER_H</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESSAGER_H</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "Skini.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;queue&gt;</span>
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_QUEUE_LIMIT = 200;
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include "Thread.h"</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "TcpServer.h"</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include "RtMidi.h"</span>
<a name="l00050"></a>00050
<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> THREAD_RETURN THREAD_TYPE stdinHandler(<span class="keywordtype">void</span> * ptr);
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Messager.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MESSAGER_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MESSAGER_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Skini.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;queue&gt;</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00009"></a>00009 <span class="preprocessor"></span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include "Thread.h"</span>
<a name="l00012"></a>00012 <span class="preprocessor">#include "TcpServer.h"</span>
<a name="l00013"></a>00013 <span class="preprocessor">#include "RtMidi.h"</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#endif // __STK_REALTIME__</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="keyword">namespace </span>stk {
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00051"></a>00051 <span class="comment">/***************************************************/</span>
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="stringliteral">"C"</span> THREAD_RETURN THREAD_TYPE socketHandler(<span class="keywordtype">void</span> * ptr);
<a name="l00053"></a>00053 <span class="keyword">const</span> <span class="keywordtype">int</span> DEFAULT_QUEUE_LIMIT = 200;
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="preprocessor">#endif // __STK_REALTIME__</span>
<a name="l00056"></a>00056 <span class="preprocessor"></span>
<a name="l00057"></a><a class="code" href="classMessager.html">00057</a> <span class="keyword">class </span><a class="code" href="classMessager.html">Messager</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00058"></a>00058 {
<a name="l00059"></a>00059 <span class="keyword">public</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="comment">// This structure is used to share data among the various realtime</span>
<a name="l00062"></a>00062 <span class="comment">// messager threads. It must be public.</span>
<a name="l00063"></a>00063 <span class="keyword">struct </span>MessagerData {
<a name="l00064"></a>00064 <a class="code" href="classSkini.html">Skini</a> skini;
<a name="l00065"></a>00065 std::queue&lt;Skini::Message&gt; queue;
<a name="l00066"></a>00066 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
<a name="l00067"></a>00067 <span class="keywordtype">int</span> sources;
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span> <a class="code" href="classMutex.html">Mutex</a> mutex;
<a name="l00071"></a>00071 <a class="code" href="classRtMidiIn.html">RtMidiIn</a> *midi;
<a name="l00072"></a>00072 <a class="code" href="classTcpServer.html">TcpServer</a> *socket;
<a name="l00073"></a>00073 std::vector&lt;int&gt; fd;
<a name="l00074"></a>00074 fd_set mask;
<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a>00077 <span class="comment">// Default constructor.</span>
<a name="l00078"></a>00078 MessagerData()
<a name="l00079"></a>00079 :queueLimit(0), sources(0) {}
<a name="l00080"></a>00080 };
<a name="l00081"></a>00081
<a name="l00083"></a>00083 <a class="code" href="classMessager.html#a0">Messager</a>();
<a name="l00084"></a>00084
<a name="l00086"></a>00086 <a class="code" href="classMessager.html#a1">~Messager</a>();
<a name="l00055"></a><a class="code" href="classstk_1_1Messager.html">00055</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Messager.html" title="STK input control message parser.">Messager</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00056"></a>00056 {
<a name="l00057"></a>00057 <span class="keyword">public</span>:
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="comment">// This structure is used to share data among the various realtime</span>
<a name="l00060"></a>00060 <span class="comment">// messager threads. It must be public.</span>
<a name="l00061"></a>00061 <span class="keyword">struct </span>MessagerData {
<a name="l00062"></a>00062 <a class="code" href="classstk_1_1Skini.html" title="STK SKINI parsing class.">Skini</a> skini;
<a name="l00063"></a>00063 std::queue&lt;Skini::Message&gt; queue;
<a name="l00064"></a>00064 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
<a name="l00065"></a>00065 <span class="keywordtype">int</span> sources;
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span> <a class="code" href="classstk_1_1Mutex.html" title="STK mutex class.">Mutex</a> mutex;
<a name="l00069"></a>00069 <a class="code" href="classRtMidiIn.html" title="A realtime MIDI input class.">RtMidiIn</a> *midi;
<a name="l00070"></a>00070 <a class="code" href="classstk_1_1TcpServer.html" title="STK TCP socket server class.">TcpServer</a> *socket;
<a name="l00071"></a>00071 std::vector&lt;int&gt; fd;
<a name="l00072"></a>00072 fd_set mask;
<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
<a name="l00074"></a>00074 <span class="preprocessor"></span>
<a name="l00075"></a>00075 <span class="comment">// Default constructor.</span>
<a name="l00076"></a>00076 MessagerData()
<a name="l00077"></a>00077 :queueLimit(0), sources(0) {}
<a name="l00078"></a>00078 };
<a name="l00079"></a>00079
<a name="l00081"></a>00081 <a class="code" href="classstk_1_1Messager.html#a4c8f3396345157ccd19395258a253a9" title="Default constructor.">Messager</a>();
<a name="l00082"></a>00082
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1Messager.html#8300dba83620cc86388780b5fa4080e0" title="Class destructor.">~Messager</a>();
<a name="l00085"></a>00085
<a name="l00087"></a>00087
<a name="l00089"></a>00089
<a name="l00095"></a>00095 <span class="keywordtype">void</span> <a class="code" href="classMessager.html#a2">popMessage</a>( <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
<a name="l00096"></a>00096
<a name="l00098"></a>00098 <span class="keywordtype">void</span> <a class="code" href="classMessager.html#a3">pushMessage</a>( <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
<a name="l00093"></a>00093 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Messager.html#18525952880382c25322e57353a34372" title="Pop the next message from the queue and write it to the referenced message structure...">popMessage</a>( <a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Skini::Message</a>&amp; message );
<a name="l00094"></a>00094
<a name="l00096"></a>00096 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Messager.html#e8b09328c103bffd180456bf57ee64b3" title="Push the referenced message onto the message stack.">pushMessage</a>( <a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Skini::Message</a>&amp; message );
<a name="l00097"></a>00097
<a name="l00099"></a>00099
<a name="l00101"></a>00101
<a name="l00109"></a>00109 <span class="keywordtype">bool</span> <a class="code" href="classMessager.html#a4">setScoreFile</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename );
<a name="l00110"></a>00110
<a name="l00111"></a>00111 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span>
<a name="l00113"></a>00113
<a name="l00122"></a>00122 <span class="keywordtype">bool</span> <a class="code" href="classMessager.html#a5">startStdInput</a>();
<a name="l00107"></a>00107 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Messager.html#172cf26bfebc8b4b12943e2bd76d5f72" title="Specify a SKINI formatted scorefile from which messages should be read.">setScoreFile</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* filename );
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span>
<a name="l00120"></a>00120 <span class="preprocessor"> bool startStdInput();</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span>
<a name="l00123"></a>00123
<a name="l00125"></a>00125
<a name="l00136"></a>00136 <span class="keywordtype">bool</span> <a class="code" href="classMessager.html#a6">startSocketInput</a>( <span class="keywordtype">int</span> port=2001 );
<a name="l00134"></a>00134 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Messager.html#180fd45d109a2058ecbd6a629b979cb7" title="Start a socket server, accept connections, and read &amp;quot;realtime&amp;quot; control...">startSocketInput</a>( <span class="keywordtype">int</span> port=2001 );
<a name="l00135"></a>00135
<a name="l00137"></a>00137
<a name="l00139"></a>00139
<a name="l00151"></a>00151 <span class="keywordtype">bool</span> <a class="code" href="classMessager.html#a7">startMidiInput</a>( <span class="keywordtype">int</span> port=0 );
<a name="l00152"></a>00152
<a name="l00153"></a>00153 <span class="preprocessor">#endif</span>
<a name="l00154"></a>00154 <span class="preprocessor"></span>
<a name="l00155"></a>00155 <span class="keyword">protected</span>:
<a name="l00149"></a>00149 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Messager.html#49877209a4ee08e684de82a73f2d9df9" title="Start MIDI input, with optional device and port identifiers.">startMidiInput</a>( <span class="keywordtype">int</span> port=0 );
<a name="l00150"></a>00150
<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span>
<a name="l00153"></a>00153 <span class="keyword">protected</span>:
<a name="l00154"></a>00154
<a name="l00155"></a>00155 MessagerData data_;
<a name="l00156"></a>00156
<a name="l00157"></a>00157 MessagerData data_;
<a name="l00158"></a>00158
<a name="l00159"></a>00159 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00160"></a>00160 <span class="preprocessor"></span> <a class="code" href="classThread.html">Thread</a> stdinThread_;
<a name="l00161"></a>00161 <a class="code" href="classThread.html">Thread</a> socketThread_;
<a name="l00162"></a>00162 <span class="preprocessor">#endif</span>
<a name="l00163"></a>00163 <span class="preprocessor"></span>
<a name="l00164"></a>00164 };
<a name="l00157"></a>00157 <span class="preprocessor">#if defined(__STK_REALTIME__)</span>
<a name="l00158"></a>00158 <span class="preprocessor"></span> <a class="code" href="classstk_1_1Thread.html" title="STK thread class.">Thread</a> stdinThread_;
<a name="l00159"></a>00159 <a class="code" href="classstk_1_1Thread.html" title="STK thread class.">Thread</a> socketThread_;
<a name="l00160"></a>00160 <span class="preprocessor">#endif</span>
<a name="l00161"></a>00161 <span class="preprocessor"></span>
<a name="l00162"></a>00162 };
<a name="l00163"></a>00163
<a name="l00164"></a>00164 } <span class="comment">// stk namespace</span>
<a name="l00165"></a>00165
<a name="l00166"></a>00166 <span class="preprocessor">#endif</span>
</pre></div><HR>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,86 +8,92 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>MidiFileIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**********************************************************************/</span>
<a name="l00016"></a>00016 <span class="comment">/**********************************************************************/</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef STK_MIDIFILEIN_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define STK_MIDIFILEIN_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classMidiFileIn.html">00027</a> <span class="keyword">class </span><a class="code" href="classMidiFileIn.html">MidiFileIn</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00031"></a>00031
<a name="l00035"></a>00035 <a class="code" href="classMidiFileIn.html#a0">MidiFileIn</a>( std::string fileName );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classMidiFileIn.html#a1">~MidiFileIn</a>();
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a2">getFileFormat</a>() <span class="keyword">const</span>;
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a3">getNumberOfTracks</a>() <span class="keyword">const</span>;
<a name="l00045"></a>00045
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>MidiFileIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MIDIFILEIN_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MIDIFILEIN_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="keyword">namespace </span>stk {
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="comment">/**********************************************************************/</span>
<a name="l00027"></a>00027 <span class="comment">/**********************************************************************/</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classstk_1_1MidiFileIn.html">00029</a> <span class="keyword">class </span><a class="code" href="classstk_1_1MidiFileIn.html" title="A standard MIDI file reading/parsing class.">MidiFileIn</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1MidiFileIn.html#d273dc7c13d4c4a4ced893af93d9176e" title="Default constructor.">MidiFileIn</a>( std::string fileName );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1MidiFileIn.html#857246dbaf234cc9d68709afea6d0141" title="Class destructor.">~MidiFileIn</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1MidiFileIn.html#c93b16c4de0ed3d98d31a2edb92bc105" title="Return the MIDI file format (0, 1, or 2).">getFileFormat</a>() <span class="keyword">const</span>;
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1MidiFileIn.html#7db7e6b2f6c1aedfbb78045106d36b17" title="Return the number of tracks in the MIDI file.">getNumberOfTracks</a>() <span class="keyword">const</span>;
<a name="l00047"></a>00047
<a name="l00052"></a>00052 <span class="keywordtype">int</span> <a class="code" href="classMidiFileIn.html#a4">getDivision</a>() <span class="keyword">const</span>;
<a name="l00053"></a>00053
<a name="l00049"></a>00049
<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1MidiFileIn.html#43bc34a26e72f3311b855139a1408f78" title="Return the MIDI file division value from the file header.">getDivision</a>() <span class="keyword">const</span>;
<a name="l00055"></a>00055
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classMidiFileIn.html#a5">rewindTrack</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00060"></a>00060
<a name="l00057"></a>00057
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1MidiFileIn.html#3bd547e3ee5bb8ad780274d7a09f12ff" title="Move the specified track event reader to the beginning of its track.">rewindTrack</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00062"></a>00062
<a name="l00069"></a>00069 <span class="keywordtype">double</span> <a class="code" href="classMidiFileIn.html#a6">getTickSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00070"></a>00070
<a name="l00064"></a>00064
<a name="l00071"></a>00071 <span class="keywordtype">double</span> <a class="code" href="classstk_1_1MidiFileIn.html#92508a5847e45a05a3ff05de3e5d3efe" title="Get the current value, in seconds, of delta-time ticks for the specified track.">getTickSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00072"></a>00072
<a name="l00084"></a>00084 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a7">getNextEvent</a>( std::vector&lt;unsigned char&gt; *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00085"></a>00085
<a name="l00074"></a>00074
<a name="l00086"></a>00086 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1MidiFileIn.html#117dd19afbc42d6c769d959588f9176b" title="Fill the user-provided vector with the next event in the specified track and return...">getNextEvent</a>( std::vector&lt;unsigned char&gt; *event, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00087"></a>00087
<a name="l00097"></a>00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classMidiFileIn.html#a8">getNextMidiEvent</a>( std::vector&lt;unsigned char&gt; *midiEvent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00098"></a>00098
<a name="l00099"></a>00099 <span class="keyword">protected</span>:
<a name="l00089"></a>00089
<a name="l00099"></a>00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classstk_1_1MidiFileIn.html#b10ea0e225484fa2d31796f505d4e582" title="Fill the user-provided vector with the next MIDI channel event in the specified track...">getNextMidiEvent</a>( std::vector&lt;unsigned char&gt; *midiEvent, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> track = 0 );
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="comment">// This protected class function is used for reading variable-length</span>
<a name="l00102"></a>00102 <span class="comment">// MIDI file values. It is assumed that this function is called with</span>
<a name="l00103"></a>00103 <span class="comment">// the file read pointer positioned at the start of a</span>
<a name="l00104"></a>00104 <span class="comment">// variable-length value. The function returns true if the value is</span>
<a name="l00105"></a>00105 <span class="comment">// successfully parsed. Otherwise, it returns false.</span>
<a name="l00106"></a>00106 <span class="keywordtype">bool</span> readVariableLength( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *value );
<a name="l00107"></a>00107
<a name="l00108"></a>00108 std::ifstream file_;
<a name="l00109"></a>00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nTracks_;
<a name="l00110"></a>00110 <span class="keywordtype">int</span> format_;
<a name="l00111"></a>00111 <span class="keywordtype">int</span> division_;
<a name="l00112"></a>00112 <span class="keywordtype">bool</span> usingTimeCode_;
<a name="l00113"></a>00113 std::vector&lt;double&gt; tickSeconds_;
<a name="l00114"></a>00114 std::vector&lt;long&gt; trackPointers_;
<a name="l00115"></a>00115 std::vector&lt;long&gt; trackOffsets_;
<a name="l00116"></a>00116 std::vector&lt;long&gt; trackLengths_;
<a name="l00117"></a>00117 std::vector&lt;char&gt; trackStatus_;
<a name="l00118"></a>00118
<a name="l00119"></a>00119 <span class="comment">// This structure and the following variables are used to save and</span>
<a name="l00120"></a>00120 <span class="comment">// keep track of a format 1 tempo map (and the initial tickSeconds</span>
<a name="l00121"></a>00121 <span class="comment">// parameter for formats 0 and 2).</span>
<a name="l00122"></a>00122 <span class="keyword">struct </span>TempoChange {
<a name="l00123"></a>00123 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
<a name="l00124"></a>00124 <span class="keywordtype">double</span> tickSeconds;
<a name="l00125"></a>00125 };
<a name="l00126"></a>00126 std::vector&lt;TempoChange&gt; tempoEvents_;
<a name="l00127"></a>00127 std::vector&lt;unsigned long&gt; trackCounters_;
<a name="l00128"></a>00128 std::vector&lt;unsigned int&gt; trackTempoIndex_;
<a name="l00129"></a>00129 };
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00101"></a>00101 <span class="keyword">protected</span>:
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="comment">// This protected class function is used for reading variable-length</span>
<a name="l00104"></a>00104 <span class="comment">// MIDI file values. It is assumed that this function is called with</span>
<a name="l00105"></a>00105 <span class="comment">// the file read pointer positioned at the start of a</span>
<a name="l00106"></a>00106 <span class="comment">// variable-length value. The function returns true if the value is</span>
<a name="l00107"></a>00107 <span class="comment">// successfully parsed. Otherwise, it returns false.</span>
<a name="l00108"></a>00108 <span class="keywordtype">bool</span> readVariableLength( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *value );
<a name="l00109"></a>00109
<a name="l00110"></a>00110 std::ifstream file_;
<a name="l00111"></a>00111 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nTracks_;
<a name="l00112"></a>00112 <span class="keywordtype">int</span> format_;
<a name="l00113"></a>00113 <span class="keywordtype">int</span> division_;
<a name="l00114"></a>00114 <span class="keywordtype">bool</span> usingTimeCode_;
<a name="l00115"></a>00115 std::vector&lt;double&gt; tickSeconds_;
<a name="l00116"></a>00116 std::vector&lt;long&gt; trackPointers_;
<a name="l00117"></a>00117 std::vector&lt;long&gt; trackOffsets_;
<a name="l00118"></a>00118 std::vector&lt;long&gt; trackLengths_;
<a name="l00119"></a>00119 std::vector&lt;char&gt; trackStatus_;
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="comment">// This structure and the following variables are used to save and</span>
<a name="l00122"></a>00122 <span class="comment">// keep track of a format 1 tempo map (and the initial tickSeconds</span>
<a name="l00123"></a>00123 <span class="comment">// parameter for formats 0 and 2).</span>
<a name="l00124"></a>00124 <span class="keyword">struct </span>TempoChange {
<a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count;
<a name="l00126"></a>00126 <span class="keywordtype">double</span> tickSeconds;
<a name="l00127"></a>00127 };
<a name="l00128"></a>00128 std::vector&lt;TempoChange&gt; tempoEvents_;
<a name="l00129"></a>00129 std::vector&lt;unsigned long&gt; trackCounters_;
<a name="l00130"></a>00130 std::vector&lt;unsigned int&gt; trackTempoIndex_;
<a name="l00131"></a>00131 };
<a name="l00132"></a>00132
<a name="l00133"></a>00133 } <span class="comment">// stk namespace</span>
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,41 +8,47 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>ModalBar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="preprocessor">#ifndef STK_MODALBAR_H</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODALBAR_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "Modal.h"</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classModalBar.html">00036</a> <span class="keyword">class </span><a class="code" href="classModalBar.html">ModalBar</a> : <span class="keyword">public</span> <a class="code" href="classModal.html">Modal</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classModalBar.html#a0">ModalBar</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classModalBar.html#a1">~ModalBar</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a2">setStickHardness</a>(StkFloat hardness);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a3">setStrikePosition</a>(StkFloat position);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a4">setPreset</a>(<span class="keywordtype">int</span> preset);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a5">setModulationDepth</a>(StkFloat mDepth);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classModalBar.html#a6">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00059"></a>00059 };
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>ModalBar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MODALBAR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODALBAR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Modal.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1ModalBar.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1ModalBar.html" title="STK resonant bar instrument class.">ModalBar</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Modal.html" title="STK resonance model abstract base class.">Modal</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1ModalBar.html#28577ea9c8c474eca560134d7991855d" title="Class constructor.">ModalBar</a>( <span class="keywordtype">void</span> );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classstk_1_1ModalBar.html#b804e801a2d0b8e8c3552162152d6f3b" title="Class destructor.">~ModalBar</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ModalBar.html#d4fbd1f97cd8c8c0782827969b0b4acf" title="Set stick hardness (0.0 - 1.0).">setStickHardness</a>( StkFloat hardness );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ModalBar.html#5f0c4d254cb7efb87603a9732a072b38" title="Set stick position (0.0 - 1.0).">setStrikePosition</a>( StkFloat position );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ModalBar.html#3a09a114ccd420ab549b8565eb4928af" title="Select a bar preset (currently modulo 9).">setPreset</a>( <span class="keywordtype">int</span> preset );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ModalBar.html#e67fe1187b2e2018fd147c7e6293cde2" title="Set the modulation (vibrato) depth.">setModulationDepth</a>( StkFloat mDepth );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ModalBar.html#84e5b9963b74f0e4657f79d5dea013cb" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00063"></a>00063 } <span class="comment">// stk namespace</span>
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,80 +8,107 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Modal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#ifndef STK_MODAL_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODAL_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "WaveLoop.h"</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00023"></a>00023
<a name="l00024"></a><a class="code" href="classModal.html">00024</a> <span class="keyword">class </span><a class="code" href="classModal.html">Modal</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00025"></a>00025 {
<a name="l00026"></a>00026 <span class="keyword">public</span>:
<a name="l00028"></a>00028
<a name="l00031"></a>00031 <a class="code" href="classModal.html#a0">Modal</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modes = 4 );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keyword">virtual</span> <a class="code" href="classModal.html#a1">~Modal</a>();
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a2">clear</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a4">setRatioAndRadius</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat ratio, StkFloat radius);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a5">setMasterGain</a>(StkFloat aGain);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a6">setDirectGain</a>(StkFloat aGain);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a7">setModeGain</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat gain);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a8">strike</a>(StkFloat amplitude);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a9">damp</a>(StkFloat amplitude);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a10">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classModal.html#a11">noteOff</a>(StkFloat amplitude);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classModal.html#a12">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value) = 0;
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Modal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MODAL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODAL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "FileLoop.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="keyword">namespace </span>stk {
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a><a class="code" href="classstk_1_1Modal.html">00026</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Modal.html" title="STK resonance model abstract base class.">Modal</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00027"></a>00027 {
<a name="l00028"></a>00028 <span class="keyword">public</span>:
<a name="l00030"></a>00030
<a name="l00033"></a>00033 <a class="code" href="classstk_1_1Modal.html#f6bfea135e80abb5537e62cf099c989a" title="Class constructor, taking the desired number of modes to create.">Modal</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modes = 4 );
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1Modal.html#7f45379ae10495b7a864cade0063705a" title="Class destructor.">~Modal</a>( <span class="keywordtype">void</span> );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#f064dc6ee4290fd51b4a6dc8a1f0909d" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#503092926e66667227bb46312a82a264" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#7e4f9a875e60485d07d50386ff63117f" title="Set the ratio and radius for a specified mode filter.">setRatioAndRadius</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat ratio, StkFloat radius );
<a name="l00046"></a>00046
<a name="l00048"></a><a class="code" href="classstk_1_1Modal.html#6e8d79358a5024b2e9a6c6f7c69a43c1">00048</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#6e8d79358a5024b2e9a6c6f7c69a43c1" title="Set the master gain.">setMasterGain</a>( StkFloat aGain ) { masterGain_ = aGain; };
<a name="l00049"></a>00049
<a name="l00051"></a><a class="code" href="classstk_1_1Modal.html#70006135da2ecdc46eff4156504d94e1">00051</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#70006135da2ecdc46eff4156504d94e1" title="Set the direct gain.">setDirectGain</a>( StkFloat aGain ) { directGain_ = aGain; };
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#08bdfedf10d00dcf19e82809926eab2f" title="Set the gain for a specified mode filter.">setModeGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> modeIndex, StkFloat gain );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#b3bac00a47fa6fef70cf3ea442e9b121" title="Initiate a strike with the given amplitude (0.0 - 1.0).">strike</a>( StkFloat amplitude );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#1884c49b76ec8b902f22d50e26a7e365" title="Damp modes with a given decay factor (0.0 - 1.0).">damp</a>( StkFloat amplitude );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#44ce41e8e24e591f382914d00a259c7f" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#3483dafe33fa37e98781279810ea808f" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modal.html#9fab49ec164852c381758f5d333f8891" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value ) = 0;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<a name="l00074"></a>00074 <a class="code" href="classFileWvIn.html">FileWvIn</a> *wave_;
<a name="l00075"></a>00075 <a class="code" href="classBiQuad.html">BiQuad</a> **filters_;
<a name="l00076"></a>00076 <a class="code" href="classOnePole.html">OnePole</a> onepole_;
<a name="l00077"></a>00077 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nModes_;
<a name="l00080"></a>00080 std::vector&lt;StkFloat&gt; ratios_;
<a name="l00081"></a>00081 std::vector&lt;StkFloat&gt; radii_;
<a name="l00082"></a>00082
<a name="l00083"></a>00083 StkFloat vibratoGain_;
<a name="l00084"></a>00084 StkFloat masterGain_;
<a name="l00085"></a>00085 StkFloat directGain_;
<a name="l00086"></a>00086 StkFloat stickHardness_;
<a name="l00087"></a>00087 StkFloat strikePosition_;
<a name="l00088"></a>00088 StkFloat baseFrequency_;
<a name="l00089"></a>00089 };
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00072"></a>00072 StkFloat <a class="code" href="classstk_1_1Modal.html#c1fd3f5dcb9b5cbb8bed0bff330c3890" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">protected</span>:
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> envelope_;
<a name="l00077"></a>00077 <a class="code" href="classstk_1_1FileWvIn.html" title="STK audio file input class.">FileWvIn</a> *wave_;
<a name="l00078"></a>00078 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> **filters_;
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> onepole_;
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nModes_;
<a name="l00083"></a>00083 std::vector&lt;StkFloat&gt; ratios_;
<a name="l00084"></a>00084 std::vector&lt;StkFloat&gt; radii_;
<a name="l00085"></a>00085
<a name="l00086"></a>00086 StkFloat vibratoGain_;
<a name="l00087"></a>00087 StkFloat masterGain_;
<a name="l00088"></a>00088 StkFloat directGain_;
<a name="l00089"></a>00089 StkFloat stickHardness_;
<a name="l00090"></a>00090 StkFloat strikePosition_;
<a name="l00091"></a>00091 StkFloat baseFrequency_;
<a name="l00092"></a>00092 };
<a name="l00093"></a>00093
<a name="l00094"></a><a class="code" href="classstk_1_1Modal.html#c1fd3f5dcb9b5cbb8bed0bff330c3890">00094</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Modal.html#c1fd3f5dcb9b5cbb8bed0bff330c3890" title="Compute and return one output sample.">Modal :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00095"></a>00095 {
<a name="l00096"></a>00096 StkFloat temp = masterGain_ * onepole_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( wave_-&gt;<a class="code" href="classstk_1_1FileWvIn.html#da668a0bc0bf89e155ef341de00babc2" title="Compute a sample frame and return the specified channel value.">tick</a>() * envelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>() );
<a name="l00097"></a>00097
<a name="l00098"></a>00098 StkFloat temp2 = 0.0;
<a name="l00099"></a>00099 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;nModes_; i++ )
<a name="l00100"></a>00100 temp2 += filters_[i]-&gt;<a class="code" href="classstk_1_1Modal.html#c1fd3f5dcb9b5cbb8bed0bff330c3890" title="Compute and return one output sample.">tick</a>(temp);
<a name="l00101"></a>00101
<a name="l00102"></a>00102 temp2 -= temp2 * directGain_;
<a name="l00103"></a>00103 temp2 += directGain_ * temp;
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="keywordflow">if</span> ( vibratoGain_ != 0.0 ) {
<a name="l00106"></a>00106 <span class="comment">// Calculate AM and apply to master out</span>
<a name="l00107"></a>00107 temp = 1.0 + ( vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * vibratoGain_ );
<a name="l00108"></a>00108 temp2 = temp * temp2;
<a name="l00109"></a>00109 }
<a name="l00110"></a>00110
<a name="l00111"></a>00111 lastFrame_[0] = temp2;
<a name="l00112"></a>00112 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00113"></a>00113 }
<a name="l00114"></a>00114
<a name="l00115"></a>00115 } <span class="comment">// stk namespace</span>
<a name="l00116"></a>00116
<a name="l00117"></a>00117 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,54 +8,98 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Modulate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Modulate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MODULATE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODULATE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef STK_MODULATE_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_MODULATE_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "SubNoise.h"</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classModulate.html">00021</a> <span class="keyword">class </span><a class="code" href="classModulate.html">Modulate</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00025"></a>00025
<a name="l00028"></a>00028 <a class="code" href="classModulate.html#a0">Modulate</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <a class="code" href="classModulate.html#a1">~Modulate</a>();
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a2">reset</a>();
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a3">setVibratoRate</a>(StkFloat rate);
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a4">setVibratoGain</a>(StkFloat gain);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classModulate.html#a5">setRandomGain</a>(StkFloat gain);
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="keyword">protected</span>:
<a name="l00021"></a>00021 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classstk_1_1Modulate.html">00023</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Modulate.html" title="STK periodic/random modulator.">Modulate</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00027"></a>00027
<a name="l00030"></a>00030 <a class="code" href="classstk_1_1Modulate.html#96812173415bfb086f5d8d738f4d0c2e" title="Class constructor.">Modulate</a>( <span class="keywordtype">void</span> );
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <a class="code" href="classstk_1_1Modulate.html#dd541ec0d037a21bd236b5790878d060" title="Class destructor.">~Modulate</a>( <span class="keywordtype">void</span> );
<a name="l00034"></a>00034
<a name="l00036"></a><a class="code" href="classstk_1_1Modulate.html#6cb78fe2dec3bebf2586764421556706">00036</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modulate.html#6cb78fe2dec3bebf2586764421556706" title="Reset internal state.">reset</a>( <span class="keywordtype">void</span> ) { lastFrame_[0] = 0.0; };
<a name="l00037"></a>00037
<a name="l00039"></a><a class="code" href="classstk_1_1Modulate.html#298b25f4b7cc56f2dffae5474a05999d">00039</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modulate.html#298b25f4b7cc56f2dffae5474a05999d" title="Set the periodic (vibrato) rate or frequency in Hz.">setVibratoRate</a>( StkFloat rate ) { vibrato_.<a class="code" href="classstk_1_1SineWave.html#1047a43714bc2e40c7e31e8f7e34adbc" title="Set the data interpolation rate based on a looping frequency.">setFrequency</a>( rate ); };
<a name="l00040"></a>00040
<a name="l00042"></a><a class="code" href="classstk_1_1Modulate.html#08f2d489a3fba3a10d1f301aed869ed4">00042</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modulate.html#08f2d489a3fba3a10d1f301aed869ed4" title="Set the periodic (vibrato) gain.">setVibratoGain</a>( StkFloat gain ) { vibratoGain_ = gain; };
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Modulate.html#c6e7a02378facf59916f2460ed5c2fa5" title="Set the random modulation gain.">setRandomGain</a>( StkFloat gain );
<a name="l00046"></a>00046
<a name="l00047"></a>00047 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00049"></a>00049 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00050"></a>00050 <a class="code" href="classSubNoise.html">SubNoise</a> noise_;
<a name="l00051"></a>00051 <a class="code" href="classOnePole.html">OnePole</a> filter_;
<a name="l00052"></a>00052 StkFloat vibratoGain_;
<a name="l00053"></a>00053 StkFloat randomGain_;
<a name="l00048"></a><a class="code" href="classstk_1_1Modulate.html#ddf73f58590ab082f106c9745c5bedc9">00048</a> StkFloat <a class="code" href="classstk_1_1Modulate.html#ddf73f58590ab082f106c9745c5bedc9" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00049"></a>00049
<a name="l00051"></a>00051 StkFloat <a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054
<a name="l00055"></a>00055 };
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00068"></a>00068 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00069"></a>00069 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filter_;
<a name="l00070"></a>00070 StkFloat vibratoGain_;
<a name="l00071"></a>00071 StkFloat randomGain_;
<a name="l00072"></a>00072 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> noiseRate_;
<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> noiseCounter_;
<a name="l00074"></a>00074
<a name="l00075"></a>00075 };
<a name="l00076"></a>00076
<a name="l00077"></a><a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d">00077</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">Modulate :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00078"></a>00078 {
<a name="l00079"></a>00079 <span class="comment">// Compute periodic and random modulations.</span>
<a name="l00080"></a>00080 lastFrame_[0] = vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00081"></a>00081 <span class="keywordflow">if</span> ( noiseCounter_++ &gt;= noiseRate_ ) {
<a name="l00082"></a>00082 noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00083"></a>00083 noiseCounter_ = 0;
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085 lastFrame_[0] += filter_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( noise_.<a class="code" href="classstk_1_1Noise.html#1d6c8ed80425cd0cea014bd2e328c823" title="Return the last computed output value.">lastOut</a>() );
<a name="l00086"></a>00086 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00087"></a>00087 }
<a name="l00088"></a>00088
<a name="l00089"></a><a class="code" href="classstk_1_1Modulate.html#942eee1bb78318e1b59afeb311748b2d">00089</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">Modulate :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00090"></a>00090 {
<a name="l00091"></a>00091 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00093"></a>00093 errorString_ &lt;&lt; <span class="stringliteral">"Modulate::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00095"></a>00095 }
<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>
<a name="l00098"></a>00098 StkFloat *samples = &amp;frames[channel];
<a name="l00099"></a>00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00100"></a>00100 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00101"></a>00101 *samples = <a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">Modulate::tick</a>();
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="keywordflow">return</span> frames;
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105
<a name="l00106"></a>00106 } <span class="comment">// stk namespace</span>
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,53 +8,77 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Moog.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#ifndef STK_MOOG_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_MOOG_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "Sampler.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "FormSwep.h"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classMoog.html">00027</a> <span class="keyword">class </span><a class="code" href="classMoog.html">Moog</a> : <span class="keyword">public</span> <a class="code" href="classSampler.html">Sampler</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00031"></a>00031
<a name="l00034"></a>00034 <a class="code" href="classMoog.html#a0">Moog</a>();
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <a class="code" href="classMoog.html#a1">~Moog</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a2">setFrequency</a>(StkFloat frequency);
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a4">setModulationSpeed</a>(StkFloat mSpeed);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a5">setModulationDepth</a>(StkFloat mDepth);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classMoog.html#a6">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Moog.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MOOG_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MOOG_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Sampler.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "FormSwep.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classstk_1_1Moog.html">00029</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Moog.html" title="STK moog-like swept filter sampling synthesis class.">Moog</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Sampler.html" title="STK sampling synthesis abstract base class.">Sampler</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<a name="l00036"></a>00036 <a class="code" href="classstk_1_1Moog.html#07c8d02638711d5f08a3b320b7274156" title="Class constructor.">Moog</a>( <span class="keywordtype">void</span> );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1Moog.html#c05815f49aab07e01ff0d4e5e8c4edba" title="Class destructor.">~Moog</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Moog.html#b0d66174dd734d55ef7224d6d8f2cb06" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Moog.html#899bc1c5c76fb29875d4df4ce594d44e" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00046"></a>00046
<a name="l00048"></a><a class="code" href="classstk_1_1Moog.html#feb63bf762f07851db22ae5bf18f0a81">00048</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Moog.html#feb63bf762f07851db22ae5bf18f0a81" title="Set the modulation (vibrato) speed in Hz.">setModulationSpeed</a>( StkFloat mSpeed ) { loops_[1]-&gt;setFrequency( mSpeed ); };
<a name="l00049"></a>00049
<a name="l00051"></a><a class="code" href="classstk_1_1Moog.html#32e5ee083d5d92494bbe9fac43c2070f">00051</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Moog.html#32e5ee083d5d92494bbe9fac43c2070f" title="Set the modulation (vibrato) depth.">setModulationDepth</a>( StkFloat mDepth ) { modDepth_ = mDepth * 0.5; };
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Moog.html#cadb54eccab35e3b18b62ffd96c18ac4" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00055"></a>00055
<a name="l00056"></a>00056 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <a class="code" href="classFormSwep.html">FormSwep</a> filters_[2];
<a name="l00059"></a>00059 StkFloat modDepth_;
<a name="l00060"></a>00060 StkFloat filterQ_;
<a name="l00061"></a>00061 StkFloat filterRate_;
<a name="l00062"></a>00062
<a name="l00063"></a>00063 };
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00057"></a>00057 StkFloat <a class="code" href="classstk_1_1Moog.html#b9635044198c12a5c1b5dbb94245ab5a" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1FormSwep.html" title="STK sweepable formant filter class.">FormSwep</a> filters_[2];
<a name="l00062"></a>00062 StkFloat modDepth_;
<a name="l00063"></a>00063 StkFloat filterQ_;
<a name="l00064"></a>00064 StkFloat filterRate_;
<a name="l00065"></a>00065
<a name="l00066"></a>00066 };
<a name="l00067"></a>00067
<a name="l00068"></a><a class="code" href="classstk_1_1Moog.html#b9635044198c12a5c1b5dbb94245ab5a">00068</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Moog.html#b9635044198c12a5c1b5dbb94245ab5a" title="Compute and return one output sample.">Moog :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00069"></a>00069 {
<a name="l00070"></a>00070 StkFloat temp;
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="keywordflow">if</span> ( modDepth_ != 0.0 ) {
<a name="l00073"></a>00073 temp = loops_[1]-&gt;tick() * modDepth_;
<a name="l00074"></a>00074 loops_[0]-&gt;setFrequency( baseFrequency_ * (1.0 + temp) );
<a name="l00075"></a>00075 }
<a name="l00076"></a>00076
<a name="l00077"></a>00077 temp = attackGain_ * attacks_[0]-&gt;tick();
<a name="l00078"></a>00078 temp += loopGain_ * loops_[0]-&gt;tick();
<a name="l00079"></a>00079 temp = filter_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( temp );
<a name="l00080"></a>00080 temp *= adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00081"></a>00081 temp = filters_[0].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( temp );
<a name="l00082"></a>00082 lastFrame_[0] = filters_[1].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>( temp );
<a name="l00083"></a>00083 <span class="keywordflow">return</span> lastFrame_[0] * 6.0;
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085
<a name="l00086"></a>00086 } <span class="comment">// stk namespace</span>
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,62 +8,68 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#ifndef STK_MUTEX_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_MUTEX_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "Stk.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Mutex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_MUTEX_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_MUTEX_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span>
<a name="l00008"></a>00008 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
<a name="l00009"></a>00009 <span class="keyword">typedef</span> pthread_mutex_t MUTEX;
<a name="l00010"></a>00010 <span class="keyword">typedef</span> pthread_cond_t CONDITION;
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span>
<a name="l00014"></a>00014 <span class="preprocessor"> #include &lt;windows.h&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor"> #include &lt;process.h&gt;</span>
<a name="l00016"></a>00016 <span class="keyword">typedef</span> CRITICAL_SECTION MUTEX;
<a name="l00017"></a>00017 <span class="keyword">typedef</span> HANDLE CONDITION;
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00019"></a>00019 <span class="preprocessor">#endif</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
<a name="l00022"></a>00022 <span class="keyword">typedef</span> pthread_mutex_t MUTEX;
<a name="l00023"></a>00023 <span class="keyword">typedef</span> pthread_cond_t CONDITION;
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor"> #include &lt;windows.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor"> #include &lt;process.h&gt;</span>
<a name="l00029"></a>00029 <span class="keyword">typedef</span> CRITICAL_SECTION MUTEX;
<a name="l00030"></a>00030 <span class="keyword">typedef</span> HANDLE CONDITION;
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a><a class="code" href="classMutex.html">00034</a> <span class="keyword">class </span><a class="code" href="classMutex.html">Mutex</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036 <span class="keyword">public</span>:
<a name="l00038"></a>00038 <a class="code" href="classMutex.html#a0">Mutex</a>();
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classMutex.html#a1">~Mutex</a>();
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a2">lock</a>(<span class="keywordtype">void</span>);
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a3">unlock</a>(<span class="keywordtype">void</span>);
<a name="l00048"></a>00048
<a name="l00021"></a>00021 <span class="keyword">namespace </span>stk {
<a name="l00022"></a>00022
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classstk_1_1Mutex.html">00036</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Mutex.html" title="STK mutex class.">Mutex</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1Mutex.html#869b23f40be55c01cc381290de1d1375" title="Default constructor.">Mutex</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1Mutex.html#63df62eabfb7976e34951145d7a7ced3" title="Class destructor.">~Mutex</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mutex.html#f2bb62c13745502b58644189d1db5b35" title="Lock the mutex.">lock</a>(<span class="keywordtype">void</span>);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mutex.html#e518f6d3177dd8c2138eccb8944591ee" title="Unlock the mutex.">unlock</a>(<span class="keywordtype">void</span>);
<a name="l00050"></a>00050
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a4">wait</a>(<span class="keywordtype">void</span>);
<a name="l00055"></a>00055
<a name="l00052"></a>00052
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mutex.html#fa637fae8940d6c3ad42384439962bbe" title="Wait indefinitely on the mutex condition variable.">wait</a>(<span class="keywordtype">void</span>);
<a name="l00057"></a>00057
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classMutex.html#a5">signal</a>(<span class="keywordtype">void</span>);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<a name="l00059"></a>00059
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Mutex.html#c3e3e69efa1587cb1f65fb645a8d43db" title="Signal the condition variable.">signal</a>(<span class="keywordtype">void</span>);
<a name="l00064"></a>00064
<a name="l00065"></a>00065 MUTEX mutex_;
<a name="l00066"></a>00066 CONDITION condition_;
<a name="l00067"></a>00067
<a name="l00068"></a>00068 };
<a name="l00065"></a>00065 <span class="keyword">protected</span>:
<a name="l00066"></a>00066
<a name="l00067"></a>00067 MUTEX mutex_;
<a name="l00068"></a>00068 CONDITION condition_;
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00070"></a>00070 };
<a name="l00071"></a>00071
<a name="l00072"></a>00072 } <span class="comment">// stk namespace</span>
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,48 +8,127 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>NRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00017"></a>00017 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="preprocessor">#ifndef STK_NREV_H</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define STK_NREV_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Delay.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>NRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_NREV_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_NREV_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a><a class="code" href="classNRev.html">00025</a> <span class="keyword">class </span><a class="code" href="classNRev.html">NRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00025"></a><a class="code" href="classstk_1_1NRev.html">00025</a> <span class="keyword">class </span><a class="code" href="classstk_1_1NRev.html" title="CCRMA&amp;#39;s NRev reverberator class.">NRev</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00026"></a>00026 {
<a name="l00027"></a>00027 <span class="keyword">public</span>:
<a name="l00029"></a>00029 <a class="code" href="classNRev.html#a0">NRev</a>( StkFloat T60 = 1.0 );
<a name="l00029"></a>00029 <a class="code" href="classstk_1_1NRev.html#68757d7a44e960acfd18cb94b465c727" title="Class constructor taking a T60 decay time argument (one second default value).">NRev</a>( StkFloat T60 = 1.0 );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <a class="code" href="classNRev.html#a1">~NRev</a>();
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1NRev.html#4097b11b38dd00d084ae4a94bc18f02c" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keywordtype">void</span> <a class="code" href="classNRev.html#a2">clear</a>();
<a name="l00035"></a>00035 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1NRev.html#9c0d41a2b9ce7fb9edb2d620ba005e3c" title="Set the reverberation T60 decay time.">setT60</a>( StkFloat T60 );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keywordtype">void</span> <a class="code" href="classNRev.html#a3">setT60</a>( StkFloat T60 );
<a name="l00039"></a>00039
<a name="l00040"></a>00040 <span class="keyword">protected</span>:
<a name="l00041"></a>00041
<a name="l00042"></a>00042 StkFloat computeSample( StkFloat input );
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[8];
<a name="l00045"></a>00045 <a class="code" href="classDelay.html">Delay</a> combDelays_[6];
<a name="l00046"></a>00046 StkFloat allpassCoefficient_;
<a name="l00047"></a>00047 StkFloat combCoefficient_[6];
<a name="l00048"></a>00048 StkFloat lowpassState_;
<a name="l00038"></a>00038
<a name="l00046"></a>00046 StkFloat <a class="code" href="classstk_1_1NRev.html#9f9faa6542271163680c1925309ed788" title="Return the specified channel value of the last computed stereo frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00047"></a>00047
<a name="l00049"></a>00049
<a name="l00050"></a>00050 };
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00056"></a>00056 StkFloat <a class="code" href="classstk_1_1NRev.html#cfb629e4822fc5bffcf39b8f3ed9cfa1" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00057"></a>00057
<a name="l00059"></a>00059
<a name="l00068"></a>00068 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1NRev.html#cfb629e4822fc5bffcf39b8f3ed9cfa1" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00069"></a>00069
<a name="l00071"></a>00071
<a name="l00080"></a>00080 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1NRev.html#cfb629e4822fc5bffcf39b8f3ed9cfa1" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keyword">protected</span>:
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> allpassDelays_[8];
<a name="l00085"></a>00085 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> combDelays_[6];
<a name="l00086"></a>00086 StkFloat allpassCoefficient_;
<a name="l00087"></a>00087 StkFloat combCoefficient_[6];
<a name="l00088"></a>00088 StkFloat lowpassState_;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 };
<a name="l00091"></a>00091
<a name="l00092"></a><a class="code" href="classstk_1_1NRev.html#9f9faa6542271163680c1925309ed788">00092</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1NRev.html#9f9faa6542271163680c1925309ed788" title="Return the specified channel value of the last computed stereo frame.">NRev :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00095"></a>00095 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00096"></a>00096 errorString_ &lt;&lt; <span class="stringliteral">"NRev::lastOut(): channel argument must be less than 2!"</span>;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span>
<a name="l00101"></a>00101 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00102"></a>00102 }
<a name="l00103"></a>00103
<a name="l00104"></a><a class="code" href="classstk_1_1NRev.html#cfb629e4822fc5bffcf39b8f3ed9cfa1">00104</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1NRev.html#cfb629e4822fc5bffcf39b8f3ed9cfa1" title="Input one sample to the effect and return the specified channel value of the computed...">NRev :: tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00108"></a>00108 errorString_ &lt;&lt; <span class="stringliteral">"NRev::tick(): channel argument must be less than 2!"</span>;
<a name="l00109"></a>00109 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span>
<a name="l00113"></a>00113 StkFloat temp, temp0, temp1, temp2, temp3;
<a name="l00114"></a>00114 <span class="keywordtype">int</span> i;
<a name="l00115"></a>00115
<a name="l00116"></a>00116 temp0 = 0.0;
<a name="l00117"></a>00117 <span class="keywordflow">for</span> ( i=0; i&lt;6; i++ ) {
<a name="l00118"></a>00118 temp = input + (combCoefficient_[i] * combDelays_[i].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00119"></a>00119 temp0 += combDelays_[i].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
<a name="l00122"></a>00122 <span class="keywordflow">for</span> ( i=0; i&lt;3; i++ ) {
<a name="l00123"></a>00123 temp = allpassDelays_[i].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00124"></a>00124 temp1 = allpassCoefficient_ * temp;
<a name="l00125"></a>00125 temp1 += temp0;
<a name="l00126"></a>00126 allpassDelays_[i].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp1);
<a name="l00127"></a>00127 temp0 = -(allpassCoefficient_ * temp1) + temp;
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129
<a name="l00130"></a>00130 <span class="comment">// One-pole lowpass filter.</span>
<a name="l00131"></a>00131 lowpassState_ = 0.7 * lowpassState_ + 0.3 * temp0;
<a name="l00132"></a>00132 temp = allpassDelays_[3].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00133"></a>00133 temp1 = allpassCoefficient_ * temp;
<a name="l00134"></a>00134 temp1 += lowpassState_;
<a name="l00135"></a>00135 allpassDelays_[3].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( temp1 );
<a name="l00136"></a>00136 temp1 = -( allpassCoefficient_ * temp1 ) + temp;
<a name="l00137"></a>00137
<a name="l00138"></a>00138 temp = allpassDelays_[4].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00139"></a>00139 temp2 = allpassCoefficient_ * temp;
<a name="l00140"></a>00140 temp2 += temp1;
<a name="l00141"></a>00141 allpassDelays_[4].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( temp2 );
<a name="l00142"></a>00142 lastFrame_[0] = effectMix_*( -( allpassCoefficient_ * temp2 ) + temp );
<a name="l00143"></a>00143
<a name="l00144"></a>00144 temp = allpassDelays_[5].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00145"></a>00145 temp3 = allpassCoefficient_ * temp;
<a name="l00146"></a>00146 temp3 += temp1;
<a name="l00147"></a>00147 allpassDelays_[5].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>( temp3 );
<a name="l00148"></a>00148 lastFrame_[1] = effectMix_*( - ( allpassCoefficient_ * temp3 ) + temp );
<a name="l00149"></a>00149
<a name="l00150"></a>00150 temp = ( 1.0 - effectMix_ ) * input;
<a name="l00151"></a>00151 lastFrame_[0] += temp;
<a name="l00152"></a>00152 lastFrame_[1] += temp;
<a name="l00153"></a>00153
<a name="l00154"></a>00154 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00155"></a>00155 }
<a name="l00156"></a>00156
<a name="l00157"></a>00157 } <span class="comment">// stk namespace</span>
<a name="l00158"></a>00158
<a name="l00159"></a>00159 <span class="preprocessor">#endif</span>
<a name="l00160"></a>00160 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,43 +8,73 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Noise.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef STK_NOISE_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_NOISE_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classNoise.html">00018</a> <span class="keyword">class </span><a class="code" href="classNoise.html">Noise</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00021"></a>00021
<a name="l00023"></a>00023 <a class="code" href="classNoise.html#a0">Noise</a>();
<a name="l00024"></a>00024
<a name="l00026"></a>00026
<a name="l00030"></a>00030 <a class="code" href="classNoise.html#a0">Noise</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed );
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keyword">virtual</span> <a class="code" href="classNoise.html#a2">~Noise</a>();
<a name="l00034"></a>00034
<a name="l00036"></a>00036
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classNoise.html#a3">setSeed</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed = 0 );
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Noise.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_NOISE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_NOISE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1Noise.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025
<a name="l00029"></a>00029 <a class="code" href="classstk_1_1Noise.html#2d442a08883be25f10952dff4e515f98" title="Default constructor that can also take a specific seed value.">Noise</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed = 0 );
<a name="l00030"></a>00030
<a name="l00032"></a>00032
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Noise.html#9507ae6eb261c577a64b4ecb5c1805dc" title="Seed the random number generator with a specific seed value.">setSeed</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seed = 0 );
<a name="l00037"></a>00037
<a name="l00039"></a><a class="code" href="classstk_1_1Noise.html#1d6c8ed80425cd0cea014bd2e328c823">00039</a> StkFloat <a class="code" href="classstk_1_1Noise.html#1d6c8ed80425cd0cea014bd2e328c823" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00040"></a>00040
<a name="l00042"></a>00042 StkFloat <a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00043"></a>00043
<a name="l00044"></a>00044 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00045"></a>00045
<a name="l00046"></a>00046 };
<a name="l00047"></a>00047
<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00052"></a>00052 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <span class="keyword">protected</span>:
<a name="l00055"></a>00055
<a name="l00056"></a>00056 };
<a name="l00057"></a>00057
<a name="l00058"></a><a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d">00058</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">Noise :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00059"></a>00059 {
<a name="l00060"></a>00060 <span class="keywordflow">return</span> lastFrame_[0] = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 );
<a name="l00061"></a>00061 }
<a name="l00062"></a>00062
<a name="l00063"></a><a class="code" href="classstk_1_1Noise.html#2f92e91787dc19309305cf246632cd50">00063</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">Noise :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00064"></a>00064 {
<a name="l00065"></a>00065 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00066"></a>00066 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00067"></a>00067 errorString_ &lt;&lt; <span class="stringliteral">"Noise::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00068"></a>00068 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00069"></a>00069 }
<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
<a name="l00071"></a>00071 <span class="preprocessor"></span>
<a name="l00072"></a>00072 StkFloat *samples = &amp;frames[channel];
<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00074"></a>00074 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00075"></a>00075 *samples = (StkFloat) ( 2.0 * rand() / (RAND_MAX + 1.0) - 1.0 );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 lastFrame_[0] = *(samples-hop);
<a name="l00078"></a>00078 <span class="keywordflow">return</span> frames;
<a name="l00079"></a>00079 }
<a name="l00080"></a>00080
<a name="l00081"></a>00081 } <span class="comment">// stk namespace</span>
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,56 +8,110 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>OnePole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_ONEPOLE_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEPOLE_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>OnePole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ONEPOLE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEPOLE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classOnePole.html">00020</a> <span class="keyword">class </span><a class="code" href="classOnePole.html">OnePole</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00020"></a><a class="code" href="classstk_1_1OnePole.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classOnePole.html#a0">OnePole</a>();
<a name="l00025"></a>00025 <a class="code" href="classstk_1_1OnePole.html#d0d322987780778e9f53f34837bea4b8" title="The default constructor creates a low-pass filter (pole at z = 0.9).">OnePole</a>( StkFloat thePole = 0.9 );
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classOnePole.html#a0">OnePole</a>( StkFloat thePole );
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1OnePole.html#03ac84c397620180090d86f2ecafccc5" title="Class destructor.">~OnePole</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <a class="code" href="classOnePole.html#a2">~OnePole</a>();
<a name="l00031"></a><a class="code" href="classstk_1_1OnePole.html#ff587fbf5ba36b3dd24b2fb8d66b7e00">00031</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OnePole.html#ff587fbf5ba36b3dd24b2fb8d66b7e00" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00034"></a><a class="code" href="classstk_1_1OnePole.html#1f99beebd9c4fbdfce6478e40d7625d8">00034</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OnePole.html#1f99beebd9c4fbdfce6478e40d7625d8" title="Set the a[1] coefficient value.">setA1</a>( StkFloat a1 ) { a_[1] = a1; };
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a4">setB0</a>(StkFloat b0);
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OnePole.html#a92dd54382721d5151ef29b291ba6cb5" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat a1, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a5">setA1</a>(StkFloat a1);
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a6">setPole</a>(StkFloat thePole);
<a name="l00040"></a>00040
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OnePole.html#cc1aaa35c6d5ffbbebfe0c4bfa7d1132" title="Set the pole position in the z-plane.">setPole</a>( StkFloat thePole );
<a name="l00048"></a>00048
<a name="l00050"></a><a class="code" href="classstk_1_1OnePole.html#d1ad906374102791a01bfd60844028ec">00050</a> StkFloat <a class="code" href="classstk_1_1OnePole.html#d1ad906374102791a01bfd60844028ec" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00051"></a>00051
<a name="l00053"></a>00053
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classOnePole.html#a7">setGain</a>(StkFloat gain);
<a name="l00058"></a>00058
<a name="l00060"></a>00060 StkFloat <a class="code" href="classOnePole.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00061"></a>00061
<a name="l00063"></a>00063 StkFloat <a class="code" href="classOnePole.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00064"></a>00064
<a name="l00066"></a>00066 StkFloat <a class="code" href="classOnePole.html#a10">tick</a>(StkFloat sample);
<a name="l00053"></a>00053 StkFloat <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00054"></a>00054
<a name="l00056"></a>00056
<a name="l00064"></a>00064 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00065"></a>00065
<a name="l00067"></a>00067
<a name="l00069"></a>00069
<a name="l00075"></a>00075 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classOnePole.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00075"></a>00075 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 };
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00079"></a><a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e">00079</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">OnePole :: tick</a>( StkFloat input )
<a name="l00080"></a>00080 {
<a name="l00081"></a>00081 inputs_[0] = gain_ * input;
<a name="l00082"></a>00082 lastFrame_[0] = b_[0] * inputs_[0] - a_[1] * outputs_[1];
<a name="l00083"></a>00083 outputs_[1] = lastFrame_[0];
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a><a class="code" href="classstk_1_1OnePole.html#f6611322a3c17f728cf6d57a4f932a1f">00088</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">OnePole :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00092"></a>00092 errorString_ &lt;&lt; <span class="stringliteral">"OnePole::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 StkFloat *samples = &amp;frames[channel];
<a name="l00098"></a>00098 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00099"></a>00099 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00100"></a>00100 inputs_[0] = gain_ * *samples;
<a name="l00101"></a>00101 *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
<a name="l00102"></a>00102 outputs_[1] = *samples;
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104
<a name="l00105"></a>00105 lastFrame_[0] = outputs_[1];
<a name="l00106"></a>00106 <span class="keywordflow">return</span> frames;
<a name="l00107"></a>00107 }
<a name="l00108"></a>00108
<a name="l00109"></a><a class="code" href="classstk_1_1OnePole.html#495943f1659f2da6208703a24275defb">00109</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">OnePole :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00110"></a>00110 {
<a name="l00111"></a>00111 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00113"></a>00113 errorString_ &lt;&lt; <span class="stringliteral">"OnePole::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00114"></a>00114 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span>
<a name="l00118"></a>00118 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00119"></a>00119 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00120"></a>00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00121"></a>00121 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00122"></a>00122 inputs_[0] = gain_ * *iSamples;
<a name="l00123"></a>00123 *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1];
<a name="l00124"></a>00124 outputs_[1] = *oSamples;
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 lastFrame_[0] = outputs_[1];
<a name="l00128"></a>00128 <span class="keywordflow">return</span> iFrames;
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00131"></a>00131 } <span class="comment">// stk namespace</span>
<a name="l00132"></a>00132
<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,56 +8,111 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>OneZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_ONEZERO_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEZERO_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>OneZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_ONEZERO_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_ONEZERO_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classOneZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classOneZero.html">OneZero</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00020"></a><a class="code" href="classstk_1_1OneZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classOneZero.html#a0">OneZero</a>();
<a name="l00025"></a>00025 <a class="code" href="classstk_1_1OneZero.html#da639198d28be5d170508a301ba854da" title="The default constructor creates a low-pass filter (zero at z = -1.0).">OneZero</a>( StkFloat theZero = -1.0 );
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classOneZero.html#a0">OneZero</a>(StkFloat theZero);
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1OneZero.html#8abe6156bad57d3a5cfebcf2ddc9b703" title="Class destructor.">~OneZero</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <a class="code" href="classOneZero.html#a2">~OneZero</a>();
<a name="l00031"></a><a class="code" href="classstk_1_1OneZero.html#ef2a8aa1759762649a74fc031198ebca">00031</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OneZero.html#ef2a8aa1759762649a74fc031198ebca" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00034"></a><a class="code" href="classstk_1_1OneZero.html#d4eda332f920e43a33871c8beb6f3042">00034</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OneZero.html#d4eda332f920e43a33871c8beb6f3042" title="Set the b[1] coefficient value.">setB1</a>( StkFloat b1 ) { b_[1] = b1; };
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a4">setB0</a>(StkFloat b0);
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OneZero.html#6113bf1dce0cb23719e30ee29e7c6735" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat b1, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a5">setB1</a>(StkFloat b1);
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a6">setZero</a>(StkFloat theZero);
<a name="l00040"></a>00040
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1OneZero.html#f8301fdb6a893ec6eb74fbcbeeaa463c" title="Set the zero position in the z-plane.">setZero</a>( StkFloat theZero );
<a name="l00048"></a>00048
<a name="l00050"></a><a class="code" href="classstk_1_1OneZero.html#54e160f62354939876477d9c5a65890c">00050</a> StkFloat <a class="code" href="classstk_1_1OneZero.html#54e160f62354939876477d9c5a65890c" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00051"></a>00051
<a name="l00053"></a>00053
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classOneZero.html#a7">setGain</a>(StkFloat gain);
<a name="l00058"></a>00058
<a name="l00060"></a>00060 StkFloat <a class="code" href="classOneZero.html#a8">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00061"></a>00061
<a name="l00063"></a>00063 StkFloat <a class="code" href="classOneZero.html#a9">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00064"></a>00064
<a name="l00066"></a>00066 StkFloat <a class="code" href="classOneZero.html#a10">tick</a>(StkFloat sample);
<a name="l00053"></a>00053 StkFloat <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00054"></a>00054
<a name="l00056"></a>00056
<a name="l00064"></a>00064 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00065"></a>00065
<a name="l00067"></a>00067
<a name="l00069"></a>00069
<a name="l00075"></a>00075 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classOneZero.html#a10">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00075"></a>00075 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 };
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00079"></a><a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da">00079</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">OneZero :: tick</a>( StkFloat input )
<a name="l00080"></a>00080 {
<a name="l00081"></a>00081 inputs_[0] = gain_ * input;
<a name="l00082"></a>00082 lastFrame_[0] = b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00083"></a>00083 inputs_[1] = inputs_[0];
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a><a class="code" href="classstk_1_1OneZero.html#2ca42a158bed919d8578c4a2dd184b3d">00088</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">OneZero :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00092"></a>00092 errorString_ &lt;&lt; <span class="stringliteral">"OneZero::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 StkFloat *samples = &amp;frames[channel];
<a name="l00098"></a>00098 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00099"></a>00099 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00100"></a>00100 inputs_[0] = gain_ * *samples;
<a name="l00101"></a>00101 *samples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00102"></a>00102 inputs_[1] = inputs_[0];
<a name="l00103"></a>00103 }
<a name="l00104"></a>00104
<a name="l00105"></a>00105 lastFrame_[0] = *(samples-hop);
<a name="l00106"></a>00106 <span class="keywordflow">return</span> frames;
<a name="l00107"></a>00107 }
<a name="l00108"></a>00108
<a name="l00109"></a><a class="code" href="classstk_1_1OneZero.html#8568a0d8c4aacc64b656b9fe46f217a4">00109</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">OneZero :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00110"></a>00110 {
<a name="l00111"></a>00111 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00113"></a>00113 errorString_ &lt;&lt; <span class="stringliteral">"OneZero::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00114"></a>00114 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span>
<a name="l00118"></a>00118 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00119"></a>00119 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00120"></a>00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00121"></a>00121 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00122"></a>00122 inputs_[0] = gain_ * *iSamples;
<a name="l00123"></a>00123 *oSamples = b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00124"></a>00124 inputs_[1] = inputs_[0];
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 lastFrame_[0] = *(oSamples-oHop);
<a name="l00128"></a>00128 <span class="keywordflow">return</span> iFrames;
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00131"></a>00131 } <span class="comment">// stk namespace</span>
<a name="l00132"></a>00132
<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,47 +8,108 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>PRCRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015 <span class="comment">/***************************************************/</span>
<a name="l00016"></a>00016
<a name="l00017"></a>00017 <span class="preprocessor">#ifndef STK_PRCREV_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define STK_PRCREV_H</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classPRCRev.html">00023</a> <span class="keyword">class </span><a class="code" href="classPRCRev.html">PRCRev</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00027"></a>00027 <a class="code" href="classPRCRev.html#a0">PRCRev</a>( StkFloat T60 = 1.0 );
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <a class="code" href="classPRCRev.html#a1">~PRCRev</a>();
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classPRCRev.html#a2">clear</a>();
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classPRCRev.html#a3">setT60</a>( StkFloat T60 );
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>PRCRev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PRCREV_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PRCREV_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Delay.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a><a class="code" href="classstk_1_1PRCRev.html">00024</a> <span class="keyword">class </span><a class="code" href="classstk_1_1PRCRev.html" title="Perry&amp;#39;s simple reverberator class.">PRCRev</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00025"></a>00025 {
<a name="l00026"></a>00026 <span class="keyword">public</span>:
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1PRCRev.html#fb6440fb909a3091f21f31f3565014de" title="Class constructor taking a T60 decay time argument (one second default value).">PRCRev</a>( StkFloat T60 = 1.0 );
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PRCRev.html#3e2fa911784a02a6d7211cbe2348ffe1" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PRCRev.html#9478ed84e76d12cc66d11716ebfa8b3b" title="Set the reverberation T60 decay time.">setT60</a>( StkFloat T60 );
<a name="l00035"></a>00035
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keyword">protected</span>:
<a name="l00039"></a>00039
<a name="l00040"></a>00040 StkFloat computeSample( StkFloat input );
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <a class="code" href="classDelay.html">Delay</a> allpassDelays_[2];
<a name="l00043"></a>00043 <a class="code" href="classDelay.html">Delay</a> combDelays_[2];
<a name="l00044"></a>00044 StkFloat allpassCoefficient_;
<a name="l00045"></a>00045 StkFloat combCoefficient_[2];
<a name="l00045"></a>00045 StkFloat <a class="code" href="classstk_1_1PRCRev.html#47ed5fee4401f0050d6a47d1154e81c6" title="Return the specified channel value of the last computed stereo frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00046"></a>00046
<a name="l00047"></a>00047 };
<a name="l00048"></a>00048
<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00055"></a>00055 StkFloat <a class="code" href="classstk_1_1PRCRev.html#da84d5241777575b660db100a85b35a6" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00067"></a>00067 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PRCRev.html#da84d5241777575b660db100a85b35a6" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00068"></a>00068
<a name="l00070"></a>00070
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PRCRev.html#da84d5241777575b660db100a85b35a6" title="Input one sample to the effect and return the specified channel value of the computed...">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="keyword">protected</span>:
<a name="l00082"></a>00082
<a name="l00083"></a>00083 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> allpassDelays_[2];
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1Delay.html" title="STK non-interpolating delay line class.">Delay</a> combDelays_[2];
<a name="l00085"></a>00085 StkFloat allpassCoefficient_;
<a name="l00086"></a>00086 StkFloat combCoefficient_[2];
<a name="l00087"></a>00087
<a name="l00088"></a>00088 };
<a name="l00089"></a>00089
<a name="l00090"></a><a class="code" href="classstk_1_1PRCRev.html#47ed5fee4401f0050d6a47d1154e81c6">00090</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1PRCRev.html#47ed5fee4401f0050d6a47d1154e81c6" title="Return the specified channel value of the last computed stereo frame.">PRCRev :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00091"></a>00091 {
<a name="l00092"></a>00092 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00094"></a>00094 errorString_ &lt;&lt; <span class="stringliteral">"PRCRev::lastOut(): channel argument must be less than 2!"</span>;
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00096"></a>00096 }
<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span>
<a name="l00099"></a>00099 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00100"></a>00100 }
<a name="l00101"></a>00101
<a name="l00102"></a><a class="code" href="classstk_1_1PRCRev.html#da84d5241777575b660db100a85b35a6">00102</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1PRCRev.html#da84d5241777575b660db100a85b35a6" title="Input one sample to the effect and return the specified channel value of the computed...">PRCRev :: tick</a>( StkFloat input, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00103"></a>00103 {
<a name="l00104"></a>00104 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt; 1 ) {
<a name="l00106"></a>00106 errorString_ &lt;&lt; <span class="stringliteral">"PRCRev::tick(): channel argument must be less than 2!"</span>;
<a name="l00107"></a>00107 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109 <span class="preprocessor">#endif</span>
<a name="l00110"></a>00110 <span class="preprocessor"></span>
<a name="l00111"></a>00111 StkFloat temp, temp0, temp1, temp2, temp3;
<a name="l00112"></a>00112
<a name="l00113"></a>00113 temp = allpassDelays_[0].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00114"></a>00114 temp0 = allpassCoefficient_ * temp;
<a name="l00115"></a>00115 temp0 += input;
<a name="l00116"></a>00116 allpassDelays_[0].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp0);
<a name="l00117"></a>00117 temp0 = -(allpassCoefficient_ * temp0) + temp;
<a name="l00118"></a>00118
<a name="l00119"></a>00119 temp = allpassDelays_[1].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>();
<a name="l00120"></a>00120 temp1 = allpassCoefficient_ * temp;
<a name="l00121"></a>00121 temp1 += temp0;
<a name="l00122"></a>00122 allpassDelays_[1].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp1);
<a name="l00123"></a>00123 temp1 = -(allpassCoefficient_ * temp1) + temp;
<a name="l00124"></a>00124
<a name="l00125"></a>00125 temp2 = temp1 + (combCoefficient_[0] * combDelays_[0].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00126"></a>00126 temp3 = temp1 + (combCoefficient_[1] * combDelays_[1].<a class="code" href="classstk_1_1Delay.html#7b563a37eec1773e8e82f9e328aed9b2" title="Return the last computed output value.">lastOut</a>());
<a name="l00127"></a>00127
<a name="l00128"></a>00128 lastFrame_[0] = effectMix_ * (combDelays_[0].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp2));
<a name="l00129"></a>00129 lastFrame_[1] = effectMix_ * (combDelays_[1].<a class="code" href="classstk_1_1Delay.html#a1a929e0e324417b8a55cbf8770532e9" title="Input one sample to the filter and return one output.">tick</a>(temp3));
<a name="l00130"></a>00130 temp = (1.0 - effectMix_) * input;
<a name="l00131"></a>00131 lastFrame_[0] += temp;
<a name="l00132"></a>00132 lastFrame_[1] += temp;
<a name="l00133"></a>00133
<a name="l00134"></a>00134 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136
<a name="l00137"></a>00137 } <span class="comment">// stk namespace</span>
<a name="l00138"></a>00138
<a name="l00139"></a>00139 <span class="preprocessor">#endif</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,40 +8,74 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>PercFlut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028
<a name="l00029"></a>00029 <span class="preprocessor">#ifndef STK_PERCFLUT_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define STK_PERCFLUT_H</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "FM.h"</span>
<a name="l00033"></a>00033
<a name="l00034"></a><a class="code" href="classPercFlut.html">00034</a> <span class="keyword">class </span><a class="code" href="classPercFlut.html">PercFlut</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036 <span class="keyword">public</span>:
<a name="l00038"></a>00038
<a name="l00041"></a>00041 <a class="code" href="classPercFlut.html#a0">PercFlut</a>();
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <a class="code" href="classPercFlut.html#a1">~PercFlut</a>();
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classPercFlut.html#a2">setFrequency</a>(StkFloat frequency);
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classPercFlut.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>PercFlut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PERCFLUT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PERCFLUT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classstk_1_1PercFlut.html">00036</a> <span class="keyword">class </span><a class="code" href="classstk_1_1PercFlut.html" title="STK percussive flute FM synthesis instrument.">PercFlut</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1PercFlut.html#b51f05b79d818ed8ba80fd827a4839c2" title="Class constructor.">PercFlut</a>( <span class="keywordtype">void</span> );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1PercFlut.html#dd2a18e8835d665d505521e0298bd2f0" title="Class destructor.">~PercFlut</a>( <span class="keywordtype">void</span> );
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PercFlut.html#24197fb4ae0bf806d8e3f6fe4eb5598c" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PercFlut.html#7ebfc19d4c41482a699f43b2c06dc02d" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00053"></a>00053
<a name="l00054"></a>00054 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00055"></a>00055 };
<a name="l00055"></a>00055 StkFloat <a class="code" href="classstk_1_1PercFlut.html#c2b2958902c044413a1c7ff3bd0f8054" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00057"></a>00057 <span class="keyword">protected</span>:
<a name="l00058"></a>00058
<a name="l00059"></a>00059 };
<a name="l00060"></a>00060
<a name="l00061"></a><a class="code" href="classstk_1_1PercFlut.html#c2b2958902c044413a1c7ff3bd0f8054">00061</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1PercFlut.html#c2b2958902c044413a1c7ff3bd0f8054" title="Compute and return one output sample.">PercFlut :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00062"></a>00062 {
<a name="l00063"></a>00063 <span class="keyword">register</span> StkFloat temp;
<a name="l00064"></a>00064
<a name="l00065"></a>00065 temp = vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * modDepth_ * 0.2;
<a name="l00066"></a>00066 waves_[0]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[0]);
<a name="l00067"></a>00067 waves_[1]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[1]);
<a name="l00068"></a>00068 waves_[2]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[2]);
<a name="l00069"></a>00069 waves_[3]-&gt;setFrequency(baseFrequency_ * (1.0 + temp) * ratios_[3]);
<a name="l00070"></a>00070
<a name="l00071"></a>00071 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00072"></a>00072 temp = gains_[3] * adsr_[3]-&gt;tick() * waves_[3]-&gt;tick();
<a name="l00073"></a>00073
<a name="l00074"></a>00074 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00075"></a>00075 waves_[2]-&gt;addPhaseOffset( temp );
<a name="l00076"></a>00076 temp = (1.0 - (control2_ * 0.5)) * gains_[2] * adsr_[2]-&gt;<a class="code" href="classstk_1_1PercFlut.html#c2b2958902c044413a1c7ff3bd0f8054" title="Compute and return one output sample.">tick</a>() * waves_[2]-&gt;tick();
<a name="l00077"></a>00077
<a name="l00078"></a>00078 temp += control2_ * 0.5 * gains_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00079"></a>00079 temp = temp * control1_;
<a name="l00080"></a>00080
<a name="l00081"></a>00081 waves_[0]-&gt;addPhaseOffset(temp);
<a name="l00082"></a>00082 temp = gains_[0] * adsr_[0]-&gt;tick() * waves_[0]-&gt;tick();
<a name="l00083"></a>00083
<a name="l00084"></a>00084 lastFrame_[0] = temp * 0.5;
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a>00088 } <span class="comment">// stk namespace</span>
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,49 +8,55 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Phonemes.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef STK_PHONEMES_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_PHONEMES_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classPhonemes.html">00018</a> <span class="keyword">class </span><a class="code" href="classPhonemes.html">Phonemes</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00021"></a>00021
<a name="l00022"></a>00022 <a class="code" href="classPhonemes.html">Phonemes</a>(<span class="keywordtype">void</span>);
<a name="l00023"></a>00023 ~<a class="code" href="classPhonemes.html">Phonemes</a>(<span class="keywordtype">void</span>);
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classPhonemes.html#e0">name</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e1">voiceGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e2">noiseGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e3">formantFrequency</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e4">formantRadius</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keyword">static</span> StkFloat <a class="code" href="classPhonemes.html#e5">formantGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="keyword">private</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Phonemes.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PHONEMES_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PHONEMES_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1Phonemes.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Phonemes.html" title="STK phonemes table.">Phonemes</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <a class="code" href="classstk_1_1Phonemes.html" title="STK phonemes table.">Phonemes</a>(<span class="keywordtype">void</span>);
<a name="l00025"></a>00025 ~<a class="code" href="classstk_1_1Phonemes.html" title="STK phonemes table.">Phonemes</a>(<span class="keywordtype">void</span>);
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classstk_1_1Phonemes.html#8b1a29ac4e6ddb629154d298d5abf585" title="Returns the phoneme name for the given index (0-31).">name</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Phonemes.html#3e4cded114bb563bc78412c7b6b1d099" title="Returns the voiced component gain for the given phoneme index (0-31).">voiceGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Phonemes.html#57715042b02c835da194753bc8f8a99e" title="Returns the unvoiced component gain for the given phoneme index (0-31).">noiseGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Phonemes.html#1234a72b76a952865642c783e80d4d84" title="Returns the formant frequency for the given phoneme index (0-31) and partial (0-3)...">formantFrequency</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Phonemes.html#aa22b87de100770a4995632932c324bb" title="Returns the formant radius for the given phoneme index (0-31) and partial (0-3).">formantRadius</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Phonemes.html#212b5fd0d61c8e4b08a78bb9912f7903" title="Returns the formant gain for the given phoneme index (0-31) and partial (0-3).">formantGain</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partial );
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> phonemeNames[][4];
<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeGains[][2];
<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeParameters[][4][3];
<a name="l00048"></a>00048 };
<a name="l00049"></a>00049
<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00045"></a>00045 <span class="keyword">private</span>:
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> phonemeNames[][4];
<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeGains[][2];
<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keyword">const</span> StkFloat phonemeParameters[][4][3];
<a name="l00050"></a>00050 };
<a name="l00051"></a>00051
<a name="l00052"></a>00052 } <span class="comment">// stk namespace</span>
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,49 +8,94 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>PitShift.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_PITSHIFT_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_PITSHIFT_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classPitShift.html">00018</a> <span class="keyword">class </span><a class="code" href="classPitShift.html">PitShift</a> : <span class="keyword">public</span> <a class="code" href="classEffect.html">Effect</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00022"></a>00022 <a class="code" href="classPitShift.html#a0">PitShift</a>();
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classPitShift.html#a1">~PitShift</a>();
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <span class="keywordtype">void</span> <a class="code" href="classPitShift.html#a2">clear</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classPitShift.html#a3">setShift</a>(StkFloat shift);
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="keyword">protected</span>:
<a name="l00034"></a>00034
<a name="l00035"></a>00035 StkFloat computeSample( StkFloat input );
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>PitShift.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PITSHIFT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PITSHIFT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Effect.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="keyword">const</span> <span class="keywordtype">int</span> maxDelay = 5024;
<a name="l00021"></a>00021
<a name="l00022"></a><a class="code" href="classstk_1_1PitShift.html">00022</a> <span class="keyword">class </span><a class="code" href="classstk_1_1PitShift.html" title="STK simple pitch shifter effect class.">PitShift</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Effect.html" title="STK abstract effects parent class.">Effect</a>
<a name="l00023"></a>00023 {
<a name="l00024"></a>00024 <span class="keyword">public</span>:
<a name="l00026"></a>00026 <a class="code" href="classstk_1_1PitShift.html#8fdf3ef3b1a94e126a2953c6b8ed8cca" title="Class constructor.">PitShift</a>( <span class="keywordtype">void</span> );
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PitShift.html#fa1b0ff95ef9a22991525f72d703220e" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PitShift.html#1ade8534def67636af6f0d7e50825891" title="Set the pitch shift factor (1.0 produces no shift).">setShift</a>( StkFloat shift );
<a name="l00033"></a>00033
<a name="l00035"></a><a class="code" href="classstk_1_1PitShift.html#782ad7b47c450c1584cebd20570f17e3">00035</a> StkFloat <a class="code" href="classstk_1_1PitShift.html#782ad7b47c450c1584cebd20570f17e3" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <a class="code" href="classDelayL.html">DelayL</a> delayLine_[2];
<a name="l00038"></a>00038 StkFloat delay_[2];
<a name="l00039"></a>00039 StkFloat env_[2];
<a name="l00040"></a>00040 StkFloat rate_;
<a name="l00041"></a>00041 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delayLength;
<a name="l00042"></a>00042 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> halfLength;
<a name="l00043"></a>00043
<a name="l00044"></a>00044 };
<a name="l00045"></a>00045
<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00038"></a>00038 StkFloat <a class="code" href="classstk_1_1PitShift.html#433fcd3da3e7b08cb8b3392865e93033" title="Input one sample to the effect and return one output.">tick</a>( StkFloat input );
<a name="l00039"></a>00039
<a name="l00041"></a>00041
<a name="l00049"></a>00049 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PitShift.html#433fcd3da3e7b08cb8b3392865e93033" title="Input one sample to the effect and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00050"></a>00050
<a name="l00052"></a>00052
<a name="l00060"></a>00060 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PitShift.html#433fcd3da3e7b08cb8b3392865e93033" title="Input one sample to the effect and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keyword">protected</span>:
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delayLine_[2];
<a name="l00065"></a>00065 StkFloat delay_[2];
<a name="l00066"></a>00066 StkFloat env_[2];
<a name="l00067"></a>00067 StkFloat rate_;
<a name="l00068"></a>00068 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delayLength_;
<a name="l00069"></a>00069 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> halfLength_;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a><a class="code" href="classstk_1_1PitShift.html#433fcd3da3e7b08cb8b3392865e93033">00073</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1PitShift.html#433fcd3da3e7b08cb8b3392865e93033" title="Input one sample to the effect and return one output.">PitShift :: tick</a>( StkFloat input )
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075 <span class="comment">// Calculate the two delay length values, keeping them within the</span>
<a name="l00076"></a>00076 <span class="comment">// range 12 to maxDelay-12.</span>
<a name="l00077"></a>00077 delay_[0] += rate_;
<a name="l00078"></a>00078 <span class="keywordflow">while</span> ( delay_[0] &gt; maxDelay-12 ) delay_[0] -= delayLength_;
<a name="l00079"></a>00079 <span class="keywordflow">while</span> ( delay_[0] &lt; 12 ) delay_[0] += delayLength_;
<a name="l00080"></a>00080
<a name="l00081"></a>00081 delay_[1] = delay_[0] + halfLength_;
<a name="l00082"></a>00082 <span class="keywordflow">while</span> ( delay_[1] &gt; maxDelay-12 ) delay_[1] -= delayLength_;
<a name="l00083"></a>00083 <span class="keywordflow">while</span> ( delay_[1] &lt; 12 ) delay_[1] += delayLength_;
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="comment">// Set the new delay line lengths.</span>
<a name="l00086"></a>00086 delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( delay_[0] );
<a name="l00087"></a>00087 delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#80dd30628502a7c3b37ff045176eb91f" title="Set the delay-line length.">setDelay</a>( delay_[1] );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="comment">// Calculate a triangular envelope.</span>
<a name="l00090"></a>00090 env_[1] = fabs( ( delay_[0] - halfLength_ + 12 ) * ( 1.0 / (halfLength_ + 12 ) ) );
<a name="l00091"></a>00091 env_[0] = 1.0 - env_[1];
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <span class="comment">// Delay input and apply envelope.</span>
<a name="l00094"></a>00094 lastFrame_[0] = env_[0] * delayLine_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( input );
<a name="l00095"></a>00095 lastFrame_[0] += env_[1] * delayLine_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( input );
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="comment">// Compute effect mix and output.</span>
<a name="l00098"></a>00098 lastFrame_[0] *= effectMix_;
<a name="l00099"></a>00099 lastFrame_[0] += ( 1.0 - effectMix_ ) * input;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00102"></a>00102 }
<a name="l00103"></a>00103
<a name="l00104"></a>00104 } <span class="comment">// stk namespace</span>
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,69 +8,75 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>PluckTwo.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#ifndef STK_PLUCKTWO_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKTWO_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classPluckTwo.html">00029</a> <span class="keyword">class </span><a class="code" href="classPluckTwo.html">PluckTwo</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033 <a class="code" href="classPluckTwo.html#a0">PluckTwo</a>(StkFloat lowestFrequency);
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keyword">virtual</span> <a class="code" href="classPluckTwo.html#a1">~PluckTwo</a>();
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a2">clear</a>();
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a4">setDetune</a>(StkFloat detune);
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a5">setFreqAndDetune</a>(StkFloat frequency, StkFloat detune);
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a6">setPluckPosition</a>(StkFloat position);
<a name="l00052"></a>00052
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>PluckTwo.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PLUCKTWO_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKTWO_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1PluckTwo.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1PluckTwo.html" title="STK enhanced plucked string model class.">PluckTwo</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035 <a class="code" href="classstk_1_1PluckTwo.html#a121655f6007003aebb5de425e98d099" title="Class constructor, taking the lowest desired playing frequency.">PluckTwo</a>( StkFloat lowestFrequency );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1PluckTwo.html#c8a0720b08d20741b0d8a312f1cf7e5c" title="Class destructor.">~PluckTwo</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#71821e47009a94de9e8a1f3305263840" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#9f0618a28243b235f6c0f424a236709c" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#6b355a495d9122273fb8c88009bf79d6" title="Detune the two strings by the given factor. A value of 1.0 produces unison strings...">setDetune</a>( StkFloat detune );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#3cd8e9135b1d8a97b87f9486dd3cd671" title="Efficient combined setting of frequency and detuning.">setFreqAndDetune</a>( StkFloat frequency, StkFloat detune );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#fffb424a2957fc691363ba1227809695" title="Set the pluck or &amp;quot;excitation&amp;quot; position along the string (0.0 - 1.0).">setPluckPosition</a>( StkFloat position );
<a name="l00054"></a>00054
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a7">setBaseLoopGain</a>(StkFloat aGain);
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPluckTwo.html#a8">noteOff</a>(StkFloat amplitude);
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="keyword">protected</span>:
<a name="l00056"></a>00056
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#168f563174e22b221744ef66b35a5277" title="Set the base loop gain.">setBaseLoopGain</a>( StkFloat aGain );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PluckTwo.html#0d5d81db10c145f3d5bafc5775d147bf" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> ) = 0;
<a name="l00066"></a>00066 <span class="keyword">virtual</span> StkFloat tick( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) = 0;
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
<a name="l00069"></a>00069 <a class="code" href="classDelayA.html">DelayA</a> delayLine2_;
<a name="l00070"></a>00070 <a class="code" href="classDelayL.html">DelayL</a> combDelay_;
<a name="l00071"></a>00071 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<a name="l00072"></a>00072 <a class="code" href="classOneZero.html">OneZero</a> filter2_;
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00075"></a>00075 StkFloat loopGain_;
<a name="l00076"></a>00076 StkFloat baseLoopGain_;
<a name="l00077"></a>00077 StkFloat lastFrequency_;
<a name="l00078"></a>00078 StkFloat lastLength_;
<a name="l00079"></a>00079 StkFloat detuning_;
<a name="l00080"></a>00080 StkFloat pluckAmplitude_;
<a name="l00081"></a>00081 StkFloat pluckPosition_;
<a name="l00082"></a>00082
<a name="l00083"></a>00083 };
<a name="l00068"></a>00068 <span class="keyword">protected</span>:
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine_;
<a name="l00071"></a>00071 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine2_;
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> combDelay_;
<a name="l00073"></a>00073 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter_;
<a name="l00074"></a>00074 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter2_;
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00077"></a>00077 StkFloat loopGain_;
<a name="l00078"></a>00078 StkFloat baseLoopGain_;
<a name="l00079"></a>00079 StkFloat lastFrequency_;
<a name="l00080"></a>00080 StkFloat lastLength_;
<a name="l00081"></a>00081 StkFloat detuning_;
<a name="l00082"></a>00082 StkFloat pluckAmplitude_;
<a name="l00083"></a>00083 StkFloat pluckPosition_;
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00085"></a>00085 };
<a name="l00086"></a>00086
<a name="l00087"></a>00087 } <span class="comment">// stk namespace</span>
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,58 +8,70 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Plucked.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef STK_PLUCKED_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKED_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classPlucked.html">00029</a> <span class="keyword">class </span><a class="code" href="classPlucked.html">Plucked</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033 <a class="code" href="classPlucked.html#a0">Plucked</a>(StkFloat lowestFrequency);
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <a class="code" href="classPlucked.html#a1">~Plucked</a>();
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a2">clear</a>();
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a4">pluck</a>(StkFloat amplitude);
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a5">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPlucked.html#a6">noteOff</a>(StkFloat amplitude);
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Plucked.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_PLUCKED_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_PLUCKED_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="keyword">namespace </span>stk {
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1Plucked.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Plucked.html" title="STK plucked string model class.">Plucked</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035 <a class="code" href="classstk_1_1Plucked.html#279ac82759d4184d9ad961e21dacdbca" title="Class constructor, taking the lowest desired playing frequency.">Plucked</a>( StkFloat lowestFrequency );
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1Plucked.html#6232b4a1ed48407fe9e66e1835011b5e" title="Class destructor.">~Plucked</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Plucked.html#32a7063198af354fc007e3d903e21208" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Plucked.html#1864c705b85633542621ba3ba4491331" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Plucked.html#9c8741ae249b590d24937743caf11f6c" title="Pluck the string with the given amplitude using the current frequency.">pluck</a>( StkFloat amplitude );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Plucked.html#1a8ce6b094c8e2b5c6dda805c032cd44" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Plucked.html#ba5a6b6850874da55c32388e9857d6fc" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00054"></a>00054
<a name="l00055"></a>00055 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
<a name="l00058"></a>00058 <a class="code" href="classOneZero.html">OneZero</a> loopFilter_;
<a name="l00059"></a>00059 <a class="code" href="classOnePole.html">OnePole</a> pickFilter_;
<a name="l00060"></a>00060 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00061"></a>00061 StkFloat loopGain_;
<a name="l00062"></a>00062 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00063"></a>00063
<a name="l00064"></a>00064 };
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00056"></a>00056 StkFloat <a class="code" href="classstk_1_1Plucked.html#db4a5d731ad2b680120313f03a020c25" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="keyword">protected</span>:
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine_;
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> loopFilter_;
<a name="l00062"></a>00062 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> pickFilter_;
<a name="l00063"></a>00063 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00064"></a>00064 StkFloat loopGain_;
<a name="l00065"></a>00065 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00066"></a>00066
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068
<a name="l00069"></a><a class="code" href="classstk_1_1Plucked.html#db4a5d731ad2b680120313f03a020c25">00069</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Plucked.html#db4a5d731ad2b680120313f03a020c25" title="Compute and return one output sample.">Plucked :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00070"></a>00070 {
<a name="l00071"></a>00071 <span class="comment">// Here's the whole inner loop of the instrument!!</span>
<a name="l00072"></a>00072 <span class="keywordflow">return</span> lastFrame_[0] = 3.0 * delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( loopFilter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * loopGain_ ) );
<a name="l00073"></a>00073 }
<a name="l00074"></a>00074
<a name="l00075"></a>00075 } <span class="comment">// stk namespace</span>
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="preprocessor">#endif</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,59 +8,92 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>PoleZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_POLEZERO_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_POLEZERO_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classPoleZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classPoleZero.html">PoleZero</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classPoleZero.html#a0">PoleZero</a>();
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classPoleZero.html#a1">~PoleZero</a>();
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a2">clear</a>(<span class="keywordtype">void</span>);
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a3">setB0</a>(StkFloat b0);
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a4">setB1</a>(StkFloat b1);
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a5">setA1</a>(StkFloat a1);
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a6">setAllpass</a>(StkFloat coefficient);
<a name="l00049"></a>00049
<a name="l00051"></a>00051
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a7">setBlockZero</a>(StkFloat thePole = 0.99);
<a name="l00058"></a>00058
<a name="l00060"></a>00060
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classPoleZero.html#a8">setGain</a>( StkFloat gain );
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>PoleZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_POLEZERO_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_POLEZERO_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a><a class="code" href="classstk_1_1PoleZero.html">00021</a> <span class="keyword">class </span><a class="code" href="classstk_1_1PoleZero.html" title="STK one-pole, one-zero filter class.">PoleZero</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00022"></a>00022 {
<a name="l00023"></a>00023 <span class="keyword">public</span>:
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <a class="code" href="classstk_1_1PoleZero.html#d9a46d21ee470d7afcd641807b5e314e" title="Default constructor creates a first-order pass-through filter.">PoleZero</a>();
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <a class="code" href="classstk_1_1PoleZero.html#beb7feab68b5d8370bd9c2aef94c8541" title="Class destructor.">~PoleZero</a>();
<a name="l00030"></a>00030
<a name="l00032"></a><a class="code" href="classstk_1_1PoleZero.html#8e4a45e4a5263c66e9d447688975ca0f">00032</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#8e4a45e4a5263c66e9d447688975ca0f" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00033"></a>00033
<a name="l00035"></a><a class="code" href="classstk_1_1PoleZero.html#e33d1e1f594b4cf9063518c7b065c5f5">00035</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#e33d1e1f594b4cf9063518c7b065c5f5" title="Set the b[1] coefficient value.">setB1</a>( StkFloat b1 ) { b_[1] = b1; };
<a name="l00036"></a>00036
<a name="l00038"></a><a class="code" href="classstk_1_1PoleZero.html#e3f0fc1182eb06730f09b8137c01779f">00038</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#e3f0fc1182eb06730f09b8137c01779f" title="Set the a[1] coefficient value.">setA1</a>( StkFloat a1 ) { a_[1] = a1; };
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#f34e485fbcaa1f4985a88a882ca9d5c5" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat b1, StkFloat a1, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00042"></a>00042
<a name="l00044"></a>00044
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#51264d601b635aa0274c75ba1aa5a048" title="Set the filter for allpass behavior using coefficient.">setAllpass</a>( StkFloat coefficient );
<a name="l00050"></a>00050
<a name="l00052"></a>00052
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1PoleZero.html#cb7119d8964215546bbeeb6029f5c46f" title="Create a DC blocking filter with the given pole position in the z-plane.">setBlockZero</a>( StkFloat thePole = 0.99 );
<a name="l00059"></a>00059
<a name="l00061"></a><a class="code" href="classstk_1_1PoleZero.html#03edf036d1619bb5d33bb41701833232">00061</a> StkFloat <a class="code" href="classstk_1_1PoleZero.html#03edf036d1619bb5d33bb41701833232" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00062"></a>00062
<a name="l00064"></a>00064 StkFloat <a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 StkFloat <a class="code" href="classPoleZero.html#a9">getGain</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00068"></a>00068
<a name="l00070"></a>00070 StkFloat <a class="code" href="classPoleZero.html#a10">lastOut</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00071"></a>00071
<a name="l00073"></a>00073 StkFloat <a class="code" href="classPoleZero.html#a11">tick</a>( StkFloat sample );
<a name="l00074"></a>00074
<a name="l00076"></a>00076
<a name="l00082"></a>00082 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classPoleZero.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00083"></a>00083
<a name="l00084"></a>00084 };
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00067"></a>00067
<a name="l00074"></a>00074 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00075"></a>00075
<a name="l00076"></a>00076 };
<a name="l00077"></a>00077
<a name="l00078"></a><a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228">00078</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">PoleZero :: tick</a>( StkFloat input )
<a name="l00079"></a>00079 {
<a name="l00080"></a>00080 inputs_[0] = gain_ * input;
<a name="l00081"></a>00081 lastFrame_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] - a_[1] * outputs_[1];
<a name="l00082"></a>00082 inputs_[1] = inputs_[0];
<a name="l00083"></a>00083 outputs_[1] = lastFrame_[0];
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a><a class="code" href="classstk_1_1PoleZero.html#1b5e97a13c582d97cfaa7fcbd4211b47">00088</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1PoleZero.html#1a29ac6f3a2b75e71693c73554599228" title="Input one sample to the filter and return one output.">PoleZero :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00092"></a>00092 errorString_ &lt;&lt; <span class="stringliteral">"PoleZero::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span>
<a name="l00097"></a>00097 StkFloat *samples = &amp;frames[channel];
<a name="l00098"></a>00098 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00099"></a>00099 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00100"></a>00100 inputs_[0] = gain_ * *samples;
<a name="l00101"></a>00101 *samples = b_[0] * inputs_[0] + b_[1] * inputs_[1] - a_[1] * outputs_[1];
<a name="l00102"></a>00102 inputs_[1] = inputs_[0];
<a name="l00103"></a>00103 outputs_[1] = *samples;
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105
<a name="l00106"></a>00106 lastFrame_[0] = outputs_[1];
<a name="l00107"></a>00107 <span class="keywordflow">return</span> frames;
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109
<a name="l00110"></a>00110 } <span class="comment">// stk namespace</span>
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,45 +8,115 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>ReedTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef STK_REEDTABLE_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_REEDTABLE_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Function.h"</span>
<a name="l00024"></a>00024
<a name="l00025"></a><a class="code" href="classReedTable.html">00025</a> <span class="keyword">class </span><a class="code" href="classReedTable.html">ReedTable</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
<a name="l00026"></a>00026 {
<a name="l00027"></a>00027 <span class="keyword">public</span>:
<a name="l00029"></a>00029 <a class="code" href="classReedTable.html#a0">ReedTable</a>();
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <a class="code" href="classReedTable.html#a1">~ReedTable</a>();
<a name="l00033"></a>00033
<a name="l00035"></a>00035
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classReedTable.html#a2">setOffset</a>(StkFloat offset);
<a name="l00041"></a>00041
<a name="l00043"></a>00043
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classReedTable.html#a3">setSlope</a>(StkFloat slope);
<a name="l00049"></a>00049
<a name="l00050"></a>00050 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>ReedTable.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_REEDTABLE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_REEDTABLE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Function.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classstk_1_1ReedTable.html">00027</a> <span class="keyword">class </span><a class="code" href="classstk_1_1ReedTable.html" title="STK reed table class.">ReedTable</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Function.html" title="STK abstract function parent class.">Function</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00031"></a><a class="code" href="classstk_1_1ReedTable.html#138db7619ec28a4feeaf2a00988e4f0d">00031</a> <a class="code" href="classstk_1_1ReedTable.html#138db7619ec28a4feeaf2a00988e4f0d" title="Default constructor.">ReedTable</a>( <span class="keywordtype">void</span> ) : offset_(0.6), slope_(-0.8) {};
<a name="l00032"></a>00032
<a name="l00034"></a>00034
<a name="l00039"></a><a class="code" href="classstk_1_1ReedTable.html#b40ffd675bd7242a210e8630f8919556">00039</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ReedTable.html#b40ffd675bd7242a210e8630f8919556" title="Set the table offset value.">setOffset</a>( StkFloat offset ) { offset_ = offset; };
<a name="l00040"></a>00040
<a name="l00042"></a>00042
<a name="l00047"></a><a class="code" href="classstk_1_1ReedTable.html#968a97400ec6bd424634ff377fc6417a">00047</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1ReedTable.html#968a97400ec6bd424634ff377fc6417a" title="Set the table slope value.">setSlope</a>( StkFloat slope ) { slope_ = slope; };
<a name="l00048"></a>00048
<a name="l00050"></a>00050 StkFloat <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>( StkFloat input );
<a name="l00051"></a>00051
<a name="l00052"></a>00052 StkFloat computeSample( StkFloat input );
<a name="l00053"></a>00053
<a name="l00054"></a>00054 StkFloat offset_;
<a name="l00055"></a>00055 StkFloat slope_;
<a name="l00056"></a>00056
<a name="l00057"></a>00057 };
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00062"></a>00062
<a name="l00064"></a>00064
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">protected</span>:
<a name="l00075"></a>00075
<a name="l00076"></a>00076 StkFloat offset_;
<a name="l00077"></a>00077 StkFloat slope_;
<a name="l00078"></a>00078
<a name="l00079"></a>00079 };
<a name="l00080"></a>00080
<a name="l00081"></a><a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2">00081</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">ReedTable :: tick</a>( StkFloat input )
<a name="l00082"></a>00082 {
<a name="l00083"></a>00083 <span class="comment">// The input is differential pressure across the reed.</span>
<a name="l00084"></a>00084 lastFrame_[0] = offset_ + (slope_ * input);
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="comment">// If output is &gt; 1, the reed has slammed shut and the</span>
<a name="l00087"></a>00087 <span class="comment">// reflection function value saturates at 1.0.</span>
<a name="l00088"></a>00088 <span class="keywordflow">if</span> ( lastFrame_[0] &gt; 1.0) lastFrame_[0] = (StkFloat) 1.0;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="comment">// This is nearly impossible in a physical system, but</span>
<a name="l00091"></a>00091 <span class="comment">// a reflection function value of -1.0 corresponds to</span>
<a name="l00092"></a>00092 <span class="comment">// an open end (and no discontinuity in bore profile).</span>
<a name="l00093"></a>00093 <span class="keywordflow">if</span> ( lastFrame_[0] &lt; -1.0) lastFrame_[0] = (StkFloat) -1.0;
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00096"></a>00096 }
<a name="l00097"></a>00097
<a name="l00098"></a><a class="code" href="classstk_1_1ReedTable.html#3455fa2dedb2c86fc825ec48296822be">00098</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">ReedTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00099"></a>00099 {
<a name="l00100"></a>00100 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00102"></a>00102 errorString_ &lt;&lt; <span class="stringliteral">"ReedTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00103"></a>00103 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105 <span class="preprocessor">#endif</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span>
<a name="l00107"></a>00107 StkFloat *samples = &amp;frames[channel];
<a name="l00108"></a>00108 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00109"></a>00109 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00110"></a>00110 *samples = offset_ + (slope_ * *samples);
<a name="l00111"></a>00111 <span class="keywordflow">if</span> ( *samples &gt; 1.0) *samples = 1.0;
<a name="l00112"></a>00112 <span class="keywordflow">if</span> ( *samples &lt; -1.0) *samples = -1.0;
<a name="l00113"></a>00113 }
<a name="l00114"></a>00114
<a name="l00115"></a>00115 lastFrame_[0] = *(samples-hop);
<a name="l00116"></a>00116 <span class="keywordflow">return</span> frames;
<a name="l00117"></a>00117 }
<a name="l00118"></a>00118
<a name="l00119"></a><a class="code" href="classstk_1_1ReedTable.html#e682fdc0a6ec68a9f858f5cd6889113d">00119</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">ReedTable :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00120"></a>00120 {
<a name="l00121"></a>00121 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00123"></a>00123 errorString_ &lt;&lt; <span class="stringliteral">"ReedTable::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00124"></a>00124 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126 <span class="preprocessor">#endif</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span>
<a name="l00128"></a>00128 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00129"></a>00129 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00130"></a>00130 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00131"></a>00131 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00132"></a>00132 *oSamples = offset_ + (slope_ * *iSamples);
<a name="l00133"></a>00133 <span class="keywordflow">if</span> ( *oSamples &gt; 1.0) *oSamples = 1.0;
<a name="l00134"></a>00134 <span class="keywordflow">if</span> ( *oSamples &lt; -1.0) *oSamples = -1.0;
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136
<a name="l00137"></a>00137 lastFrame_[0] = *(oSamples-oHop);
<a name="l00138"></a>00138 <span class="keywordflow">return</span> iFrames;
<a name="l00139"></a>00139 }
<a name="l00140"></a>00140
<a name="l00141"></a>00141 } <span class="comment">// stk namespace</span>
<a name="l00142"></a>00142
<a name="l00143"></a>00143 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,65 +8,78 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Resonate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef STK_RESONATE_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_RESONATE_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00027"></a>00027
<a name="l00028"></a><a class="code" href="classResonate.html">00028</a> <span class="keyword">class </span><a class="code" href="classResonate.html">Resonate</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00029"></a>00029 {
<a name="l00030"></a>00030 <span class="keyword">public</span>:
<a name="l00032"></a>00032 <a class="code" href="classResonate.html#a0">Resonate</a>();
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <a class="code" href="classResonate.html#a1">~Resonate</a>();
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a2">clear</a>();
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a3">setResonance</a>(StkFloat frequency, StkFloat radius);
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a4">setNotch</a>(StkFloat frequency, StkFloat radius);
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a5">setEqualGainZeroes</a>();
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a6">keyOn</a>();
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a7">keyOff</a>();
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a8">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a9">noteOff</a>(StkFloat amplitude);
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classResonate.html#a10">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00063"></a>00063
<a name="l00064"></a>00064 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Resonate.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_RESONATE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_RESONATE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classstk_1_1Resonate.html">00030</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Resonate.html" title="STK noise driven formant filter.">Resonate</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00034"></a>00034 <a class="code" href="classstk_1_1Resonate.html#b273b41ec296f776a41cfa66bb1e430e" title="Class constructor.">Resonate</a>( <span class="keywordtype">void</span> );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1Resonate.html#634ab2db8eabad147fa90fb1bf72a580" title="Class destructor.">~Resonate</a>( <span class="keywordtype">void</span> );
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#534740efbbde171d790309e85c96017d" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#8767e6c05862c183483776ac4cf354f9" title="Set the filter for a resonance at the given frequency (Hz) and radius.">setResonance</a>( StkFloat frequency, StkFloat radius );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#d4476301fba545cbbfc773150ca6901d" title="Set the filter for a notch at the given frequency (Hz) and radius.">setNotch</a>( StkFloat frequency, StkFloat radius );
<a name="l00047"></a>00047
<a name="l00049"></a><a class="code" href="classstk_1_1Resonate.html#d8000ad734634ac7334f4fab09a13a7e">00049</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#d8000ad734634ac7334f4fab09a13a7e" title="Set the filter zero coefficients for contant resonance gain.">setEqualGainZeroes</a>( <span class="keywordtype">void</span> ) { filter_.<a class="code" href="classstk_1_1BiQuad.html#28881f5876ce5bdcc846367cca9363f7" title="Sets the filter zeroes for equal resonance gain.">setEqualGainZeroes</a>(); };
<a name="l00050"></a>00050
<a name="l00052"></a><a class="code" href="classstk_1_1Resonate.html#febf784a302eb0043b4a453b0d1d852c">00052</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#febf784a302eb0043b4a453b0d1d852c" title="Initiate the envelope with a key-on event.">keyOn</a>( <span class="keywordtype">void</span> ) { adsr_.<a class="code" href="classstk_1_1ADSR.html#ad03e82009a20cfb49c1f04bae791631" title="Set target = 1, state = ADSR::ATTACK.">keyOn</a>(); };
<a name="l00053"></a>00053
<a name="l00055"></a><a class="code" href="classstk_1_1Resonate.html#0008e1fdd7611b769b72b52c8bfb1e6a">00055</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#0008e1fdd7611b769b72b52c8bfb1e6a" title="Signal a key-off event to the envelope.">keyOff</a>( <span class="keywordtype">void</span> ) { adsr_.<a class="code" href="classstk_1_1ADSR.html#9400e04b313ab8900a3ba9b693f448e6" title="Set target = 0, state = ADSR::RELEASE.">keyOff</a>(); };
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#76bfadc70f4163f9767e7864d322d144" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#0454a8e9d6ef3a2394b6c348edf0195f" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Resonate.html#f55feabf25f1f6f996c32574656ffd68" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00065"></a>00065
<a name="l00066"></a>00066 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00069"></a>00069 <a class="code" href="classBiQuad.html">BiQuad</a> filter_;
<a name="l00070"></a>00070 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00071"></a>00071 StkFloat poleFrequency_;
<a name="l00072"></a>00072 StkFloat poleRadius_;
<a name="l00073"></a>00073 StkFloat zeroFrequency_;
<a name="l00074"></a>00074 StkFloat zeroRadius_;
<a name="l00075"></a>00075
<a name="l00076"></a>00076 };
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00067"></a>00067 StkFloat <a class="code" href="classstk_1_1Resonate.html#b917279f4f57d5d305481426e9bffd98" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> filter_;
<a name="l00073"></a>00073 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00074"></a>00074 StkFloat poleFrequency_;
<a name="l00075"></a>00075 StkFloat poleRadius_;
<a name="l00076"></a>00076 StkFloat zeroFrequency_;
<a name="l00077"></a>00077 StkFloat zeroRadius_;
<a name="l00078"></a>00078
<a name="l00079"></a>00079 };
<a name="l00080"></a>00080
<a name="l00081"></a><a class="code" href="classstk_1_1Resonate.html#b917279f4f57d5d305481426e9bffd98">00081</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Resonate.html#b917279f4f57d5d305481426e9bffd98" title="Compute and return one output sample.">Resonate :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00082"></a>00082 {
<a name="l00083"></a>00083 lastFrame_[0] = filter_.<a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>() );
<a name="l00084"></a>00084 lastFrame_[0] *= adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00085"></a>00085 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a>00088 } <span class="comment">// stk namespace</span>
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,40 +8,71 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Rhodey.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="preprocessor">#ifndef STK_RHODEY_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_RHODEY_H</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "FM.h"</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classRhodey.html">00038</a> <span class="keyword">class </span><a class="code" href="classRhodey.html">Rhodey</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classRhodey.html#a0">Rhodey</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classRhodey.html#a1">~Rhodey</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classRhodey.html#a2">setFrequency</a>(StkFloat frequency);
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classRhodey.html#a3">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Rhodey.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_RHODEY_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_RHODEY_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00038"></a>00038 <span class="comment">/***************************************************/</span>
<a name="l00039"></a>00039
<a name="l00040"></a><a class="code" href="classstk_1_1Rhodey.html">00040</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Rhodey.html" title="STK Fender Rhodes electric piano FM synthesis instrument.">Rhodey</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00041"></a>00041 {
<a name="l00042"></a>00042 <span class="keyword">public</span>:
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <a class="code" href="classstk_1_1Rhodey.html#b647310b8bfc12b518b5c3a89db6d94e" title="Class constructor.">Rhodey</a>( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1Rhodey.html#6fc6c7473cef051e11a62802848b228c" title="Class destructor.">~Rhodey</a>( <span class="keywordtype">void</span> );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Rhodey.html#216ff771d88e7e03c46bc477d7ed5e86" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Rhodey.html#98e112778609f8eb217c0956f17c65e4" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00057"></a>00057
<a name="l00058"></a>00058 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00059"></a>00059 };
<a name="l00059"></a>00059 StkFloat <a class="code" href="classstk_1_1Rhodey.html#199591ffb4230c653ec7d7ea52e37790" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00061"></a>00061 <span class="keyword">protected</span>:
<a name="l00062"></a>00062
<a name="l00063"></a>00063 };
<a name="l00064"></a>00064
<a name="l00065"></a><a class="code" href="classstk_1_1Rhodey.html#199591ffb4230c653ec7d7ea52e37790">00065</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Rhodey.html#199591ffb4230c653ec7d7ea52e37790" title="Compute and return one output sample.">Rhodey :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00066"></a>00066 {
<a name="l00067"></a>00067 StkFloat temp, temp2;
<a name="l00068"></a>00068
<a name="l00069"></a>00069 temp = gains_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00070"></a>00070 temp = temp * control1_;
<a name="l00071"></a>00071
<a name="l00072"></a>00072 waves_[0]-&gt;addPhaseOffset( temp );
<a name="l00073"></a>00073 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00074"></a>00074 temp = gains_[3] * adsr_[3]-&gt;tick() * waves_[3]-&gt;tick();
<a name="l00075"></a>00075 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00076"></a>00076
<a name="l00077"></a>00077 waves_[2]-&gt;addPhaseOffset( temp );
<a name="l00078"></a>00078 temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]-&gt;<a class="code" href="classstk_1_1Rhodey.html#199591ffb4230c653ec7d7ea52e37790" title="Compute and return one output sample.">tick</a>() * waves_[0]-&gt;tick();
<a name="l00079"></a>00079 temp += control2_ * 0.5 * gains_[2] * adsr_[2]-&gt;tick() * waves_[2]-&gt;tick();
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="comment">// Calculate amplitude modulation and apply it to output.</span>
<a name="l00082"></a>00082 temp2 = vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * modDepth_;
<a name="l00083"></a>00083 temp = temp * (1.0 + temp2);
<a name="l00084"></a>00084
<a name="l00085"></a>00085 lastFrame_[0] = temp * 0.5;
<a name="l00086"></a>00086 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00087"></a>00087 }
<a name="l00088"></a>00088
<a name="l00089"></a>00089 } <span class="comment">// stk namespace</span>
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

File diff suppressed because it is too large Load Diff

View File

@@ -8,13 +8,11 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>RtAudio.h File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
<p>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>RtAudio.h File Reference</h1>
<p>
<a href="RtAudio_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
@@ -22,140 +20,110 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRtAudio.html">RtAudio</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Realtime audio i/o C++ classes. <a href="classRtAudio.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1DeviceInfo.html">RtAudio::DeviceInfo</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1DeviceInfo.html">RtAudio::RtAudio::DeviceInfo</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The public device information structure for returning queried values. <a href="structRtAudio_1_1DeviceInfo.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1StreamParameters.html">RtAudio::StreamParameters</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1StreamParameters.html">RtAudio::RtAudio::StreamParameters</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The structure for specifying input or ouput stream parameters. <a href="structRtAudio_1_1StreamParameters.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1StreamOptions.html">RtAudio::StreamOptions</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structRtAudio_1_1StreamOptions.html">RtAudio::RtAudio::StreamOptions</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The structure for specifying stream options. <a href="structRtAudio_1_1StreamOptions.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#a0">RtAudioFormat</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#afca92882d25915560018873221e44b8">RtAudioFormat</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html">RtAudio</a> data format type. <a href="#a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#a7">RtAudioStreamFlags</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> data format type. <a href="#afca92882d25915560018873221e44b8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#2c0f59b200dcec4d4e760f9166b29c41">RtAudioStreamFlags</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html">RtAudio</a> stream option flags. <a href="#a7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#a11">RtAudioStreamStatus</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream option flags. <a href="#2c0f59b200dcec4d4e760f9166b29c41"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#80e306d363583da3b0a1b65d9b57c806">RtAudioStreamStatus</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html">RtAudio</a> stream status (over- or underflow) flags. <a href="#a11"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#a14">RtAudioCallback</a> )(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, <a class="el" href="RtAudio_8h.html#a11">RtAudioStreamStatus</a> status, void *userData)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream status (over- or underflow) flags. <a href="#80e306d363583da3b0a1b65d9b57c806"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef int(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="RtAudio_8h.html#112c7b7e25a974977f6fc094cef1a31f">RtAudioCallback</a> )(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, <a class="el" href="RtAudio_8h.html#80e306d363583da3b0a1b65d9b57c806">RtAudioStreamStatus</a> status, void *userData)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html">RtAudio</a> callback function prototype. <a href="#a14"></a><br></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> callback function prototype. <a href="#112c7b7e25a974977f6fc094cef1a31f"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="a0"></a><!-- doxytag: member="RtAudio.h::RtAudioFormat" ref="a0" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<a class="anchor" name="afca92882d25915560018873221e44b8"></a><!-- doxytag: member="RtAudio.h::RtAudioFormat" ref="afca92882d25915560018873221e44b8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="md" nowrap valign="top">typedef unsigned long <a class="el" href="RtAudio_8h.html#a0">RtAudioFormat</a> </td>
<td class="memname">typedef unsigned long <a class="el" href="RtAudio_8h.html#afca92882d25915560018873221e44b8">RtAudioFormat</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
</div>
<div class="memdoc">
<p>
<a class="el" href="classRtAudio.html">RtAudio</a> data format type.
<a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> data format type.
<p>
Support for signed integers and floats. Audio data fed to/from an <a class="el" href="classRtAudio.html">RtAudio</a> stream is assumed to ALWAYS be in host byte order. The internal routines will automatically take care of any necessary byte-swapping between the host format and the soundcard. Thus, endian-ness is not a concern in the following format definitions.<p>
Support for signed integers and floats. Audio data fed to/from an <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream is assumed to ALWAYS be in host byte order. The internal routines will automatically take care of any necessary byte-swapping between the host format and the soundcard. Thus, endian-ness is not a concern in the following format definitions.<p>
<ul>
<li><em>RTAUDIO_SINT8:</em> 8-bit signed integer.</li><li><em>RTAUDIO_SINT16:</em> 16-bit signed integer.</li><li><em>RTAUDIO_SINT24:</em> Upper 3 bytes of 32-bit signed integer.</li><li><em>RTAUDIO_SINT32:</em> 32-bit signed integer.</li><li><em>RTAUDIO_FLOAT32:</em> Normalized between plus/minus 1.0.</li><li><em>RTAUDIO_FLOAT64:</em> Normalized between plus/minus 1.0.</li></ul>
</td>
</tr>
</table>
<a class="anchor" name="a7"></a><!-- doxytag: member="RtAudio.h::RtAudioStreamFlags" ref="a7" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<li><em>RTAUDIO_SINT8:</em> 8-bit signed integer.</li><li><em>RTAUDIO_SINT16:</em> 16-bit signed integer.</li><li><em>RTAUDIO_SINT24:</em> Upper 3 bytes of 32-bit signed integer.</li><li><em>RTAUDIO_SINT32:</em> 32-bit signed integer.</li><li><em>RTAUDIO_FLOAT32:</em> Normalized between plus/minus 1.0.</li><li><em>RTAUDIO_FLOAT64:</em> Normalized between plus/minus 1.0. </li></ul>
</div>
</div><p>
<a class="anchor" name="2c0f59b200dcec4d4e760f9166b29c41"></a><!-- doxytag: member="RtAudio.h::RtAudioStreamFlags" ref="2c0f59b200dcec4d4e760f9166b29c41" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="md" nowrap valign="top">typedef unsigned long <a class="el" href="RtAudio_8h.html#a7">RtAudioStreamFlags</a> </td>
<td class="memname">typedef unsigned long <a class="el" href="RtAudio_8h.html#2c0f59b200dcec4d4e760f9166b29c41">RtAudioStreamFlags</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
</div>
<div class="memdoc">
<p>
<a class="el" href="classRtAudio.html">RtAudio</a> stream option flags.
<a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream option flags.
<p>
The following flags can be OR'ed together to allow a client to make changes to the default stream behavior:<p>
<ul>
<li><em>RTAUDIO_NONINTERLEAVED:</em> Use non-interleaved buffers (default = interleaved).</li><li><em>RTAUDIO_MINIMIZE_LATENCY:</em> Attempt to set stream parameters for lowest possible latency.</li><li><em>RTAUDIO_HOG_DEVICE:</em> Attempt grab device for exclusive use.</li></ul>
<p>
By default, <a class="el" href="classRtAudio.html">RtAudio</a> streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with <code>nFrames</code> samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index <code>nFrames</code> (assuming the <code>buffer</code> pointer was recast to the correct data type for the stream).<p>
Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, <a class="el" href="classRtAudio.html">RtAudio</a> will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.<p>
If the RTAUDIO_HOG_DEVICE flag is set, <a class="el" href="classRtAudio.html">RtAudio</a> will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs. </td>
</tr>
</table>
<a class="anchor" name="a11"></a><!-- doxytag: member="RtAudio.h::RtAudioStreamStatus" ref="a11" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> streams pass and receive audio data from the client in an interleaved format. By passing the RTAUDIO_NONINTERLEAVED flag to the openStream() function, audio data will instead be presented in non-interleaved buffers. In this case, each buffer argument in the RtAudioCallback function will point to a single array of data, with <code>nFrames</code> samples for each channel concatenated back-to-back. For example, the first sample of data for the second channel would be located at index <code>nFrames</code> (assuming the <code>buffer</code> pointer was recast to the correct data type for the stream).<p>
Certain audio APIs offer a number of parameters that influence the I/O latency of a stream. By default, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to set these parameters internally for robust (glitch-free) performance (though some APIs, like Windows Direct Sound, make this difficult). By passing the RTAUDIO_MINIMIZE_LATENCY flag to the openStream() function, internal stream settings will be influenced in an attempt to minimize stream latency, though possibly at the expense of stream performance.<p>
If the RTAUDIO_HOG_DEVICE flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to open the input and/or output stream device(s) for exclusive use. Note that this is not possible with all supported audio APIs.<p>
If the RTAUDIO_SCHEDULE_REALTIME flag is set, <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> will attempt to select realtime scheduling (round-robin) for the callback thread.
</div>
</div><p>
<a class="anchor" name="80e306d363583da3b0a1b65d9b57c806"></a><!-- doxytag: member="RtAudio.h::RtAudioStreamStatus" ref="80e306d363583da3b0a1b65d9b57c806" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="md" nowrap valign="top">typedef unsigned long <a class="el" href="RtAudio_8h.html#a11">RtAudioStreamStatus</a> </td>
<td class="memname">typedef unsigned long <a class="el" href="RtAudio_8h.html#80e306d363583da3b0a1b65d9b57c806">RtAudioStreamStatus</a> </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
</div>
<div class="memdoc">
<p>
<a class="el" href="classRtAudio.html">RtAudio</a> stream status (over- or underflow) flags.
<a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> stream status (over- or underflow) flags.
<p>
Notification of a stream over- or underflow is indicated by a non-zero stream <code>status</code> argument in the RtAudioCallback function. The stream status can be one of the following two options, depending on whether the stream is open for output and/or input:<p>
<ul>
<li><em>RTAUDIO_INPUT_OVERFLOW:</em> Input data was discarded because of an overflow condition at the driver.</li><li><em>RTAUDIO_OUTPUT_UNDERFLOW:</em> The output buffer ran low, likely producing a break in the output sound.</li></ul>
</td>
</tr>
</table>
<a class="anchor" name="a14"></a><!-- doxytag: member="RtAudio.h::RtAudioCallback" ref="a14" args=")(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<li><em>RTAUDIO_INPUT_OVERFLOW:</em> Input data was discarded because of an overflow condition at the driver.</li><li><em>RTAUDIO_OUTPUT_UNDERFLOW:</em> The output buffer ran low, likely producing a break in the output sound. </li></ul>
</div>
</div><p>
<a class="anchor" name="112c7b7e25a974977f6fc094cef1a31f"></a><!-- doxytag: member="RtAudio.h::RtAudioCallback" ref="112c7b7e25a974977f6fc094cef1a31f" args=")(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="md" nowrap valign="top">typedef int(* <a class="el" href="RtAudio_8h.html#a14">RtAudioCallback</a>)(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, <a class="el" href="RtAudio_8h.html#a11">RtAudioStreamStatus</a> status, void *userData) </td>
<td class="memname">typedef int(* <a class="el" href="RtAudio_8h.html#112c7b7e25a974977f6fc094cef1a31f">RtAudioCallback</a>)(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, <a class="el" href="RtAudio_8h.html#80e306d363583da3b0a1b65d9b57c806">RtAudioStreamStatus</a> status, void *userData) </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
</div>
<div class="memdoc">
<p>
<a class="el" href="classRtAudio.html">RtAudio</a> callback function prototype.
<a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> callback function prototype.
<p>
All <a class="el" href="classRtAudio.html">RtAudio</a> clients must create a function of type RtAudioCallback to read and/or write data from/to the audio stream. When the underlying audio system is ready for new input or output data, this function will be invoked.<p>
All <a class="el" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> clients must create a function of type RtAudioCallback to read and/or write data from/to the audio stream. When the underlying audio system is ready for new input or output data, this function will be invoked.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>outputBuffer</em>&nbsp;</td><td>For output (or duplex) streams, the client should write <code>nFrames</code> of audio sample frames into this buffer. This argument should be recast to the datatype specified when the stream was opened. For input-only streams, this argument will be NULL.</td></tr>
@@ -166,14 +134,15 @@ All <a class="el" href="classRtAudio.html">RtAudio</a> clients must create a fun
<tr><td valign="top"></td><td valign="top"><em>userData</em>&nbsp;</td><td>A pointer to optional data provided by the client when opening the stream (default = NULL).</td></tr>
</table>
</dl>
To continue normal stream operation, the RtAudioCallback function should return a value of zero. To stop the stream and drain the output buffer, the function should return a value of one. To abort the stream immediately, the client should return a value of two. </td>
</tr>
</table>
To continue normal stream operation, the RtAudioCallback function should return a value of zero. To stop the stream and drain the output buffer, the function should return a value of one. To abort the stream immediately, the client should return a value of two.
</div>
</div><p>
</div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -1,77 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>RtDuplex.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="preprocessor">#ifndef STK_RTDUPLEX_H</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTDUPLEX_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "RtAudio.h"</span>
<a name="l00036"></a>00036
<a name="l00037"></a><a class="code" href="classRtDuplex.html">00037</a> <span class="keyword">class </span><a class="code" href="classRtDuplex.html">RtDuplex</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039 <span class="keyword">public</span>:
<a name="l00041"></a>00041
<a name="l00052"></a>00052 <a class="code" href="classRtDuplex.html#a0">RtDuplex</a>(<span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classStk.html#e0">sampleRate</a> = <a class="code" href="classStk.html#e0">Stk::sampleRate</a>(), <span class="keywordtype">int</span> device = 0, <span class="keywordtype">int</span> bufferFrames = RT_BUFFER_SIZE, <span class="keywordtype">int</span> nBuffers = 2);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <a class="code" href="classRtDuplex.html#a1">~RtDuplex</a>();
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classRtDuplex.html#a2">start</a>(<span class="keywordtype">void</span>);
<a name="l00062"></a>00062
<a name="l00064"></a>00064
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classRtDuplex.html#a3">stop</a>(<span class="keywordtype">void</span>);
<a name="l00068"></a>00068
<a name="l00070"></a>00070 StkFloat <a class="code" href="classRtDuplex.html#a4">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00071"></a>00071
<a name="l00073"></a>00073
<a name="l00076"></a>00076 StkFloat <a class="code" href="classRtDuplex.html#a5">tick</a>(<span class="keyword">const</span> StkFloat sample);
<a name="l00077"></a>00077
<a name="l00079"></a>00079
<a name="l00082"></a>00082 StkFloat *<a class="code" href="classRtDuplex.html#a5">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
<a name="l00083"></a>00083
<a name="l00085"></a>00085
<a name="l00092"></a>00092 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classRtDuplex.html#a5">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
<a name="l00093"></a>00093
<a name="l00095"></a>00095 <span class="keyword">const</span> StkFloat *<a class="code" href="classRtDuplex.html#a8">lastFrame</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00096"></a>00096
<a name="l00098"></a>00098
<a name="l00101"></a>00101 StkFloat *<a class="code" href="classRtDuplex.html#a9">tickFrame</a>(StkFloat *frameVector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frames = 1);
<a name="l00102"></a>00102
<a name="l00104"></a>00104
<a name="l00110"></a>00110 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classRtDuplex.html#a9">tickFrame</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keyword">protected</span>:
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <a class="code" href="classRtAudio.html">RtAudio</a> *audio_;
<a name="l00115"></a>00115 StkFloat *data_;
<a name="l00116"></a>00116 StkFloat *lastOutput_;
<a name="l00117"></a>00117 <span class="keywordtype">int</span> bufferSize_;
<a name="l00118"></a>00118 <span class="keywordtype">bool</span> stopped_;
<a name="l00119"></a>00119 <span class="keywordtype">long</span> counter_;
<a name="l00120"></a>00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channels_;
<a name="l00121"></a>00121
<a name="l00122"></a>00122 };
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,9 +8,10 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>RtError.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/************************************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/************************************************************************/</span>
<a name="l00011"></a>00011
@@ -21,46 +22,47 @@
<a name="l00016"></a>00016 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00018"></a>00018
<a name="l00019"></a><a class="code" href="classRtError.html">00019</a> <span class="keyword">class </span><a class="code" href="classRtError.html">RtError</a> : <span class="keyword">public</span> std::exception
<a name="l00019"></a><a class="code" href="classRtError.html">00019</a> <span class="keyword">class </span><a class="code" href="classRtError.html" title="Exception handling class for RtAudio &amp;amp; RtMidi.">RtError</a> : <span class="keyword">public</span> std::exception
<a name="l00020"></a>00020 {
<a name="l00021"></a>00021 <span class="keyword">public</span>:
<a name="l00023"></a><a class="code" href="classRtError.html#w11">00023</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#w11">Type</a> {
<a name="l00024"></a>00024 <a class="code" href="classRtError.html#w11w0">WARNING</a>,
<a name="l00025"></a>00025 <a class="code" href="classRtError.html#w11w1">DEBUG_WARNING</a>,
<a name="l00026"></a>00026 <a class="code" href="classRtError.html#w11w2">UNSPECIFIED</a>,
<a name="l00027"></a>00027 <a class="code" href="classRtError.html#w11w3">NO_DEVICES_FOUND</a>,
<a name="l00028"></a>00028 <a class="code" href="classRtError.html#w11w4">INVALID_DEVICE</a>,
<a name="l00029"></a>00029 <a class="code" href="classRtError.html#w11w5">MEMORY_ERROR</a>,
<a name="l00030"></a>00030 <a class="code" href="classRtError.html#w11w6">INVALID_PARAMETER</a>,
<a name="l00031"></a>00031 <a class="code" href="classRtError.html#w11w7">INVALID_USE</a>,
<a name="l00032"></a>00032 <a class="code" href="classRtError.html#w11w8">DRIVER_ERROR</a>,
<a name="l00033"></a>00033 <a class="code" href="classRtError.html#w11w9">SYSTEM_ERROR</a>,
<a name="l00034"></a><a class="code" href="classRtError.html#w11w10">00034</a> <a class="code" href="classRtError.html#w11w10">THREAD_ERROR</a>
<a name="l00023"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac">00023</a> <span class="keyword">enum</span> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a> {
<a name="l00024"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac3a1603c24a56cbdaf5f8ae4ddcb86398">00024</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac3a1603c24a56cbdaf5f8ae4ddcb86398">WARNING</a>,
<a name="l00025"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac20e5a369394d19b704ace17002007eba">00025</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac20e5a369394d19b704ace17002007eba">DEBUG_WARNING</a>,
<a name="l00026"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac444efd3ccf774b2ba9f9bde70ec71cd6">00026</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac444efd3ccf774b2ba9f9bde70ec71cd6">UNSPECIFIED</a>,
<a name="l00027"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acf267eb2d710f33d649ba840eeab6ff82">00027</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acf267eb2d710f33d649ba840eeab6ff82">NO_DEVICES_FOUND</a>,
<a name="l00028"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acd6064062066fffdba258237a7c2159b1">00028</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acd6064062066fffdba258237a7c2159b1">INVALID_DEVICE</a>,
<a name="l00029"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acb4f813e5a36905c89d4081a59497432e">00029</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903acb4f813e5a36905c89d4081a59497432e">MEMORY_ERROR</a>,
<a name="l00030"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903aca3eabf0f71120beaba94148a1b78fed6">00030</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903aca3eabf0f71120beaba94148a1b78fed6">INVALID_PARAMETER</a>,
<a name="l00031"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac8e65f51a3fbdc1a4a1552b3260df36bc">00031</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac8e65f51a3fbdc1a4a1552b3260df36bc">INVALID_USE</a>,
<a name="l00032"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac995e97ecf6beeedaba525022a63aec6b">00032</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac995e97ecf6beeedaba525022a63aec6b">DRIVER_ERROR</a>,
<a name="l00033"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac8947d0a2e2a84ecf3646271844e06a6b">00033</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac8947d0a2e2a84ecf3646271844e06a6b">SYSTEM_ERROR</a>,
<a name="l00034"></a><a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903aceb6282f991e2d93ab294a4272fc3f6c6">00034</a> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903aceb6282f991e2d93ab294a4272fc3f6c6">THREAD_ERROR</a>
<a name="l00035"></a>00035 };
<a name="l00036"></a>00036
<a name="l00038"></a><a class="code" href="classRtError.html#a0">00038</a> <a class="code" href="classRtError.html#a0">RtError</a>( <span class="keyword">const</span> std::string&amp; message, <a class="code" href="classRtError.html#w11">Type</a> type = <a class="code" href="classRtError.html#w11w2">RtError::UNSPECIFIED</a> ) throw() : message_(message), type_(type) {}
<a name="l00038"></a><a class="code" href="classRtError.html#a479a305ccbe56be0fd9137b9b405a37">00038</a> <a class="code" href="classRtError.html#a479a305ccbe56be0fd9137b9b405a37" title="The constructor.">RtError</a>( <span class="keyword">const</span> std::string&amp; message, <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a> type = <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac444efd3ccf774b2ba9f9bde70ec71cd6">RtError::UNSPECIFIED</a> ) throw() : message_(message), type_(type) {}
<a name="l00039"></a>00039
<a name="l00041"></a><a class="code" href="classRtError.html#a1">00041</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#a1">~RtError</a>( <span class="keywordtype">void</span> ) throw() {}
<a name="l00041"></a><a class="code" href="classRtError.html#6793e03386e7e69ffafb65a296dfa48c">00041</a> <span class="keyword">virtual</span> <a class="code" href="classRtError.html#6793e03386e7e69ffafb65a296dfa48c" title="The destructor.">~RtError</a>( <span class="keywordtype">void</span> ) throw() {}
<a name="l00042"></a>00042
<a name="l00044"></a><a class="code" href="classRtError.html#a2">00044</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#a2">printMessage</a>( <span class="keywordtype">void</span> ) throw() { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
<a name="l00044"></a><a class="code" href="classRtError.html#da41f7472122f45bc5b4677f066e0943">00044</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtError.html#da41f7472122f45bc5b4677f066e0943" title="Prints thrown error message to stderr.">printMessage</a>( <span class="keywordtype">void</span> ) throw() { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
<a name="l00045"></a>00045
<a name="l00047"></a><a class="code" href="classRtError.html#a3">00047</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#w11">Type</a>&amp; <a class="code" href="classRtError.html#a3">getType</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> type_; }
<a name="l00047"></a><a class="code" href="classRtError.html#4ee7df9728d73f533afbaddcd9ca4d9c">00047</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a>&amp; <a class="code" href="classRtError.html#4ee7df9728d73f533afbaddcd9ca4d9c" title="Returns the thrown error message type.">getType</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> type_; }
<a name="l00048"></a>00048
<a name="l00050"></a><a class="code" href="classRtError.html#a4">00050</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> message_; }
<a name="l00050"></a><a class="code" href="classRtError.html#c7f467788e29d246333d7af050801164">00050</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classRtError.html#c7f467788e29d246333d7af050801164" title="Returns the thrown error message string.">getMessage</a>(<span class="keywordtype">void</span>) throw() { <span class="keywordflow">return</span> message_; }
<a name="l00051"></a>00051
<a name="l00053"></a><a class="code" href="classRtError.html#a5">00053</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classRtError.html#a5">what</a>( <span class="keywordtype">void</span> ) const throw() { <span class="keywordflow">return</span> message_.c_str(); }
<a name="l00053"></a><a class="code" href="classRtError.html#eb843b7a7785d66061c61ebfc29e7e9d">00053</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classRtError.html#eb843b7a7785d66061c61ebfc29e7e9d" title="Returns the thrown error message as a c-style string.">what</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span> throw() { <span class="keywordflow">return</span> message_.c_str(); }
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="keyword">protected</span>:
<a name="l00056"></a>00056 std::string message_;
<a name="l00057"></a>00057 <a class="code" href="classRtError.html#w11">Type</a> type_;
<a name="l00057"></a>00057 <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">Type</a> type_;
<a name="l00058"></a>00058 };
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="preprocessor">#endif</span>
</pre></div><HR>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,13 +8,14 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>RtMidi.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**********************************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/**********************************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="comment">// RtMidi: Version 1.0.7</span>
<a name="l00038"></a>00038 <span class="comment">// RtMidi: Version 1.0.9</span>
<a name="l00039"></a>00039
<a name="l00040"></a>00040 <span class="preprocessor">#ifndef RTMIDI_H</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
@@ -22,29 +23,29 @@
<a name="l00043"></a>00043 <span class="preprocessor">#include "RtError.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00045"></a>00045
<a name="l00046"></a><a class="code" href="classRtMidi.html">00046</a> <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
<a name="l00046"></a><a class="code" href="classRtMidi.html">00046</a> <span class="keyword">class </span><a class="code" href="classRtMidi.html" title="An abstract base class for realtime MIDI input/output.">RtMidi</a>
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048 <span class="keyword">public</span>:
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a0">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#d9e30a89638f93193cb40edebaa536f5" title="Pure virtual openPort() function.">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0, <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi"</span> ) ) = 0;
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a1">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi"</span> ) ) = 0;
<a name="l00054"></a>00054 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#9200cde4f5337c0bc421d20bd4fcf654" title="Pure virtual openVirtualPort() function.">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi"</span> ) ) = 0;
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#a2">getPortCount</a>() = 0;
<a name="l00057"></a>00057 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#9a49ef73a1e6007444019a7ae095e195" title="Pure virtual getPortCount() function.">getPortCount</a>() = 0;
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keyword">virtual</span> std::string <a class="code" href="classRtMidi.html#a3">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
<a name="l00060"></a>00060 <span class="keyword">virtual</span> std::string <a class="code" href="classRtMidi.html#799e2b9f4df39b298518f2b394db3391" title="Pure virtual getPortName() function.">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a4">closePort</a>( <span class="keywordtype">void</span> ) = 0;
<a name="l00063"></a>00063 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#36125c4fa16550345b57f4a4927f5b4a" title="Pure virtual closePort() function.">closePort</a>( <span class="keywordtype">void</span> ) = 0;
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keyword">protected</span>:
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classRtMidi.html">RtMidi</a>();
<a name="l00068"></a>00068 <span class="keyword">virtual</span> ~<a class="code" href="classRtMidi.html">RtMidi</a>() {};
<a name="l00067"></a>00067 <a class="code" href="classRtMidi.html" title="An abstract base class for realtime MIDI input/output.">RtMidi</a>();
<a name="l00068"></a>00068 <span class="keyword">virtual</span> ~<a class="code" href="classRtMidi.html" title="An abstract base class for realtime MIDI input/output.">RtMidi</a>() {};
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
<a name="l00071"></a>00071 <span class="comment">// subclasses. The behavior of this function can be modified to</span>
<a name="l00072"></a>00072 <span class="comment">// suit specific needs.</span>
<a name="l00073"></a>00073 <span class="keywordtype">void</span> error( <a class="code" href="classRtError.html#w11">RtError::Type</a> type );
<a name="l00073"></a>00073 <span class="keywordtype">void</span> error( <a class="code" href="classRtError.html#b04667aae01bffc354a9ac6bda6903ac" title="Defined RtError types.">RtError::Type</a> type );
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keywordtype">void</span> *apiData_;
<a name="l00076"></a>00076 <span class="keywordtype">bool</span> connected_;
@@ -57,44 +58,44 @@
<a name="l00098"></a>00098 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00099"></a>00099 <span class="preprocessor">#include &lt;queue&gt;</span>
<a name="l00100"></a>00100
<a name="l00101"></a><a class="code" href="classRtMidiIn.html">00101</a> <span class="keyword">class </span><a class="code" href="classRtMidiIn.html">RtMidiIn</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
<a name="l00101"></a><a class="code" href="classRtMidiIn.html">00101</a> <span class="keyword">class </span><a class="code" href="classRtMidiIn.html" title="A realtime MIDI input class.">RtMidiIn</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html" title="An abstract base class for realtime MIDI input/output.">RtMidi</a>
<a name="l00102"></a>00102 {
<a name="l00103"></a>00103 <span class="keyword">public</span>:
<a name="l00104"></a>00104
<a name="l00106"></a><a class="code" href="classRtMidiIn.html#w0">00106</a> <span class="keyword">typedef</span> void (*<a class="code" href="classRtMidiIn.html#w0">RtMidiCallback</a>)( <span class="keywordtype">double</span> timeStamp, std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
<a name="l00106"></a>00106 <span class="keyword">typedef</span> void (*<a class="code" href="classRtMidiIn.html#297d2eb3c3420b437970a6fc59d89cbf" title="User callback function type definition.">RtMidiCallback</a>)( <span class="keywordtype">double</span> timeStamp, std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
<a name="l00107"></a>00107
<a name="l00109"></a>00109
<a name="l00112"></a>00112 <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>();
<a name="l00112"></a>00112 <a class="code" href="classRtMidiIn.html#31abb996e5fdc4a8f9dc5a50848e2ee5" title="Default constructor that allows an optional client name.">RtMidiIn</a>( <span class="keyword">const</span> std::string clientName = std::string( <span class="stringliteral">"RtMidi Input Client"</span>) );
<a name="l00113"></a>00113
<a name="l00115"></a>00115 <a class="code" href="classRtMidiIn.html#a1">~RtMidiIn</a>();
<a name="l00115"></a>00115 <a class="code" href="classRtMidiIn.html#f865d88c154b6fdadc640da5dc278d40" title="If a MIDI connection is still open, it will be closed by the destructor.">~RtMidiIn</a>();
<a name="l00116"></a>00116
<a name="l00118"></a>00118
<a name="l00122"></a>00122 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00122"></a>00122 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#7e853661b1056083e07318d67c51f6fd" title="Open a MIDI input connection.">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0, <span class="keyword">const</span> std::string Portname = std::string( <span class="stringliteral">"RtMidi Input"</span> ) );
<a name="l00123"></a>00123
<a name="l00125"></a>00125
<a name="l00131"></a>00131 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi Input"</span> ) );
<a name="l00131"></a>00131 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#245261b3f12ce727faed18fcfeef18c2" title="Create a virtual input port, with optional name, to allow software connections (OS...">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi Input"</span> ) );
<a name="l00132"></a>00132
<a name="l00134"></a>00134
<a name="l00140"></a>00140 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">setCallback</a>( <a class="code" href="classRtMidiIn.html#w0">RtMidiCallback</a> callback, <span class="keywordtype">void</span> *userData = 0 );
<a name="l00140"></a>00140 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#7590563461c7467608a4b3806406b32d" title="Set a callback function to be invoked for incoming MIDI messages.">setCallback</a>( <a class="code" href="classRtMidiIn.html#297d2eb3c3420b437970a6fc59d89cbf" title="User callback function type definition.">RtMidiCallback</a> callback, <span class="keywordtype">void</span> *userData = 0 );
<a name="l00141"></a>00141
<a name="l00143"></a>00143
<a name="l00147"></a>00147 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a5">cancelCallback</a>();
<a name="l00147"></a>00147 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#de23832a66c1ed56965c26325602543e" title="Cancel use of the current callback function (if one exists).">cancelCallback</a>();
<a name="l00148"></a>00148
<a name="l00150"></a>00150 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a6">closePort</a>( <span class="keywordtype">void</span> );
<a name="l00150"></a>00150 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#55bacf0d228fd8e3be6a79d12fd1dc39" title="Close an open MIDI connection (if one exists).">closePort</a>( <span class="keywordtype">void</span> );
<a name="l00151"></a>00151
<a name="l00153"></a>00153 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
<a name="l00153"></a>00153 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#62b1b38aa8e5f11cd66f03d59228f4e4" title="Return the number of available MIDI input ports.">getPortCount</a>();
<a name="l00154"></a>00154
<a name="l00156"></a>00156
<a name="l00159"></a>00159 std::string <a class="code" href="classRtMidiIn.html#a8">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00159"></a>00159 std::string <a class="code" href="classRtMidiIn.html#f2961fff09fa01a3d5bc0f0c5a042aaf" title="Return a string identifier for the specified MIDI input port number.">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00160"></a>00160
<a name="l00162"></a>00162
<a name="l00166"></a>00166 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a9">setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
<a name="l00166"></a>00166 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#2e15868916737039e0a34d47bffdf188" title="Set the maximum number of MIDI messages to be saved in the queue.">setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
<a name="l00167"></a>00167
<a name="l00169"></a>00169
<a name="l00176"></a>00176 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a10">ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span> );
<a name="l00176"></a>00176 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#f9507125aaa42276ccc01df576fc3533" title="Specify whether certain MIDI message types should be queued or ignored during input...">ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span> );
<a name="l00177"></a>00177
<a name="l00179"></a>00179
<a name="l00186"></a>00186 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a11">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
<a name="l00186"></a>00186 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#1ba10ecd276b30a8579c7d60a9c890eb" title="Fill the user-provided vector with the data bytes for the next available MIDI message...">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
<a name="l00187"></a>00187
<a name="l00188"></a>00188 <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
<a name="l00189"></a>00189 <span class="comment">// messages. Each message represents one and only one MIDI message.</span>
@@ -111,67 +112,71 @@
<a name="l00200"></a>00200 <span class="comment">// the MIDI input handling function or thread.</span>
<a name="l00201"></a>00201 <span class="keyword">struct </span>RtMidiInData {
<a name="l00202"></a>00202 std::queue&lt;MidiMessage&gt; queue;
<a name="l00203"></a>00203 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
<a name="l00204"></a>00204 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
<a name="l00205"></a>00205 <span class="keywordtype">bool</span> doInput;
<a name="l00206"></a>00206 <span class="keywordtype">bool</span> firstMessage;
<a name="l00207"></a>00207 <span class="keywordtype">void</span> *apiData;
<a name="l00208"></a>00208 <span class="keywordtype">bool</span> usingCallback;
<a name="l00209"></a>00209 <span class="keywordtype">void</span> *userCallback;
<a name="l00210"></a>00210 <span class="keywordtype">void</span> *userData;
<a name="l00211"></a>00211
<a name="l00212"></a>00212 <span class="comment">// Default constructor.</span>
<a name="l00213"></a>00213 RtMidiInData()
<a name="l00214"></a>00214 : queueLimit(1024), ignoreFlags(7), doInput(false), firstMessage(true),
<a name="l00215"></a>00215 apiData(0), usingCallback(false), userCallback(0), userData(0) {}
<a name="l00216"></a>00216 };
<a name="l00217"></a>00217
<a name="l00218"></a>00218 <span class="keyword">private</span>:
<a name="l00219"></a>00219
<a name="l00220"></a>00220 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
<a name="l00221"></a>00221 RtMidiInData inputData_;
<a name="l00203"></a>00203 MidiMessage message;
<a name="l00204"></a>00204 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
<a name="l00205"></a>00205 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
<a name="l00206"></a>00206 <span class="keywordtype">bool</span> doInput;
<a name="l00207"></a>00207 <span class="keywordtype">bool</span> firstMessage;
<a name="l00208"></a>00208 <span class="keywordtype">void</span> *apiData;
<a name="l00209"></a>00209 <span class="keywordtype">bool</span> usingCallback;
<a name="l00210"></a>00210 <span class="keywordtype">void</span> *userCallback;
<a name="l00211"></a>00211 <span class="keywordtype">void</span> *userData;
<a name="l00212"></a>00212 <span class="keywordtype">bool</span> continueSysex;
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <span class="comment">// Default constructor.</span>
<a name="l00215"></a>00215 RtMidiInData()
<a name="l00216"></a>00216 : queueLimit(1024), ignoreFlags(7), doInput(<span class="keyword">false</span>), firstMessage(<span class="keyword">true</span>),
<a name="l00217"></a>00217 apiData(0), usingCallback(<span class="keyword">false</span>), userCallback(0), userData(0),
<a name="l00218"></a>00218 continueSysex(<span class="keyword">false</span>) {}
<a name="l00219"></a>00219 };
<a name="l00220"></a>00220
<a name="l00221"></a>00221 <span class="keyword">private</span>:
<a name="l00222"></a>00222
<a name="l00223"></a>00223 };
<a name="l00224"></a>00224
<a name="l00225"></a>00225 <span class="comment">/**********************************************************************/</span>
<a name="l00237"></a>00237 <span class="comment">/**********************************************************************/</span>
<a name="l00238"></a>00238
<a name="l00239"></a><a class="code" href="classRtMidiOut.html">00239</a> <span class="keyword">class </span><a class="code" href="classRtMidiOut.html">RtMidiOut</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
<a name="l00240"></a>00240 {
<a name="l00241"></a>00241 <span class="keyword">public</span>:
<a name="l00242"></a>00242
<a name="l00244"></a>00244
<a name="l00247"></a>00247 <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>();
<a name="l00248"></a>00248
<a name="l00250"></a>00250 <a class="code" href="classRtMidiOut.html#a1">~RtMidiOut</a>();
<a name="l00223"></a>00223 <span class="keywordtype">void</span> initialize( <span class="keyword">const</span> std::string&amp; clientName );
<a name="l00224"></a>00224 RtMidiInData inputData_;
<a name="l00225"></a>00225
<a name="l00226"></a>00226 };
<a name="l00227"></a>00227
<a name="l00228"></a>00228 <span class="comment">/**********************************************************************/</span>
<a name="l00240"></a>00240 <span class="comment">/**********************************************************************/</span>
<a name="l00241"></a>00241
<a name="l00242"></a><a class="code" href="classRtMidiOut.html">00242</a> <span class="keyword">class </span><a class="code" href="classRtMidiOut.html" title="A realtime MIDI output class.">RtMidiOut</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html" title="An abstract base class for realtime MIDI input/output.">RtMidi</a>
<a name="l00243"></a>00243 {
<a name="l00244"></a>00244 <span class="keyword">public</span>:
<a name="l00245"></a>00245
<a name="l00247"></a>00247
<a name="l00250"></a>00250 <a class="code" href="classRtMidiOut.html#8ed1b492900f3410bf91ad53203b9db3" title="Default constructor that allows an optional client name.">RtMidiOut</a>( <span class="keyword">const</span> std::string clientName = std::string( <span class="stringliteral">"RtMidi Output Client"</span> ) );
<a name="l00251"></a>00251
<a name="l00253"></a>00253
<a name="l00259"></a>00259 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00260"></a>00260
<a name="l00262"></a>00262 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">closePort</a>();
<a name="l00253"></a>00253 <a class="code" href="classRtMidiOut.html#b776c431bd84193febb2f78fb8c7e792" title="The destructor closes any open MIDI connections.">~RtMidiOut</a>();
<a name="l00254"></a>00254
<a name="l00256"></a>00256
<a name="l00262"></a>00262 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#1b280d67317cd473a8816aeb2fe6c186" title="Open a MIDI output connection.">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0, <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi Output"</span> ) );
<a name="l00263"></a>00263
<a name="l00265"></a>00265
<a name="l00273"></a>00273 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi Output"</span> ) );
<a name="l00274"></a>00274
<a name="l00276"></a>00276 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
<a name="l00265"></a>00265 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#3092e53a8aed2d3b163fcaa05fafd041" title="Close an open MIDI connection (if one exists).">closePort</a>();
<a name="l00266"></a>00266
<a name="l00268"></a>00268
<a name="l00276"></a>00276 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#47068e1c076d91fd89587c0ccdeddc7a" title="Create a virtual output port, with optional name, to allow software connections (OS...">openVirtualPort</a>( <span class="keyword">const</span> std::string portName = std::string( <span class="stringliteral">"RtMidi Output"</span> ) );
<a name="l00277"></a>00277
<a name="l00279"></a>00279
<a name="l00282"></a>00282 std::string <a class="code" href="classRtMidiOut.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00283"></a>00283
<a name="l00285"></a>00285
<a name="l00289"></a>00289 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
<a name="l00290"></a>00290
<a name="l00291"></a>00291 <span class="keyword">private</span>:
<a name="l00292"></a>00292
<a name="l00293"></a>00293 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
<a name="l00294"></a>00294 };
<a name="l00279"></a>00279 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#d6cddbcc7faa20a7be229f765ade0877" title="Return the number of available MIDI output ports.">getPortCount</a>();
<a name="l00280"></a>00280
<a name="l00282"></a>00282
<a name="l00285"></a>00285 std::string <a class="code" href="classRtMidiOut.html#cc4ae0ab71a49ae7629075d5a9cd837c" title="Return a string identifier for the specified MIDI port type and number.">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
<a name="l00286"></a>00286
<a name="l00288"></a>00288
<a name="l00292"></a>00292 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#0bd8972ef8ac4e8d37ccc4b5d51c2eb3" title="Immediately send a single message out an open MIDI output port.">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
<a name="l00293"></a>00293
<a name="l00294"></a>00294 <span class="keyword">private</span>:
<a name="l00295"></a>00295
<a name="l00296"></a>00296 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00296"></a>00296 <span class="keywordtype">void</span> initialize( <span class="keyword">const</span> std::string&amp; clientName );
<a name="l00297"></a>00297 };
<a name="l00298"></a>00298
<a name="l00299"></a>00299 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,54 +8,82 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>RtWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#ifndef STK_RTWVIN_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTWVIN_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classRtWvIn.html">00027</a> <span class="keyword">class </span><a class="code" href="classRtWvIn.html">RtWvIn</a> : <span class="keyword">public</span> <a class="code" href="classWvIn.html">WvIn</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00031"></a>00031
<a name="l00042"></a>00042 <a class="code" href="classRtWvIn.html#a0">RtWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classStk.html#e0">sampleRate</a> = <a class="code" href="classStk.html#e0">Stk::sampleRate</a>(), <span class="keywordtype">int</span> device = 0, <span class="keywordtype">int</span> bufferFrames = RT_BUFFER_SIZE, <span class="keywordtype">int</span> nBuffers = 20 );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <a class="code" href="classRtWvIn.html#a1">~RtWvIn</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classRtWvIn.html#a2">start</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053
<a name="l00055"></a>00055
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classRtWvIn.html#a3">stop</a>( <span class="keywordtype">void</span> );
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="comment">// This function is not intended for general use but had to be made</span>
<a name="l00062"></a>00062 <span class="comment">// public for access from the audio callback function.</span>
<a name="l00063"></a>00063 <span class="keywordtype">void</span> fillBuffer( <span class="keywordtype">void</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames );
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keyword">protected</span>:
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keywordtype">void</span> computeFrame( <span class="keywordtype">void</span> );
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <a class="code" href="classRtAudio.html">RtAudio</a> adc_;
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> stopped_;
<a name="l00071"></a>00071 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
<a name="l00072"></a>00072 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex_;
<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> framesFilled_;
<a name="l00074"></a>00074
<a name="l00075"></a>00075 };
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="preprocessor">#endif</span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>RtWvIn.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_RTWVIN_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTWVIN_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvIn.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1RtWvIn.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1RtWvIn.html" title="STK realtime audio (blocking) input class.">RtWvIn</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvIn.html" title="STK audio input abstract base class.">WvIn</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1RtWvIn.html#b84c98c568346d1ad86251961f7d1fba" title="Default constructor.">RtWvIn</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">sampleRate</a> = <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>(),
<a name="l00043"></a>00043 <span class="keywordtype">int</span> device = 0, <span class="keywordtype">int</span> bufferFrames = RT_BUFFER_SIZE, <span class="keywordtype">int</span> nBuffers = 20 );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1RtWvIn.html#efae2caa7f77522e8baa4908e3157f4d" title="Class destructor.">~RtWvIn</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvIn.html#0ae4012cb269fb70536611b9116142fa" title="Start the audio input stream.">start</a>( <span class="keywordtype">void</span> );
<a name="l00054"></a>00054
<a name="l00056"></a>00056
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvIn.html#39d0d9702569ee3afa769309e8b2e152" title="Stop the audio input stream.">stop</a>( <span class="keywordtype">void</span> );
<a name="l00061"></a>00061
<a name="l00063"></a>00063
<a name="l00072"></a>00072 StkFloat <a class="code" href="classstk_1_1RtWvIn.html#3a4f4035fc01fee4c2423791f9e9317e" title="Return the specified channel value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00073"></a>00073
<a name="l00075"></a>00075
<a name="l00084"></a>00084 StkFloat <a class="code" href="classstk_1_1RtWvIn.html#d2ace75cfe44dd82dd706d2c8dac7901" title="Compute a sample frame and return the specified channel value.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00085"></a>00085
<a name="l00087"></a>00087
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1RtWvIn.html#d2ace75cfe44dd82dd706d2c8dac7901" title="Compute a sample frame and return the specified channel value.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="comment">// This function is not intended for general use but must be</span>
<a name="l00097"></a>00097 <span class="comment">// public for access from the audio callback function.</span>
<a name="l00098"></a>00098 <span class="keywordtype">void</span> fillBuffer( <span class="keywordtype">void</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames );
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keyword">protected</span>:
<a name="l00101"></a>00101
<a name="l00102"></a>00102 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> adc_;
<a name="l00103"></a>00103 <a class="code" href="classstk_1_1Mutex.html" title="STK mutex class.">Mutex</a> mutex_;
<a name="l00104"></a>00104 <span class="keywordtype">bool</span> stopped_;
<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
<a name="l00106"></a>00106 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex_;
<a name="l00107"></a>00107 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> framesFilled_;
<a name="l00108"></a>00108
<a name="l00109"></a>00109 };
<a name="l00110"></a>00110
<a name="l00111"></a><a class="code" href="classstk_1_1RtWvIn.html#3a4f4035fc01fee4c2423791f9e9317e">00111</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1RtWvIn.html#3a4f4035fc01fee4c2423791f9e9317e" title="Return the specified channel value of the last computed frame.">RtWvIn :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00112"></a>00112 {
<a name="l00113"></a>00113 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= data_.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00115"></a>00115 errorString_ &lt;&lt; <span class="stringliteral">"RtWvIn::lastOut(): channel argument and audio stream are incompatible!"</span>;
<a name="l00116"></a>00116 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00117"></a>00117 }
<a name="l00118"></a>00118 <span class="preprocessor">#endif</span>
<a name="l00119"></a>00119 <span class="preprocessor"></span>
<a name="l00120"></a>00120 <span class="keywordflow">return</span> lastFrame_[channel];
<a name="l00121"></a>00121 }
<a name="l00122"></a>00122
<a name="l00123"></a>00123 } <span class="comment">// stk namespace</span>
<a name="l00124"></a>00124
<a name="l00125"></a>00125 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,58 +8,69 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>RtWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#ifndef STK_RTWVOUT_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTWVOUT_H</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>
<a name="l00026"></a>00026
<a name="l00027"></a><a class="code" href="classRtWvOut.html">00027</a> <span class="keyword">class </span><a class="code" href="classRtWvOut.html">RtWvOut</a> : <span class="keyword">public</span> <a class="code" href="classWvOut.html">WvOut</a>
<a name="l00028"></a>00028 {
<a name="l00029"></a>00029 <span class="keyword">public</span>:
<a name="l00030"></a>00030
<a name="l00032"></a>00032
<a name="l00042"></a>00042 <a class="code" href="classRtWvOut.html#a0">RtWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classStk.html#e0">sampleRate</a> = <a class="code" href="classStk.html#e0">Stk::sampleRate</a>(),
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>RtWvOut.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_RTWVOUT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_RTWVOUT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "WvOut.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "<a class="code" href="RtAudio_8h.html">RtAudio.h</a>"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Mutex.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00028"></a>00028 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classstk_1_1RtWvOut.html">00030</a> <span class="keyword">class </span><a class="code" href="classstk_1_1RtWvOut.html" title="STK realtime audio (blocking) output class.">RtWvOut</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1WvOut.html" title="STK audio output abstract base class.">WvOut</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<a name="l00035"></a>00035
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1RtWvOut.html#f2ee408eb10a0dbf9e14407b34f2181e" title="Default constructor.">RtWvOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, StkFloat <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">sampleRate</a> = <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">Stk::sampleRate</a>(),
<a name="l00043"></a>00043 <span class="keywordtype">int</span> device = 0, <span class="keywordtype">int</span> bufferFrames = RT_BUFFER_SIZE, <span class="keywordtype">int</span> nBuffers = 20 );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classRtWvOut.html#a1">~RtWvOut</a>();
<a name="l00046"></a>00046 <a class="code" href="classstk_1_1RtWvOut.html#85b2e30c6a153c959a33ec4aae528ca2" title="Class destructor.">~RtWvOut</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classRtWvOut.html#a2">start</a>( <span class="keywordtype">void</span> );
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvOut.html#2e34c9ff845155230e0336ea3729dc45" title="Start the audio output stream.">start</a>( <span class="keywordtype">void</span> );
<a name="l00054"></a>00054
<a name="l00056"></a>00056
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classRtWvOut.html#a3">stop</a>( <span class="keywordtype">void</span> );
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvOut.html#7368c42b81670c0335b25f14faa08918" title="Stop the audio output stream.">stop</a>( <span class="keywordtype">void</span> );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="comment">// This function is not intended for general use but had to be made</span>
<a name="l00063"></a>00063 <span class="comment">// public for access from the audio callback function.</span>
<a name="l00064"></a>00064 <span class="keywordtype">int</span> readBuffer( <span class="keywordtype">void</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frameCount );
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="keyword">protected</span>:
<a name="l00063"></a>00063
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvOut.html#02adabdc987f3b9ac4dc4e02ea20962d" title="Output a single sample to all channels in a sample frame.">tick</a>( <span class="keyword">const</span> StkFloat sample );
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keywordtype">void</span> computeSample( <span class="keyword">const</span> StkFloat sample );
<a name="l00069"></a>00069 <span class="keywordtype">void</span> computeFrames( <span class="keyword">const</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <a class="code" href="classRtAudio.html">RtAudio</a> dac_;
<a name="l00072"></a>00072 <span class="keywordtype">bool</span> stopped_;
<a name="l00073"></a>00073 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
<a name="l00074"></a>00074 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex_;
<a name="l00075"></a>00075 <span class="keywordtype">long</span> framesFilled_;
<a name="l00076"></a>00076 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> status_; <span class="comment">// running = 0, emptying buffer = 1, finished = 2</span>
<a name="l00069"></a>00069
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1RtWvOut.html#02adabdc987f3b9ac4dc4e02ea20962d" title="Output a single sample to all channels in a sample frame.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames );
<a name="l00077"></a>00077
<a name="l00078"></a>00078 };
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00078"></a>00078 <span class="comment">// This function is not intended for general use but must be</span>
<a name="l00079"></a>00079 <span class="comment">// public for access from the audio callback function.</span>
<a name="l00080"></a>00080 <span class="keywordtype">int</span> readBuffer( <span class="keywordtype">void</span> *buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frameCount );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keyword">protected</span>:
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <a class="code" href="classRtAudio.html" title="Realtime audio i/o C++ classes.">RtAudio</a> dac_;
<a name="l00085"></a>00085 <a class="code" href="classstk_1_1Mutex.html" title="STK mutex class.">Mutex</a> mutex_;
<a name="l00086"></a>00086 <span class="keywordtype">bool</span> stopped_;
<a name="l00087"></a>00087 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readIndex_;
<a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> writeIndex_;
<a name="l00089"></a>00089 <span class="keywordtype">long</span> framesFilled_;
<a name="l00090"></a>00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> status_; <span class="comment">// running = 0, emptying buffer = 1, finished = 2</span>
<a name="l00091"></a>00091
<a name="l00092"></a>00092 };
<a name="l00093"></a>00093
<a name="l00094"></a>00094 } <span class="comment">// stk namespace</span>
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -1,149 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>SKINI.msg</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*********************************************************/</span>
<a name="l00002"></a>00002 <span class="comment">/*</span>
<a name="l00003"></a>00003 <span class="comment"> Definition of SKINI Message Types and Special Symbols</span>
<a name="l00004"></a>00004 <span class="comment"> Synthesis toolKit Instrument Network Interface</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment"> These symbols should have the form:</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment"> \c __SK_&lt;name&gt;_</span>
<a name="l00009"></a>00009 <span class="comment"></span>
<a name="l00010"></a>00010 <span class="comment"> where &lt;name&gt; is the string used in the SKINI stream.</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment"> by Perry R. Cook, 1995 - 2004.</span>
<a name="l00013"></a>00013 <span class="comment">*/</span>
<a name="l00014"></a>00014 <span class="comment">/*********************************************************/</span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016 <span class="preprocessor">#define NOPE -32767</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define YEP 1</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define SK_DBL -32766</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define SK_INT -32765</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define SK_STR -32764</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Exit_ 999</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="comment">/***** MIDI COMPATIBLE MESSAGES *****/</span>
<a name="l00024"></a>00024 <span class="comment">/*** (Status bytes for channel=0) ***/</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#define __SK_NoteOff_ 128</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define __SK_NoteOn_ 144</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define __SK_PolyPressure_ 160</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ControlChange_ 176</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProgramChange_ 192</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define __SK_AfterTouch_ 208</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ChannelPressure_ __SK_AfterTouch_</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define __SK_PitchWheel_ 224</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define __SK_PitchBend_ __SK_PitchWheel_</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define __SK_PitchChange_ 49</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span>
<a name="l00037"></a>00037 <span class="preprocessor">#define __SK_Clock_ 248</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SongStart_ 250</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Continue_ 251</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SongStop_ 252</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ActiveSensing_ 254</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SystemReset_ 255</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span>
<a name="l00044"></a>00044 <span class="preprocessor">#define __SK_Volume_ 7</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ModWheel_ 1</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Modulation_ __SK_ModWheel_</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Breath_ 2</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define __SK_FootControl_ 4</span>
<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Portamento_ 65</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Balance_ 8</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Pan_ 10</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Sustain_ 64</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Damper_ __SK_Sustain_</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Expression_ 11 </span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>
<a name="l00056"></a>00056 <span class="preprocessor">#define __SK_AfterTouch_Cont_ 128</span>
<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ModFrequency_ __SK_Expression_</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span>
<a name="l00059"></a>00059 <span class="preprocessor">#define __SK_ProphesyRibbon_ 16</span>
<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProphesyWheelUp_ 2</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProphesyWheelDown_ 3</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProphesyPedal_ 18</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProphesyKnob1_ 21</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ProphesyKnob2_ 22</span>
<a name="l00065"></a>00065 <span class="preprocessor"></span>
<a name="l00066"></a>00066 <span class="comment">/*** Instrument Family Specific ***/</span>
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="preprocessor">#define __SK_NoiseLevel_ __SK_FootControl_</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span>
<a name="l00070"></a>00070 <span class="preprocessor">#define __SK_PickPosition_ __SK_FootControl_</span>
<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define __SK_StringDamping_ __SK_Expression_</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define __SK_StringDetune_ __SK_ModWheel_</span>
<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define __SK_BodySize_ __SK_Breath_</span>
<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define __SK_BowPressure_ __SK_Breath_</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define __SK_BowPosition_ __SK_PickPosition_</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define __SK_BowBeta_ __SK_BowPosition_</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span>
<a name="l00078"></a>00078 <span class="preprocessor">#define __SK_ReedStiffness_ __SK_Breath_</span>
<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ReedRestPos_ __SK_FootControl_</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00081"></a>00081 <span class="preprocessor">#define __SK_FluteEmbouchure_ __SK_Breath_</span>
<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define __SK_JetDelay_ __SK_FluteEmbouchure_</span>
<a name="l00083"></a>00083 <span class="preprocessor"></span>
<a name="l00084"></a>00084 <span class="preprocessor">#define __SK_LipTension_ __SK_Breath_</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SlideLength_ __SK_FootControl_</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span>
<a name="l00087"></a>00087 <span class="preprocessor">#define __SK_StrikePosition_ __SK_PickPosition_</span>
<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define __SK_StickHardness_ __SK_Breath_</span>
<a name="l00089"></a>00089 <span class="preprocessor"></span>
<a name="l00090"></a>00090 <span class="preprocessor">#define __SK_TrillDepth_ 1051</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define __SK_TrillSpeed_ 1052</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define __SK_StrumSpeed_ __SK_TrillSpeed_</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#define __SK_RollSpeed_ __SK_TrillSpeed_</span>
<a name="l00094"></a>00094 <span class="preprocessor"></span>
<a name="l00095"></a>00095 <span class="preprocessor">#define __SK_FilterQ_ __SK_Breath_</span>
<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define __SK_FilterFreq_ 1062</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define __SK_FilterSweepRate_ __SK_FootControl_</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span>
<a name="l00099"></a>00099 <span class="preprocessor">#define __SK_ShakerInst_ 1071 </span>
<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ShakerEnergy_ __SK_Breath_</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ShakerDamping_ __SK_ModFrequency_</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ShakerNumObjects_ __SK_FootControl_</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span>
<a name="l00104"></a>00104 <span class="preprocessor">#define __SK_Strumming_ 1090</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define __SK_NotStrumming_ 1091</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Trilling_ 1092</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define __SK_NotTrilling_ 1093</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Rolling_ __SK_Strumming_</span>
<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define __SK_NotRolling_ __SK_NotStrumming_</span>
<a name="l00110"></a>00110 <span class="preprocessor"></span>
<a name="l00111"></a>00111 <span class="preprocessor">#define __SK_PlayerSkill_ 2001</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define __SK_Chord_ 2002</span>
<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#define __SK_ChordOff_ 2003</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>
<a name="l00115"></a>00115 <span class="preprocessor">#define __SK_SINGER_FilePath_ 3000</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_Frequency_ 3001</span>
<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_NoteName_ 3002</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_Shape_ 3003</span>
<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_Glot_ 3004</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_VoicedUnVoiced_ 3005</span>
<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_Synthesize_ 3006</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_Silence_ 3007</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_VibratoAmt_ __SK_ModWheel_</span>
<a name="l00124"></a>00124 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_RndVibAmt_ 3008</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span><span class="preprocessor">#define __SK_SINGER_VibFreq_ __SK_Expression_</span>
<a name="l00126"></a>00126 <span class="preprocessor"></span>
<a name="l00127"></a>00127
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,61 +8,67 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Sampler.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_SAMPLER_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_SAMPLER_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "WaveLoop.h"</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classSampler.html">00020</a> <span class="keyword">class </span><a class="code" href="classSampler.html">Sampler</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a>00024 <a class="code" href="classSampler.html#a0">Sampler</a>();
<a name="l00025"></a>00025
<a name="l00027"></a>00027 <span class="keyword">virtual</span> <a class="code" href="classSampler.html#a1">~Sampler</a>();
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a2">clear</a>();
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a3">setFrequency</a>(StkFloat frequency) = 0;
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a4">keyOn</a>();
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a5">keyOff</a>();
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a6">noteOff</a>(StkFloat amplitude);
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSampler.html#a7">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value) = 0;
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Sampler.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SAMPLER_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SAMPLER_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "FileLoop.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00020"></a>00020 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021
<a name="l00022"></a><a class="code" href="classstk_1_1Sampler.html">00022</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Sampler.html" title="STK sampling synthesis abstract base class.">Sampler</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00023"></a>00023 {
<a name="l00024"></a>00024 <span class="keyword">public</span>:
<a name="l00026"></a>00026 <a class="code" href="classstk_1_1Sampler.html#97dbec0c39f3307560736173b4ede4e1" title="Default constructor.">Sampler</a>( <span class="keywordtype">void</span> );
<a name="l00027"></a>00027
<a name="l00029"></a>00029 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1Sampler.html#9262914e25d4b9fd28a760621902fd74" title="Class destructor.">~Sampler</a>( <span class="keywordtype">void</span> );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#6c80aad733f5e90dfa63d29c6a5c88ac" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#746eaab88793e3e8cdac9f6e59e00ca3" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency ) = 0;
<a name="l00036"></a>00036
<a name="l00038"></a>00038 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#d277ac455b3434eeb21d628d6c70141a" title="Initiate the envelopes with a key-on event and reset the attack waves.">keyOn</a>( <span class="keywordtype">void</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#808aec2bf546b01e1ef53503c5a164e1" title="Signal a key-off event to the envelopes.">keyOff</a>( <span class="keywordtype">void</span> );
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#36c3ed945fb3e8db300b7ae01a4a4a76" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sampler.html#d9c0789f033978165226beb7c8133cc3" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value ) = 0;
<a name="l00048"></a>00048
<a name="l00049"></a>00049 <span class="keyword">virtual</span> StkFloat computeSample( <span class="keywordtype">void</span> ) = 0;
<a name="l00050"></a>00050
<a name="l00051"></a>00051 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00052"></a>00052 std::vector&lt;FileWvIn *&gt; attacks_;
<a name="l00053"></a>00053 std::vector&lt;WaveLoop *&gt; loops_;
<a name="l00054"></a>00054 <a class="code" href="classOnePole.html">OnePole</a> filter_;
<a name="l00055"></a>00055 StkFloat baseFrequency_;
<a name="l00056"></a>00056 std::vector&lt;StkFloat&gt; attackRatios_;
<a name="l00057"></a>00057 std::vector&lt;StkFloat&gt; loopRatios_;
<a name="l00058"></a>00058 StkFloat attackGain_;
<a name="l00059"></a>00059 StkFloat loopGain_;
<a name="l00060"></a>00060
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00050"></a>00050 <span class="keyword">virtual</span> StkFloat <a class="code" href="classstk_1_1Sampler.html#08502c96fa3e5f4c853c781354ed1965" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) = 0;
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <span class="keyword">protected</span>:
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00055"></a>00055 std::vector&lt;FileWvIn *&gt; attacks_;
<a name="l00056"></a>00056 std::vector&lt;FileLoop *&gt; loops_;
<a name="l00057"></a>00057 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filter_;
<a name="l00058"></a>00058 StkFloat baseFrequency_;
<a name="l00059"></a>00059 std::vector&lt;StkFloat&gt; attackRatios_;
<a name="l00060"></a>00060 std::vector&lt;StkFloat&gt; loopRatios_;
<a name="l00061"></a>00061 StkFloat attackGain_;
<a name="l00062"></a>00062 StkFloat loopGain_;
<a name="l00063"></a>00063
<a name="l00064"></a>00064 };
<a name="l00065"></a>00065
<a name="l00066"></a>00066 } <span class="comment">// stk namespace</span>
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,71 +8,98 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Saxofony.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="preprocessor">#ifndef STK_SAXOFONY_H</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define STK_SAXOFONY_H</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00048"></a>00048
<a name="l00049"></a><a class="code" href="classSaxofony.html">00049</a> <span class="keyword">class </span><a class="code" href="classSaxofony.html">Saxofony</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00050"></a>00050 {
<a name="l00051"></a>00051 <span class="keyword">public</span>:
<a name="l00053"></a>00053
<a name="l00056"></a>00056 <a class="code" href="classSaxofony.html#a0">Saxofony</a>(StkFloat lowestFrequency);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <a class="code" href="classSaxofony.html#a1">~Saxofony</a>();
<a name="l00060"></a>00060
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a2">clear</a>();
<a name="l00063"></a>00063
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00066"></a>00066
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a4">setBlowPosition</a>(StkFloat aPosition);
<a name="l00069"></a>00069
<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a5">startBlowing</a>(StkFloat amplitude, StkFloat rate);
<a name="l00072"></a>00072
<a name="l00074"></a>00074 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a6">stopBlowing</a>(StkFloat rate);
<a name="l00075"></a>00075
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a7">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00078"></a>00078
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a8">noteOff</a>(StkFloat amplitude);
<a name="l00081"></a>00081
<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="classSaxofony.html#a9">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Saxofony.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SAXOFONY_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SAXOFONY_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "ReedTable.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "SineWave.h"</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keyword">namespace </span>stk {
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00049"></a>00049 <span class="comment">/***************************************************/</span>
<a name="l00050"></a>00050
<a name="l00051"></a><a class="code" href="classstk_1_1Saxofony.html">00051</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Saxofony.html" title="STK faux conical bore reed instrument class.">Saxofony</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00052"></a>00052 {
<a name="l00053"></a>00053 <span class="keyword">public</span>:
<a name="l00055"></a>00055
<a name="l00058"></a>00058 <a class="code" href="classstk_1_1Saxofony.html#15984d74213308e0d81d1ee32d99ee76" title="Class constructor, taking the lowest desired playing frequency.">Saxofony</a>( StkFloat lowestFrequency );
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1Saxofony.html#1ff6a35de027e292c8a693aac314720d" title="Class destructor.">~Saxofony</a>( <span class="keywordtype">void</span> );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#c74981cfa3b36ec1288eccab6aa80210" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#5844455497f50e4b64beb23f275ac8d1" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#eccfcfe10cef314cedf727ed5ba9d3d5" title="Set the &amp;quot;blowing&amp;quot; position between the air column terminations (0.0 - 1...">setBlowPosition</a>( StkFloat aPosition );
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#6e46b18ad2f992dfc3d948f966ec1bf2" title="Apply breath pressure to instrument with given amplitude and rate of increase.">startBlowing</a>( StkFloat amplitude, StkFloat rate );
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#e792c62c3bcf2fe756387c1f5cd61794" title="Decrease breath pressure with given rate of decrease.">stopBlowing</a>( StkFloat rate );
<a name="l00077"></a>00077
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#924eed4733c9ecfd0e4de44f69011ea5" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00080"></a>00080
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#a930437a8044fc01dc906d79a482894c" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00083"></a>00083
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Saxofony.html#38efe138bea7af7aeab3652bf0a305ff" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00086"></a>00086
<a name="l00087"></a>00087 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <a class="code" href="classDelayL.html">DelayL</a> delays_[2];
<a name="l00090"></a>00090 <a class="code" href="classReedTable.html">ReedTable</a> reedTable_;
<a name="l00091"></a>00091 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<a name="l00092"></a>00092 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<a name="l00093"></a>00093 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00094"></a>00094 <a class="code" href="classSineWave.html">SineWave</a> vibrato_;
<a name="l00095"></a>00095 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00096"></a>00096 StkFloat outputGain_;
<a name="l00097"></a>00097 StkFloat noiseGain_;
<a name="l00098"></a>00098 StkFloat vibratoGain_;
<a name="l00099"></a>00099 StkFloat position_;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 };
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00088"></a>00088 StkFloat <a class="code" href="classstk_1_1Saxofony.html#955d2ea0b3236039851d19b681ca2b0f" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="keyword">protected</span>:
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> delays_[2];
<a name="l00093"></a>00093 <a class="code" href="classstk_1_1ReedTable.html" title="STK reed table class.">ReedTable</a> reedTable_;
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter_;
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> envelope_;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> vibrato_;
<a name="l00098"></a>00098 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00099"></a>00099 StkFloat outputGain_;
<a name="l00100"></a>00100 StkFloat noiseGain_;
<a name="l00101"></a>00101 StkFloat vibratoGain_;
<a name="l00102"></a>00102 StkFloat position_;
<a name="l00103"></a>00103
<a name="l00104"></a>00104 };
<a name="l00105"></a>00105
<a name="l00106"></a><a class="code" href="classstk_1_1Saxofony.html#955d2ea0b3236039851d19b681ca2b0f">00106</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Saxofony.html#955d2ea0b3236039851d19b681ca2b0f" title="Compute and return one output sample.">Saxofony :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00107"></a>00107 {
<a name="l00108"></a>00108 StkFloat pressureDiff;
<a name="l00109"></a>00109 StkFloat breathPressure;
<a name="l00110"></a>00110 StkFloat temp;
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="comment">// Calculate the breath pressure (envelope + noise + vibrato)</span>
<a name="l00113"></a>00113 breathPressure = envelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00114"></a>00114 breathPressure += breathPressure * noiseGain_ * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00115"></a>00115 breathPressure += breathPressure * vibratoGain_ * vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>();
<a name="l00116"></a>00116
<a name="l00117"></a>00117 temp = -0.95 * filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( delays_[0].<a class="code" href="classstk_1_1Instrmnt.html#aa6bd5e4a5be7f9b0be967daf012872e" title="Return the specified channel value of the last computed frame.">lastOut</a>() );
<a name="l00118"></a>00118 lastFrame_[0] = temp - delays_[1].<a class="code" href="classstk_1_1DelayL.html#16810ca38fab79276bb8ec51447623a9" title="Return the last computed output value.">lastOut</a>();
<a name="l00119"></a>00119 pressureDiff = breathPressure - lastFrame_[0];
<a name="l00120"></a>00120 delays_[1].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( temp );
<a name="l00121"></a>00121 delays_[0].<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( breathPressure - (pressureDiff * reedTable_.<a class="code" href="classstk_1_1ReedTable.html#3c1607ed5712e2ab010d8c5e55e431f2" title="Take one sample input and map to one sample of output.">tick</a>(pressureDiff)) - temp );
<a name="l00122"></a>00122
<a name="l00123"></a>00123 lastFrame_[0] *= outputGain_;
<a name="l00124"></a>00124 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a>00127 } <span class="comment">// stk namespace</span>
<a name="l00128"></a>00128
<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,80 +8,87 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Shakers.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00053"></a>00053 <span class="comment">/***************************************************/</span>
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="preprocessor">#ifndef STK_SHAKERS_H</span>
<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define STK_SHAKERS_H</span>
<a name="l00057"></a>00057 <span class="preprocessor"></span>
<a name="l00058"></a>00058 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00059"></a>00059
<a name="l00060"></a>00060 <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_FREQS = 8;
<a name="l00061"></a>00061 <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_INSTR = 24;
<a name="l00062"></a>00062
<a name="l00063"></a><a class="code" href="classShakers.html">00063</a> <span class="keyword">class </span><a class="code" href="classShakers.html">Shakers</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00064"></a>00064 {
<a name="l00065"></a>00065 <span class="keyword">public</span>:
<a name="l00067"></a>00067 <a class="code" href="classShakers.html#a0">Shakers</a>();
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <a class="code" href="classShakers.html#a1">~Shakers</a>();
<a name="l00071"></a>00071
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Shakers.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SHAKERS_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SHAKERS_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00060"></a>00060 <span class="comment">/***************************************************/</span>
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_FREQS = 8;
<a name="l00063"></a>00063 <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_INSTR = 24;
<a name="l00064"></a>00064
<a name="l00065"></a><a class="code" href="classstk_1_1Shakers.html">00065</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Shakers.html" title="PhISEM and PhOLIES class.">Shakers</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00066"></a>00066 {
<a name="l00067"></a>00067 <span class="keyword">public</span>:
<a name="l00069"></a>00069 <a class="code" href="classstk_1_1Shakers.html#34e4859c572a158d8fda15b7a5c6954d" title="Class constructor.">Shakers</a>( <span class="keywordtype">void</span> );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1Shakers.html#a1b2ab640268da68b867de1495f19a77" title="Class destructor.">~Shakers</a>( <span class="keywordtype">void</span> );
<a name="l00073"></a>00073
<a name="l00077"></a>00077 <span class="keywordtype">void</span> <a class="code" href="classShakers.html#a2">noteOn</a>(StkFloat instrument, StkFloat amplitude);
<a name="l00078"></a>00078
<a name="l00080"></a>00080 <span class="keywordtype">void</span> <a class="code" href="classShakers.html#a3">noteOff</a>(StkFloat amplitude);
<a name="l00081"></a>00081
<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="classShakers.html#a4">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keyword">protected</span>:
<a name="l00075"></a>00075
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Shakers.html#81ffb0ad1e350993af10b2795ec01861" title="Start a note with the given instrument and amplitude.">noteOn</a>( StkFloat instrument, StkFloat amplitude );
<a name="l00080"></a>00080
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Shakers.html#b63b4b57f8306eb7cf1adbf5a5cd1d05" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00083"></a>00083
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Shakers.html#688d9d8318e0c69779868079a7c64157" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00086"></a>00086
<a name="l00087"></a>00087 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00088"></a>00088 <span class="keywordtype">int</span> setupName(<span class="keywordtype">char</span>* instr);
<a name="l00089"></a>00089 <span class="keywordtype">int</span> setupNum(<span class="keywordtype">int</span> inst);
<a name="l00090"></a>00090 <span class="keywordtype">int</span> setFreqAndReson(<span class="keywordtype">int</span> which, StkFloat freq, StkFloat reson);
<a name="l00091"></a>00091 <span class="keywordtype">void</span> setDecays(StkFloat sndDecay, StkFloat sysDecay);
<a name="l00092"></a>00092 <span class="keywordtype">void</span> setFinalZs(StkFloat z0, StkFloat z1, StkFloat z2);
<a name="l00093"></a>00093 StkFloat wuter_tick();
<a name="l00094"></a>00094 StkFloat tbamb_tick();
<a name="l00095"></a>00095 StkFloat ratchet_tick();
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keywordtype">int</span> instType_;
<a name="l00098"></a>00098 <span class="keywordtype">int</span> ratchetPos_, lastRatchetPos_;
<a name="l00099"></a>00099 StkFloat shakeEnergy_;
<a name="l00100"></a>00100 StkFloat inputs_[MAX_FREQS];
<a name="l00101"></a>00101 StkFloat outputs_[MAX_FREQS][2];
<a name="l00102"></a>00102 StkFloat coeffs_[MAX_FREQS][2];
<a name="l00103"></a>00103 StkFloat sndLevel_;
<a name="l00104"></a>00104 StkFloat baseGain_;
<a name="l00105"></a>00105 StkFloat gains_[MAX_FREQS];
<a name="l00106"></a>00106 <span class="keywordtype">int</span> nFreqs_;
<a name="l00107"></a>00107 StkFloat t_center_freqs_[MAX_FREQS];
<a name="l00108"></a>00108 StkFloat center_freqs_[MAX_FREQS];
<a name="l00109"></a>00109 StkFloat resons_[MAX_FREQS];
<a name="l00110"></a>00110 StkFloat freq_rand_[MAX_FREQS];
<a name="l00111"></a>00111 <span class="keywordtype">int</span> freqalloc_[MAX_FREQS];
<a name="l00112"></a>00112 StkFloat soundDecay_;
<a name="l00113"></a>00113 StkFloat systemDecay_;
<a name="l00114"></a>00114 StkFloat nObjects_;
<a name="l00115"></a>00115 StkFloat totalEnergy_;
<a name="l00116"></a>00116 StkFloat ratchet_, ratchetDelta_;
<a name="l00117"></a>00117 StkFloat finalZ_[3];
<a name="l00118"></a>00118 StkFloat finalZCoeffs_[3];
<a name="l00119"></a>00119 StkFloat defObjs_[NUM_INSTR];
<a name="l00120"></a>00120 StkFloat defDecays_[NUM_INSTR];
<a name="l00121"></a>00121 StkFloat decayScale_[NUM_INSTR];
<a name="l00122"></a>00122
<a name="l00123"></a>00123 };
<a name="l00124"></a>00124
<a name="l00125"></a>00125 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00088"></a>00088 StkFloat <a class="code" href="classstk_1_1Shakers.html#e06ebba276cef74cb8c83db4e33f21c2" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="keyword">protected</span>:
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="keywordtype">int</span> setupName( <span class="keywordtype">char</span>* instr );
<a name="l00093"></a>00093 <span class="keywordtype">int</span> setupNum( <span class="keywordtype">int</span> inst );
<a name="l00094"></a>00094 <span class="keywordtype">int</span> setFreqAndReson( <span class="keywordtype">int</span> which, StkFloat freq, StkFloat reson );
<a name="l00095"></a>00095 <span class="keywordtype">void</span> setDecays( StkFloat sndDecay, StkFloat sysDecay );
<a name="l00096"></a>00096 <span class="keywordtype">void</span> setFinalZs( StkFloat z0, StkFloat z1, StkFloat z2 );
<a name="l00097"></a>00097 StkFloat wuter_tick( <span class="keywordtype">void</span> );
<a name="l00098"></a>00098 StkFloat tbamb_tick( <span class="keywordtype">void</span> );
<a name="l00099"></a>00099 StkFloat ratchet_tick( <span class="keywordtype">void</span> );
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="keywordtype">int</span> instType_;
<a name="l00102"></a>00102 <span class="keywordtype">int</span> ratchetPos_, lastRatchetPos_;
<a name="l00103"></a>00103 StkFloat shakeEnergy_;
<a name="l00104"></a>00104 StkFloat inputs_[MAX_FREQS];
<a name="l00105"></a>00105 StkFloat outputs_[MAX_FREQS][2];
<a name="l00106"></a>00106 StkFloat coeffs_[MAX_FREQS][2];
<a name="l00107"></a>00107 StkFloat sndLevel_;
<a name="l00108"></a>00108 StkFloat baseGain_;
<a name="l00109"></a>00109 StkFloat gains_[MAX_FREQS];
<a name="l00110"></a>00110 <span class="keywordtype">int</span> nFreqs_;
<a name="l00111"></a>00111 StkFloat t_center_freqs_[MAX_FREQS];
<a name="l00112"></a>00112 StkFloat center_freqs_[MAX_FREQS];
<a name="l00113"></a>00113 StkFloat resons_[MAX_FREQS];
<a name="l00114"></a>00114 StkFloat freq_rand_[MAX_FREQS];
<a name="l00115"></a>00115 <span class="keywordtype">int</span> freqalloc_[MAX_FREQS];
<a name="l00116"></a>00116 StkFloat soundDecay_;
<a name="l00117"></a>00117 StkFloat systemDecay_;
<a name="l00118"></a>00118 StkFloat nObjects_;
<a name="l00119"></a>00119 StkFloat totalEnergy_;
<a name="l00120"></a>00120 StkFloat ratchet_, ratchetDelta_;
<a name="l00121"></a>00121 StkFloat finalZ_[3];
<a name="l00122"></a>00122 StkFloat finalZCoeffs_[3];
<a name="l00123"></a>00123 StkFloat defObjs_[NUM_INSTR];
<a name="l00124"></a>00124 StkFloat defDecays_[NUM_INSTR];
<a name="l00125"></a>00125 StkFloat decayScale_[NUM_INSTR];
<a name="l00126"></a>00126
<a name="l00127"></a>00127 };
<a name="l00128"></a>00128
<a name="l00129"></a>00129 } <span class="comment">// stk namespace</span>
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,64 +8,80 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Simple.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef STK_SIMPLE_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_SIMPLE_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "WaveLoop.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00029"></a>00029
<a name="l00030"></a><a class="code" href="classSimple.html">00030</a> <span class="keyword">class </span><a class="code" href="classSimple.html">Simple</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 <span class="keyword">public</span>:
<a name="l00034"></a>00034
<a name="l00037"></a>00037 <a class="code" href="classSimple.html#a0">Simple</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classSimple.html#a1">~Simple</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a2">clear</a>();
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a4">keyOn</a>();
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a5">keyOff</a>();
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a6">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a7">noteOff</a>(StkFloat amplitude);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classSimple.html#a8">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Simple.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SIMPLE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SIMPLE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "FileLoop.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="keyword">namespace </span>stk {
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a><a class="code" href="classstk_1_1Simple.html">00032</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Simple.html" title="STK wavetable/noise instrument.">Simple</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00033"></a>00033 {
<a name="l00034"></a>00034 <span class="keyword">public</span>:
<a name="l00036"></a>00036
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1Simple.html#7fae7f883b6180e7d07c9e06b62e1283" title="Class constructor.">Simple</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1Simple.html#7fc1b20b362b5902d8a47ea889144601" title="Class destructor.">~Simple</a>( <span class="keywordtype">void</span> );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#8281297483ef2363a01590722dd739d8" title="Clear internal states.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#a2dcec630c97fdafb2ba75e74194540d" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#44650c4b65de79d4bf0b04b908c207b2" title="Start envelope toward &amp;quot;on&amp;quot; target.">keyOn</a>( <span class="keywordtype">void</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#4183bd057f8bf3783c8b1812f3459d32" title="Start envelope toward &amp;quot;off&amp;quot; target.">keyOff</a>( <span class="keywordtype">void</span> );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#eba26edadfba0dfe0f21834bd730fdad" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#6fbdaba299b3733b7e81ec4de5073350" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00061"></a>00061
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Simple.html#cd14d5368545f5650aeebbbdad65fc52" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00064"></a>00064
<a name="l00065"></a>00065 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <a class="code" href="classADSR.html">ADSR</a> adsr_;
<a name="l00068"></a>00068 <a class="code" href="classWaveLoop.html">WaveLoop</a> *loop_;
<a name="l00069"></a>00069 <a class="code" href="classOnePole.html">OnePole</a> filter_;
<a name="l00070"></a>00070 <a class="code" href="classBiQuad.html">BiQuad</a> biquad_;
<a name="l00071"></a>00071 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00072"></a>00072 StkFloat baseFrequency_;
<a name="l00073"></a>00073 StkFloat loopGain_;
<a name="l00074"></a>00074
<a name="l00075"></a>00075 };
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00066"></a>00066 StkFloat <a class="code" href="classstk_1_1Simple.html#a65326847f8b693f7b5549d18df6e882" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="keyword">protected</span>:
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> adsr_;
<a name="l00071"></a>00071 <a class="code" href="classstk_1_1FileLoop.html" title="STK file looping / oscillator class.">FileLoop</a> *loop_;
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> filter_;
<a name="l00073"></a>00073 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> biquad_;
<a name="l00074"></a>00074 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00075"></a>00075 StkFloat baseFrequency_;
<a name="l00076"></a>00076 StkFloat loopGain_;
<a name="l00077"></a>00077
<a name="l00078"></a>00078 };
<a name="l00079"></a>00079
<a name="l00080"></a><a class="code" href="classstk_1_1Simple.html#a65326847f8b693f7b5549d18df6e882">00080</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Simple.html#a65326847f8b693f7b5549d18df6e882" title="Compute and return one output sample.">Simple :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00081"></a>00081 {
<a name="l00082"></a>00082 lastFrame_[0] = loopGain_ * loop_-&gt;<a class="code" href="classstk_1_1FileLoop.html#037b31918134ed1839a8b48de774ab95" title="Compute a sample frame and return the specified channel value.">tick</a>();
<a name="l00083"></a>00083 biquad_.<a class="code" href="classstk_1_1BiQuad.html#648086962c3cddcaa09c46a002c3e635" title="Input one sample to the filter and return a reference to one output.">tick</a>( noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>() );
<a name="l00084"></a>00084 lastFrame_[0] += (1.0 - loopGain_) * biquad_.<a class="code" href="classstk_1_1BiQuad.html#412f224363b1a222423ecf0cd7be9063" title="Return the last computed output value.">lastOut</a>();
<a name="l00085"></a>00085 lastFrame_[0] = filter_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( lastFrame_[0] );
<a name="l00086"></a>00086 lastFrame_[0] *= adsr_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>();
<a name="l00087"></a>00087 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00088"></a>00088 }
<a name="l00089"></a>00089
<a name="l00090"></a>00090 } <span class="comment">// stk namespace</span>
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,60 +8,132 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>SineWave.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016 <span class="preprocessor">#ifndef STK_SINEWAVE_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_SINEWAVE_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> TABLE_SIZE = 2048;
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classSineWave.html">00023</a> <span class="keyword">class </span><a class="code" href="classSineWave.html">SineWave</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00027"></a>00027 <a class="code" href="classSineWave.html#a0">SineWave</a>( <span class="keywordtype">void</span> );
<a name="l00028"></a>00028
<a name="l00030"></a>00030 <span class="keyword">virtual</span> <a class="code" href="classSineWave.html#a1">~SineWave</a>( <span class="keywordtype">void</span> );
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a2">reset</a>( <span class="keywordtype">void</span> );
<a name="l00034"></a>00034
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>SineWave.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SINEWAVE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SINEWAVE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> TABLE_SIZE = 2048;
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="preprocessor">#include "Generator.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a><a class="code" href="classstk_1_1SineWave.html">00025</a> <span class="keyword">class </span><a class="code" href="classstk_1_1SineWave.html" title="STK sinusoid oscillator class.">SineWave</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00026"></a>00026 {
<a name="l00027"></a>00027 <span class="keyword">public</span>:
<a name="l00029"></a>00029 <a class="code" href="classstk_1_1SineWave.html#d25afe03871430c533986b0852e04c62" title="Default constructor.">SineWave</a>( <span class="keywordtype">void</span> );
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <a class="code" href="classstk_1_1SineWave.html#e192f1813531f4b2ba933bcc5b288bfb" title="Class destructor.">~SineWave</a>( <span class="keywordtype">void</span> );
<a name="l00033"></a>00033
<a name="l00035"></a>00035 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#667b211ead65a23aa8ab89e4a9c9ae6c" title="Clear output and reset time pointer to zero.">reset</a>( <span class="keywordtype">void</span> );
<a name="l00036"></a>00036
<a name="l00039"></a><a class="code" href="classSineWave.html#a3">00039</a> <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a3">setRate</a>( StkFloat rate ) { rate_ = rate; };
<a name="l00040"></a>00040
<a name="l00038"></a>00038
<a name="l00041"></a><a class="code" href="classstk_1_1SineWave.html#e69b232dd3a33963d25cf6215692d9d5">00041</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#e69b232dd3a33963d25cf6215692d9d5" title="Set the data read rate in samples. The rate can be negative.">setRate</a>( StkFloat rate ) { rate_ = rate; };
<a name="l00042"></a>00042
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a4">setFrequency</a>( StkFloat frequency );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a5">addTime</a>( StkFloat time );
<a name="l00052"></a>00052
<a name="l00044"></a>00044
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#1047a43714bc2e40c7e31e8f7e34adbc" title="Set the data interpolation rate based on a looping frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#dc8f03d5d81cfc24c20794033aad876f" title="Increment the read pointer by time in samples, modulo the table size.">addTime</a>( StkFloat time );
<a name="l00054"></a>00054
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a6">addPhase</a>( StkFloat angle );
<a name="l00060"></a>00060
<a name="l00056"></a>00056
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#62d69af61e6905ddda203756cd6e3516" title="Increment the read pointer by a normalized phase value.">addPhase</a>( StkFloat phase );
<a name="l00062"></a>00062
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classSineWave.html#a7">addPhaseOffset</a>( StkFloat angle );
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">protected</span>:
<a name="l00070"></a>00070
<a name="l00071"></a>00071 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00072"></a>00072 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 <span class="keyword">static</span> <a class="code" href="classStkFrames.html">StkFrames</a> table_;
<a name="l00075"></a>00075 StkFloat time_;
<a name="l00076"></a>00076 StkFloat rate_;
<a name="l00077"></a>00077 StkFloat phaseOffset_;
<a name="l00078"></a>00078
<a name="l00079"></a>00079 };
<a name="l00080"></a>00080
<a name="l00081"></a>00081 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00064"></a>00064
<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SineWave.html#87bd4c92259b9b389f568f8d7cd7524f" title="Add a normalized phase offset to the read pointer.">addPhaseOffset</a>( StkFloat phaseOffset );
<a name="l00069"></a>00069
<a name="l00071"></a><a class="code" href="classstk_1_1SineWave.html#b788e787e5bb54445dd0769283567224">00071</a> StkFloat <a class="code" href="classstk_1_1SineWave.html#b788e787e5bb54445dd0769283567224" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00072"></a>00072
<a name="l00074"></a>00074 StkFloat <a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00075"></a>00075
<a name="l00077"></a>00077
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keyword">protected</span>:
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="keyword">static</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> table_;
<a name="l00091"></a>00091 StkFloat time_;
<a name="l00092"></a>00092 StkFloat rate_;
<a name="l00093"></a>00093 StkFloat phaseOffset_;
<a name="l00094"></a>00094 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iIndex_;
<a name="l00095"></a>00095 StkFloat alpha_;
<a name="l00096"></a>00096
<a name="l00097"></a>00097 };
<a name="l00098"></a>00098
<a name="l00099"></a><a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda">00099</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">SineWave :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00100"></a>00100 {
<a name="l00101"></a>00101 <span class="comment">// Check limits of time address ... if necessary, recalculate modulo</span>
<a name="l00102"></a>00102 <span class="comment">// TABLE_SIZE.</span>
<a name="l00103"></a>00103 <span class="keywordflow">while</span> ( time_ &lt; 0.0 )
<a name="l00104"></a>00104 time_ += TABLE_SIZE;
<a name="l00105"></a>00105 <span class="keywordflow">while</span> ( time_ &gt;= TABLE_SIZE )
<a name="l00106"></a>00106 time_ -= TABLE_SIZE;
<a name="l00107"></a>00107
<a name="l00108"></a>00108 iIndex_ = (<span class="keywordtype">unsigned</span> int) time_;
<a name="l00109"></a>00109 alpha_ = time_ - iIndex_;
<a name="l00110"></a>00110 StkFloat tmp = table_[ iIndex_ ];
<a name="l00111"></a>00111 tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) );
<a name="l00112"></a>00112
<a name="l00113"></a>00113 <span class="comment">// Increment time, which can be negative.</span>
<a name="l00114"></a>00114 time_ += rate_;
<a name="l00115"></a>00115
<a name="l00116"></a>00116 lastFrame_[0] = tmp;
<a name="l00117"></a>00117 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00118"></a>00118 }
<a name="l00119"></a>00119
<a name="l00120"></a><a class="code" href="classstk_1_1SineWave.html#f205d7029046af8a392341cabd58f9de">00120</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">SineWave :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00121"></a>00121 {
<a name="l00122"></a>00122 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00124"></a>00124 errorString_ &lt;&lt; <span class="stringliteral">"SineWave::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00125"></a>00125 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00126"></a>00126 }
<a name="l00127"></a>00127 <span class="preprocessor">#endif</span>
<a name="l00128"></a>00128 <span class="preprocessor"></span>
<a name="l00129"></a>00129 StkFloat *samples = &amp;frames[channel];
<a name="l00130"></a>00130 StkFloat tmp = 0.0;
<a name="l00131"></a>00131
<a name="l00132"></a>00132 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00133"></a>00133 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00134"></a>00134
<a name="l00135"></a>00135 <span class="comment">// Check limits of time address ... if necessary, recalculate modulo</span>
<a name="l00136"></a>00136 <span class="comment">// TABLE_SIZE.</span>
<a name="l00137"></a>00137 <span class="keywordflow">while</span> ( time_ &lt; 0.0 )
<a name="l00138"></a>00138 time_ += TABLE_SIZE;
<a name="l00139"></a>00139 <span class="keywordflow">while</span> ( time_ &gt;= TABLE_SIZE )
<a name="l00140"></a>00140 time_ -= TABLE_SIZE;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 iIndex_ = (<span class="keywordtype">unsigned</span> int) time_;
<a name="l00143"></a>00143 alpha_ = time_ - iIndex_;
<a name="l00144"></a>00144 tmp = table_[ iIndex_ ];
<a name="l00145"></a>00145 tmp += ( alpha_ * ( table_[ iIndex_ + 1 ] - tmp ) );
<a name="l00146"></a>00146 *samples = tmp;
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="comment">// Increment time, which can be negative.</span>
<a name="l00149"></a>00149 time_ += rate_;
<a name="l00150"></a>00150 }
<a name="l00151"></a>00151
<a name="l00152"></a>00152 lastFrame_[0] = tmp;
<a name="l00153"></a>00153 <span class="keywordflow">return</span> frames;
<a name="l00154"></a>00154 }
<a name="l00155"></a>00155
<a name="l00156"></a>00156 } <span class="comment">// stk namespace</span>
<a name="l00157"></a>00157
<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,70 +8,111 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>SingWave.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00015"></a>00015
<a name="l00016"></a>00016 <span class="preprocessor">#ifndef STK_SINGWAVE_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span><span class="preprocessor">#define STK_SINGWAVE_H</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "WaveLoop.h"</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "Modulate.h"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00022"></a>00022
<a name="l00023"></a><a class="code" href="classSingWave.html">00023</a> <span class="keyword">class </span><a class="code" href="classSingWave.html">SingWave</a> : <span class="keyword">public</span> <a class="code" href="classGenerator.html">Generator</a>
<a name="l00024"></a>00024 {
<a name="l00025"></a>00025 <span class="keyword">public</span>:
<a name="l00027"></a>00027
<a name="l00031"></a>00031 <a class="code" href="classSingWave.html#a0">SingWave</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span>);
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <a class="code" href="classSingWave.html#a1">~SingWave</a>();
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a2">reset</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a3">normalize</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a3">normalize</a>(StkFloat peak);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a5">setFrequency</a>(StkFloat frequency);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a6">setVibratoRate</a>(StkFloat rate);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a7">setVibratoGain</a>(StkFloat gain);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a8">setRandomGain</a>(StkFloat gain);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a9">setSweepRate</a>(StkFloat rate);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a10">setGainRate</a>(StkFloat rate);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a11">setGainTarget</a>(StkFloat target);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a12">noteOn</a>();
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classSingWave.html#a13">noteOff</a>();
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>SingWave.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SINGWAVE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SINGWAVE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FileLoop.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Modulate.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keyword">namespace </span>stk {
<a name="l00009"></a>00009
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024
<a name="l00025"></a><a class="code" href="classstk_1_1SingWave.html">00025</a> <span class="keyword">class </span><a class="code" href="classstk_1_1SingWave.html" title="STK &amp;quot;singing&amp;quot; looped soundfile class.">SingWave</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Generator.html" title="STK abstract unit generator parent class.">Generator</a>
<a name="l00026"></a>00026 {
<a name="l00027"></a>00027 <span class="keyword">public</span>:
<a name="l00029"></a>00029
<a name="l00036"></a>00036 <a class="code" href="classstk_1_1SingWave.html#7a38283d4e42d5f9b96d3ce8c401183a" title="Class constructor taking filename argument.">SingWave</a>( std::string fileName, <span class="keywordtype">bool</span> raw = <span class="keyword">false</span> );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1SingWave.html#0cd0c9dc6878705b638098c425ced782" title="Class destructor.">~SingWave</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a><a class="code" href="classstk_1_1SingWave.html#906a50d64292988d48aa742c80e4f572">00042</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#906a50d64292988d48aa742c80e4f572" title="Reset file to beginning.">reset</a>( <span class="keywordtype">void</span> ) { wave_.<a class="code" href="classstk_1_1FileLoop.html#2c539902d697d0b87334ca7dc4f3ce69" title="Clear outputs and reset time (file) pointer to zero.">reset</a>(); lastFrame_[0] = 0.0; };
<a name="l00043"></a>00043
<a name="l00045"></a><a class="code" href="classstk_1_1SingWave.html#ed07d9ebe8289abe232eb1337d0708db">00045</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#ed07d9ebe8289abe232eb1337d0708db" title="Normalize the file to a maximum of +-1.0.">normalize</a>( <span class="keywordtype">void</span> ) { wave_.<a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b" title="Normalize data to a maximum of +-1.0.">normalize</a>(); };
<a name="l00046"></a>00046
<a name="l00048"></a><a class="code" href="classstk_1_1SingWave.html#eece74c720cfe97c3d7f67c01a102b3d">00048</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#eece74c720cfe97c3d7f67c01a102b3d" title="Normalize the file to a maximum of +- peak.">normalize</a>( StkFloat peak ) { wave_.<a class="code" href="classstk_1_1FileLoop.html#7c4a3d5c427154bf653f86a53e900b8b" title="Normalize data to a maximum of +-1.0.">normalize</a>( peak ); };
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#e1ac4a84551f89570ff0842d032a3cba" title="Set looping parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00052"></a>00052
<a name="l00054"></a><a class="code" href="classstk_1_1SingWave.html#9143162e223ad86682c099d2a6c79ea0">00054</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#9143162e223ad86682c099d2a6c79ea0" title="Set the vibrato frequency in Hz.">setVibratoRate</a>( StkFloat rate ) { modulator_.<a class="code" href="classstk_1_1Modulate.html#298b25f4b7cc56f2dffae5474a05999d" title="Set the periodic (vibrato) rate or frequency in Hz.">setVibratoRate</a>( rate ); };
<a name="l00055"></a>00055
<a name="l00057"></a><a class="code" href="classstk_1_1SingWave.html#5276e1e244551d1ca1dcc70ed42e9228">00057</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#5276e1e244551d1ca1dcc70ed42e9228" title="Set the vibrato gain.">setVibratoGain</a>( StkFloat gain ) { modulator_.<a class="code" href="classstk_1_1Modulate.html#08f2d489a3fba3a10d1f301aed869ed4" title="Set the periodic (vibrato) gain.">setVibratoGain</a>( gain ); };
<a name="l00058"></a>00058
<a name="l00060"></a><a class="code" href="classstk_1_1SingWave.html#287cf0feecb7eda88328fb2bc0edff92">00060</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#287cf0feecb7eda88328fb2bc0edff92" title="Set the random-ness amount.">setRandomGain</a>( StkFloat gain ) { modulator_.<a class="code" href="classstk_1_1Modulate.html#c6e7a02378facf59916f2460ed5c2fa5" title="Set the random modulation gain.">setRandomGain</a>( gain ); };
<a name="l00061"></a>00061
<a name="l00063"></a><a class="code" href="classstk_1_1SingWave.html#b80c50b3c8fc05f056221452504aa150">00063</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#b80c50b3c8fc05f056221452504aa150" title="Set the sweep rate.">setSweepRate</a>( StkFloat rate ) { sweepRate_ = rate; };
<a name="l00064"></a>00064
<a name="l00066"></a><a class="code" href="classstk_1_1SingWave.html#7e2a4183704bea50f9d793bd998d6554">00066</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#7e2a4183704bea50f9d793bd998d6554" title="Set the gain rate.">setGainRate</a>( StkFloat rate ) { envelope_.<a class="code" href="classstk_1_1Envelope.html#de99b5c7cb974f71f1d2919868d774a0" title="Set the rate.">setRate</a>( rate ); };
<a name="l00067"></a>00067
<a name="l00069"></a><a class="code" href="classstk_1_1SingWave.html#c248b298dd095bd7c9ed2c84a229a55f">00069</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#c248b298dd095bd7c9ed2c84a229a55f" title="Set the gain target value.">setGainTarget</a>( StkFloat target ) { envelope_.<a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">setTarget</a>( target ); };
<a name="l00070"></a>00070
<a name="l00072"></a><a class="code" href="classstk_1_1SingWave.html#9bd638590605e5b5eb679467506e42ff">00072</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#9bd638590605e5b5eb679467506e42ff" title="Start a note.">noteOn</a>( <span class="keywordtype">void</span> ) { envelope_.<a class="code" href="classstk_1_1Envelope.html#18cf8f21ef70227bd5cd17f53752bd0f" title="Set target = 1.">keyOn</a>(); };
<a name="l00073"></a>00073
<a name="l00074"></a>00074 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <a class="code" href="classWaveLoop.html">WaveLoop</a> *wave_;
<a name="l00077"></a>00077 <a class="code" href="classModulate.html">Modulate</a> modulator_;
<a name="l00078"></a>00078 <a class="code" href="classEnvelope.html">Envelope</a> envelope_;
<a name="l00079"></a>00079 <a class="code" href="classEnvelope.html">Envelope</a> pitchEnvelope_;
<a name="l00080"></a>00080 StkFloat rate_;
<a name="l00081"></a>00081 StkFloat sweepRate_;
<a name="l00075"></a><a class="code" href="classstk_1_1SingWave.html#c81240ee79f64b90a9c37d45c0aa3a7f">00075</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1SingWave.html#c81240ee79f64b90a9c37d45c0aa3a7f" title="Stop a note.">noteOff</a>( <span class="keywordtype">void</span> ) { envelope_.<a class="code" href="classstk_1_1Envelope.html#9dbefb15f8d64aac3969f77d38791774" title="Set target = 0.">keyOff</a>(); };
<a name="l00076"></a>00076
<a name="l00078"></a><a class="code" href="classstk_1_1SingWave.html#f1c5286c4a58904241d7b73ff29d4be0">00078</a> StkFloat <a class="code" href="classstk_1_1SingWave.html#f1c5286c4a58904241d7b73ff29d4be0" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00079"></a>00079
<a name="l00081"></a>00081 StkFloat <a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">void</span> );
<a name="l00082"></a>00082
<a name="l00083"></a>00083 };
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00091"></a>00091 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00092"></a>00092
<a name="l00093"></a>00093 <span class="keyword">protected</span>:
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1FileLoop.html" title="STK file looping / oscillator class.">FileLoop</a> wave_;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1Modulate.html" title="STK periodic/random modulator.">Modulate</a> modulator_;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> envelope_;
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> pitchEnvelope_;
<a name="l00099"></a>00099 StkFloat rate_;
<a name="l00100"></a>00100 StkFloat sweepRate_;
<a name="l00101"></a>00101
<a name="l00102"></a>00102 };
<a name="l00103"></a>00103
<a name="l00104"></a><a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78">00104</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">SingWave :: tick</a>( <span class="keywordtype">void</span> )
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106 <span class="comment">// Set the wave rate.</span>
<a name="l00107"></a>00107 StkFloat newRate = pitchEnvelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00108"></a>00108 newRate += newRate * modulator_.<a class="code" href="classstk_1_1Modulate.html#237b96dd553d65253abbf00a186e293d" title="Compute and return one output sample.">tick</a>();
<a name="l00109"></a>00109 wave_.<a class="code" href="classstk_1_1FileLoop.html#13e1f693bc8a29d9051a400087347a3c" title="Set the data read rate in samples. The rate can be negative.">setRate</a>( newRate );
<a name="l00110"></a>00110
<a name="l00111"></a>00111 lastFrame_[0] = wave_.<a class="code" href="classstk_1_1FileLoop.html#037b31918134ed1839a8b48de774ab95" title="Compute a sample frame and return the specified channel value.">tick</a>();
<a name="l00112"></a>00112 lastFrame_[0] *= envelope_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>();
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00115"></a>00115 }
<a name="l00116"></a>00116
<a name="l00117"></a><a class="code" href="classstk_1_1SingWave.html#b74d7a305510eec92a9aa1a26bcb5e94">00117</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">SingWave :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00118"></a>00118 {
<a name="l00119"></a>00119 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00121"></a>00121 errorString_ &lt;&lt; <span class="stringliteral">"SingWave::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00122"></a>00122 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00123"></a>00123 }
<a name="l00124"></a>00124 <span class="preprocessor">#endif</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span>
<a name="l00126"></a>00126 StkFloat *samples = &amp;frames[channel];
<a name="l00127"></a>00127 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00128"></a>00128 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop )
<a name="l00129"></a>00129 *samples = <a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">SingWave::tick</a>();
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="keywordflow">return</span> frames;
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133
<a name="l00134"></a>00134 } <span class="comment">// stk namespace</span>
<a name="l00135"></a>00135
<a name="l00136"></a>00136 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,61 +8,84 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Sitar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef STK_SITAR_H</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define STK_SITAR_H</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classSitar.html">00029</a> <span class="keyword">class </span><a class="code" href="classSitar.html">Sitar</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033 <a class="code" href="classSitar.html#a0">Sitar</a>( StkFloat lowestFrequency = 20 );
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <a class="code" href="classSitar.html#a1">~Sitar</a>();
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Sitar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SITAR_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SITAR_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "ADSR.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="keyword">namespace </span>stk {
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a><a class="code" href="classstk_1_1Sitar.html">00032</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Sitar.html" title="STK sitar string model class.">Sitar</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00033"></a>00033 {
<a name="l00034"></a>00034 <span class="keyword">public</span>:
<a name="l00036"></a>00036 <a class="code" href="classstk_1_1Sitar.html#a645039b4c1609f979775f5ec7e8bd4b" title="Class constructor, taking the lowest desired playing frequency.">Sitar</a>( StkFloat lowestFrequency = 20 );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classSitar.html#a2">clear</a>();
<a name="l00039"></a>00039 <a class="code" href="classstk_1_1Sitar.html#4bb1d8cd5c1ffc331e6c97e28f6f3000" title="Class destructor.">~Sitar</a>( <span class="keywordtype">void</span> );
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classSitar.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sitar.html#52cc4d38204e6825e524228008a0e94c" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classSitar.html#a4">pluck</a>(StkFloat amplitude);
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sitar.html#02acfe592d8d601a37fadb94aaedb074" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classSitar.html#a5">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sitar.html#fcbccba0e49bf538c190381785c90752" title="Pluck the string with the given amplitude using the current frequency.">pluck</a>( StkFloat amplitude );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classSitar.html#a6">noteOff</a>(StkFloat amplitude);
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sitar.html#02fb8c574a4ea9acd4ae7f3f3636b3b3" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="keyword">protected</span>:
<a name="l00054"></a>00054
<a name="l00055"></a>00055 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
<a name="l00058"></a>00058 <a class="code" href="classOneZero.html">OneZero</a> loopFilter_;
<a name="l00059"></a>00059 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00060"></a>00060 <a class="code" href="classADSR.html">ADSR</a> envelope_;
<a name="l00061"></a>00061
<a name="l00062"></a>00062 StkFloat loopGain_;
<a name="l00063"></a>00063 StkFloat amGain_;
<a name="l00064"></a>00064 StkFloat delay_;
<a name="l00065"></a>00065 StkFloat targetDelay_;
<a name="l00066"></a>00066
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span>
</pre></div><HR>
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sitar.html#e4acf7cf5f8319fa3420133c2802e9f6" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 StkFloat <a class="code" href="classstk_1_1Sitar.html#811c8d08d78cfbd5061396af7027043e" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine_;
<a name="l00062"></a>00062 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> loopFilter_;
<a name="l00063"></a>00063 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00064"></a>00064 <a class="code" href="classstk_1_1ADSR.html" title="STK ADSR envelope class.">ADSR</a> envelope_;
<a name="l00065"></a>00065
<a name="l00066"></a>00066 StkFloat loopGain_;
<a name="l00067"></a>00067 StkFloat amGain_;
<a name="l00068"></a>00068 StkFloat delay_;
<a name="l00069"></a>00069 StkFloat targetDelay_;
<a name="l00070"></a>00070
<a name="l00071"></a>00071 };
<a name="l00072"></a>00072
<a name="l00073"></a><a class="code" href="classstk_1_1Sitar.html#811c8d08d78cfbd5061396af7027043e">00073</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Sitar.html#811c8d08d78cfbd5061396af7027043e" title="Compute and return one output sample.">Sitar :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075 <span class="keywordflow">if</span> ( fabs(targetDelay_ - delay_) &gt; 0.001 ) {
<a name="l00076"></a>00076 <span class="keywordflow">if</span> ( targetDelay_ &lt; delay_ )
<a name="l00077"></a>00077 delay_ *= 0.99999;
<a name="l00078"></a>00078 <span class="keywordflow">else</span>
<a name="l00079"></a>00079 delay_ *= 1.00001;
<a name="l00080"></a>00080 delayLine_.<a class="code" href="classstk_1_1DelayA.html#83ddc9bdf2f5059159160fdac0e25eda" title="Set the delay-line length.">setDelay</a>( delay_ );
<a name="l00081"></a>00081 }
<a name="l00082"></a>00082
<a name="l00083"></a>00083 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>( loopFilter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * loopGain_ ) +
<a name="l00084"></a>00084 (amGain_ * envelope_.<a class="code" href="classstk_1_1ADSR.html#f2c0869f86210a55f4f668172373c975" title="Compute and return one output sample.">tick</a>() * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>()));
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00087"></a>00087 }
<a name="l00088"></a>00088
<a name="l00089"></a>00089 } <span class="comment">// stk namespace</span>
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,87 +8,93 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Skini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef STK_SKINI_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define STK_SKINI_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classSkini.html">00036</a> <span class="keyword">class </span><a class="code" href="classSkini.html">Skini</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00039"></a>00039
<a name="l00041"></a><a class="code" href="structSkini_1_1Message.html">00041</a> <span class="keyword">struct </span><a class="code" href="structSkini_1_1Message.html">Message</a> {
<a name="l00042"></a><a class="code" href="structSkini_1_1Message.html#o0">00042</a> <span class="keywordtype">long</span> <a class="code" href="structSkini_1_1Message.html#o0">type</a>;
<a name="l00043"></a><a class="code" href="structSkini_1_1Message.html#o1">00043</a> <span class="keywordtype">long</span> <a class="code" href="structSkini_1_1Message.html#o1">channel</a>;
<a name="l00044"></a><a class="code" href="structSkini_1_1Message.html#o2">00044</a> StkFloat <a class="code" href="structSkini_1_1Message.html#o2">time</a>;
<a name="l00045"></a><a class="code" href="structSkini_1_1Message.html#o3">00045</a> std::vector&lt;StkFloat&gt; <a class="code" href="structSkini_1_1Message.html#o3">floatValues</a>;
<a name="l00046"></a><a class="code" href="structSkini_1_1Message.html#o4">00046</a> std::vector&lt;long&gt; <a class="code" href="structSkini_1_1Message.html#o4">intValues</a>;
<a name="l00047"></a><a class="code" href="structSkini_1_1Message.html#o5">00047</a> std::string <a class="code" href="structSkini_1_1Message.html#o5">remainder</a>;
<a name="l00049"></a>00049 <span class="comment">// Default constructor.</span>
<a name="l00050"></a>00050 <a class="code" href="structSkini_1_1Message.html">Message</a>()
<a name="l00051"></a>00051 :<a class="code" href="structSkini_1_1Message.html#o0">type</a>(0), <a class="code" href="structSkini_1_1Message.html#o1">channel</a>(0), <a class="code" href="structSkini_1_1Message.html#o2">time</a>(0.0), <a class="code" href="structSkini_1_1Message.html#o3">floatValues</a>(2), <a class="code" href="structSkini_1_1Message.html#o4">intValues</a>(2) {}
<a name="l00052"></a>00052 };
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <a class="code" href="classSkini.html#a0">Skini</a>();
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <a class="code" href="classSkini.html#a1">~Skini</a>();
<a name="l00059"></a>00059
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Skini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SKINI_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SKINI_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="keyword">namespace </span>stk {
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1Skini.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Skini.html" title="STK SKINI parsing class.">Skini</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00041"></a>00041
<a name="l00043"></a><a class="code" href="structstk_1_1Skini_1_1Message.html">00043</a> <span class="keyword">struct </span><a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Message</a> {
<a name="l00044"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#bbc0624b287332dc4fb6bdb2ab60e9c0">00044</a> <span class="keywordtype">long</span> <a class="code" href="structstk_1_1Skini_1_1Message.html#bbc0624b287332dc4fb6bdb2ab60e9c0">type</a>;
<a name="l00045"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#c1bc8970386267cf1e2ef4158423a674">00045</a> <span class="keywordtype">long</span> <a class="code" href="structstk_1_1Skini_1_1Message.html#c1bc8970386267cf1e2ef4158423a674">channel</a>;
<a name="l00046"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#edd07a24e5cdb48f813ae09163e37734">00046</a> StkFloat <a class="code" href="structstk_1_1Skini_1_1Message.html#edd07a24e5cdb48f813ae09163e37734">time</a>;
<a name="l00047"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#8bcc16021f56dbded308672d87f8199e">00047</a> std::vector&lt;StkFloat&gt; <a class="code" href="structstk_1_1Skini_1_1Message.html#8bcc16021f56dbded308672d87f8199e">floatValues</a>;
<a name="l00048"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#18dc93937487044b992468875abdc4dd">00048</a> std::vector&lt;long&gt; <a class="code" href="structstk_1_1Skini_1_1Message.html#18dc93937487044b992468875abdc4dd">intValues</a>;
<a name="l00049"></a><a class="code" href="structstk_1_1Skini_1_1Message.html#3afd9e17a7df379d3b78c72e8c591836">00049</a> std::string <a class="code" href="structstk_1_1Skini_1_1Message.html#3afd9e17a7df379d3b78c72e8c591836">remainder</a>;
<a name="l00051"></a>00051 <span class="comment">// Default constructor.</span>
<a name="l00052"></a>00052 <a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Message</a>()
<a name="l00053"></a>00053 :<a class="code" href="structstk_1_1Skini_1_1Message.html#bbc0624b287332dc4fb6bdb2ab60e9c0">type</a>(0), <a class="code" href="structstk_1_1Skini_1_1Message.html#c1bc8970386267cf1e2ef4158423a674">channel</a>(0), <a class="code" href="structstk_1_1Skini_1_1Message.html#edd07a24e5cdb48f813ae09163e37734">time</a>(0.0), <a class="code" href="structstk_1_1Skini_1_1Message.html#8bcc16021f56dbded308672d87f8199e">floatValues</a>(2), <a class="code" href="structstk_1_1Skini_1_1Message.html#18dc93937487044b992468875abdc4dd">intValues</a>(2) {}
<a name="l00054"></a>00054 };
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <a class="code" href="classstk_1_1Skini.html#ed904de40a0fa1d22dbb08bc4517f4c8" title="Default constructor.">Skini</a>();
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <a class="code" href="classstk_1_1Skini.html#7c960798afad4b53065ebb26ff00495a" title="Class destructor.">~Skini</a>();
<a name="l00061"></a>00061
<a name="l00065"></a>00065 <span class="keywordtype">bool</span> <a class="code" href="classSkini.html#a2">setFile</a>( std::string fileName );
<a name="l00066"></a>00066
<a name="l00063"></a>00063
<a name="l00067"></a>00067 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Skini.html#30eb5f5238c552d042b8eb510aa8d241" title="Set a SKINI formatted file for reading.">setFile</a>( std::string fileName );
<a name="l00068"></a>00068
<a name="l00074"></a>00074 <span class="keywordtype">long</span> <a class="code" href="classSkini.html#a3">nextMessage</a>( <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
<a name="l00075"></a>00075
<a name="l00070"></a>00070
<a name="l00076"></a>00076 <span class="keywordtype">long</span> <a class="code" href="classstk_1_1Skini.html#675f2a9841c4b84e161de651eed4412d" title="Parse the next file message (if a file is loaded) and return the message type.">nextMessage</a>( <a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Skini::Message</a>&amp; message );
<a name="l00077"></a>00077
<a name="l00081"></a>00081 <span class="keywordtype">long</span> <a class="code" href="classSkini.html#a4">parseString</a>( std::string&amp; line, <a class="code" href="structSkini_1_1Message.html">Skini::Message</a>&amp; message );
<a name="l00082"></a>00082
<a name="l00084"></a>00084 <span class="keyword">static</span> std::string <a class="code" href="classSkini.html#e0">whatsThisType</a>(<span class="keywordtype">long</span> type);
<a name="l00085"></a>00085
<a name="l00087"></a>00087 <span class="keyword">static</span> std::string <a class="code" href="classSkini.html#e1">whatsThisController</a>(<span class="keywordtype">long</span> number);
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="keyword">protected</span>:
<a name="l00079"></a>00079
<a name="l00083"></a>00083 <span class="keywordtype">long</span> <a class="code" href="classstk_1_1Skini.html#d3e29f6ca88052e95698137ec2e545ad" title="Attempt to parse the given string and returning the message type.">parseString</a>( std::string&amp; line, <a class="code" href="structstk_1_1Skini_1_1Message.html" title="A message structure to store and pass parsed SKINI messages.">Skini::Message</a>&amp; message );
<a name="l00084"></a>00084
<a name="l00086"></a>00086 <span class="keyword">static</span> std::string <a class="code" href="classstk_1_1Skini.html#fae7977e19f7b7f647ee2c6ade62a199" title="Return the SKINI type string for the given type value.">whatsThisType</a>(<span class="keywordtype">long</span> type);
<a name="l00087"></a>00087
<a name="l00089"></a>00089 <span class="keyword">static</span> std::string <a class="code" href="classstk_1_1Skini.html#30c34ff9ffd7646165155fa4d62dee6c" title="Return the SKINI controller string for the given controller number.">whatsThisController</a>(<span class="keywordtype">long</span> number);
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="keywordtype">void</span> tokenize( <span class="keyword">const</span> std::string&amp; str, std::vector&lt;std::string&gt;&amp; tokens, <span class="keyword">const</span> std::string&amp; delimiters );
<a name="l00091"></a>00091 <span class="keyword">protected</span>:
<a name="l00092"></a>00092
<a name="l00093"></a>00093 std::ifstream file_;
<a name="l00094"></a>00094 };
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> Midi2Pitch[129] = {
<a name="l00097"></a>00097 8.18,8.66,9.18,9.72,10.30,10.91,11.56,12.25,
<a name="l00098"></a>00098 12.98,13.75,14.57,15.43,16.35,17.32,18.35,19.45,
<a name="l00099"></a>00099 20.60,21.83,23.12,24.50,25.96,27.50,29.14,30.87,
<a name="l00100"></a>00100 32.70,34.65,36.71,38.89,41.20,43.65,46.25,49.00,
<a name="l00101"></a>00101 51.91,55.00,58.27,61.74,65.41,69.30,73.42,77.78,
<a name="l00102"></a>00102 82.41,87.31,92.50,98.00,103.83,110.00,116.54,123.47,
<a name="l00103"></a>00103 130.81,138.59,146.83,155.56,164.81,174.61,185.00,196.00,
<a name="l00104"></a>00104 207.65,220.00,233.08,246.94,261.63,277.18,293.66,311.13,
<a name="l00105"></a>00105 329.63,349.23,369.99,392.00,415.30,440.00,466.16,493.88,
<a name="l00106"></a>00106 523.25,554.37,587.33,622.25,659.26,698.46,739.99,783.99,
<a name="l00107"></a>00107 830.61,880.00,932.33,987.77,1046.50,1108.73,1174.66,1244.51,
<a name="l00108"></a>00108 1318.51,1396.91,1479.98,1567.98,1661.22,1760.00,1864.66,1975.53,
<a name="l00109"></a>00109 2093.00,2217.46,2349.32,2489.02,2637.02,2793.83,2959.96,3135.96,
<a name="l00110"></a>00110 3322.44,3520.00,3729.31,3951.07,4186.01,4434.92,4698.64,4978.03,
<a name="l00111"></a>00111 5274.04,5587.65,5919.91,6271.93,6644.88,7040.00,7458.62,7902.13,
<a name="l00112"></a>00112 8372.02,8869.84,9397.27,9956.06,10548.08,11175.30,11839.82,12543.85,
<a name="l00113"></a>00113 13289.75};
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="preprocessor">#endif</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>
<a name="l00117"></a>00117
</pre></div><HR>
<a name="l00093"></a>00093 <span class="keywordtype">void</span> tokenize( <span class="keyword">const</span> std::string&amp; str, std::vector&lt;std::string&gt;&amp; tokens, <span class="keyword">const</span> std::string&amp; delimiters );
<a name="l00094"></a>00094
<a name="l00095"></a>00095 std::ifstream file_;
<a name="l00096"></a>00096 };
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> Midi2Pitch[129] = {
<a name="l00099"></a>00099 8.18,8.66,9.18,9.72,10.30,10.91,11.56,12.25,
<a name="l00100"></a>00100 12.98,13.75,14.57,15.43,16.35,17.32,18.35,19.45,
<a name="l00101"></a>00101 20.60,21.83,23.12,24.50,25.96,27.50,29.14,30.87,
<a name="l00102"></a>00102 32.70,34.65,36.71,38.89,41.20,43.65,46.25,49.00,
<a name="l00103"></a>00103 51.91,55.00,58.27,61.74,65.41,69.30,73.42,77.78,
<a name="l00104"></a>00104 82.41,87.31,92.50,98.00,103.83,110.00,116.54,123.47,
<a name="l00105"></a>00105 130.81,138.59,146.83,155.56,164.81,174.61,185.00,196.00,
<a name="l00106"></a>00106 207.65,220.00,233.08,246.94,261.63,277.18,293.66,311.13,
<a name="l00107"></a>00107 329.63,349.23,369.99,392.00,415.30,440.00,466.16,493.88,
<a name="l00108"></a>00108 523.25,554.37,587.33,622.25,659.26,698.46,739.99,783.99,
<a name="l00109"></a>00109 830.61,880.00,932.33,987.77,1046.50,1108.73,1174.66,1244.51,
<a name="l00110"></a>00110 1318.51,1396.91,1479.98,1567.98,1661.22,1760.00,1864.66,1975.53,
<a name="l00111"></a>00111 2093.00,2217.46,2349.32,2489.02,2637.02,2793.83,2959.96,3135.96,
<a name="l00112"></a>00112 3322.44,3520.00,3729.31,3951.07,4186.01,4434.92,4698.64,4978.03,
<a name="l00113"></a>00113 5274.04,5587.65,5919.91,6271.93,6644.88,7040.00,7458.62,7902.13,
<a name="l00114"></a>00114 8372.02,8869.84,9397.27,9956.06,10548.08,11175.30,11839.82,12543.85,
<a name="l00115"></a>00115 13289.75};
<a name="l00116"></a>00116
<a name="l00117"></a>00117 } <span class="comment">// stk namespace</span>
<a name="l00118"></a>00118
<a name="l00119"></a>00119 <span class="preprocessor">#endif</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>
<a name="l00121"></a>00121
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,78 +8,84 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Socket.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#ifndef STK_SOCKET_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define STK_SOCKET_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor"> #include &lt;sys/socket.h&gt;</span>
<a name="l00022"></a>00022 <span class="preprocessor"> #include &lt;sys/types.h&gt;</span>
<a name="l00023"></a>00023 <span class="preprocessor"> #include &lt;arpa/inet.h&gt;</span>
<a name="l00024"></a>00024 <span class="preprocessor"> #include &lt;netdb.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor"> #include &lt;unistd.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor"> #include &lt;fcntl.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor"> #include &lt;netinet/in.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor"> #include &lt;netinet/tcp.h&gt;</span>
<a name="l00029"></a>00029
<a name="l00030"></a>00030 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor"> #include &lt;winsock.h&gt;</span>
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a><a class="code" href="classSocket.html">00036</a> <span class="keyword">class </span><a class="code" href="classSocket.html">Socket</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00039"></a>00039
<a name="l00040"></a>00040 <span class="keyword">enum</span> ProtocolType {
<a name="l00041"></a>00041 PROTO_TCP,
<a name="l00042"></a>00042 PROTO_UDP
<a name="l00043"></a>00043 };
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <a class="code" href="classSocket.html#a0">Socket</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keyword">virtual</span> <a class="code" href="classSocket.html#a1">~Socket</a>();
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSocket.html#e0">close</a>( <span class="keywordtype">int</span> socket );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a2">id</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classSocket.html#e1">isValid</a>( <span class="keywordtype">int</span> socket );
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSocket.html#e2">setBlocking</a>( <span class="keywordtype">int</span> socket, <span class="keywordtype">bool</span> enable );
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a4">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0) = 0;
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a5">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0) = 0;
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a4">writeBuffer</a>(<span class="keywordtype">int</span> socket, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags );
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a5">readBuffer</a>(<span class="keywordtype">int</span> socket, <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags );
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Socket.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SOCKET_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SOCKET_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span>
<a name="l00008"></a>00008 <span class="preprocessor"> #include &lt;sys/socket.h&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor"> #include &lt;sys/types.h&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor"> #include &lt;arpa/inet.h&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor"> #include &lt;netdb.h&gt;</span>
<a name="l00012"></a>00012 <span class="preprocessor"> #include &lt;unistd.h&gt;</span>
<a name="l00013"></a>00013 <span class="preprocessor"> #include &lt;fcntl.h&gt;</span>
<a name="l00014"></a>00014 <span class="preprocessor"> #include &lt;netinet/in.h&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor"> #include &lt;netinet/tcp.h&gt;</span>
<a name="l00016"></a>00016
<a name="l00017"></a>00017 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="preprocessor"> #include &lt;winsock.h&gt;</span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span>
<a name="l00023"></a>00023 <span class="keyword">namespace </span>stk {
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="comment">/***************************************************/</span>
<a name="l00036"></a>00036 <span class="comment">/***************************************************/</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classstk_1_1Socket.html">00038</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00041"></a>00041
<a name="l00042"></a>00042 <span class="keyword">enum</span> ProtocolType {
<a name="l00043"></a>00043 PROTO_TCP,
<a name="l00044"></a>00044 PROTO_UDP
<a name="l00045"></a>00045 };
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classstk_1_1Socket.html#2558d3b2001c07eeae9d3e301df399fe" title="Class constructor.">Socket</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1Socket.html#8fb79fcfba5d1438575e0fb933f8b37b" title="Class destructor.">~Socket</a>();
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Socket.html#816c3dfae2549db692944042821d6019" title="Close the socket.">close</a>( <span class="keywordtype">int</span> socket );
<a name="l00055"></a>00055
<a name="l00057"></a><a class="code" href="classstk_1_1Socket.html#eae0c6721248eecd5dae0b77ea66cb2c">00057</a> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#eae0c6721248eecd5dae0b77ea66cb2c" title="Return the socket descriptor.">id</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> soket_; };
<a name="l00058"></a>00058
<a name="l00060"></a><a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7">00060</a> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> port_; };
<a name="l00061"></a>00061
<a name="l00063"></a><a class="code" href="classstk_1_1Socket.html#61375099d0d0811bf79c894587cc3724">00063</a> <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Socket.html#61375099d0d0811bf79c894587cc3724" title="Returns true if the socket descriptor is valid.">isValid</a>( <span class="keywordtype">int</span> socket ) { <span class="keywordflow">return</span> socket != -1; };
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Socket.html#12f0abb799fbf7d5d2ee6364627cb6ac" title="If enable = false, the socket is set to non-blocking mode. When first created, sockets...">setBlocking</a>( <span class="keywordtype">int</span> socket, <span class="keywordtype">bool</span> enable );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#7938202181552306d0ea74c6c04abf4a" title="Write a buffer over the socket connection. Returns the number of bytes written or...">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0) = 0;
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#a99d0f4e1c0ebae768a9f3f124364906" title="Read an input buffer, up to length bufferSize. Returns the number of bytes read or...">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0) = 0;
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#7938202181552306d0ea74c6c04abf4a" title="Write a buffer over the socket connection. Returns the number of bytes written or...">writeBuffer</a>(<span class="keywordtype">int</span> socket, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags );
<a name="l00076"></a>00076
<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#a99d0f4e1c0ebae768a9f3f124364906" title="Read an input buffer, up to length bufferSize. Returns the number of bytes read or...">readBuffer</a>(<span class="keywordtype">int</span> socket, <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="keywordtype">int</span> soket_;
<a name="l00081"></a>00081 <span class="keywordtype">int</span> port_;
<a name="l00082"></a>00082
<a name="l00083"></a>00083 };
<a name="l00080"></a>00080 <span class="keyword">protected</span>:
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">int</span> soket_;
<a name="l00083"></a>00083 <span class="keywordtype">int</span> port_;
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="preprocessor">#endif // defined(STK_SOCKET_H)</span>
</pre></div><HR>
<a name="l00085"></a>00085 };
<a name="l00086"></a>00086
<a name="l00087"></a>00087 } <span class="comment">// stk namespace</span>
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,63 +8,74 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Sphere.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef STK_SPHERE_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define STK_SPHERE_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "Vector3D.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classSphere.html">00018</a> <span class="keyword">class </span><a class="code" href="classSphere.html">Sphere</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00022"></a>00022 <a class="code" href="classSphere.html#a0">Sphere</a>(StkFloat radius = 1.0 );
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classSphere.html#a1">~Sphere</a>();
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a2">setPosition</a>(StkFloat x, StkFloat y, StkFloat z);
<a name="l00029"></a>00029
<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a3">setVelocity</a>(StkFloat x, StkFloat y, StkFloat z);
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a4">setRadius</a>(StkFloat radius);
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a5">setMass</a>(StkFloat mass);
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <a class="code" href="classVector3D.html">Vector3D</a>* <a class="code" href="classSphere.html#a6">getPosition</a>();
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classVector3D.html">Vector3D</a>* <a class="code" href="classSphere.html#a7">getRelativePosition</a>(<a class="code" href="classVector3D.html">Vector3D</a> *position);
<a name="l00044"></a>00044
<a name="l00046"></a>00046 StkFloat <a class="code" href="classSphere.html#a8">getVelocity</a>(<a class="code" href="classVector3D.html">Vector3D</a>* velocity);
<a name="l00047"></a>00047
<a name="l00049"></a>00049 StkFloat <a class="code" href="classSphere.html#a9">isInside</a>(<a class="code" href="classVector3D.html">Vector3D</a> *position);
<a name="l00050"></a>00050
<a name="l00052"></a>00052 StkFloat <a class="code" href="classSphere.html#a10">getRadius</a>();
<a name="l00053"></a>00053
<a name="l00055"></a>00055 StkFloat <a class="code" href="classSphere.html#a11">getMass</a>();
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a12">addVelocity</a>(StkFloat x, StkFloat y, StkFloat z);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classSphere.html#a13">tick</a>(StkFloat timeIncrement);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keyword">private</span>:
<a name="l00064"></a>00064 <a class="code" href="classVector3D.html">Vector3D</a> position_;
<a name="l00065"></a>00065 <a class="code" href="classVector3D.html">Vector3D</a> velocity_;
<a name="l00066"></a>00066 <a class="code" href="classVector3D.html">Vector3D</a> workingVector_;
<a name="l00067"></a>00067 StkFloat radius_;
<a name="l00068"></a>00068 StkFloat mass_;
<a name="l00069"></a>00069 };
<a name="l00070"></a>00070
<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
</pre></div><HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Sphere.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_SPHERE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_SPHERE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Vector3D.h"</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classstk_1_1Sphere.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Sphere.html" title="STK sphere class.">Sphere</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a><a class="code" href="classstk_1_1Sphere.html#73d4fac54fba9aa11a56a34e4198656c">00024</a> <a class="code" href="classstk_1_1Sphere.html#73d4fac54fba9aa11a56a34e4198656c" title="Constructor taking an initial radius value.">Sphere</a>( StkFloat radius = 1.0 ) { radius_ = radius; mass_ = 1.0; };
<a name="l00025"></a>00025
<a name="l00027"></a><a class="code" href="classstk_1_1Sphere.html#cfa3d4475f9c5ab655276473b1816f39">00027</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#cfa3d4475f9c5ab655276473b1816f39" title="Set the 3D center position of the sphere.">setPosition</a>( StkFloat x, StkFloat y, StkFloat z ) { position_.<a class="code" href="classstk_1_1Vector3D.html#65fd03de6d9d42ea53a6cb8418ee7149" title="Set the X, Y, and Z values simultaniously.">setXYZ</a>(x, y, z); };
<a name="l00028"></a>00028
<a name="l00030"></a><a class="code" href="classstk_1_1Sphere.html#c76725a19fe806e9af9841d30faacb11">00030</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#c76725a19fe806e9af9841d30faacb11" title="Set the 3D velocity of the sphere.">setVelocity</a>( StkFloat x, StkFloat y, StkFloat z ) { velocity_.<a class="code" href="classstk_1_1Vector3D.html#65fd03de6d9d42ea53a6cb8418ee7149" title="Set the X, Y, and Z values simultaniously.">setXYZ</a>(x, y, z); };
<a name="l00031"></a>00031
<a name="l00033"></a><a class="code" href="classstk_1_1Sphere.html#c3f4f85642307bebe0733662620f0ee2">00033</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#c3f4f85642307bebe0733662620f0ee2" title="Set the radius of the sphere.">setRadius</a>( StkFloat radius ) { radius_ = radius; };
<a name="l00034"></a>00034
<a name="l00036"></a><a class="code" href="classstk_1_1Sphere.html#0db842c9f06b377bcd803391b7126d2f">00036</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#0db842c9f06b377bcd803391b7126d2f" title="Set the mass of the sphere.">setMass</a>( StkFloat mass ) { mass_ = mass; };
<a name="l00037"></a>00037
<a name="l00039"></a><a class="code" href="classstk_1_1Sphere.html#91a3e710a7ff0cf160e9d46fca373bfd">00039</a> <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a>* <a class="code" href="classstk_1_1Sphere.html#91a3e710a7ff0cf160e9d46fca373bfd" title="Get the current position of the sphere as a 3D vector.">getPosition</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> &amp;position_; };
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a>* <a class="code" href="classstk_1_1Sphere.html#4cf8f763e732bcf9ca79b8602e8ec24a" title="Get the relative position of the given point to the sphere as a 3D vector.">getRelativePosition</a>( <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> *position );
<a name="l00043"></a>00043
<a name="l00045"></a>00045 StkFloat <a class="code" href="classstk_1_1Sphere.html#43ccf47d5d952f14f1ba0940aa87f4c5" title="Set the velcoity of the sphere as a 3D vector.">getVelocity</a>( <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a>* velocity );
<a name="l00046"></a>00046
<a name="l00048"></a>00048 StkFloat <a class="code" href="classstk_1_1Sphere.html#00bf47b0d5cd06a858d08f37d220ef9f" title="Returns the distance from the sphere boundary to the given position (&amp;lt; 0 if inside)...">isInside</a>( <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> *position );
<a name="l00049"></a>00049
<a name="l00051"></a><a class="code" href="classstk_1_1Sphere.html#03550bbe32d62ead67787651619b8c8b">00051</a> StkFloat <a class="code" href="classstk_1_1Sphere.html#03550bbe32d62ead67787651619b8c8b" title="Get the current sphere radius.">getRadius</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> radius_; };
<a name="l00052"></a>00052
<a name="l00054"></a><a class="code" href="classstk_1_1Sphere.html#a82d922e0b8513364d9d0d473e6239c6">00054</a> StkFloat <a class="code" href="classstk_1_1Sphere.html#a82d922e0b8513364d9d0d473e6239c6" title="Get the current sphere mass.">getMass</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> mass_; };
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#16666f1e94c6d1e6b1fa35ee6c46331f" title="Increase the current sphere velocity by the given 3D components.">addVelocity</a>( StkFloat x, StkFloat y, StkFloat z );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#dc4709622b77fc91ad6f33be98c86344" title="Move the sphere for the given time increment.">tick</a>( StkFloat timeIncrement );
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="keyword">private</span>:
<a name="l00063"></a>00063 <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> position_;
<a name="l00064"></a>00064 <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> velocity_;
<a name="l00065"></a>00065 <a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> workingVector_;
<a name="l00066"></a>00066 StkFloat radius_;
<a name="l00067"></a>00067 StkFloat mass_;
<a name="l00068"></a>00068 };
<a name="l00069"></a>00069
<a name="l00070"></a><a class="code" href="classstk_1_1Sphere.html#dc4709622b77fc91ad6f33be98c86344">00070</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Sphere.html#dc4709622b77fc91ad6f33be98c86344" title="Move the sphere for the given time increment.">Sphere::tick</a>( StkFloat timeIncrement )
<a name="l00071"></a>00071 {
<a name="l00072"></a>00072 position_.<a class="code" href="classstk_1_1Vector3D.html#9825ba3adb8fb272d2e3ca20740a48c5" title="Set the X value.">setX</a>(position_.<a class="code" href="classstk_1_1Vector3D.html#e4f7cddc34ed1cf80262ff2d5dad65f4" title="Get the current X value.">getX</a>() + (timeIncrement * velocity_.<a class="code" href="classstk_1_1Vector3D.html#e4f7cddc34ed1cf80262ff2d5dad65f4" title="Get the current X value.">getX</a>()));
<a name="l00073"></a>00073 position_.<a class="code" href="classstk_1_1Vector3D.html#94de5326b083c6cf72f509aa0fc532f3" title="Set the Y value.">setY</a>(position_.<a class="code" href="classstk_1_1Vector3D.html#f83bfbe865d702845e37e14d82f642b6" title="Get the current Y value.">getY</a>() + (timeIncrement * velocity_.<a class="code" href="classstk_1_1Vector3D.html#f83bfbe865d702845e37e14d82f642b6" title="Get the current Y value.">getY</a>()));
<a name="l00074"></a>00074 position_.<a class="code" href="classstk_1_1Vector3D.html#826f2aa5e7b95a0d91f9432f26bec881" title="Set the Z value.">setZ</a>(position_.<a class="code" href="classstk_1_1Vector3D.html#f1c7389a2b4640cbe594fa33f9e4f805" title="Get the current Z value.">getZ</a>() + (timeIncrement * velocity_.<a class="code" href="classstk_1_1Vector3D.html#f1c7389a2b4640cbe594fa33f9e4f805" title="Get the current Z value.">getZ</a>()));
<a name="l00075"></a>00075 };
<a name="l00076"></a>00076
<a name="l00077"></a>00077 } <span class="comment">// stk namespace</span>
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,75 +8,97 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>StifKarp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_STIFKARP_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_STIFKARP_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00033"></a>00033
<a name="l00034"></a><a class="code" href="classStifKarp.html">00034</a> <span class="keyword">class </span><a class="code" href="classStifKarp.html">StifKarp</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036 <span class="keyword">public</span>:
<a name="l00038"></a>00038 <a class="code" href="classStifKarp.html#a0">StifKarp</a>(StkFloat lowestFrequency);
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classStifKarp.html#a1">~StifKarp</a>();
<a name="l00042"></a>00042
<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a2">clear</a>();
<a name="l00045"></a>00045
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a4">setStretch</a>(StkFloat stretch);
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a5">setPickupPosition</a>(StkFloat position);
<a name="l00054"></a>00054
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>StifKarp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_STIFKARP_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_STIFKARP_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "DelayL.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "DelayA.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "BiQuad.h"</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="keyword">namespace </span>stk {
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00034"></a>00034 <span class="comment">/***************************************************/</span>
<a name="l00035"></a>00035
<a name="l00036"></a><a class="code" href="classstk_1_1StifKarp.html">00036</a> <span class="keyword">class </span><a class="code" href="classstk_1_1StifKarp.html" title="STK plucked stiff string instrument.">StifKarp</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038 <span class="keyword">public</span>:
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1StifKarp.html#946fb588b5b18b12ea2dca221150da66" title="Class constructor, taking the lowest desired playing frequency.">StifKarp</a>( StkFloat lowestFrequency );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1StifKarp.html#37bc5b0bb4fe385eda862622f675bee1" title="Class destructor.">~StifKarp</a>( <span class="keywordtype">void</span> );
<a name="l00044"></a>00044
<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#d1015fa6d2ac1835d8be7dec0df12f6f" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#51371b8592fc01aba1993ac304962f6e" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#21a9b7407c9d6a0b2ba34c0e41bb0b57" title="Set the stretch &amp;quot;factor&amp;quot; of the string (0.0 - 1.0).">setStretch</a>( StkFloat stretch );
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#55ca9e1f3c205e4fb51e6d4a7393db70" title="Set the pluck or &amp;quot;excitation&amp;quot; position along the string (0.0 - 1.0).">setPickupPosition</a>( StkFloat position );
<a name="l00056"></a>00056
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a6">setBaseLoopGain</a>(StkFloat aGain);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a7">pluck</a>(StkFloat amplitude);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a8">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a9">noteOff</a>(StkFloat amplitude);
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classStifKarp.html#a10">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00074"></a>00074
<a name="l00075"></a>00075 <span class="keyword">protected</span>:
<a name="l00058"></a>00058
<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#d1b5de5acf487271d99903cd43e891ce" title="Set the base loop gain.">setBaseLoopGain</a>( StkFloat aGain );
<a name="l00064"></a>00064
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#016ff5971a1b51ea472f7e7fa2d677ee" title="Pluck the string with the given amplitude using the current frequency.">pluck</a>( StkFloat amplitude );
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#e2831958f1dd782ccf34c4068c2b7f14" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00070"></a>00070
<a name="l00072"></a>00072 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#1806fb5c05fa5abdcd3ddb4c97d8ea78" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude );
<a name="l00073"></a>00073
<a name="l00075"></a>00075 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StifKarp.html#27e76ba187140ae575c1bd2e1ba99b03" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00076"></a>00076
<a name="l00077"></a>00077 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00078"></a>00078
<a name="l00079"></a>00079 <a class="code" href="classDelayA.html">DelayA</a> delayLine_;
<a name="l00080"></a>00080 <a class="code" href="classDelayL.html">DelayL</a> combDelay_;
<a name="l00081"></a>00081 <a class="code" href="classOneZero.html">OneZero</a> filter_;
<a name="l00082"></a>00082 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00083"></a>00083 <a class="code" href="classBiQuad.html">BiQuad</a> biquad_[4];
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00086"></a>00086 StkFloat loopGain_;
<a name="l00087"></a>00087 StkFloat baseLoopGain_;
<a name="l00088"></a>00088 StkFloat lastFrequency_;
<a name="l00089"></a>00089 StkFloat lastLength_;
<a name="l00090"></a>00090 StkFloat stretching_;
<a name="l00091"></a>00091 StkFloat pluckAmplitude_;
<a name="l00092"></a>00092 StkFloat pickupPosition_;
<a name="l00093"></a>00093
<a name="l00094"></a>00094 };
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00078"></a>00078 StkFloat <a class="code" href="classstk_1_1StifKarp.html#5cd896c59ee01fa8e21346ebe54365fc" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="keyword">protected</span>:
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <a class="code" href="classstk_1_1DelayA.html" title="STK allpass interpolating delay line class.">DelayA</a> delayLine_;
<a name="l00083"></a>00083 <a class="code" href="classstk_1_1DelayL.html" title="STK linear interpolating delay line class.">DelayL</a> combDelay_;
<a name="l00084"></a>00084 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> filter_;
<a name="l00085"></a>00085 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00086"></a>00086 <a class="code" href="classstk_1_1BiQuad.html" title="STK biquad (two-pole, two-zero) filter class.">BiQuad</a> biquad_[4];
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> length_;
<a name="l00089"></a>00089 StkFloat loopGain_;
<a name="l00090"></a>00090 StkFloat baseLoopGain_;
<a name="l00091"></a>00091 StkFloat lastFrequency_;
<a name="l00092"></a>00092 StkFloat lastLength_;
<a name="l00093"></a>00093 StkFloat stretching_;
<a name="l00094"></a>00094 StkFloat pluckAmplitude_;
<a name="l00095"></a>00095 StkFloat pickupPosition_;
<a name="l00096"></a>00096
<a name="l00097"></a>00097 };
<a name="l00098"></a>00098
<a name="l00099"></a><a class="code" href="classstk_1_1StifKarp.html#5cd896c59ee01fa8e21346ebe54365fc">00099</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1StifKarp.html#5cd896c59ee01fa8e21346ebe54365fc" title="Compute and return one output sample.">StifKarp :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00100"></a>00100 {
<a name="l00101"></a>00101 StkFloat temp = delayLine_.<a class="code" href="classstk_1_1DelayA.html#4372d0e178af1cb6ca465affddfb1566" title="Return the last computed output value.">lastOut</a>() * loopGain_;
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <span class="comment">// Calculate allpass stretching.</span>
<a name="l00104"></a>00104 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;4; i++)
<a name="l00105"></a>00105 temp = biquad_[i].<a class="code" href="classstk_1_1StifKarp.html#5cd896c59ee01fa8e21346ebe54365fc" title="Compute and return one output sample.">tick</a>(temp);
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="comment">// Moving average filter.</span>
<a name="l00108"></a>00108 temp = filter_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00109"></a>00109
<a name="l00110"></a>00110 lastFrame_[0] = delayLine_.<a class="code" href="classstk_1_1DelayA.html#e602abe91560fb5f141db52333359b74" title="Input one sample to the filter and return one output.">tick</a>(temp);
<a name="l00111"></a>00111 lastFrame_[0] = lastFrame_[0] - combDelay_.<a class="code" href="classstk_1_1DelayL.html#1d01bbaf40cc20a0b70241bb8072da7f" title="Input one sample to the filter and return one output.">tick</a>( lastFrame_[0] );
<a name="l00112"></a>00112 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00113"></a>00113 }
<a name="l00114"></a>00114
<a name="l00115"></a>00115 } <span class="comment">// stk namespace</span>
<a name="l00116"></a>00116
<a name="l00117"></a>00117 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,255 +8,357 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Stk.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00051"></a>00051 <span class="comment">/***************************************************/</span>
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="preprocessor">#ifndef STK_STK_H</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define STK_STK_H</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>
<a name="l00056"></a>00056 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="comment">// Most data in STK is passed and calculated with the</span>
<a name="l00062"></a>00062 <span class="comment">// following user-definable floating-point type. You</span>
<a name="l00063"></a>00063 <span class="comment">// can change this to "float" if you prefer or perhaps</span>
<a name="l00064"></a>00064 <span class="comment">// a "long double" in the future.</span>
<a name="l00065"></a>00065 <span class="keyword">typedef</span> <span class="keywordtype">double</span> StkFloat;
<a name="l00066"></a>00066
<a name="l00068"></a>00068
<a name="l00073"></a><a class="code" href="classStkError.html">00073</a> <span class="keyword">class </span><a class="code" href="classStkError.html">StkError</a>
<a name="l00074"></a>00074 {
<a name="l00075"></a>00075 <span class="keyword">public</span>:
<a name="l00076"></a>00076 <span class="keyword">enum</span> Type {
<a name="l00077"></a>00077 STATUS,
<a name="l00078"></a>00078 WARNING,
<a name="l00079"></a>00079 DEBUG_WARNING,
<a name="l00080"></a>00080 MEMORY_ALLOCATION,
<a name="l00081"></a>00081 MEMORY_ACCESS,
<a name="l00082"></a>00082 FUNCTION_ARGUMENT,
<a name="l00083"></a>00083 FILE_NOT_FOUND,
<a name="l00084"></a>00084 FILE_UNKNOWN_FORMAT,
<a name="l00085"></a>00085 FILE_ERROR,
<a name="l00086"></a>00086 PROCESS_THREAD,
<a name="l00087"></a>00087 PROCESS_SOCKET,
<a name="l00088"></a>00088 PROCESS_SOCKET_IPADDR,
<a name="l00089"></a>00089 AUDIO_SYSTEM,
<a name="l00090"></a>00090 MIDI_SYSTEM,
<a name="l00091"></a>00091 UNSPECIFIED
<a name="l00092"></a>00092 };
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="keyword">protected</span>:
<a name="l00095"></a>00095 std::string message_;
<a name="l00096"></a>00096 Type type_;
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="keyword">public</span>:
<a name="l00100"></a><a class="code" href="classStkError.html#a0">00100</a> <a class="code" href="classStkError.html#a0">StkError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = StkError::UNSPECIFIED)
<a name="l00101"></a>00101 : message_(message), type_(type) {}
<a name="l00102"></a>00102
<a name="l00104"></a><a class="code" href="classStkError.html#a1">00104</a> <span class="keyword">virtual</span> <a class="code" href="classStkError.html#a1">~StkError</a>(<span class="keywordtype">void</span>) {};
<a name="l00105"></a>00105
<a name="l00107"></a><a class="code" href="classStkError.html#a2">00107</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classStkError.html#a2">printMessage</a>(<span class="keywordtype">void</span>) { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Stk.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_STK_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_STK_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;sstream&gt;</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00009"></a>00009
<a name="l00016"></a>00016 <span class="keyword">namespace </span>stk {
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00068"></a>00068 <span class="comment">/***************************************************/</span>
<a name="l00069"></a>00069
<a name="l00070"></a>00070 <span class="comment">//#define _STK_DEBUG_</span>
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="comment">// Most data in STK is passed and calculated with the</span>
<a name="l00073"></a>00073 <span class="comment">// following user-definable floating-point type. You</span>
<a name="l00074"></a>00074 <span class="comment">// can change this to "float" if you prefer or perhaps</span>
<a name="l00075"></a>00075 <span class="comment">// a "long double" in the future.</span>
<a name="l00076"></a>00076 <span class="keyword">typedef</span> <span class="keywordtype">double</span> StkFloat;
<a name="l00077"></a>00077
<a name="l00079"></a>00079
<a name="l00084"></a><a class="code" href="classstk_1_1StkError.html">00084</a> <span class="keyword">class </span><a class="code" href="classstk_1_1StkError.html" title="STK error handling class.">StkError</a>
<a name="l00085"></a>00085 {
<a name="l00086"></a>00086 <span class="keyword">public</span>:
<a name="l00087"></a>00087 <span class="keyword">enum</span> Type {
<a name="l00088"></a>00088 STATUS,
<a name="l00089"></a>00089 WARNING,
<a name="l00090"></a>00090 DEBUG_WARNING,
<a name="l00091"></a>00091 MEMORY_ALLOCATION,
<a name="l00092"></a>00092 MEMORY_ACCESS,
<a name="l00093"></a>00093 FUNCTION_ARGUMENT,
<a name="l00094"></a>00094 FILE_NOT_FOUND,
<a name="l00095"></a>00095 FILE_UNKNOWN_FORMAT,
<a name="l00096"></a>00096 FILE_ERROR,
<a name="l00097"></a>00097 PROCESS_THREAD,
<a name="l00098"></a>00098 PROCESS_SOCKET,
<a name="l00099"></a>00099 PROCESS_SOCKET_IPADDR,
<a name="l00100"></a>00100 AUDIO_SYSTEM,
<a name="l00101"></a>00101 MIDI_SYSTEM,
<a name="l00102"></a>00102 UNSPECIFIED
<a name="l00103"></a>00103 };
<a name="l00104"></a>00104
<a name="l00105"></a>00105 <span class="keyword">protected</span>:
<a name="l00106"></a>00106 std::string message_;
<a name="l00107"></a>00107 Type type_;
<a name="l00108"></a>00108
<a name="l00110"></a><a class="code" href="classStkError.html#a3">00110</a> <span class="keyword">virtual</span> <span class="keyword">const</span> Type&amp; <a class="code" href="classStkError.html#a3">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
<a name="l00111"></a>00111
<a name="l00113"></a><a class="code" href="classStkError.html#a4">00113</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classStkError.html#a4">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
<a name="l00114"></a>00114
<a name="l00116"></a><a class="code" href="classStkError.html#a5">00116</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classStkError.html#a5">getMessageCString</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_.c_str(); }
<a name="l00117"></a>00117 };
<a name="l00118"></a>00118
<a name="l00109"></a>00109 <span class="keyword">public</span>:
<a name="l00111"></a><a class="code" href="classstk_1_1StkError.html#b6cbc80df11b385b20d244327fb74abb">00111</a> <a class="code" href="classstk_1_1StkError.html#b6cbc80df11b385b20d244327fb74abb" title="The constructor.">StkError</a>(<span class="keyword">const</span> std::string&amp; message, Type type = StkError::UNSPECIFIED)
<a name="l00112"></a>00112 : message_(message), type_(type) {}
<a name="l00113"></a>00113
<a name="l00115"></a><a class="code" href="classstk_1_1StkError.html#b0639b3a9354a0f84a9338d1c9b87464">00115</a> <span class="keyword">virtual</span> <a class="code" href="classstk_1_1StkError.html#b0639b3a9354a0f84a9338d1c9b87464" title="The destructor.">~StkError</a>(<span class="keywordtype">void</span>) {};
<a name="l00116"></a>00116
<a name="l00118"></a><a class="code" href="classstk_1_1StkError.html#337437a729f03d48fc56277037ac6fdc">00118</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkError.html#337437a729f03d48fc56277037ac6fdc" title="Prints thrown error message to stderr.">printMessage</a>(<span class="keywordtype">void</span>) { std::cerr &lt;&lt; <span class="charliteral">'\n'</span> &lt;&lt; message_ &lt;&lt; <span class="stringliteral">"\n\n"</span>; }
<a name="l00119"></a>00119
<a name="l00120"></a><a class="code" href="classStk.html">00120</a> <span class="keyword">class </span><a class="code" href="classStk.html">Stk</a>
<a name="l00121"></a>00121 {
<a name="l00122"></a>00122 <span class="keyword">public</span>:
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> StkFormat;
<a name="l00125"></a><a class="code" href="classStk.html#s0">00125</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s0">STK_SINT8</a>;
<a name="l00126"></a><a class="code" href="classStk.html#s1">00126</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s1">STK_SINT16</a>;
<a name="l00127"></a><a class="code" href="classStk.html#s2">00127</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s2">STK_SINT24</a>;
<a name="l00128"></a><a class="code" href="classStk.html#s3">00128</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s3">STK_SINT32</a>;
<a name="l00129"></a><a class="code" href="classStk.html#s4">00129</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s4">STK_FLOAT32</a>;
<a name="l00130"></a><a class="code" href="classStk.html#s5">00130</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classStk.html#s5">STK_FLOAT64</a>;
<a name="l00132"></a>00132
<a name="l00133"></a><a class="code" href="classStk.html#e0">00133</a> <span class="keyword">static</span> StkFloat <a class="code" href="classStk.html#e0">sampleRate</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> srate_; }
<a name="l00121"></a><a class="code" href="classstk_1_1StkError.html#ae641cf5ed2b756adbf02fc668fac53e">00121</a> <span class="keyword">virtual</span> <span class="keyword">const</span> Type&amp; <a class="code" href="classstk_1_1StkError.html#ae641cf5ed2b756adbf02fc668fac53e" title="Returns the thrown error message type.">getType</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> type_; }
<a name="l00122"></a>00122
<a name="l00124"></a><a class="code" href="classstk_1_1StkError.html#c691cbffe442d9e0760978146df5d9fb">00124</a> <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classstk_1_1StkError.html#c691cbffe442d9e0760978146df5d9fb" title="Returns the thrown error message string.">getMessage</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_; }
<a name="l00125"></a>00125
<a name="l00127"></a><a class="code" href="classstk_1_1StkError.html#e802643199c86a797f7adebe109d84bf">00127</a> <span class="keyword">virtual</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classstk_1_1StkError.html#e802643199c86a797f7adebe109d84bf" title="Returns the thrown error message as a C string.">getMessageCString</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> message_.c_str(); }
<a name="l00128"></a>00128 };
<a name="l00129"></a>00129
<a name="l00130"></a>00130
<a name="l00131"></a><a class="code" href="classstk_1_1Stk.html">00131</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00132"></a>00132 {
<a name="l00133"></a>00133 <span class="keyword">public</span>:
<a name="l00134"></a>00134
<a name="l00136"></a>00136
<a name="l00153"></a>00153 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e1">setSampleRate</a>( StkFloat rate );
<a name="l00154"></a>00154
<a name="l00156"></a>00156
<a name="l00161"></a><a class="code" href="classStk.html#a0">00161</a> <span class="keywordtype">void</span> <a class="code" href="classStk.html#a0">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00162"></a>00162
<a name="l00164"></a><a class="code" href="classStk.html#e2">00164</a> <span class="keyword">static</span> std::string <a class="code" href="classStk.html#e2">rawwavePath</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> rawwavepath_; }
<a name="l00135"></a>00135 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> StkFormat;
<a name="l00136"></a><a class="code" href="classstk_1_1Stk.html#dec863631653693af8f1ed5c0cfc5c4c">00136</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#dec863631653693af8f1ed5c0cfc5c4c">STK_SINT8</a>;
<a name="l00137"></a><a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">00137</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#5a807971b7fc3c8985d97823be079a7b">STK_SINT16</a>;
<a name="l00138"></a><a class="code" href="classstk_1_1Stk.html#fbe8049756ea88bdd8cebad65305dd52">00138</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#fbe8049756ea88bdd8cebad65305dd52">STK_SINT24</a>;
<a name="l00139"></a><a class="code" href="classstk_1_1Stk.html#605c96894e1b0f1f08a80214a08012ad">00139</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#605c96894e1b0f1f08a80214a08012ad">STK_SINT32</a>;
<a name="l00140"></a><a class="code" href="classstk_1_1Stk.html#079e62be7093d593498e9d2ba4ac20fa">00140</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#079e62be7093d593498e9d2ba4ac20fa">STK_FLOAT32</a>;
<a name="l00141"></a><a class="code" href="classstk_1_1Stk.html#57b00150ae559b6f099be117b2e53af4">00141</a> <span class="keyword">static</span> <span class="keyword">const</span> StkFormat <a class="code" href="classstk_1_1Stk.html#57b00150ae559b6f099be117b2e53af4">STK_FLOAT64</a>;
<a name="l00143"></a>00143
<a name="l00144"></a><a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d">00144</a> <span class="keyword">static</span> StkFloat <a class="code" href="classstk_1_1Stk.html#5fbe37000a611ce56075ee7d8936472d" title="Static method that returns the current STK sample rate.">sampleRate</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> srate_; }
<a name="l00145"></a>00145
<a name="l00147"></a>00147
<a name="l00164"></a>00164 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#46e2f55e5a92c717c3893fe23dde88a5" title="Static method that sets the STK sample rate.">setSampleRate</a>( StkFloat rate );
<a name="l00165"></a>00165
<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e3">setRawwavePath</a>( std::string path );
<a name="l00168"></a>00168
<a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e4">swap16</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00171"></a>00171
<a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e5">swap32</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00174"></a>00174
<a name="l00176"></a>00176 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e6">swap64</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00177"></a>00177
<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e7">sleep</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds );
<a name="l00180"></a>00180
<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e8">handleError</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> *message, StkError::Type type );
<a name="l00183"></a>00183
<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e8">handleError</a>( std::string message, StkError::Type type );
<a name="l00186"></a>00186
<a name="l00188"></a><a class="code" href="classStk.html#e10">00188</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e10">showWarnings</a>( <span class="keywordtype">bool</span> status ) { showWarnings_ = status; }
<a name="l00189"></a>00189
<a name="l00191"></a><a class="code" href="classStk.html#e11">00191</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#e11">printErrors</a>( <span class="keywordtype">bool</span> status ) { printErrors_ = status; }
<a name="l00192"></a>00192
<a name="l00193"></a>00193 <span class="keyword">private</span>:
<a name="l00194"></a>00194 <span class="keyword">static</span> StkFloat srate_;
<a name="l00195"></a>00195 <span class="keyword">static</span> std::string rawwavepath_;
<a name="l00196"></a>00196 <span class="keyword">static</span> <span class="keywordtype">bool</span> showWarnings_;
<a name="l00197"></a>00197 <span class="keyword">static</span> <span class="keywordtype">bool</span> printErrors_;
<a name="l00198"></a>00198 <span class="keyword">static</span> std::vector&lt;Stk *&gt; alertList_;
<a name="l00199"></a>00199
<a name="l00200"></a>00200 <span class="keyword">protected</span>:
<a name="l00201"></a>00201
<a name="l00202"></a>00202 std::ostringstream errorString_;
<a name="l00203"></a>00203 <span class="keywordtype">bool</span> ignoreSampleRateChange_;
<a name="l00204"></a>00204
<a name="l00206"></a>00206 <a class="code" href="classStk.html#b0">Stk</a>( <span class="keywordtype">void</span> );
<a name="l00207"></a>00207
<a name="l00209"></a>00209 <span class="keyword">virtual</span> <a class="code" href="classStk.html#b1">~Stk</a>( <span class="keywordtype">void</span> );
<a name="l00167"></a>00167
<a name="l00172"></a><a class="code" href="classstk_1_1Stk.html#b8a52e4897bea5c0f5e66adf37a8e39b">00172</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#b8a52e4897bea5c0f5e66adf37a8e39b" title="A function to enable/disable the automatic updating of class data when the STK sample...">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00173"></a>00173
<a name="l00175"></a><a class="code" href="classstk_1_1Stk.html#5f3fd05b709788213549fe2cbaf4a52a">00175</a> <span class="keyword">static</span> std::string <a class="code" href="classstk_1_1Stk.html#5f3fd05b709788213549fe2cbaf4a52a" title="Static method that returns the current rawwave path.">rawwavePath</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> rawwavepath_; }
<a name="l00176"></a>00176
<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#4f641ad194f9d8ce1f9d1ae56af5686b" title="Static method that sets the STK rawwave path.">setRawwavePath</a>( std::string path );
<a name="l00179"></a>00179
<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#b2dc4c9e67317eb0753868a89c8095f6" title="Static method that byte-swaps a 16-bit data type.">swap16</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00182"></a>00182
<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#820631139e6f7e23d328d387c0f530fd" title="Static method that byte-swaps a 32-bit data type.">swap32</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00185"></a>00185
<a name="l00187"></a>00187 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#5f744eadf29ecbfbeddfdf7ceb5853c9" title="Static method that byte-swaps a 64-bit data type.">swap64</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ptr );
<a name="l00188"></a>00188
<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#d75619ab92a0c19b5a52cb68884511e3" title="Static cross-platform method to sleep for a number of milliseconds.">sleep</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> milliseconds );
<a name="l00191"></a>00191
<a name="l00193"></a>00193 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( <span class="keyword">const</span> <span class="keywordtype">char</span> *message, StkError::Type type );
<a name="l00194"></a>00194
<a name="l00196"></a>00196 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( std::string message, StkError::Type type );
<a name="l00197"></a>00197
<a name="l00199"></a><a class="code" href="classstk_1_1Stk.html#2d8b38b9f808fb7c5e65c228b4b7dbbb">00199</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#2d8b38b9f808fb7c5e65c228b4b7dbbb" title="Toggle display of WARNING and STATUS messages.">showWarnings</a>( <span class="keywordtype">bool</span> status ) { showWarnings_ = status; }
<a name="l00200"></a>00200
<a name="l00202"></a><a class="code" href="classstk_1_1Stk.html#ffb98f8f1f65ddc9e4af8440056b1504">00202</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#ffb98f8f1f65ddc9e4af8440056b1504" title="Toggle display of error messages before throwing exceptions.">printErrors</a>( <span class="keywordtype">bool</span> status ) { printErrors_ = status; }
<a name="l00203"></a>00203
<a name="l00204"></a>00204 <span class="keyword">private</span>:
<a name="l00205"></a>00205 <span class="keyword">static</span> StkFloat srate_;
<a name="l00206"></a>00206 <span class="keyword">static</span> std::string rawwavepath_;
<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">bool</span> showWarnings_;
<a name="l00208"></a>00208 <span class="keyword">static</span> <span class="keywordtype">bool</span> printErrors_;
<a name="l00209"></a>00209 <span class="keyword">static</span> std::vector&lt;Stk *&gt; alertList_;
<a name="l00210"></a>00210
<a name="l00212"></a>00212 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classStk.html#b2">sampleRateChanged</a>( StkFloat newRate, StkFloat oldRate );
<a name="l00213"></a>00213
<a name="l00215"></a>00215 <span class="keywordtype">void</span> <a class="code" href="classStk.html#b3">addSampleRateAlert</a>( <a class="code" href="classStk.html">Stk</a> *ptr );
<a name="l00216"></a>00216
<a name="l00218"></a>00218 <span class="keywordtype">void</span> <a class="code" href="classStk.html#b4">removeSampleRateAlert</a>( <a class="code" href="classStk.html">Stk</a> *ptr );
<a name="l00219"></a>00219
<a name="l00221"></a>00221 <span class="keywordtype">void</span> <a class="code" href="classStk.html#e8">handleError</a>( StkError::Type type );
<a name="l00222"></a>00222 };
<a name="l00223"></a>00223
<a name="l00211"></a>00211 <span class="keyword">protected</span>:
<a name="l00212"></a>00212
<a name="l00213"></a>00213 std::ostringstream errorString_;
<a name="l00214"></a>00214 <span class="keywordtype">bool</span> ignoreSampleRateChange_;
<a name="l00215"></a>00215
<a name="l00217"></a>00217 <a class="code" href="classstk_1_1Stk.html#9bff83b5a318ff171f94a218ad52226b" title="Default constructor.">Stk</a>( <span class="keywordtype">void</span> );
<a name="l00218"></a>00218
<a name="l00220"></a>00220 <span class="keyword">virtual</span> <a class="code" href="classstk_1_1Stk.html#d0d5c6ab745ad2841a59032addae3905" title="Class destructor.">~Stk</a>( <span class="keywordtype">void</span> );
<a name="l00221"></a>00221
<a name="l00223"></a>00223 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#740e872daa4b2ad1c918163e7c5ab56b" title="This function should be implemented in subclasses that depend on the sample rate...">sampleRateChanged</a>( StkFloat newRate, StkFloat oldRate );
<a name="l00224"></a>00224
<a name="l00225"></a>00225 <span class="comment">/***************************************************/</span>
<a name="l00240"></a>00240 <span class="comment">/***************************************************/</span>
<a name="l00241"></a>00241
<a name="l00242"></a><a class="code" href="classStkFrames.html">00242</a> <span class="keyword">class </span><a class="code" href="classStkFrames.html">StkFrames</a>
<a name="l00243"></a>00243 {
<a name="l00244"></a>00244 <span class="keyword">public</span>:
<a name="l00245"></a>00245
<a name="l00247"></a>00247 <a class="code" href="classStkFrames.html#a0">StkFrames</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 0, <span class="keywordtype">bool</span> <a class="code" href="classStkFrames.html#a16">interleaved</a> = <span class="keyword">true</span> );
<a name="l00248"></a>00248
<a name="l00250"></a>00250 <a class="code" href="classStkFrames.html#a0">StkFrames</a>( <span class="keyword">const</span> StkFloat&amp; value, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels, <span class="keywordtype">bool</span> <a class="code" href="classStkFrames.html#a16">interleaved</a> = <span class="keyword">true</span> );
<a name="l00251"></a>00251
<a name="l00253"></a>00253 <a class="code" href="classStkFrames.html#a2">~StkFrames</a>();
<a name="l00254"></a>00254
<a name="l00256"></a>00256
<a name="l00262"></a>00262 StkFloat&amp; <a class="code" href="classStkFrames.html#a3">operator[] </a>( size_t n );
<a name="l00263"></a>00263
<a name="l00265"></a>00265
<a name="l00269"></a>00269 StkFloat <a class="code" href="classStkFrames.html#a3">operator[] </a>( size_t n ) <span class="keyword">const</span>;
<a name="l00226"></a>00226 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#5ab0e88856708f65887295ad4ad90340" title="Add class pointer to list for sample rate change notification.">addSampleRateAlert</a>( <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a> *ptr );
<a name="l00227"></a>00227
<a name="l00229"></a>00229 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#349865986f712f58087cb72603a6ced8" title="Remove class pointer from list for sample rate change notification.">removeSampleRateAlert</a>( <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a> *ptr );
<a name="l00230"></a>00230
<a name="l00232"></a>00232 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::Type type );
<a name="l00233"></a>00233 };
<a name="l00234"></a>00234
<a name="l00235"></a>00235
<a name="l00236"></a>00236 <span class="comment">/***************************************************/</span>
<a name="l00259"></a>00259 <span class="comment">/***************************************************/</span>
<a name="l00260"></a>00260
<a name="l00261"></a><a class="code" href="classstk_1_1StkFrames.html">00261</a> <span class="keyword">class </span><a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>
<a name="l00262"></a>00262 {
<a name="l00263"></a>00263 <span class="keyword">public</span>:
<a name="l00264"></a>00264
<a name="l00266"></a>00266 <a class="code" href="classstk_1_1StkFrames.html#a9ad14889de633ba4269f1330be8bedf" title="The default constructor initializes the frame data structure to size zero.">StkFrames</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 0 );
<a name="l00267"></a>00267
<a name="l00269"></a>00269 <a class="code" href="classstk_1_1StkFrames.html#a9ad14889de633ba4269f1330be8bedf" title="The default constructor initializes the frame data structure to size zero.">StkFrames</a>( <span class="keyword">const</span> StkFloat&amp; value, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels );
<a name="l00270"></a>00270
<a name="l00272"></a>00272
<a name="l00279"></a>00279 StkFloat&amp; <a class="code" href="classStkFrames.html#a5">operator() </a>( size_t frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel );
<a name="l00280"></a>00280
<a name="l00282"></a>00282
<a name="l00287"></a>00287 StkFloat <a class="code" href="classStkFrames.html#a5">operator() </a>( size_t frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel ) <span class="keyword">const</span>;
<a name="l00272"></a>00272 <a class="code" href="classstk_1_1StkFrames.html#3fa9a0a175de2b18e75d9b68a6387895" title="The destructor.">~StkFrames</a>();
<a name="l00273"></a>00273
<a name="l00274"></a>00274 <span class="comment">// A copy constructor.</span>
<a name="l00275"></a>00275 <a class="code" href="classstk_1_1StkFrames.html#a9ad14889de633ba4269f1330be8bedf" title="The default constructor initializes the frame data structure to size zero.">StkFrames</a>( <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f );
<a name="l00276"></a>00276
<a name="l00277"></a>00277 <span class="comment">// Assignment operator that returns a reference to self.</span>
<a name="l00278"></a>00278 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; operator= ( <span class="keyword">const</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f );
<a name="l00279"></a>00279
<a name="l00281"></a>00281
<a name="l00287"></a>00287 StkFloat&amp; <a class="code" href="classstk_1_1StkFrames.html#8ed9cc0a4309f786cfe36da9e901fde9" title="Subscript operator that returns a reference to element n of self.">operator[] </a>( <span class="keywordtype">size_t</span> n );
<a name="l00288"></a>00288
<a name="l00290"></a>00290
<a name="l00296"></a>00296 StkFloat <a class="code" href="classStkFrames.html#a7">interpolate</a>( StkFloat frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) <span class="keyword">const</span>;
<a name="l00294"></a>00294 StkFloat <a class="code" href="classstk_1_1StkFrames.html#8ed9cc0a4309f786cfe36da9e901fde9" title="Subscript operator that returns a reference to element n of self.">operator[] </a>( <span class="keywordtype">size_t</span> n ) <span class="keyword">const</span>;
<a name="l00295"></a>00295
<a name="l00297"></a>00297
<a name="l00299"></a><a class="code" href="classStkFrames.html#a8">00299</a> size_t <a class="code" href="classStkFrames.html#a8">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; };
<a name="l00300"></a>00300
<a name="l00302"></a>00302 <span class="keywordtype">bool</span> <a class="code" href="classStkFrames.html#a9">empty</a>() <span class="keyword">const</span>;
<a name="l00302"></a>00302 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#0f6a81d36a8905d782b283b9a05893e6" title="Assignment by sum operator into self.">operator+= </a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f );
<a name="l00303"></a>00303
<a name="l00305"></a>00305
<a name="l00312"></a>00312 <span class="keywordtype">void</span> <a class="code" href="classStkFrames.html#a10">resize</a>( size_t nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1 );
<a name="l00310"></a>00310 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#049cbfd10908f754a7c48c1dd0da21e0" title="Assignment by product operator into self.">operator*= </a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f );
<a name="l00311"></a>00311
<a name="l00313"></a>00313
<a name="l00315"></a>00315
<a name="l00322"></a>00322 <span class="keywordtype">void</span> <a class="code" href="classStkFrames.html#a10">resize</a>( size_t nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels, StkFloat value );
<a name="l00320"></a>00320 StkFloat&amp; <a class="code" href="classstk_1_1StkFrames.html#813632277bf0c432bcf81136ccdbbec1" title="Channel / frame subscript operator that returns a reference.">operator() </a>( <span class="keywordtype">size_t</span> frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel );
<a name="l00321"></a>00321
<a name="l00323"></a>00323
<a name="l00325"></a><a class="code" href="classStkFrames.html#a12">00325</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classStkFrames.html#a12">channels</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nChannels_; };
<a name="l00326"></a>00326
<a name="l00328"></a><a class="code" href="classStkFrames.html#a13">00328</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classStkFrames.html#a13">frames</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nFrames_; };
<a name="l00328"></a>00328 StkFloat <a class="code" href="classstk_1_1StkFrames.html#813632277bf0c432bcf81136ccdbbec1" title="Channel / frame subscript operator that returns a reference.">operator() </a>( <span class="keywordtype">size_t</span> frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel ) <span class="keyword">const</span>;
<a name="l00329"></a>00329
<a name="l00331"></a>00331
<a name="l00335"></a><a class="code" href="classStkFrames.html#a14">00335</a> <span class="keywordtype">void</span> <a class="code" href="classStkFrames.html#a14">setDataRate</a>( StkFloat rate ) { dataRate_ = rate; };
<a name="l00336"></a>00336
<a name="l00337"></a>00337 StkFloat <a class="code" href="classstk_1_1StkFrames.html#4f9402d9be28da418f630b4261b9b386" title="Return an interpolated value at the fractional frame index and channel.">interpolate</a>( StkFloat frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 ) <span class="keyword">const</span>;
<a name="l00338"></a>00338
<a name="l00342"></a><a class="code" href="classStkFrames.html#a15">00342</a> StkFloat <a class="code" href="classStkFrames.html#a15">dataRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> dataRate_; };
<a name="l00343"></a>00343
<a name="l00345"></a><a class="code" href="classStkFrames.html#a16">00345</a> <span class="keywordtype">bool</span> <a class="code" href="classStkFrames.html#a16">interleaved</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> interleaved_; };
<a name="l00340"></a><a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79">00340</a> <span class="keywordtype">size_t</span> <a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; };
<a name="l00341"></a>00341
<a name="l00343"></a>00343 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1StkFrames.html#c6652950830fe907f9158ee891560253" title="Returns true if the object size is zero and false otherwise.">empty</a>() <span class="keyword">const</span>;
<a name="l00344"></a>00344
<a name="l00346"></a>00346
<a name="l00348"></a>00348
<a name="l00353"></a><a class="code" href="classStkFrames.html#a17">00353</a> <span class="keywordtype">void</span> <a class="code" href="classStkFrames.html#a17">setInterleaved</a>( <span class="keywordtype">bool</span> isInterleaved ) { interleaved_ = isInterleaved; };
<a name="l00353"></a>00353 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( <span class="keywordtype">size_t</span> nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1 );
<a name="l00354"></a>00354
<a name="l00355"></a>00355 <span class="keyword">private</span>:
<a name="l00356"></a>00356
<a name="l00357"></a>00357 StkFloat *data_;
<a name="l00358"></a>00358 StkFloat dataRate_;
<a name="l00359"></a>00359 size_t nFrames_;
<a name="l00360"></a>00360 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels_;
<a name="l00361"></a>00361 size_t size_;
<a name="l00362"></a>00362 size_t bufferSize_;
<a name="l00363"></a>00363 <span class="keywordtype">bool</span> interleaved_;
<a name="l00363"></a>00363 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#386e1b86cf48f7a8117313f9e41fc0fe" title="Resize self to represent the specified number of channels and frames.">resize</a>( <span class="keywordtype">size_t</span> nFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels, StkFloat value );
<a name="l00364"></a>00364
<a name="l00365"></a>00365 };
<a name="l00366"></a>00366
<a name="l00366"></a><a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870">00366</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nChannels_; };
<a name="l00367"></a>00367
<a name="l00368"></a>00368 <span class="comment">// Here are a few other useful typedefs.</span>
<a name="l00369"></a>00369 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> UINT16;
<a name="l00370"></a>00370 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> UINT32;
<a name="l00371"></a>00371 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> SINT16;
<a name="l00372"></a>00372 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> SINT32;
<a name="l00373"></a>00373 <span class="keyword">typedef</span> <span class="keywordtype">float</span> FLOAT32;
<a name="l00374"></a>00374 <span class="keyword">typedef</span> <span class="keywordtype">double</span> FLOAT64;
<a name="l00375"></a>00375
<a name="l00376"></a>00376 <span class="comment">// The default sampling rate.</span>
<a name="l00377"></a>00377 <span class="keyword">const</span> StkFloat SRATE = 44100.0;
<a name="l00378"></a>00378
<a name="l00379"></a>00379 <span class="comment">// The default real-time audio input and output buffer size. If</span>
<a name="l00380"></a>00380 <span class="comment">// clicks are occuring in the input and/or output sound stream, a</span>
<a name="l00381"></a>00381 <span class="comment">// larger buffer size may help. Larger buffer sizes, however, produce</span>
<a name="l00382"></a>00382 <span class="comment">// more latency.</span>
<a name="l00383"></a>00383 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RT_BUFFER_SIZE = 512;
<a name="l00369"></a><a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9">00369</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> nFrames_; };
<a name="l00370"></a>00370
<a name="l00372"></a>00372
<a name="l00376"></a><a class="code" href="classstk_1_1StkFrames.html#d528b1c8ea2866570e7d9c2bac0e8b40">00376</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#d528b1c8ea2866570e7d9c2bac0e8b40" title="Set the sample rate associated with the StkFrames data.">setDataRate</a>( StkFloat rate ) { dataRate_ = rate; };
<a name="l00377"></a>00377
<a name="l00379"></a>00379
<a name="l00383"></a><a class="code" href="classstk_1_1StkFrames.html#4dbbcbdc8db39a803e0861976f7f3522">00383</a> StkFloat <a class="code" href="classstk_1_1StkFrames.html#4dbbcbdc8db39a803e0861976f7f3522" title="Return the sample rate associated with the StkFrames data.">dataRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> dataRate_; };
<a name="l00384"></a>00384
<a name="l00385"></a>00385 <span class="comment">// The default rawwave path value is set with the preprocessor</span>
<a name="l00386"></a>00386 <span class="comment">// definition RAWWAVE_PATH. This can be specified as an argument to</span>
<a name="l00387"></a>00387 <span class="comment">// the configure script, in an integrated development environment, or</span>
<a name="l00388"></a>00388 <span class="comment">// below. The global STK rawwave path variable can be dynamically set</span>
<a name="l00389"></a>00389 <span class="comment">// with the Stk::setRawwavePath() function. This value is</span>
<a name="l00390"></a>00390 <span class="comment">// concatenated to the beginning of all references to rawwave files in</span>
<a name="l00391"></a>00391 <span class="comment">// the various STK core classes (ex. Clarinet.cpp). If you wish to</span>
<a name="l00392"></a>00392 <span class="comment">// move the rawwaves directory to a different location in your file</span>
<a name="l00393"></a>00393 <span class="comment">// system, you will need to set this path definition appropriately.</span>
<a name="l00394"></a>00394 <span class="preprocessor">#if !defined(RAWWAVE_PATH)</span>
<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor"> #define RAWWAVE_PATH "../../rawwaves/"</span>
<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00397"></a>00397 <span class="preprocessor"></span>
<a name="l00398"></a>00398 <span class="keyword">const</span> StkFloat PI = 3.14159265358979;
<a name="l00399"></a>00399 <span class="keyword">const</span> StkFloat TWO_PI = 2 * PI;
<a name="l00400"></a>00400 <span class="keyword">const</span> StkFloat ONE_OVER_128 = 0.0078125;
<a name="l00385"></a>00385 <span class="keyword">private</span>:
<a name="l00386"></a>00386
<a name="l00387"></a>00387 StkFloat *data_;
<a name="l00388"></a>00388 StkFloat dataRate_;
<a name="l00389"></a>00389 <span class="keywordtype">size_t</span> nFrames_;
<a name="l00390"></a>00390 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels_;
<a name="l00391"></a>00391 <span class="keywordtype">size_t</span> size_;
<a name="l00392"></a>00392 <span class="keywordtype">size_t</span> bufferSize_;
<a name="l00393"></a>00393
<a name="l00394"></a>00394 };
<a name="l00395"></a>00395
<a name="l00396"></a><a class="code" href="classstk_1_1StkFrames.html#c6652950830fe907f9158ee891560253">00396</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1StkFrames.html#c6652950830fe907f9158ee891560253" title="Returns true if the object size is zero and false otherwise.">StkFrames :: empty</a>()<span class="keyword"> const</span>
<a name="l00397"></a>00397 <span class="keyword"></span>{
<a name="l00398"></a>00398 <span class="keywordflow">if</span> ( size_ &gt; 0 ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00399"></a>00399 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00400"></a>00400 }
<a name="l00401"></a>00401
<a name="l00402"></a>00402 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_MM__)</span>
<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_WINDOWS__</span>
<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__UNIX_JACK__)</span>
<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_LINUX__</span>
<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__IRIX_AL__)</span>
<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_IRIX__</span>
<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__MACOSX_CORE__) || defined(__UNIX_JACK__)</span>
<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_MACOSX__</span>
<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00414"></a>00414 <span class="preprocessor"></span>
<a name="l00415"></a>00415 <span class="comment">//#define _STK_DEBUG_</span>
<a name="l00416"></a>00416
<a name="l00417"></a>00417 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00402"></a><a class="code" href="classstk_1_1StkFrames.html#8ed9cc0a4309f786cfe36da9e901fde9">00402</a> <span class="keyword">inline</span> StkFloat&amp; <a class="code" href="classstk_1_1StkFrames.html#8ed9cc0a4309f786cfe36da9e901fde9" title="Subscript operator that returns a reference to element n of self.">StkFrames :: operator[] </a>( <span class="keywordtype">size_t</span> n )
<a name="l00403"></a>00403 {
<a name="l00404"></a>00404 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00405"></a>00405 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( n &gt;= size_ ) {
<a name="l00406"></a>00406 std::ostringstream error;
<a name="l00407"></a>00407 error &lt;&lt; <span class="stringliteral">"StkFrames::operator[]: invalid index ("</span> &lt;&lt; n &lt;&lt; <span class="stringliteral">") value!"</span>;
<a name="l00408"></a>00408 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00409"></a>00409 }
<a name="l00410"></a>00410 <span class="preprocessor">#endif</span>
<a name="l00411"></a>00411 <span class="preprocessor"></span>
<a name="l00412"></a>00412 <span class="keywordflow">return</span> data_[n];
<a name="l00413"></a>00413 }
<a name="l00414"></a>00414
<a name="l00415"></a><a class="code" href="classstk_1_1StkFrames.html#2d1c8a2b32725ca72e0f3256f9cd8cb6">00415</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1StkFrames.html#8ed9cc0a4309f786cfe36da9e901fde9" title="Subscript operator that returns a reference to element n of self.">StkFrames :: operator[] </a>( <span class="keywordtype">size_t</span> n )<span class="keyword"> const</span>
<a name="l00416"></a>00416 <span class="keyword"></span>{
<a name="l00417"></a>00417 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00418"></a>00418 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( n &gt;= size_ ) {
<a name="l00419"></a>00419 std::ostringstream error;
<a name="l00420"></a>00420 error &lt;&lt; <span class="stringliteral">"StkFrames::operator[]: invalid index ("</span> &lt;&lt; n &lt;&lt; <span class="stringliteral">") value!"</span>;
<a name="l00421"></a>00421 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00422"></a>00422 }
<a name="l00423"></a>00423 <span class="preprocessor">#endif</span>
<a name="l00424"></a>00424 <span class="preprocessor"></span>
<a name="l00425"></a>00425 <span class="keywordflow">return</span> data_[n];
<a name="l00426"></a>00426 }
<a name="l00427"></a>00427
<a name="l00428"></a><a class="code" href="classstk_1_1StkFrames.html#813632277bf0c432bcf81136ccdbbec1">00428</a> <span class="keyword">inline</span> StkFloat&amp; <a class="code" href="classstk_1_1StkFrames.html#813632277bf0c432bcf81136ccdbbec1" title="Channel / frame subscript operator that returns a reference.">StkFrames :: operator() </a>( <span class="keywordtype">size_t</span> frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00429"></a>00429 {
<a name="l00430"></a>00430 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00431"></a>00431 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( frame &gt;= nFrames_ || channel &gt;= nChannels_ ) {
<a name="l00432"></a>00432 std::ostringstream error;
<a name="l00433"></a>00433 error &lt;&lt; <span class="stringliteral">"StkFrames::operator(): invalid frame ("</span> &lt;&lt; frame &lt;&lt; <span class="stringliteral">") or channel ("</span> &lt;&lt; channel &lt;&lt; <span class="stringliteral">") value!"</span>;
<a name="l00434"></a>00434 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00435"></a>00435 }
<a name="l00436"></a>00436 <span class="preprocessor">#endif</span>
<a name="l00437"></a>00437 <span class="preprocessor"></span>
<a name="l00438"></a>00438 <span class="keywordflow">return</span> data_[ frame * nChannels_ + channel ];
<a name="l00439"></a>00439 }
<a name="l00440"></a>00440
<a name="l00441"></a><a class="code" href="classstk_1_1StkFrames.html#93e7e4c30affc29d0cdc98e7514188de">00441</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1StkFrames.html#813632277bf0c432bcf81136ccdbbec1" title="Channel / frame subscript operator that returns a reference.">StkFrames :: operator() </a>( <span class="keywordtype">size_t</span> frame, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )<span class="keyword"> const</span>
<a name="l00442"></a>00442 <span class="keyword"></span>{
<a name="l00443"></a>00443 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00444"></a>00444 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( frame &gt;= nFrames_ || channel &gt;= nChannels_ ) {
<a name="l00445"></a>00445 std::ostringstream error;
<a name="l00446"></a>00446 error &lt;&lt; <span class="stringliteral">"StkFrames::operator(): invalid frame ("</span> &lt;&lt; frame &lt;&lt; <span class="stringliteral">") or channel ("</span> &lt;&lt; channel &lt;&lt; <span class="stringliteral">") value!"</span>;
<a name="l00447"></a>00447 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00448"></a>00448 }
<a name="l00449"></a>00449 <span class="preprocessor">#endif</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span>
<a name="l00451"></a>00451 <span class="keywordflow">return</span> data_[ frame * nChannels_ + channel ];
<a name="l00452"></a>00452 }
<a name="l00453"></a>00453
<a name="l00454"></a><a class="code" href="classstk_1_1StkFrames.html#0f6a81d36a8905d782b283b9a05893e6">00454</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#0f6a81d36a8905d782b283b9a05893e6" title="Assignment by sum operator into self.">StkFrames :: operator+= </a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f )
<a name="l00455"></a>00455 {
<a name="l00456"></a>00456 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00457"></a>00457 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( f.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>() != nFrames_ || f.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() != nChannels_ ) {
<a name="l00458"></a>00458 std::ostringstream error;
<a name="l00459"></a>00459 error &lt;&lt; <span class="stringliteral">"StkFrames::operator+=: frames argument must be of equal dimensions!"</span>;
<a name="l00460"></a>00460 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00461"></a>00461 }
<a name="l00462"></a>00462 <span class="preprocessor">#endif</span>
<a name="l00463"></a>00463 <span class="preprocessor"></span>
<a name="l00464"></a>00464 StkFloat *fptr = &amp;f[0];
<a name="l00465"></a>00465 StkFloat *dptr = data_;
<a name="l00466"></a>00466 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;size_; i++ )
<a name="l00467"></a>00467 *dptr++ += *fptr++;
<a name="l00468"></a>00468 }
<a name="l00469"></a>00469
<a name="l00470"></a><a class="code" href="classstk_1_1StkFrames.html#049cbfd10908f754a7c48c1dd0da21e0">00470</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1StkFrames.html#049cbfd10908f754a7c48c1dd0da21e0" title="Assignment by product operator into self.">StkFrames :: operator*= </a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; f )
<a name="l00471"></a>00471 {
<a name="l00472"></a>00472 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00473"></a>00473 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( f.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>() != nFrames_ || f.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() != nChannels_ ) {
<a name="l00474"></a>00474 std::ostringstream error;
<a name="l00475"></a>00475 error &lt;&lt; <span class="stringliteral">"StkFrames::operator*=: frames argument must be of equal dimensions!"</span>;
<a name="l00476"></a>00476 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">Stk::handleError</a>( error.str(), StkError::MEMORY_ACCESS );
<a name="l00477"></a>00477 }
<a name="l00478"></a>00478 <span class="preprocessor">#endif</span>
<a name="l00479"></a>00479 <span class="preprocessor"></span>
<a name="l00480"></a>00480 StkFloat *fptr = &amp;f[0];
<a name="l00481"></a>00481 StkFloat *dptr = data_;
<a name="l00482"></a>00482 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;size_; i++ )
<a name="l00483"></a>00483 *dptr++ *= *fptr++;
<a name="l00484"></a>00484 }
<a name="l00485"></a>00485
<a name="l00486"></a>00486 <span class="comment">// Here are a few other useful typedefs.</span>
<a name="l00487"></a>00487 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> UINT16;
<a name="l00488"></a>00488 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> UINT32;
<a name="l00489"></a>00489 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> SINT16;
<a name="l00490"></a>00490 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> SINT32;
<a name="l00491"></a>00491 <span class="keyword">typedef</span> <span class="keywordtype">float</span> FLOAT32;
<a name="l00492"></a>00492 <span class="keyword">typedef</span> <span class="keywordtype">double</span> FLOAT64;
<a name="l00493"></a>00493
<a name="l00494"></a>00494 <span class="comment">// The default sampling rate.</span>
<a name="l00495"></a>00495 <span class="keyword">const</span> StkFloat SRATE = 44100.0;
<a name="l00496"></a>00496
<a name="l00497"></a>00497 <span class="comment">// The default real-time audio input and output buffer size. If</span>
<a name="l00498"></a>00498 <span class="comment">// clicks are occuring in the input and/or output sound stream, a</span>
<a name="l00499"></a>00499 <span class="comment">// larger buffer size may help. Larger buffer sizes, however, produce</span>
<a name="l00500"></a>00500 <span class="comment">// more latency.</span>
<a name="l00501"></a>00501 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RT_BUFFER_SIZE = 512;
<a name="l00502"></a>00502
<a name="l00503"></a>00503 <span class="comment">// The default rawwave path value is set with the preprocessor</span>
<a name="l00504"></a>00504 <span class="comment">// definition RAWWAVE_PATH. This can be specified as an argument to</span>
<a name="l00505"></a>00505 <span class="comment">// the configure script, in an integrated development environment, or</span>
<a name="l00506"></a>00506 <span class="comment">// below. The global STK rawwave path variable can be dynamically set</span>
<a name="l00507"></a>00507 <span class="comment">// with the Stk::setRawwavePath() function. This value is</span>
<a name="l00508"></a>00508 <span class="comment">// concatenated to the beginning of all references to rawwave files in</span>
<a name="l00509"></a>00509 <span class="comment">// the various STK core classes (ex. Clarinet.cpp). If you wish to</span>
<a name="l00510"></a>00510 <span class="comment">// move the rawwaves directory to a different location in your file</span>
<a name="l00511"></a>00511 <span class="comment">// system, you will need to set this path definition appropriately.</span>
<a name="l00512"></a>00512 <span class="preprocessor">#if !defined(RAWWAVE_PATH)</span>
<a name="l00513"></a>00513 <span class="preprocessor"></span><span class="preprocessor"> #define RAWWAVE_PATH "../../rawwaves/"</span>
<a name="l00514"></a>00514 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00515"></a>00515 <span class="preprocessor"></span>
<a name="l00516"></a>00516 <span class="keyword">const</span> StkFloat PI = 3.14159265358979;
<a name="l00517"></a>00517 <span class="keyword">const</span> StkFloat TWO_PI = 2 * PI;
<a name="l00518"></a>00518 <span class="keyword">const</span> StkFloat ONE_OVER_128 = 0.0078125;
<a name="l00519"></a>00519
<a name="l00520"></a>00520 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_MM__)</span>
<a name="l00521"></a>00521 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_WINDOWS__</span>
<a name="l00522"></a>00522 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00523"></a>00523 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__UNIX_JACK__)</span>
<a name="l00524"></a>00524 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_LINUX__</span>
<a name="l00525"></a>00525 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00526"></a>00526 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__IRIX_AL__)</span>
<a name="l00527"></a>00527 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_IRIX__</span>
<a name="l00528"></a>00528 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__MACOSX_CORE__) || defined(__UNIX_JACK__)</span>
<a name="l00529"></a>00529 <span class="preprocessor"></span><span class="preprocessor"> #define __OS_MACOSX__</span>
<a name="l00530"></a>00530 <span class="preprocessor"></span><span class="preprocessor"> #define __STK_REALTIME__</span>
<a name="l00531"></a>00531 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00532"></a>00532 <span class="preprocessor"></span>
<a name="l00533"></a>00533 } <span class="comment">// stk namespace</span>
<a name="l00534"></a>00534
<a name="l00535"></a>00535 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -1,52 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>SubNoise.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00011"></a>00011 <span class="comment">/***************************************************/</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef STK_SUBNOISE_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define STK_SUBNOISE_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00017"></a>00017
<a name="l00018"></a><a class="code" href="classSubNoise.html">00018</a> <span class="keyword">class </span><a class="code" href="classSubNoise.html">SubNoise</a> : <span class="keyword">public</span> <a class="code" href="classNoise.html">Noise</a>
<a name="l00019"></a>00019 {
<a name="l00020"></a>00020 <span class="keyword">public</span>:
<a name="l00021"></a>00021
<a name="l00023"></a>00023 <a class="code" href="classSubNoise.html#a0">SubNoise</a>( <span class="keywordtype">int</span> <a class="code" href="classSubNoise.html#a2">subRate</a> = 16 );
<a name="l00024"></a>00024
<a name="l00026"></a>00026 <a class="code" href="classSubNoise.html#a1">~SubNoise</a>();
<a name="l00027"></a>00027
<a name="l00029"></a><a class="code" href="classSubNoise.html#a2">00029</a> <span class="keywordtype">int</span> <a class="code" href="classSubNoise.html#a2">subRate</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rate_; };
<a name="l00030"></a>00030
<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="classSubNoise.html#a3">setRate</a>( <span class="keywordtype">int</span> <a class="code" href="classSubNoise.html#a2">subRate</a> );
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <span class="keyword">protected</span>:
<a name="l00035"></a>00035
<a name="l00036"></a>00036 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keywordtype">int</span> counter_;
<a name="l00039"></a>00039 <span class="keywordtype">int</span> rate_;
<a name="l00040"></a>00040
<a name="l00041"></a>00041 };
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,53 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>Table.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00015 <span class="comment">/***************************************************/</span>
00016
00017 <span class="preprocessor">#ifndef STK_TABLE_H</span>
00018 <span class="preprocessor"></span><span class="preprocessor">#define STK_TABLE_H</span>
00019 <span class="preprocessor"></span>
00020 <span class="preprocessor">#include "Function.h"</span>
00021
<a name="l00022"></a><a class="code" href="classTable.html">00022</a> <span class="keyword">class </span><a class="code" href="classTable.html">Table</a> : <span class="keyword">public</span> <a class="code" href="classFunction.html">Function</a>
00023 {
00024 <span class="keyword">public</span>:
00026
00030 <a class="code" href="classTable.html#a0">Table</a>( std::string fileName );
00031
00033 <a class="code" href="classTable.html#a1">~Table</a>();
00034
00036 <span class="keywordtype">long</span> <a class="code" href="classTable.html#a2">getLength</a>() <span class="keyword">const</span>;
00037
00039
00043 StkFloat <a class="code" href="classTable.html#a3">tick</a>(StkFloat index);
00044
00046 StkFloat *<a class="code" href="classTable.html#a3">tick</a>( StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00047
00049
00055 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classTable.html#a3">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00056
00057 <span class="keyword">protected</span>:
00058 <span class="keywordtype">long</span> length_;
00059 std::valarray&lt;StkFloat&gt; data_;
00060
00061 };
00062
00063 <span class="preprocessor">#endif // defined(__TABLE_H)</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -0,0 +1,173 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TapDelay.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TAPDELAY_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TAPDELAY_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a><a class="code" href="classstk_1_1TapDelay.html">00024</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TapDelay.html" title="STK non-interpolating tapped delay line class.">TapDelay</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00025"></a>00025 {
<a name="l00026"></a>00026 <span class="keyword">public</span>:
<a name="l00027"></a>00027
<a name="l00029"></a>00029
<a name="l00034"></a>00034 <a class="code" href="classstk_1_1TapDelay.html#24913411dff23e05995979e42cc51ecc" title="The default constructor creates a delay-line with maximum length of 4095 samples...">TapDelay</a>( std::vector&lt;unsigned long&gt; taps = std::vector&lt;unsigned long&gt;( 1, 0 ), <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxDelay = 4095 );
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <a class="code" href="classstk_1_1TapDelay.html#6980be10c3d3cb9633af1733b40e49cc" title="Class destructor.">~TapDelay</a>();
<a name="l00038"></a>00038
<a name="l00040"></a>00040
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TapDelay.html#104b7bd81435a38191e1e43a24cb471d" title="Set the maximum delay-line length.">setMaximumDelay</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> delay );
<a name="l00048"></a>00048
<a name="l00050"></a>00050
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TapDelay.html#a2bbab19ae277dc3689471d4250f00ad" title="Set the delay-line tap lengths.">setTapDelays</a>( std::vector&lt;unsigned long&gt; taps );
<a name="l00054"></a>00054
<a name="l00056"></a><a class="code" href="classstk_1_1TapDelay.html#ad3736becdec6059f2986f873d69b971">00056</a> std::vector&lt;unsigned long&gt; <a class="code" href="classstk_1_1TapDelay.html#ad3736becdec6059f2986f873d69b971" title="Return the current delay-line length.">getTapDelays</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> delays_; };
<a name="l00057"></a>00057
<a name="l00059"></a>00059
<a name="l00067"></a>00067 StkFloat <a class="code" href="classstk_1_1TapDelay.html#517399ddf52455ef083481cbb77c0b5c" title="Return the specified tap value of the last computed frame.">lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tap = 0 ) <span class="keyword">const</span>;
<a name="l00068"></a>00068
<a name="l00070"></a>00070
<a name="l00079"></a>00079 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">tick</a>( StkFloat input, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; outputs );
<a name="l00080"></a>00080
<a name="l00082"></a>00082
<a name="l00091"></a>00091 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00092"></a>00092
<a name="l00094"></a>00094
<a name="l00105"></a>00105 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0 );
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="keyword">protected</span>:
<a name="l00108"></a>00108
<a name="l00109"></a>00109 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> inPoint_;
<a name="l00110"></a>00110 std::vector&lt;unsigned long&gt; outPoint_;
<a name="l00111"></a>00111 std::vector&lt;unsigned long&gt; delays_;
<a name="l00112"></a>00112
<a name="l00113"></a>00113 };
<a name="l00114"></a>00114
<a name="l00115"></a><a class="code" href="classstk_1_1TapDelay.html#517399ddf52455ef083481cbb77c0b5c">00115</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1TapDelay.html#517399ddf52455ef083481cbb77c0b5c" title="Return the specified tap value of the last computed frame.">TapDelay :: lastOut</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tap )<span class="keyword"> const</span>
<a name="l00116"></a>00116 <span class="keyword"></span>{
<a name="l00117"></a>00117 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( tap &gt;= lastFrame_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) ) {
<a name="l00119"></a>00119 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::lastOut(): tap argument and number of taps are incompatible!"</span>;
<a name="l00120"></a>00120 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00121"></a>00121 }
<a name="l00122"></a>00122 <span class="preprocessor">#endif</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span>
<a name="l00124"></a>00124 <span class="keywordflow">return</span> lastFrame_[tap];
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126
<a name="l00127"></a><a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b">00127</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">TapDelay :: tick</a>( StkFloat input, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; outputs )
<a name="l00128"></a>00128 {
<a name="l00129"></a>00129 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00130"></a>00130 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( outputs.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() &lt; outPoint_.size() ) {
<a name="l00131"></a>00131 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::tick(): number of taps &gt; channels in StkFrames argument!"</span>;
<a name="l00132"></a>00132 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00133"></a>00133 }
<a name="l00134"></a>00134 <span class="preprocessor">#endif</span>
<a name="l00135"></a>00135 <span class="preprocessor"></span>
<a name="l00136"></a>00136 inputs_[inPoint_++] = input * gain_;
<a name="l00137"></a>00137
<a name="l00138"></a>00138 <span class="comment">// Check for end condition</span>
<a name="l00139"></a>00139 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00140"></a>00140 inPoint_ = 0;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="comment">// Read out next values</span>
<a name="l00143"></a>00143 StkFloat *outs = &amp;outputs[0];
<a name="l00144"></a>00144 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;outPoint_.size(); i++ ) {
<a name="l00145"></a>00145 *outs++ = inputs_[outPoint_[i]];
<a name="l00146"></a>00146 lastFrame_[i] = *outs;
<a name="l00147"></a>00147 <span class="keywordflow">if</span> ( ++outPoint_[i] == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() )
<a name="l00148"></a>00148 outPoint_[i] = 0;
<a name="l00149"></a>00149 }
<a name="l00150"></a>00150
<a name="l00151"></a>00151 <span class="keywordflow">return</span> outputs;
<a name="l00152"></a>00152 }
<a name="l00153"></a>00153
<a name="l00154"></a><a class="code" href="classstk_1_1TapDelay.html#9255a00f0d7588ba5b51a12ba5db08c0">00154</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">TapDelay :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00155"></a>00155 {
<a name="l00156"></a>00156 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00158"></a>00158 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00159"></a>00159 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00160"></a>00160 }
<a name="l00161"></a>00161 <span class="keywordflow">if</span> ( frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() &lt; outPoint_.size() ) {
<a name="l00162"></a>00162 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::tick(): number of taps &gt; channels in StkFrames argument!"</span>;
<a name="l00163"></a>00163 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00164"></a>00164 }
<a name="l00165"></a>00165 <span class="preprocessor">#endif</span>
<a name="l00166"></a>00166 <span class="preprocessor"></span>
<a name="l00167"></a>00167 StkFloat *iSamples = &amp;frames[channel];
<a name="l00168"></a>00168 StkFloat *oSamples = &amp;frames[0];
<a name="l00169"></a>00169 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j, iHop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - outPoint_.size();
<a name="l00170"></a>00170 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00171"></a>00171 inputs_[inPoint_++] = *iSamples * gain_;
<a name="l00172"></a>00172 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00173"></a>00173 <span class="keywordflow">for</span> ( j=0; j&lt;outPoint_.size(); j++ ) {
<a name="l00174"></a>00174 *oSamples++ = inputs_[outPoint_[j]];
<a name="l00175"></a>00175 <span class="keywordflow">if</span> ( ++outPoint_[j] == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_[j] = 0;
<a name="l00176"></a>00176 }
<a name="l00177"></a>00177 }
<a name="l00178"></a>00178
<a name="l00179"></a>00179 oSamples -= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00180"></a>00180 <span class="keywordflow">for</span> ( j=0; j&lt;outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
<a name="l00181"></a>00181 <span class="keywordflow">return</span> frames;
<a name="l00182"></a>00182 }
<a name="l00183"></a>00183
<a name="l00184"></a><a class="code" href="classstk_1_1TapDelay.html#d8250d2802326bd3778c00642266d201">00184</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TapDelay.html#add431e206dd1e4133e2ff0d49aa639b" title="Input one sample to the delayline and return outputs at all tap positions.">TapDelay :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel )
<a name="l00185"></a>00185 {
<a name="l00186"></a>00186 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00187"></a>00187 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00188"></a>00188 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00189"></a>00189 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00190"></a>00190 }
<a name="l00191"></a>00191 <span class="keywordflow">if</span> ( oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() &lt; outPoint_.size() ) {
<a name="l00192"></a>00192 errorString_ &lt;&lt; <span class="stringliteral">"TapDelay::tick(): number of taps &gt; channels in output StkFrames argument!"</span>;
<a name="l00193"></a>00193 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00194"></a>00194 }
<a name="l00195"></a>00195 <span class="preprocessor">#endif</span>
<a name="l00196"></a>00196 <span class="preprocessor"></span>
<a name="l00197"></a>00197 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00198"></a>00198 StkFloat *oSamples = &amp;oFrames[0];
<a name="l00199"></a>00199 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j, iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() - outPoint_.size();
<a name="l00200"></a>00200 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00201"></a>00201 inputs_[inPoint_++] = *iSamples * gain_;
<a name="l00202"></a>00202 <span class="keywordflow">if</span> ( inPoint_ == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) inPoint_ = 0;
<a name="l00203"></a>00203 <span class="keywordflow">for</span> ( j=0; j&lt;outPoint_.size(); j++ ) {
<a name="l00204"></a>00204 *oSamples++ = inputs_[outPoint_[j]];
<a name="l00205"></a>00205 <span class="keywordflow">if</span> ( ++outPoint_[j] == inputs_.<a class="code" href="classstk_1_1StkFrames.html#5c41aae98f77487c004085912d1f8f79" title="Returns the total number of audio samples represented by the object.">size</a>() ) outPoint_[j] = 0;
<a name="l00206"></a>00206 }
<a name="l00207"></a>00207 }
<a name="l00208"></a>00208
<a name="l00209"></a>00209 oSamples -= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00210"></a>00210 <span class="keywordflow">for</span> ( j=0; j&lt;outPoint_.size(); j++ ) lastFrame_[j] = *oSamples++;
<a name="l00211"></a>00211 <span class="keywordflow">return</span> iFrames;
<a name="l00212"></a>00212 }
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <span class="preprocessor">#endif</span>
<a name="l00215"></a>00215 <span class="preprocessor"></span>
<a name="l00216"></a>00216 } <span class="comment">// stk namespace</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,42 +8,48 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>TcpClient.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef STK_TCPCLIENT_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPCLIENT_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classTcpClient.html">00031</a> <span class="keyword">class </span><a class="code" href="classTcpClient.html">TcpClient</a> : <span class="keyword">public</span> <a class="code" href="classSocket.html">Socket</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035
<a name="l00038"></a>00038 <a class="code" href="classTcpClient.html#a0">TcpClient</a>( <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a>, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classTcpClient.html#a1">~TcpClient</a>();
<a name="l00042"></a>00042
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TcpClient.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TCPCLIENT_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPCLIENT_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a><a class="code" href="classstk_1_1TcpClient.html">00033</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TcpClient.html" title="STK TCP socket client class.">TcpClient</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">public</span>:
<a name="l00037"></a>00037
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1TcpClient.html#1e1e2cf0981774147d516efcaf12e786" title="Default class constructor creates a socket client connection to the specified host...">TcpClient</a>( <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a>, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1TcpClient.html#e4d515e14471f5d65730c6ccccb6f653" title="The class destructor closes the socket instance, breaking any existing connections...">~TcpClient</a>();
<a name="l00044"></a>00044
<a name="l00049"></a>00049 <span class="keywordtype">int</span> <a class="code" href="classTcpClient.html#a2">connect</a>( <span class="keywordtype">int</span> port, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">int</span> <a class="code" href="classTcpClient.html#a3">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">int</span> <a class="code" href="classTcpClient.html#a4">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="keyword">protected</span>:
<a name="l00046"></a>00046
<a name="l00051"></a>00051 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpClient.html#46ff34075ef3a0342c396af5fe1aedda" title="Connect the socket client to the specified host and port and returns the resulting...">connect</a>( <span class="keywordtype">int</span> port, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpClient.html#f101788bd77c2026cc3ade330caf7fc5" title="Write a buffer over the socket connection. Returns the number of bytes written or...">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpClient.html#f0c6f44c9f3d3812a7d0cb79f94eba5f" title="Read a buffer from the socket connection, up to length bufferSize. Returns the number...">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00058"></a>00058
<a name="l00059"></a>00059 };
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="preprocessor">#endif // defined(STK_TCPCLIENT_H)</span>
</pre></div><HR>
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00063"></a>00063 } <span class="comment">// stk namespace</span>
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,42 +8,48 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>TcpServer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00024"></a>00024 <span class="comment">/***************************************************/</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef STK_TCPSERVER_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPSERVER_H</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classTcpServer.html">00031</a> <span class="keyword">class </span><a class="code" href="classTcpServer.html">TcpServer</a> : <span class="keyword">public</span> <a class="code" href="classSocket.html">Socket</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035
<a name="l00038"></a>00038 <a class="code" href="classTcpServer.html#a0">TcpServer</a>( <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a> = 2006 );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classTcpServer.html#a1">~TcpServer</a>();
<a name="l00042"></a>00042
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TcpServer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TCPSERVER_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPSERVER_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a><a class="code" href="classstk_1_1TcpServer.html">00033</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TcpServer.html" title="STK TCP socket server class.">TcpServer</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a>
<a name="l00034"></a>00034 {
<a name="l00035"></a>00035 <span class="keyword">public</span>:
<a name="l00037"></a>00037
<a name="l00040"></a>00040 <a class="code" href="classstk_1_1TcpServer.html#0fc92fd76f406ab8eeabbeb27ba9a2fc" title="Default constructor creates a local socket server on port 2006 (or the specified...">TcpServer</a>( <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a> = 2006 );
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <a class="code" href="classstk_1_1TcpServer.html#07ccec68a41a10fbe9f1e9e9db3a85bd" title="The class destructor closes the socket instance, breaking any existing connections...">~TcpServer</a>();
<a name="l00044"></a>00044
<a name="l00049"></a>00049 <span class="keywordtype">int</span> <a class="code" href="classTcpServer.html#a2">accept</a>( <span class="keywordtype">void</span> );
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">int</span> <a class="code" href="classTcpServer.html#a3">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">int</span> <a class="code" href="classTcpServer.html#a4">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="keyword">protected</span>:
<a name="l00046"></a>00046
<a name="l00051"></a>00051 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpServer.html#421e255c3a250c5ac5d9e9642049cb9e" title="Extract the first pending connection request from the queue and create a new connection...">accept</a>( <span class="keywordtype">void</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpServer.html#4294c5eac74ee54c5367c41e1ee01741" title="Write a buffer over the socket connection. Returns the number of bytes written or...">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1TcpServer.html#afdf74764425a3044093647661ed1927" title="Read a buffer from the socket connection, up to length bufferSize. Returns the number...">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00058"></a>00058
<a name="l00059"></a>00059 };
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="preprocessor">#endif // defined(STK_TCPSERVER_H)</span>
</pre></div><HR>
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00063"></a>00063 } <span class="comment">// stk namespace</span>
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -1,98 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>TcpWvIn.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00027 <span class="comment">/***************************************************/</span>
00028
00029 <span class="preprocessor">#ifndef STK_TCPWVIN_H</span>
00030 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPWVIN_H</span>
00031 <span class="preprocessor"></span>
00032 <span class="preprocessor">#include "WvIn.h"</span>
00033 <span class="preprocessor">#include "Socket.h"</span>
00034 <span class="preprocessor">#include "Thread.h"</span>
00035 <span class="preprocessor">#include "Mutex.h"</span>
00036
00037 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
00038 <span class="keywordtype">bool</span> finished;
00039 <span class="keywordtype">void</span> *object;
00040 } thread_info;
00041
<a name="l00042"></a><a class="code" href="classTcpWvIn.html">00042</a> <span class="keyword">class </span><a class="code" href="classTcpWvIn.html">TcpWvIn</a> : <span class="keyword">protected</span> <a class="code" href="classWvIn.html">WvIn</a>
00043 {
00044 <span class="keyword">public</span>:
00046
00049 <a class="code" href="classTcpWvIn.html#a0">TcpWvIn</a>( <span class="keywordtype">int</span> port = 2006 );
00050
00052 <a class="code" href="classTcpWvIn.html#a1">~TcpWvIn</a>();
00053
00055
00058 <span class="keywordtype">void</span> <a class="code" href="classTcpWvIn.html#a2">listen</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>);
00059
00061
00065 <span class="keywordtype">bool</span> <a class="code" href="classTcpWvIn.html#a3">isConnected</a>(<span class="keywordtype">void</span>);
00066
00068 StkFloat <a class="code" href="classTcpWvIn.html#a4">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00069
00071 StkFloat <a class="code" href="classTcpWvIn.html#a5">tick</a>(<span class="keywordtype">void</span>);
00072
00074 StkFloat *<a class="code" href="classTcpWvIn.html#a5">tick</a>(StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize);
00075
00077
00083 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classTcpWvIn.html#a5">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00084
00086 <span class="keyword">const</span> StkFloat *<a class="code" href="classTcpWvIn.html#a8">lastFrame</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
00087
00089 <span class="keyword">const</span> StkFloat *<a class="code" href="classTcpWvIn.html#a9">tickFrame</a>(<span class="keywordtype">void</span>);
00090
00092 StkFloat *<a class="code" href="classTcpWvIn.html#a9">tickFrame</a>(StkFloat *frameVector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frames);
00093
00095
00100 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classTcpWvIn.html#a9">tickFrame</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
00101
00102 <span class="comment">// Called by the thread routine to receive data via the socket connection</span>
00103 <span class="comment">// and fill the socket buffer. This is not intended for general use but</span>
00104 <span class="comment">// had to be made public for access from the thread.</span>
00105 <span class="keywordtype">void</span> receive(<span class="keywordtype">void</span>);
00106
00107 <span class="keyword">protected</span>:
00108
00109 <span class="comment">// Initialize class variables.</span>
00110 <span class="keywordtype">void</span> init( <span class="keywordtype">int</span> port );
00111
00112 <span class="comment">// Read buffered socket data into the data buffer ... will block if none available.</span>
00113 <span class="keywordtype">int</span> readData( <span class="keywordtype">void</span> );
00114
00115 <a class="code" href="classSocket.html">Socket</a> *soket_;
00116 <a class="code" href="classThread.html">Thread</a> *thread_;
00117 <a class="code" href="classMutex.html">Mutex</a> mutex_;
00118 <span class="keywordtype">char</span> *buffer_;
00119 <span class="keywordtype">long</span> bufferBytes_;
00120 <span class="keywordtype">long</span> bytesFilled_;
00121 <span class="keywordtype">long</span> writePoint_;
00122 <span class="keywordtype">long</span> readPoint_;
00123 <span class="keywordtype">long</span> counter_;
00124 <span class="keywordtype">int</span> dataSize_;
00125 <span class="keywordtype">bool</span> connected_;
00126 <span class="keywordtype">int</span> fd_;
00127 thread_info threadInfo_;
00128
00129 };
00130
00131 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -1,74 +0,0 @@
<HTML>
<HEAD>
<TITLE>The Synthesis ToolKit in C++ (STK)</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.3.4 -->
<h1>TcpWvOut.h</h1><div class="fragment"><pre>00001 <span class="comment">/***************************************************/</span>
00026 <span class="comment">/***************************************************/</span>
00027
00028 <span class="preprocessor">#ifndef STK_TCPWVOUT_H</span>
00029 <span class="preprocessor"></span><span class="preprocessor">#define STK_TCPWVOUT_H</span>
00030 <span class="preprocessor"></span>
00031 <span class="preprocessor">#include "WvOut.h"</span>
00032 <span class="preprocessor">#include "Socket.h"</span>
00033
<a name="l00034"></a><a class="code" href="classTcpWvOut.html">00034</a> <span class="keyword">class </span><a class="code" href="classTcpWvOut.html">TcpWvOut</a> : <span class="keyword">protected</span> <a class="code" href="classWvOut.html">WvOut</a>
00035 {
00036 <span class="keyword">public</span>:
00038 <a class="code" href="classTcpWvOut.html#a0">TcpWvOut</a>();
00039
00041
00044 <a class="code" href="classTcpWvOut.html#a0">TcpWvOut</a>(<span class="keywordtype">int</span> port, <span class="keyword">const</span> <span class="keywordtype">char</span> *hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>);
00045
00047 <a class="code" href="classTcpWvOut.html#a2">~TcpWvOut</a>();
00048
00050
00053 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a3">connect</a>(<span class="keywordtype">int</span> port, <span class="keyword">const</span> <span class="keywordtype">char</span> *hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nChannels = 1, Stk::StkFormat format = <a class="code" href="classStk.html#s1">STK_SINT16</a>);
00054
00056 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a4">disconnect</a>(<span class="keywordtype">void</span>);
00057
00059 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="classTcpWvOut.html#a5">getFrames</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
00060
00062 StkFloat <a class="code" href="classTcpWvOut.html#a6">getTime</a>( <span class="keywordtype">void</span> ) <span class="keyword">const</span>;
00063
00065
00068 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a7">tick</a>( <span class="keyword">const</span> StkFloat sample );
00069
00071
00074 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a7">tick</a>( <span class="keyword">const</span> StkFloat *vector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> vectorSize );
00075
00077
00083 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a7">tick</a>( <span class="keyword">const</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 1 );
00084
00086
00089 <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a10">tickFrame</a>( <span class="keyword">const</span> StkFloat *frameVector, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> frames = 1 );
00090
00092
00097 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classTcpWvOut.html#a10">tickFrame</a>( <span class="keyword">const</span> <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames );
00098
00099 <span class="keyword">protected</span>:
00100
00101 <span class="comment">// Write a buffer of length \e frames via the socket connection.</span>
00102 <span class="keywordtype">void</span> writeData( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> frames );
00103
00104 <span class="keywordtype">char</span> *buffer_;
00105 <a class="code" href="classSocket.html">Socket</a> *soket_;
00106 <span class="keywordtype">int</span> dataSize_;
00107 };
00108
00109 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>
</HTML>

View File

@@ -8,67 +8,73 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Thread.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00021"></a>00021 <span class="comment">/***************************************************/</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Thread.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_THREAD_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_THREAD_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span>
<a name="l00008"></a>00008 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor"> #define THREAD_TYPE</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span> <span class="keyword">typedef</span> pthread_t THREAD_HANDLE;
<a name="l00011"></a>00011 <span class="keyword">typedef</span> <span class="keywordtype">void</span> * THREAD_RETURN;
<a name="l00012"></a>00012 <span class="keyword">typedef</span> <span class="keywordtype">void</span> * (*THREAD_FUNCTION)(<span class="keywordtype">void</span> *);
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00016"></a>00016 <span class="preprocessor"> #include &lt;windows.h&gt;</span>
<a name="l00017"></a>00017 <span class="preprocessor"> #include &lt;process.h&gt;</span>
<a name="l00018"></a>00018 <span class="preprocessor"> #define THREAD_TYPE __stdcall</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> THREAD_HANDLE;
<a name="l00020"></a>00020 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> THREAD_RETURN;
<a name="l00021"></a>00021 <span class="keyword">typedef</span> unsigned (__stdcall *THREAD_FUNCTION)(<span class="keywordtype">void</span> *);
<a name="l00022"></a>00022
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef STK_THREAD_H</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define STK_THREAD_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="preprocessor">#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor"> #include &lt;pthread.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor"> #define THREAD_TYPE</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span> <span class="keyword">typedef</span> pthread_t THREAD_HANDLE;
<a name="l00033"></a>00033 <span class="keyword">typedef</span> <span class="keywordtype">void</span> * THREAD_RETURN;
<a name="l00034"></a>00034 <span class="keyword">typedef</span> <span class="keywordtype">void</span> * (*THREAD_FUNCTION)(<span class="keywordtype">void</span> *);
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="preprocessor">#elif defined(__OS_WINDOWS__)</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor"> #include &lt;windows.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor"> #include &lt;process.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor"> #define THREAD_TYPE __stdcall</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> THREAD_HANDLE;
<a name="l00042"></a>00042 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> THREAD_RETURN;
<a name="l00043"></a>00043 <span class="keyword">typedef</span> unsigned (__stdcall *THREAD_FUNCTION)(<span class="keywordtype">void</span> *);
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span>
<a name="l00047"></a><a class="code" href="classThread.html">00047</a> <span class="keyword">class </span><a class="code" href="classThread.html">Thread</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00048"></a>00048 {
<a name="l00049"></a>00049 <span class="keyword">public</span>:
<a name="l00051"></a>00051 <a class="code" href="classThread.html#a0">Thread</a>();
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <a class="code" href="classThread.html#a1">~Thread</a>();
<a name="l00055"></a>00055
<a name="l00023"></a>00023 <span class="preprocessor">#endif</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="keyword">namespace </span>stk {
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="comment">/***************************************************/</span>
<a name="l00047"></a>00047 <span class="comment">/***************************************************/</span>
<a name="l00048"></a>00048
<a name="l00049"></a><a class="code" href="classstk_1_1Thread.html">00049</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Thread.html" title="STK thread class.">Thread</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00050"></a>00050 {
<a name="l00051"></a>00051 <span class="keyword">public</span>:
<a name="l00053"></a>00053 <a class="code" href="classstk_1_1Thread.html#550db7efe16cd4ef223d9ca69dda384b" title="Default constructor.">Thread</a>();
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <a class="code" href="classstk_1_1Thread.html#f3a6c8bcfebeeda352286f46afda00b3" title="The class destructor does not attempt to cancel or join a thread.">~Thread</a>();
<a name="l00057"></a>00057
<a name="l00062"></a>00062 <span class="keywordtype">bool</span> <a class="code" href="classThread.html#a2">start</a>( THREAD_FUNCTION routine, <span class="keywordtype">void</span> * ptr = NULL );
<a name="l00063"></a>00063
<a name="l00059"></a>00059
<a name="l00064"></a>00064 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Thread.html#bcafe21595d9c6ac52b1ae872b34a531" title="Begin execution of the thread routine. Upon success, true is returned.">start</a>( THREAD_FUNCTION routine, <span class="keywordtype">void</span> * ptr = NULL );
<a name="l00065"></a>00065
<a name="l00072"></a>00072 <span class="keywordtype">bool</span> <a class="code" href="classThread.html#a3">cancel</a>(<span class="keywordtype">void</span>);
<a name="l00073"></a>00073
<a name="l00067"></a>00067
<a name="l00074"></a>00074 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Thread.html#7187695295a7e5faf780ca13b0c07d4e" title="Signal cancellation of a thread routine, returning true on success.">cancel</a>(<span class="keywordtype">void</span>);
<a name="l00075"></a>00075
<a name="l00078"></a>00078 <span class="keywordtype">bool</span> <a class="code" href="classThread.html#a4">wait</a>(<span class="keywordtype">void</span>);
<a name="l00079"></a>00079
<a name="l00077"></a>00077
<a name="l00080"></a>00080 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1Thread.html#cce21fd2b9b62cd8116fefe499c8431f" title="Block the calling routine indefinitely until the thread terminates.">wait</a>(<span class="keywordtype">void</span>);
<a name="l00081"></a>00081
<a name="l00086"></a>00086 <span class="keywordtype">void</span> <a class="code" href="classThread.html#a5">testCancel</a>(<span class="keywordtype">void</span>);
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keyword">protected</span>:
<a name="l00083"></a>00083
<a name="l00088"></a>00088 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Thread.html#351cf3ad12622606ea2d984ae2e29380" title="Create a cancellation point within a thread routine.">testCancel</a>(<span class="keywordtype">void</span>);
<a name="l00089"></a>00089
<a name="l00090"></a>00090 THREAD_HANDLE thread_;
<a name="l00090"></a>00090 <span class="keyword">protected</span>:
<a name="l00091"></a>00091
<a name="l00092"></a>00092 };
<a name="l00092"></a>00092 THREAD_HANDLE thread_;
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00094"></a>00094 };
<a name="l00095"></a>00095
<a name="l00096"></a>00096 } <span class="comment">// stk namespace</span>
<a name="l00097"></a>00097
<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,38 +8,69 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>TubeBell.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00031"></a>00031 <span class="comment">/***************************************************/</span>
<a name="l00032"></a>00032
<a name="l00033"></a>00033 <span class="preprocessor">#ifndef STK_TUBEBELL_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define STK_TUBEBELL_H</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "FM.h"</span>
<a name="l00037"></a>00037
<a name="l00038"></a><a class="code" href="classTubeBell.html">00038</a> <span class="keyword">class </span><a class="code" href="classTubeBell.html">TubeBell</a> : <span class="keyword">public</span> <a class="code" href="classFM.html">FM</a>
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040 <span class="keyword">public</span>:
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <a class="code" href="classTubeBell.html#a0">TubeBell</a>();
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <a class="code" href="classTubeBell.html#a1">~TubeBell</a>();
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="classTubeBell.html#a2">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TubeBell.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TUBEBELL_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TUBEBELL_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "FM.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00038"></a>00038 <span class="comment">/***************************************************/</span>
<a name="l00039"></a>00039
<a name="l00040"></a><a class="code" href="classstk_1_1TubeBell.html">00040</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TubeBell.html" title="STK tubular bell (orchestral chime) FM synthesis instrument.">TubeBell</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1FM.html" title="STK abstract FM synthesis base class.">FM</a>
<a name="l00041"></a>00041 {
<a name="l00042"></a>00042 <span class="keyword">public</span>:
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <a class="code" href="classstk_1_1TubeBell.html#7b5de1d681fcb5c2899094dc1ffe0453" title="Class constructor.">TubeBell</a>( <span class="keywordtype">void</span> );
<a name="l00048"></a>00048
<a name="l00050"></a>00050 <a class="code" href="classstk_1_1TubeBell.html#b841ecb52b7be3b896d92b968364b529" title="Class destructor.">~TubeBell</a>( <span class="keywordtype">void</span> );
<a name="l00051"></a>00051
<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TubeBell.html#a141536c51b4918dd5fae222e5cb6aa3" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00054"></a>00054
<a name="l00055"></a>00055 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00056"></a>00056 };
<a name="l00056"></a>00056 StkFloat <a class="code" href="classstk_1_1TubeBell.html#fa7422b2a7361f2ebe60ebff887ef36f" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00057"></a>00057
<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00058"></a>00058 <span class="keyword">protected</span>:
<a name="l00059"></a>00059
<a name="l00060"></a>00060 };
<a name="l00061"></a>00061
<a name="l00062"></a><a class="code" href="classstk_1_1TubeBell.html#fa7422b2a7361f2ebe60ebff887ef36f">00062</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1TubeBell.html#fa7422b2a7361f2ebe60ebff887ef36f" title="Compute and return one output sample.">TubeBell :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00063"></a>00063 {
<a name="l00064"></a>00064 StkFloat temp, temp2;
<a name="l00065"></a>00065
<a name="l00066"></a>00066 temp = gains_[1] * adsr_[1]-&gt;tick() * waves_[1]-&gt;tick();
<a name="l00067"></a>00067 temp = temp * control1_;
<a name="l00068"></a>00068
<a name="l00069"></a>00069 waves_[0]-&gt;addPhaseOffset( temp );
<a name="l00070"></a>00070 waves_[3]-&gt;addPhaseOffset( twozero_.<a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>() );
<a name="l00071"></a>00071 temp = gains_[3] * adsr_[3]-&gt;tick() * waves_[3]-&gt;tick();
<a name="l00072"></a>00072 twozero_.<a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( temp );
<a name="l00073"></a>00073
<a name="l00074"></a>00074 waves_[2]-&gt;addPhaseOffset( temp );
<a name="l00075"></a>00075 temp = ( 1.0 - (control2_ * 0.5)) * gains_[0] * adsr_[0]-&gt;<a class="code" href="classstk_1_1TubeBell.html#fa7422b2a7361f2ebe60ebff887ef36f" title="Compute and return one output sample.">tick</a>() * waves_[0]-&gt;tick();
<a name="l00076"></a>00076 temp += control2_ * 0.5 * gains_[2] * adsr_[2]-&gt;tick() * waves_[2]-&gt;tick();
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="comment">// Calculate amplitude modulation and apply it to output.</span>
<a name="l00079"></a>00079 temp2 = vibrato_.<a class="code" href="classstk_1_1SineWave.html#31a55627bf8064919b5e063059260eda" title="Compute and return one output sample.">tick</a>() * modDepth_;
<a name="l00080"></a>00080 temp = temp * (1.0 + temp2);
<a name="l00081"></a>00081
<a name="l00082"></a>00082 lastFrame_[0] = temp * 0.5;
<a name="l00083"></a>00083 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085
<a name="l00086"></a>00086 } <span class="comment">// stk namespace</span>
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,61 +8,120 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>TwoPole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_TWOPOLE_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_TWOPOLE_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TwoPole.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TWOPOLE_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TWOPOLE_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classTwoPole.html">00020</a> <span class="keyword">class </span><a class="code" href="classTwoPole.html">TwoPole</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00020"></a><a class="code" href="classstk_1_1TwoPole.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TwoPole.html" title="STK two-pole filter class.">TwoPole</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00023"></a>00023
<a name="l00025"></a>00025 <a class="code" href="classTwoPole.html#a0">TwoPole</a>();
<a name="l00025"></a>00025 <a class="code" href="classstk_1_1TwoPole.html#01a2b3b3d286e00a097918ec5f8a287b" title="Default constructor creates a second-order pass-through filter.">TwoPole</a>( <span class="keywordtype">void</span> );
<a name="l00026"></a>00026
<a name="l00028"></a>00028 <a class="code" href="classTwoPole.html#a1">~TwoPole</a>();
<a name="l00028"></a>00028 <a class="code" href="classstk_1_1TwoPole.html#abc2e1046f8f908fc78a53b50b00ed9f" title="Class destructor.">~TwoPole</a>();
<a name="l00029"></a>00029
<a name="l00031"></a><a class="code" href="classTwoPole.html#a2">00031</a> <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a2">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00031"></a><a class="code" href="classstk_1_1TwoPole.html#d0a3ac1b5d4e651a7ff1efb1d5362c0b">00031</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#d0a3ac1b5d4e651a7ff1efb1d5362c0b" title="A function to enable/disable the automatic updating of class data when the STK sample...">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00032"></a>00032
<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00034"></a><a class="code" href="classstk_1_1TwoPole.html#0a5bfc68061c1dbaa40bfbb9ddb67b7d">00034</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#0a5bfc68061c1dbaa40bfbb9ddb67b7d" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00035"></a>00035
<a name="l00037"></a>00037 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a4">setB0</a>(StkFloat b0);
<a name="l00037"></a><a class="code" href="classstk_1_1TwoPole.html#d0c2f8ddc09ca1eb864515d816ebacdd">00037</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#d0c2f8ddc09ca1eb864515d816ebacdd" title="Set the a[1] coefficient value.">setA1</a>( StkFloat a1 ) { a_[1] = a1; };
<a name="l00038"></a>00038
<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a5">setA1</a>(StkFloat a1);
<a name="l00040"></a><a class="code" href="classstk_1_1TwoPole.html#309960a8b2cf6858f43f43dc739146ea">00040</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#309960a8b2cf6858f43f43dc739146ea" title="Set the a[2] coefficient value.">setA2</a>( StkFloat a2 ) { a_[2] = a2; };
<a name="l00041"></a>00041
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a6">setA2</a>(StkFloat a2);
<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#f9b68df9cc424a09e3ecb7f078bcacd3" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat a1, StkFloat a2, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00044"></a>00044
<a name="l00046"></a>00046
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a7">setResonance</a>(StkFloat frequency, StkFloat radius, <span class="keywordtype">bool</span> normalize = <span class="keyword">false</span>);
<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoPole.html#00997b12a1cf0a04888124eaf85c565d" title="Sets the filter coefficients for a resonance at frequency (in Hz).">setResonance</a>(StkFloat frequency, StkFloat radius, <span class="keywordtype">bool</span> normalize = <span class="keyword">false</span>);
<a name="l00060"></a>00060
<a name="l00062"></a>00062
<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classTwoPole.html#a8">setGain</a>(StkFloat gain);
<a name="l00067"></a>00067
<a name="l00069"></a>00069 StkFloat <a class="code" href="classTwoPole.html#a9">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00070"></a>00070
<a name="l00072"></a>00072 StkFloat <a class="code" href="classTwoPole.html#a10">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00073"></a>00073
<a name="l00075"></a>00075 StkFloat <a class="code" href="classTwoPole.html#a11">tick</a>(StkFloat sample);
<a name="l00076"></a>00076
<a name="l00078"></a>00078
<a name="l00084"></a>00084 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classTwoPole.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keyword">protected</span>:
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00089"></a>00089 };
<a name="l00062"></a><a class="code" href="classstk_1_1TwoPole.html#8a4fb4afe3e06c689827ecaec478aad1">00062</a> StkFloat <a class="code" href="classstk_1_1TwoPole.html#8a4fb4afe3e06c689827ecaec478aad1" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00063"></a>00063
<a name="l00065"></a>00065 StkFloat <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00066"></a>00066
<a name="l00068"></a>00068
<a name="l00076"></a>00076 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00077"></a>00077
<a name="l00079"></a>00079
<a name="l00087"></a>00087 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 <span class="keyword">protected</span>:
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00091"></a>00091 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00092"></a>00092 };
<a name="l00093"></a>00093
<a name="l00094"></a><a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc">00094</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">TwoPole :: tick</a>( StkFloat input )
<a name="l00095"></a>00095 {
<a name="l00096"></a>00096 inputs_[0] = gain_ * input;
<a name="l00097"></a>00097 lastFrame_[0] = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
<a name="l00098"></a>00098 outputs_[2] = outputs_[1];
<a name="l00099"></a>00099 outputs_[1] = lastFrame_[0];
<a name="l00100"></a>00100
<a name="l00101"></a>00101 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00102"></a>00102 }
<a name="l00103"></a>00103
<a name="l00104"></a><a class="code" href="classstk_1_1TwoPole.html#9e8bd9ed925a1c4966fbc0b0799ce46b">00104</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">TwoPole :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00108"></a>00108 errorString_ &lt;&lt; <span class="stringliteral">"TwoPole::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00109"></a>00109 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 <span class="preprocessor">#endif</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span>
<a name="l00113"></a>00113 StkFloat *samples = &amp;frames[channel];
<a name="l00114"></a>00114 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00115"></a>00115 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00116"></a>00116 inputs_[0] = gain_ * *samples;
<a name="l00117"></a>00117 *samples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
<a name="l00118"></a>00118 outputs_[2] = outputs_[1];
<a name="l00119"></a>00119 outputs_[1] = *samples;
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
<a name="l00122"></a>00122 lastFrame_[0] = outputs_[1];
<a name="l00123"></a>00123 <span class="keywordflow">return</span> frames;
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125
<a name="l00126"></a><a class="code" href="classstk_1_1TwoPole.html#5c9b52082c0d2845a5ca01ca276fe8f8">00126</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoPole.html#d4612f9b6f971a4dd76b23bb2b9fefbc" title="Input one sample to the filter and return one output.">TwoPole :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00127"></a>00127 {
<a name="l00128"></a>00128 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00129"></a>00129 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00130"></a>00130 errorString_ &lt;&lt; <span class="stringliteral">"TwoPole::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00131"></a>00131 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00132"></a>00132 }
<a name="l00133"></a>00133 <span class="preprocessor">#endif</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span>
<a name="l00135"></a>00135 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00136"></a>00136 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00137"></a>00137 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00138"></a>00138 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00139"></a>00139 inputs_[0] = gain_ * *iSamples;
<a name="l00140"></a>00140 *oSamples = b_[0] * inputs_[0] - a_[1] * outputs_[1] - a_[2] * outputs_[2];
<a name="l00141"></a>00141 outputs_[2] = outputs_[1];
<a name="l00142"></a>00142 outputs_[1] = *oSamples;
<a name="l00143"></a>00143 }
<a name="l00144"></a>00144
<a name="l00145"></a>00145 lastFrame_[0] = outputs_[1];
<a name="l00146"></a>00146 <span class="keywordflow">return</span> iFrames;
<a name="l00147"></a>00147 }
<a name="l00148"></a>00148
<a name="l00149"></a>00149 } <span class="comment">// stk namespace</span>
<a name="l00150"></a>00150
<a name="l00151"></a>00151 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,60 +8,119 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>TwoZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00013"></a>00013 <span class="comment">/***************************************************/</span>
<a name="l00014"></a>00014
<a name="l00015"></a>00015 <span class="preprocessor">#ifndef STK_TWOZERO_H</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor">#define STK_TWOZERO_H</span>
<a name="l00017"></a>00017 <span class="preprocessor"></span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "Filter.h"</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>TwoZero.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_TWOZERO_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_TWOZERO_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Filter.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018 <span class="comment">/***************************************************/</span>
<a name="l00019"></a>00019
<a name="l00020"></a><a class="code" href="classTwoZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classTwoZero.html">TwoZero</a> : <span class="keyword">protected</span> <a class="code" href="classFilter.html">Filter</a>
<a name="l00020"></a><a class="code" href="classstk_1_1TwoZero.html">00020</a> <span class="keyword">class </span><a class="code" href="classstk_1_1TwoZero.html" title="STK two-zero filter class.">TwoZero</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Filter.html" title="STK abstract filter class.">Filter</a>
<a name="l00021"></a>00021 {
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a>00024 <a class="code" href="classTwoZero.html#a0">TwoZero</a>();
<a name="l00024"></a>00024 <a class="code" href="classstk_1_1TwoZero.html#5dabe7ec659bedf76a8f8d975f36dcd9" title="Default constructor creates a second-order pass-through filter.">TwoZero</a>();
<a name="l00025"></a>00025
<a name="l00027"></a>00027 <a class="code" href="classTwoZero.html#a1">~TwoZero</a>();
<a name="l00027"></a>00027 <a class="code" href="classstk_1_1TwoZero.html#b9890b28f0770485494b05639a4b2140" title="Class destructor.">~TwoZero</a>();
<a name="l00028"></a>00028
<a name="l00030"></a><a class="code" href="classTwoZero.html#a2">00030</a> <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a2">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00030"></a><a class="code" href="classstk_1_1TwoZero.html#a1a1568aae3cd3d53011b3fc344cb086">00030</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#a1a1568aae3cd3d53011b3fc344cb086" title="A function to enable/disable the automatic updating of class data when the STK sample...">ignoreSampleRateChange</a>( <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span> ) { ignoreSampleRateChange_ = ignore; };
<a name="l00031"></a>00031
<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a3">clear</a>(<span class="keywordtype">void</span>);
<a name="l00033"></a><a class="code" href="classstk_1_1TwoZero.html#5ac82173333659fc31ca86cd2e134413">00033</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#5ac82173333659fc31ca86cd2e134413" title="Set the b[0] coefficient value.">setB0</a>( StkFloat b0 ) { b_[0] = b0; };
<a name="l00034"></a>00034
<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a4">setB0</a>(StkFloat b0);
<a name="l00036"></a><a class="code" href="classstk_1_1TwoZero.html#1f090992845b9c85f3de15dfba583891">00036</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#1f090992845b9c85f3de15dfba583891" title="Set the b[1] coefficient value.">setB1</a>( StkFloat b1 ) { b_[1] = b1; };
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a5">setB1</a>(StkFloat b1);
<a name="l00039"></a><a class="code" href="classstk_1_1TwoZero.html#98a7d6d1615753f338f75409d850a9b4">00039</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#98a7d6d1615753f338f75409d850a9b4" title="Set the b[2] coefficient value.">setB2</a>( StkFloat b2 ) { b_[2] = b2; };
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a6">setB2</a>(StkFloat b2);
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#3c8449660561108eb1873ca6b820a939" title="Set all filter coefficients.">setCoefficients</a>( StkFloat b0, StkFloat b1, StkFloat b2, <span class="keywordtype">bool</span> clearState = <span class="keyword">false</span> );
<a name="l00043"></a>00043
<a name="l00045"></a>00045
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a7">setNotch</a>(StkFloat frequency, StkFloat radius);
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1TwoZero.html#3a89facd2b94bbcfc2f06d8766a46329" title="Sets the filter coefficients for a &amp;quot;notch&amp;quot; at frequency (in Hz).">setNotch</a>( StkFloat frequency, StkFloat radius );
<a name="l00056"></a>00056
<a name="l00058"></a>00058
<a name="l00062"></a>00062 <span class="keywordtype">void</span> <a class="code" href="classTwoZero.html#a8">setGain</a>(StkFloat gain);
<a name="l00063"></a>00063
<a name="l00065"></a>00065 StkFloat <a class="code" href="classTwoZero.html#a9">getGain</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00066"></a>00066
<a name="l00068"></a>00068 StkFloat <a class="code" href="classTwoZero.html#a10">lastOut</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
<a name="l00069"></a>00069
<a name="l00071"></a>00071 StkFloat <a class="code" href="classTwoZero.html#a11">tick</a>(StkFloat sample);
<a name="l00072"></a>00072
<a name="l00074"></a>00074
<a name="l00080"></a>00080 <a class="code" href="classStkFrames.html">StkFrames</a>&amp; <a class="code" href="classTwoZero.html#a11">tick</a>( <a class="code" href="classStkFrames.html">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keyword">protected</span>:
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="keyword">virtual</span> <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00085"></a>00085 };
<a name="l00058"></a><a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba">00058</a> StkFloat <a class="code" href="classstk_1_1TwoZero.html#e9808b0152902d0067ea24ccfba0b4ba" title="Return the last computed output value.">lastOut</a>( <span class="keywordtype">void</span> )<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lastFrame_[0]; };
<a name="l00059"></a>00059
<a name="l00061"></a>00061 StkFloat <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( StkFloat input );
<a name="l00062"></a>00062
<a name="l00064"></a>00064
<a name="l00072"></a>00072 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00073"></a>00073
<a name="l00075"></a>00075
<a name="l00083"></a>00083 <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a> &amp;oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel = 0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel = 0 );
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keyword">protected</span>:
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00087"></a>00087 <span class="keywordtype">void</span> sampleRateChanged( StkFloat newRate, StkFloat oldRate );
<a name="l00088"></a>00088 };
<a name="l00089"></a>00089
<a name="l00090"></a><a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82">00090</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">TwoZero :: tick</a>( StkFloat input )
<a name="l00091"></a>00091 {
<a name="l00092"></a>00092 inputs_[0] = gain_ * input;
<a name="l00093"></a>00093 lastFrame_[0] = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00094"></a>00094 inputs_[2] = inputs_[1];
<a name="l00095"></a>00095 inputs_[1] = inputs_[0];
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099
<a name="l00100"></a><a class="code" href="classstk_1_1TwoZero.html#26e2a1e21831ccb414dbede864afc63c">00100</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">TwoZero :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; frames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel )
<a name="l00101"></a>00101 {
<a name="l00102"></a>00102 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( channel &gt;= frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00104"></a>00104 errorString_ &lt;&lt; <span class="stringliteral">"TwoZero::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00105"></a>00105 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span>
<a name="l00109"></a>00109 StkFloat *samples = &amp;frames[channel];
<a name="l00110"></a>00110 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hop = frames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00111"></a>00111 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;frames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, samples += hop ) {
<a name="l00112"></a>00112 inputs_[0] = gain_ * *samples;
<a name="l00113"></a>00113 *samples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00114"></a>00114 inputs_[2] = inputs_[1];
<a name="l00115"></a>00115 inputs_[1] = inputs_[0];
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117
<a name="l00118"></a>00118 lastFrame_[0] = *(samples-hop);
<a name="l00119"></a>00119 <span class="keywordflow">return</span> frames;
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
<a name="l00122"></a><a class="code" href="classstk_1_1TwoZero.html#0ef9deab4fbc7e64511d4b6d38afd185">00122</a> <span class="keyword">inline</span> <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; <a class="code" href="classstk_1_1TwoZero.html#cf92a66aeb2024cfcdb9d71ecadf3d82" title="Input one sample to the filter and return one output.">TwoZero :: tick</a>( <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; iFrames, <a class="code" href="classstk_1_1StkFrames.html" title="An STK class to handle vectorized audio data.">StkFrames</a>&amp; oFrames, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iChannel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> oChannel )
<a name="l00123"></a>00123 {
<a name="l00124"></a>00124 <span class="preprocessor">#if defined(_STK_DEBUG_)</span>
<a name="l00125"></a>00125 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( iChannel &gt;= iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() || oChannel &gt;= oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>() ) {
<a name="l00126"></a>00126 errorString_ &lt;&lt; <span class="stringliteral">"TwoZero::tick(): channel and StkFrames arguments are incompatible!"</span>;
<a name="l00127"></a>00127 <a class="code" href="classstk_1_1Stk.html#48ac73a0d8ca28445ba1a054e1f061ff" title="Static function for error reporting and handling using c-strings.">handleError</a>( StkError::FUNCTION_ARGUMENT );
<a name="l00128"></a>00128 }
<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
<a name="l00130"></a>00130 <span class="preprocessor"></span>
<a name="l00131"></a>00131 StkFloat *iSamples = &amp;iFrames[iChannel];
<a name="l00132"></a>00132 StkFloat *oSamples = &amp;oFrames[oChannel];
<a name="l00133"></a>00133 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iHop = iFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>(), oHop = oFrames.<a class="code" href="classstk_1_1StkFrames.html#ec7ef9c46675a24111aa6e2fda3ba870" title="Return the number of channels represented by the data.">channels</a>();
<a name="l00134"></a>00134 <span class="keywordflow">for</span> ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;iFrames.<a class="code" href="classstk_1_1StkFrames.html#05b1ab6fa750a8221a7d65c30e0cdab9" title="Return the number of sample frames represented by the data.">frames</a>(); i++, iSamples += iHop, oSamples += oHop ) {
<a name="l00135"></a>00135 inputs_[0] = gain_ * *iSamples;
<a name="l00136"></a>00136 *oSamples = b_[2] * inputs_[2] + b_[1] * inputs_[1] + b_[0] * inputs_[0];
<a name="l00137"></a>00137 inputs_[2] = inputs_[1];
<a name="l00138"></a>00138 inputs_[1] = inputs_[0];
<a name="l00139"></a>00139 }
<a name="l00140"></a>00140
<a name="l00141"></a>00141 lastFrame_[0] = *(oSamples-oHop);
<a name="l00142"></a>00142 <span class="keywordflow">return</span> iFrames;
<a name="l00143"></a>00143 }
<a name="l00144"></a>00144
<a name="l00145"></a>00145 } <span class="comment">// stk namespace</span>
<a name="l00146"></a>00146
<a name="l00147"></a>00147 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,51 +8,57 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>UdpSocket.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00022"></a>00022 <span class="comment">/***************************************************/</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef STK_UDPSOCKET_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define STK_UDPSOCKET_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00028"></a>00028
<a name="l00029"></a><a class="code" href="classUdpSocket.html">00029</a> <span class="keyword">class </span><a class="code" href="classUdpSocket.html">UdpSocket</a> : <span class="keyword">public</span> <a class="code" href="classSocket.html">Socket</a>
<a name="l00030"></a>00030 {
<a name="l00031"></a>00031 <span class="keyword">public</span>:
<a name="l00033"></a>00033
<a name="l00036"></a>00036 <a class="code" href="classUdpSocket.html#a0">UdpSocket</a>( <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a> = 2006 );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <a class="code" href="classUdpSocket.html#a1">~UdpSocket</a>();
<a name="l00040"></a>00040
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>UdpSocket.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_UDPSOCKET_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_UDPSOCKET_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Socket.h"</span>
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>stk {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="comment">/***************************************************/</span>
<a name="l00029"></a>00029 <span class="comment">/***************************************************/</span>
<a name="l00030"></a>00030
<a name="l00031"></a><a class="code" href="classstk_1_1UdpSocket.html">00031</a> <span class="keyword">class </span><a class="code" href="classstk_1_1UdpSocket.html" title="STK UDP socket server/client class.">UdpSocket</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Socket.html" title="STK internet socket abstract base class.">Socket</a>
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 <span class="keyword">public</span>:
<a name="l00035"></a>00035
<a name="l00038"></a>00038 <a class="code" href="classstk_1_1UdpSocket.html#aad5171c74b4ab7c2155cd63ef30a271" title="Default constructor creates a local UDP socket on port 2006 (or the specified port...">UdpSocket</a>( <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a> = 2006 );
<a name="l00039"></a>00039
<a name="l00041"></a>00041 <a class="code" href="classstk_1_1UdpSocket.html#9b54f5d058c01c04dc266f117da7ee2a" title="The class destructor closes the socket instance.">~UdpSocket</a>();
<a name="l00042"></a>00042
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classUdpSocket.html#a2">setDestination</a>( <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a> = 2006, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00046"></a>00046
<a name="l00044"></a>00044
<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1UdpSocket.html#4267442661257aae2a0f6b48d367fea1" title="Set the address for subsequent outgoing data sent via the writeBuffer() function...">setDestination</a>( <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a> = 2006, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00048"></a>00048
<a name="l00051"></a>00051 <span class="keywordtype">int</span> <a class="code" href="classUdpSocket.html#a3">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="classUdpSocket.html#a4">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">int</span> <a class="code" href="classUdpSocket.html#a5">writeBufferTo</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> <a class="code" href="classSocket.html#a3">port</a>, std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">int</span> flags = 0 );
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="keyword">protected</span>:
<a name="l00050"></a>00050
<a name="l00053"></a>00053 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1UdpSocket.html#a9d3d734b4e9c811724eff626e849cb8" title="Send a buffer to the address specified with the setDestination() function. Returns...">writeBuffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00054"></a>00054
<a name="l00056"></a>00056 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1UdpSocket.html#1f66fdcc40b07f9d56e472be9684adcb" title="Read an input buffer, up to length bufferSize. Returns the number of bytes read or...">readBuffer</a>(<span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> flags = 0);
<a name="l00057"></a>00057
<a name="l00059"></a>00059 <span class="keywordtype">int</span> <a class="code" href="classstk_1_1UdpSocket.html#85f74161d2d3697593f08bda9dcb8963" title="Write a buffer to the specified socket. Returns the number of bytes written or -1...">writeBufferTo</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">long</span> bufferSize, <span class="keywordtype">int</span> <a class="code" href="classstk_1_1Socket.html#be3040ecfff6ce921284c6ab4b0500a7" title="Return the socket port number.">port</a>, std::string hostname = <span class="stringliteral">"localhost"</span>, <span class="keywordtype">int</span> flags = 0 );
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="keyword">protected</span>:
<a name="l00062"></a>00062
<a name="l00065"></a>00065 <span class="keywordtype">void</span> <a class="code" href="classUdpSocket.html#b0">setAddress</a>( <span class="keyword">struct</span> sockaddr_in *address, <span class="keywordtype">int</span> port = 2006, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="keyword">struct </span>sockaddr_in address_;
<a name="l00068"></a>00068 <span class="keywordtype">bool</span> validAddress_;
<a name="l00069"></a>00069
<a name="l00070"></a>00070 };
<a name="l00064"></a>00064
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1UdpSocket.html#785594fd882b76d4c280b72a016f026d" title="A protected function for use in writing a socket address structure.">setAddress</a>( <span class="keyword">struct</span> sockaddr_in *address, <span class="keywordtype">int</span> port = 2006, std::string hostname = <span class="stringliteral">"localhost"</span> );
<a name="l00068"></a>00068
<a name="l00069"></a>00069 <span class="keyword">struct </span>sockaddr_in address_;
<a name="l00070"></a>00070 <span class="keywordtype">bool</span> validAddress_;
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="preprocessor">#endif // defined(STK_UDPSOCKET_H)</span>
</pre></div><HR>
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073
<a name="l00074"></a>00074 } <span class="comment">// stk namespace</span>
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,53 +8,68 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>Vector3D.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>Vector3D.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_VECTOR3D_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_VECTOR3D_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;cmath&gt;</span>
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="keyword">namespace </span>stk {
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="comment">/***************************************************/</span>
<a name="l00010"></a>00010
<a name="l00011"></a>00011 <span class="preprocessor">#ifndef STK_VECTOR3D_H</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define STK_VECTOR3D_H</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span>
<a name="l00014"></a>00014 <span class="preprocessor">#include "Stk.h"</span>
<a name="l00015"></a>00015
<a name="l00016"></a><a class="code" href="classVector3D.html">00016</a> <span class="keyword">class </span><a class="code" href="classVector3D.html">Vector3D</a> : <span class="keyword">public</span> <a class="code" href="classStk.html">Stk</a>
<a name="l00017"></a>00017 {
<a name="l00017"></a>00017 <span class="comment">/***************************************************/</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="keyword">public</span>:
<a name="l00021"></a>00021 <a class="code" href="classVector3D.html#a0">Vector3D</a>(StkFloat initX=0.0, StkFloat initY=0.0, StkFloat initZ=0.0);
<a name="l00022"></a>00022
<a name="l00024"></a>00024 <a class="code" href="classVector3D.html#a1">~Vector3D</a>();
<a name="l00019"></a><a class="code" href="classstk_1_1Vector3D.html">00019</a> <span class="keyword">class </span><a class="code" href="classstk_1_1Vector3D.html" title="STK 3D vector class.">Vector3D</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Stk.html" title="STK base class.">Stk</a>
<a name="l00020"></a>00020 {
<a name="l00021"></a>00021
<a name="l00022"></a>00022 <span class="keyword">public</span>:
<a name="l00024"></a><a class="code" href="classstk_1_1Vector3D.html#2e5ae76645aa8a89a8ab0640d3ce5292">00024</a> <a class="code" href="classstk_1_1Vector3D.html#2e5ae76645aa8a89a8ab0640d3ce5292" title="Default constructor taking optional initial X, Y, and Z values.">Vector3D</a>( StkFloat x = 0.0, StkFloat y = 0.0, StkFloat z = 0.0 ) { <a class="code" href="classstk_1_1Vector3D.html#65fd03de6d9d42ea53a6cb8418ee7149" title="Set the X, Y, and Z values simultaniously.">setXYZ</a>( x, y, z ); };
<a name="l00025"></a>00025
<a name="l00027"></a>00027 StkFloat <a class="code" href="classVector3D.html#a2">getX</a>();
<a name="l00027"></a><a class="code" href="classstk_1_1Vector3D.html#e4f7cddc34ed1cf80262ff2d5dad65f4">00027</a> StkFloat <a class="code" href="classstk_1_1Vector3D.html#e4f7cddc34ed1cf80262ff2d5dad65f4" title="Get the current X value.">getX</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> X_; };
<a name="l00028"></a>00028
<a name="l00030"></a>00030 StkFloat <a class="code" href="classVector3D.html#a3">getY</a>();
<a name="l00030"></a><a class="code" href="classstk_1_1Vector3D.html#f83bfbe865d702845e37e14d82f642b6">00030</a> StkFloat <a class="code" href="classstk_1_1Vector3D.html#f83bfbe865d702845e37e14d82f642b6" title="Get the current Y value.">getY</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> Y_; };
<a name="l00031"></a>00031
<a name="l00033"></a>00033 StkFloat <a class="code" href="classVector3D.html#a4">getZ</a>();
<a name="l00033"></a><a class="code" href="classstk_1_1Vector3D.html#f1c7389a2b4640cbe594fa33f9e4f805">00033</a> StkFloat <a class="code" href="classstk_1_1Vector3D.html#f1c7389a2b4640cbe594fa33f9e4f805" title="Get the current Z value.">getZ</a>( <span class="keywordtype">void</span> ) { <span class="keywordflow">return</span> Z_; };
<a name="l00034"></a>00034
<a name="l00036"></a>00036 StkFloat <a class="code" href="classVector3D.html#a5">getLength</a>();
<a name="l00036"></a>00036 StkFloat <a class="code" href="classstk_1_1Vector3D.html#61b078f252c597feff6d98a5646b03fd" title="Calculate the vector length.">getLength</a>( <span class="keywordtype">void</span> );
<a name="l00037"></a>00037
<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="classVector3D.html#a6">setXYZ</a>(StkFloat x, StkFloat y, StkFloat z);
<a name="l00039"></a><a class="code" href="classstk_1_1Vector3D.html#65fd03de6d9d42ea53a6cb8418ee7149">00039</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Vector3D.html#65fd03de6d9d42ea53a6cb8418ee7149" title="Set the X, Y, and Z values simultaniously.">setXYZ</a>( StkFloat x, StkFloat y, StkFloat z ) { X_ = x; Y_ = y; Z_ = z; };
<a name="l00040"></a>00040
<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="classVector3D.html#a7">setX</a>(StkFloat x);
<a name="l00042"></a><a class="code" href="classstk_1_1Vector3D.html#9825ba3adb8fb272d2e3ca20740a48c5">00042</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Vector3D.html#9825ba3adb8fb272d2e3ca20740a48c5" title="Set the X value.">setX</a>( StkFloat x ) { X_ = x; };
<a name="l00043"></a>00043
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="classVector3D.html#a8">setY</a>(StkFloat y);
<a name="l00045"></a><a class="code" href="classstk_1_1Vector3D.html#94de5326b083c6cf72f509aa0fc532f3">00045</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Vector3D.html#94de5326b083c6cf72f509aa0fc532f3" title="Set the Y value.">setY</a>( StkFloat y ) { Y_ = y; };
<a name="l00046"></a>00046
<a name="l00048"></a>00048 <span class="keywordtype">void</span> <a class="code" href="classVector3D.html#a9">setZ</a>(StkFloat z);
<a name="l00048"></a><a class="code" href="classstk_1_1Vector3D.html#826f2aa5e7b95a0d91f9432f26bec881">00048</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1Vector3D.html#826f2aa5e7b95a0d91f9432f26bec881" title="Set the Z value.">setZ</a>( StkFloat z ) { Z_ = z; };
<a name="l00049"></a>00049
<a name="l00050"></a>00050 <span class="keyword">protected</span>:
<a name="l00051"></a>00051 StkFloat myX_;
<a name="l00052"></a>00052 StkFloat myY_;
<a name="l00053"></a>00053 StkFloat myZ_;
<a name="l00051"></a>00051 StkFloat X_;
<a name="l00052"></a>00052 StkFloat Y_;
<a name="l00053"></a>00053 StkFloat Z_;
<a name="l00054"></a>00054 };
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00056"></a><a class="code" href="classstk_1_1Vector3D.html#61b078f252c597feff6d98a5646b03fd">00056</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1Vector3D.html#61b078f252c597feff6d98a5646b03fd" title="Calculate the vector length.">Vector3D :: getLength</a>( <span class="keywordtype">void</span> )
<a name="l00057"></a>00057 {
<a name="l00058"></a>00058 StkFloat temp;
<a name="l00059"></a>00059 temp = X_ * X_;
<a name="l00060"></a>00060 temp += Y_ * Y_;
<a name="l00061"></a>00061 temp += Z_ * Z_;
<a name="l00062"></a>00062 temp = sqrt( temp );
<a name="l00063"></a>00063 <span class="keywordflow">return</span> temp;
<a name="l00064"></a>00064 }
<a name="l00065"></a>00065
<a name="l00066"></a>00066 } <span class="comment">// stk namespace</span>
<a name="l00067"></a>00067
<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

View File

@@ -8,74 +8,99 @@
<img src="princeton.gif"> &nbsp; <img src="ccrma.gif"> &nbsp; <img src="mcgill.gif"><P>
<a class="qindex" href="index.html">Home</a> &nbsp; <a class="qindex" href="information.html">Information</a> &nbsp; <a class="qindex" href="classes.html">Classes</a> &nbsp; <a class="qindex" href="download.html">Download</a> &nbsp; <a class="qindex" href="usage.html">Usage</a> &nbsp; <a class="qindex" href="maillist.html">Mail List</a> &nbsp; <a class="qindex" href="system.html">Requirements</a> &nbsp; <a class="qindex" href="links.html">Links</a> &nbsp; <a class="qindex" href="faq.html">FAQ</a> &nbsp; <a class="qindex" href="tutorial.html">Tutorial</a></CENTER>
<HR>
<!-- Generated by Doxygen 1.4.4 -->
<div class="nav">
<a class="el" href="dir_000000.html">include</a></div>
<h1>VoicForm.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/***************************************************/</span>
<a name="l00026"></a>00026 <span class="comment">/***************************************************/</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef STK_VOICFORM_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define STK_VOICFORM_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "SingWave.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "FormSwep.h"</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00038"></a>00038
<a name="l00039"></a><a class="code" href="classVoicForm.html">00039</a> <span class="keyword">class </span><a class="code" href="classVoicForm.html">VoicForm</a> : <span class="keyword">public</span> <a class="code" href="classInstrmnt.html">Instrmnt</a>
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041 <span class="keyword">public</span>:
<a name="l00043"></a>00043
<a name="l00046"></a>00046 <a class="code" href="classVoicForm.html#a0">VoicForm</a>();
<a name="l00047"></a>00047
<a name="l00049"></a>00049 <a class="code" href="classVoicForm.html#a1">~VoicForm</a>();
<a name="l00050"></a>00050
<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a2">clear</a>();
<a name="l00053"></a>00053
<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a3">setFrequency</a>(StkFloat frequency);
<a name="l00056"></a>00056
<a name="l00058"></a>00058 <span class="keywordtype">bool</span> <a class="code" href="classVoicForm.html#a4">setPhoneme</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* phoneme);
<a name="l00059"></a>00059
<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a5">setVoiced</a>(StkFloat vGain);
<a name="l00062"></a>00062
<a name="l00064"></a>00064 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a6">setUnVoiced</a>(StkFloat nGain);
<a name="l00065"></a>00065
<a name="l00067"></a>00067 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a7">setFilterSweepRate</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> whichOne, StkFloat rate);
<a name="l00068"></a>00068
<a name="l00070"></a>00070 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a8">setPitchSweepRate</a>(StkFloat rate);
<a name="l00071"></a>00071
<a name="l00073"></a>00073 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a9">speak</a>();
<a name="l00074"></a>00074
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a10">quiet</a>();
<a name="l00077"></a>00077
<a name="l00079"></a>00079 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a11">noteOn</a>(StkFloat frequency, StkFloat amplitude);
<a name="l00080"></a>00080
<a name="l00082"></a>00082 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a12">noteOff</a>(StkFloat amplitude);
<a name="l00083"></a>00083
<a name="l00085"></a>00085 <span class="keywordtype">void</span> <a class="code" href="classVoicForm.html#a13">controlChange</a>(<span class="keywordtype">int</span> number, StkFloat value);
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="keyword">protected</span>:
<!-- Generated by Doxygen 1.5.8 -->
<div class="navpath"><a class="el" href="dir_d499f4756a454d8a02faa5ebe57d576f.html">include</a>
</div>
<div class="contents">
<h1>VoicForm.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef STK_VOICFORM_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define STK_VOICFORM_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include "Instrmnt.h"</span>
<a name="l00005"></a>00005 <span class="preprocessor">#include "Envelope.h"</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "Noise.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "SingWave.h"</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "FormSwep.h"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "OnePole.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "OneZero.h"</span>
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keyword">namespace </span>stk {
<a name="l00013"></a>00013
<a name="l00014"></a>00014 <span class="comment">/***************************************************/</span>
<a name="l00039"></a>00039 <span class="comment">/***************************************************/</span>
<a name="l00040"></a>00040
<a name="l00041"></a><a class="code" href="classstk_1_1VoicForm.html">00041</a> <span class="keyword">class </span><a class="code" href="classstk_1_1VoicForm.html" title="Four formant synthesis instrument.">VoicForm</a> : <span class="keyword">public</span> <a class="code" href="classstk_1_1Instrmnt.html" title="STK instrument abstract base class.">Instrmnt</a>
<a name="l00042"></a>00042 {
<a name="l00043"></a>00043 <span class="keyword">public</span>:
<a name="l00045"></a>00045
<a name="l00048"></a>00048 <a class="code" href="classstk_1_1VoicForm.html#9462c5ba6b627f5508c336153510de4c" title="Class constructor.">VoicForm</a>( <span class="keywordtype">void</span> );
<a name="l00049"></a>00049
<a name="l00051"></a>00051 <a class="code" href="classstk_1_1VoicForm.html#298da1434bf38e6bf83c2f9db78f01ac" title="Class destructor.">~VoicForm</a>( <span class="keywordtype">void</span> );
<a name="l00052"></a>00052
<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#d62987970200d4e9720190b884fb689d" title="Reset and clear all internal state.">clear</a>( <span class="keywordtype">void</span> );
<a name="l00055"></a>00055
<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#eb2b7ffe130e016c847cd7aebfd628ee" title="Set instrument parameters for a particular frequency.">setFrequency</a>( StkFloat frequency );
<a name="l00058"></a>00058
<a name="l00060"></a>00060 <span class="keywordtype">bool</span> <a class="code" href="classstk_1_1VoicForm.html#6ee860f09b9598c1251a9653b50139bb" title="Set instrument parameters for the given phoneme. Returns false if phoneme not found...">setPhoneme</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* phoneme );
<a name="l00061"></a>00061
<a name="l00063"></a><a class="code" href="classstk_1_1VoicForm.html#cd504d4d29134a778b08b2229dd0c0c9">00063</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#cd504d4d29134a778b08b2229dd0c0c9" title="Set the voiced component gain.">setVoiced</a>( StkFloat vGain ) { voiced_-&gt;<a class="code" href="classstk_1_1SingWave.html#c248b298dd095bd7c9ed2c84a229a55f" title="Set the gain target value.">setGainTarget</a>(vGain); };
<a name="l00064"></a>00064
<a name="l00066"></a><a class="code" href="classstk_1_1VoicForm.html#a4fa86def4ded3698f75c0e4bdbdf638">00066</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#a4fa86def4ded3698f75c0e4bdbdf638" title="Set the unvoiced component gain.">setUnVoiced</a>( StkFloat nGain ) { noiseEnv_.<a class="code" href="classstk_1_1Envelope.html#5269bc5dc1d56161ab82b677b5462a3e" title="Set the target value.">setTarget</a>(nGain); };
<a name="l00067"></a>00067
<a name="l00069"></a>00069 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#14d8323edda6e8c82ab39d633b8064a8" title="Set the sweep rate for a particular formant filter (0-3).">setFilterSweepRate</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> whichOne, StkFloat rate );
<a name="l00070"></a>00070
<a name="l00072"></a><a class="code" href="classstk_1_1VoicForm.html#2e4adfe6542f6103a8ac85c7ea2f2ce5">00072</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#2e4adfe6542f6103a8ac85c7ea2f2ce5" title="Set voiced component pitch sweep rate.">setPitchSweepRate</a>( StkFloat rate ) { voiced_-&gt;<a class="code" href="classstk_1_1SingWave.html#b80c50b3c8fc05f056221452504aa150" title="Set the sweep rate.">setSweepRate</a>(rate); };
<a name="l00073"></a>00073
<a name="l00075"></a><a class="code" href="classstk_1_1VoicForm.html#425c88ad505e260604771cfe3de6ed47">00075</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#425c88ad505e260604771cfe3de6ed47" title="Start the voice.">speak</a>( <span class="keywordtype">void</span> ) { voiced_-&gt;<a class="code" href="classstk_1_1SingWave.html#9bd638590605e5b5eb679467506e42ff" title="Start a note.">noteOn</a>(); };
<a name="l00076"></a>00076
<a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#33cacda32d42f3282312043c54b3cee7" title="Stop the voice.">quiet</a>( <span class="keywordtype">void</span> );
<a name="l00079"></a>00079
<a name="l00081"></a>00081 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#9f8431ef3c7588c0d032e821d4dd1ad9" title="Start a note with the given frequency and amplitude.">noteOn</a>( StkFloat frequency, StkFloat amplitude );
<a name="l00082"></a>00082
<a name="l00084"></a><a class="code" href="classstk_1_1VoicForm.html#b9e54927b3bec7b9727c32791bbb9b19">00084</a> <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#b9e54927b3bec7b9727c32791bbb9b19" title="Stop a note with the given amplitude (speed of decay).">noteOff</a>( StkFloat amplitude ) { this-&gt;<a class="code" href="classstk_1_1VoicForm.html#33cacda32d42f3282312043c54b3cee7" title="Stop the voice.">quiet</a>(); };
<a name="l00085"></a>00085
<a name="l00087"></a>00087 <span class="keywordtype">void</span> <a class="code" href="classstk_1_1VoicForm.html#427ca45d3e44e093c11f16e30fc2b550" title="Perform the control change specified by number and value (0.0 - 128.0).">controlChange</a>( <span class="keywordtype">int</span> number, StkFloat value );
<a name="l00088"></a>00088
<a name="l00089"></a>00089 StkFloat computeSample( <span class="keywordtype">void</span> );
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <a class="code" href="classSingWave.html">SingWave</a> *voiced_;
<a name="l00092"></a>00092 <a class="code" href="classNoise.html">Noise</a> noise_;
<a name="l00093"></a>00093 <a class="code" href="classEnvelope.html">Envelope</a> noiseEnv_;
<a name="l00094"></a>00094 <a class="code" href="classFormSwep.html">FormSwep</a> filters_[4];
<a name="l00095"></a>00095 <a class="code" href="classOnePole.html">OnePole</a> onepole_;
<a name="l00096"></a>00096 <a class="code" href="classOneZero.html">OneZero</a> onezero_;
<a name="l00097"></a>00097
<a name="l00098"></a>00098 };
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="preprocessor">#endif</span>
</pre></div><HR>
<a name="l00090"></a>00090 StkFloat <a class="code" href="classstk_1_1VoicForm.html#c12629d2730f582e405b221e1d7b6f29" title="Compute and return one output sample.">tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0 );
<a name="l00091"></a>00091
<a name="l00092"></a>00092 <span class="keyword">protected</span>:
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <a class="code" href="classstk_1_1SingWave.html" title="STK &amp;quot;singing&amp;quot; looped soundfile class.">SingWave</a> *voiced_;
<a name="l00095"></a>00095 <a class="code" href="classstk_1_1Noise.html" title="STK noise generator.">Noise</a> noise_;
<a name="l00096"></a>00096 <a class="code" href="classstk_1_1Envelope.html" title="STK linear line envelope class.">Envelope</a> noiseEnv_;
<a name="l00097"></a>00097 <a class="code" href="classstk_1_1FormSwep.html" title="STK sweepable formant filter class.">FormSwep</a> filters_[4];
<a name="l00098"></a>00098 <a class="code" href="classstk_1_1OnePole.html" title="STK one-pole filter class.">OnePole</a> onepole_;
<a name="l00099"></a>00099 <a class="code" href="classstk_1_1OneZero.html" title="STK one-zero filter class.">OneZero</a> onezero_;
<a name="l00100"></a>00100
<a name="l00101"></a>00101 };
<a name="l00102"></a>00102
<a name="l00103"></a><a class="code" href="classstk_1_1VoicForm.html#c12629d2730f582e405b221e1d7b6f29">00103</a> <span class="keyword">inline</span> StkFloat <a class="code" href="classstk_1_1VoicForm.html#c12629d2730f582e405b221e1d7b6f29" title="Compute and return one output sample.">VoicForm :: tick</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> )
<a name="l00104"></a>00104 {
<a name="l00105"></a>00105 StkFloat temp;
<a name="l00106"></a>00106 temp = onepole_.<a class="code" href="classstk_1_1OnePole.html#3c83b6d43f76bec06f11caa9de76881e" title="Input one sample to the filter and return one output.">tick</a>( onezero_.<a class="code" href="classstk_1_1OneZero.html#9f52fa395257b15cb7351c6ccb2199da" title="Input one sample to the filter and return one output.">tick</a>( voiced_-&gt;<a class="code" href="classstk_1_1SingWave.html#45136f9bf5b6f58433d4d65864d9db78" title="Compute and return one output sample.">tick</a>() ) );
<a name="l00107"></a>00107 temp += noiseEnv_.<a class="code" href="classstk_1_1Envelope.html#8de91b9caf10a03f52bd2247648c4601" title="Compute and return one output sample.">tick</a>() * noise_.<a class="code" href="classstk_1_1Noise.html#8ac40f69475eb744e803d557e8438a6d" title="Compute and return one output sample.">tick</a>();
<a name="l00108"></a>00108 lastFrame_[0] = filters_[0].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>(temp);
<a name="l00109"></a>00109 lastFrame_[0] += filters_[1].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>(temp);
<a name="l00110"></a>00110 lastFrame_[0] += filters_[2].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>(temp);
<a name="l00111"></a>00111 lastFrame_[0] += filters_[3].<a class="code" href="classstk_1_1FormSwep.html#ba0d15e1d102cb0fee0806e1bb05c774" title="Input one sample to the filter and return a reference to one output.">tick</a>(temp);
<a name="l00112"></a>00112 <span class="comment">/*</span>
<a name="l00113"></a>00113 <span class="comment"> temp += noiseEnv_.tick() * noise_.tick();</span>
<a name="l00114"></a>00114 <span class="comment"> lastFrame_[0] = filters_[0].tick(temp);</span>
<a name="l00115"></a>00115 <span class="comment"> lastFrame_[0] = filters_[1].tick(lastFrame_[0]);</span>
<a name="l00116"></a>00116 <span class="comment"> lastFrame_[0] = filters_[2].tick(lastFrame_[0]);</span>
<a name="l00117"></a>00117 <span class="comment"> lastFrame_[0] = filters_[3].tick(lastFrame_[0]);</span>
<a name="l00118"></a>00118 <span class="comment"> */</span>
<a name="l00119"></a>00119 <span class="keywordflow">return</span> lastFrame_[0];
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121
<a name="l00122"></a>00122 } <span class="comment">// stk namespace</span>
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="preprocessor">#endif</span>
</pre></div></div>
<HR>
<table>
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
<tr><td>&copy;1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
<tr><td>&copy;1995-2009 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
</table>
</BODY>

Some files were not shown because too many files have changed in this diff Show More