Mercurial > hg > vamp-website
diff code-doc/FixedTempoEstimator_8cpp-source.html @ 35:0976232e353b website
* Update for 2.1 release; add wiki link
author | cannam |
---|---|
date | Fri, 25 Sep 2009 15:40:18 +0000 |
parents | cc0be37dc9d3 |
children |
line wrap: on
line diff
--- a/code-doc/FixedTempoEstimator_8cpp-source.html Wed Sep 23 15:09:53 2009 +0000 +++ b/code-doc/FixedTempoEstimator_8cpp-source.html Fri Sep 25 15:40:18 2009 +0000 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>VampPluginSDK: FixedTempoEstimator.cpp Source File</title> +<link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> -<link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> -<!-- Generated by Doxygen 1.5.6 --> +<!-- Generated by Doxygen 1.5.8 --> <div class="navigation" id="top"> <div class="tabs"> <ul> @@ -15,6 +15,12 @@ <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> + <div class="tabs"> + <ul> + <li><a href="files.html"><span>File List</span></a></li> + <li><a href="globals.html"><span>File Members</span></a></li> + </ul> + </div> <div class="navpath"><a class="el" href="dir_35887283b966ca996e4ff77f459c38ce.html">examples</a> </div> </div> @@ -27,7 +33,7 @@ <a name="l00006"></a>00006 <span class="comment"> An API for audio analysis and feature extraction plugins.</span> <a name="l00007"></a>00007 <span class="comment"></span> <a name="l00008"></a>00008 <span class="comment"> Centre for Digital Music, Queen Mary, University of London.</span> -<a name="l00009"></a>00009 <span class="comment"> Copyright 2006-2008 Chris Cannam and QMUL.</span> +<a name="l00009"></a>00009 <span class="comment"> Copyright 2006-2009 Chris Cannam and QMUL.</span> <a name="l00010"></a>00010 <span class="comment"> </span> <a name="l00011"></a>00011 <span class="comment"> Permission is hereby granted, free of charge, to any person</span> <a name="l00012"></a>00012 <span class="comment"> obtaining a copy of this software and associated documentation</span> @@ -71,52 +77,52 @@ <a name="l00050"></a>00050 <span class="comment">// this class just avoids us having to declare any data members in the header</span> <a name="l00051"></a>00051 { <a name="l00052"></a>00052 <span class="keyword">public</span>: -<a name="l00053"></a>00053 <a class="code" href="classFixedTempoEstimator_1_1D.html#104a9b64d47eca678844584f69ca0b9d">D</a>(<span class="keywordtype">float</span> inputSampleRate); -<a name="l00054"></a>00054 <a class="code" href="classFixedTempoEstimator_1_1D.html#78a63ac8bbf342cb0405747871adf4cc">~D</a>(); +<a name="l00053"></a>00053 <a class="code" href="classFixedTempoEstimator_1_1D.html#0402c780eb7c04cca2c564881c83c877">D</a>(<span class="keywordtype">float</span> inputSampleRate); +<a name="l00054"></a>00054 <a class="code" href="classFixedTempoEstimator_1_1D.html#3fa9243f5a6b2a001e4f4bd4172444a0">~D</a>(); <a name="l00055"></a>00055 -<a name="l00056"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#dd749be18355ab1ae5c1ccbacfd2e192">00056</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#dd749be18355ab1ae5c1ccbacfd2e192">getPreferredStepSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 64; } -<a name="l00057"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#c02826f981736fc2aa5d835fa14e174d">00057</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#c02826f981736fc2aa5d835fa14e174d">getPreferredBlockSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 256; } +<a name="l00056"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#1c9af63373d85e250d56546fff83d2b6">00056</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#1c9af63373d85e250d56546fff83d2b6">getPreferredStepSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 64; } +<a name="l00057"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#39b70f63c405045398b1cd3ce7ff5d2b">00057</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#39b70f63c405045398b1cd3ce7ff5d2b">getPreferredBlockSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 256; } <a name="l00058"></a>00058 -<a name="l00059"></a>00059 <a class="code" href="classVamp_1_1PluginBase.html#3b6bb4bbd86affe1ca9deceea1aad4f8">ParameterList</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#06fcf80a9a22c4b90abbc88eb592621a">getParameterDescriptors</a>() <span class="keyword">const</span>; -<a name="l00060"></a>00060 <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#968ef2e555c81e4a3bde89d19fafb31a">getParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>) <span class="keyword">const</span>; -<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#6cafa64d4cc8aa3556bc0ce6b0c49bc4">setParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>, <span class="keywordtype">float</span> value); +<a name="l00059"></a>00059 <a class="code" href="classVamp_1_1PluginBase.html#3b6bb4bbd86affe1ca9deceea1aad4f8">ParameterList</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#8030d29905a31a20b9019e5dfc388628">getParameterDescriptors</a>() <span class="keyword">const</span>; +<a name="l00060"></a>00060 <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#3e1950da43d6c57b9e9577afb715c338">getParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>) <span class="keyword">const</span>; +<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#f66a1106a170c11da1bb24ad54a27ea9">setParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>, <span class="keywordtype">float</span> value); <a name="l00062"></a>00062 -<a name="l00063"></a>00063 <a class="code" href="classVamp_1_1Plugin.html#30f531b8fb69fac41a24e3d2a6a08ed9">OutputList</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7ce98af800f36045a0dae4b1dbed943f">getOutputDescriptors</a>() <span class="keyword">const</span>; +<a name="l00063"></a>00063 <a class="code" href="classVamp_1_1Plugin.html#30f531b8fb69fac41a24e3d2a6a08ed9">OutputList</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#833b2a87b05ff7cf2852bd37c8d4a09f">getOutputDescriptors</a>() <span class="keyword">const</span>; <a name="l00064"></a>00064 -<a name="l00065"></a>00065 <span class="keywordtype">bool</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#f0fcad4493650728babb7e341963c91d">initialise</a>(<span class="keywordtype">size_t</span> channels, <span class="keywordtype">size_t</span> stepSize, <span class="keywordtype">size_t</span> blockSize); -<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#f5ac8147bfe79371d00aba8a19c2f8fd">reset</a>(); -<a name="l00067"></a>00067 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7fac74fc9fc54f436408705d1e125e20">process</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *<span class="keyword">const</span> *, <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">RealTime</a>); -<a name="l00068"></a>00068 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7f9c3603bb3374d6936885010dbdd82b">getRemainingFeatures</a>(); +<a name="l00065"></a>00065 <span class="keywordtype">bool</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#c15e4b26e8a7bc4b53b04bffbe46d65a">initialise</a>(<span class="keywordtype">size_t</span> channels, <span class="keywordtype">size_t</span> stepSize, <span class="keywordtype">size_t</span> blockSize); +<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#e2188bc79ddc978b548267a38329527b">reset</a>(); +<a name="l00067"></a>00067 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#80c7b0f36183d0b595ff482e9096eca1">process</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *<span class="keyword">const</span> *, <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">RealTime</a>); +<a name="l00068"></a>00068 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#0023f5babc813266d60b7916faf019ff">getRemainingFeatures</a>(); <a name="l00069"></a>00069 <a name="l00070"></a>00070 <span class="keyword">private</span>: -<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#4f2cbc11fba5bc8af3fd2a0078156091">calculate</a>(); -<a name="l00072"></a>00072 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#20389ba1515f6ce4181d3f41e5c4f347">assembleFeatures</a>(); +<a name="l00071"></a>00071 <span class="keywordtype">void</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#5f89ac783061563c73dc684ea073cde6">calculate</a>(); +<a name="l00072"></a>00072 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#29ca062e20df30685c5478b7a68a9a9b">assembleFeatures</a>(); <a name="l00073"></a>00073 -<a name="l00074"></a>00074 <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(<span class="keywordtype">int</span>); -<a name="l00075"></a>00075 <span class="keywordtype">int</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#c6a75212293fc855de6ed0c6581a0fb9">tempo2lag</a>(<span class="keywordtype">float</span>); +<a name="l00074"></a>00074 <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(<span class="keywordtype">int</span>); +<a name="l00075"></a>00075 <span class="keywordtype">int</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#406aacbd334ef8c4ae40ea8280918f97">tempo2lag</a>(<span class="keywordtype">float</span>); <a name="l00076"></a>00076 -<a name="l00077"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">00077</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>; -<a name="l00078"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">00078</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>; -<a name="l00079"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">00079</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a>; +<a name="l00077"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">00077</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>; +<a name="l00078"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">00078</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>; +<a name="l00079"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">00079</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a>; <a name="l00080"></a>00080 -<a name="l00081"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#768fdbb62e4b21a39897963fdbd486ed">00081</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#768fdbb62e4b21a39897963fdbd486ed">m_minbpm</a>; -<a name="l00082"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#33e8d045b222addc6173b50df2553ba8">00082</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#33e8d045b222addc6173b50df2553ba8">m_maxbpm</a>; -<a name="l00083"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#ca506973452865d436e07462eabdebad">00083</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#ca506973452865d436e07462eabdebad">m_maxdflen</a>; +<a name="l00081"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0d0e9ff333c6e0e85d2069b730f0f1c2">00081</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#0d0e9ff333c6e0e85d2069b730f0f1c2">m_minbpm</a>; +<a name="l00082"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#42f27eb3f218cf57c71b278d5ffd2d8d">00082</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#42f27eb3f218cf57c71b278d5ffd2d8d">m_maxbpm</a>; +<a name="l00083"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#fd6ed6bd0ccf828938f3a995757de3b8">00083</a> <span class="keywordtype">float</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#fd6ed6bd0ccf828938f3a995757de3b8">m_maxdflen</a>; <a name="l00084"></a>00084 -<a name="l00085"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">00085</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>; +<a name="l00085"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">00085</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>; <a name="l00086"></a>00086 -<a name="l00087"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">00087</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>; -<a name="l00088"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">00088</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>; -<a name="l00089"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">00089</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>; -<a name="l00090"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">00090</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>; -<a name="l00091"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">00091</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>; -<a name="l00092"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">00092</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; +<a name="l00087"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">00087</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>; +<a name="l00088"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">00088</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>; +<a name="l00089"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">00089</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>; +<a name="l00090"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">00090</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>; +<a name="l00091"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">00091</a> <span class="keywordtype">float</span> *<a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>; +<a name="l00092"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">00092</a> <span class="keywordtype">size_t</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <a name="l00093"></a>00093 -<a name="l00094"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">00094</a> <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">Vamp::RealTime</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a>; -<a name="l00095"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#bacd5ff19c301020efb99c03136b849a">00095</a> <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">Vamp::RealTime</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#bacd5ff19c301020efb99c03136b849a">m_lasttime</a>; +<a name="l00094"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">00094</a> <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">Vamp::RealTime</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a>; +<a name="l00095"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0043d3c082b20a1506ecf3fbaac5abf8">00095</a> <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">Vamp::RealTime</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#0043d3c082b20a1506ecf3fbaac5abf8">m_lasttime</a>; <a name="l00096"></a>00096 }; <a name="l00097"></a>00097 -<a name="l00098"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#104a9b64d47eca678844584f69ca0b9d">00098</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#104a9b64d47eca678844584f69ca0b9d">FixedTempoEstimator::D::D</a>(<span class="keywordtype">float</span> inputSampleRate) : +<a name="l00098"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0402c780eb7c04cca2c564881c83c877">00098</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#0402c780eb7c04cca2c564881c83c877">FixedTempoEstimator::D::D</a>(<span class="keywordtype">float</span> inputSampleRate) : <a name="l00099"></a>00099 m_inputSampleRate(inputSampleRate), <a name="l00100"></a>00100 m_stepSize(0), <a name="l00101"></a>00101 m_blockSize(0), @@ -132,71 +138,71 @@ <a name="l00111"></a>00111 { <a name="l00112"></a>00112 } <a name="l00113"></a>00113 -<a name="l00114"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#78a63ac8bbf342cb0405747871adf4cc">00114</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#78a63ac8bbf342cb0405747871adf4cc">FixedTempoEstimator::D::~D</a>() +<a name="l00114"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#3fa9243f5a6b2a001e4f4bd4172444a0">00114</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#3fa9243f5a6b2a001e4f4bd4172444a0">FixedTempoEstimator::D::~D</a>() <a name="l00115"></a>00115 { -<a name="l00116"></a>00116 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>; -<a name="l00117"></a>00117 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>; -<a name="l00118"></a>00118 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>; -<a name="l00119"></a>00119 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>; -<a name="l00120"></a>00120 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>; +<a name="l00116"></a>00116 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>; +<a name="l00117"></a>00117 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>; +<a name="l00118"></a>00118 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>; +<a name="l00119"></a>00119 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>; +<a name="l00120"></a>00120 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>; <a name="l00121"></a>00121 } <a name="l00122"></a>00122 <a name="l00123"></a>00123 <a class="code" href="classVamp_1_1PluginBase.html#3b6bb4bbd86affe1ca9deceea1aad4f8">FixedTempoEstimator::ParameterList</a> -<a name="l00124"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#06fcf80a9a22c4b90abbc88eb592621a">00124</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#06fcf80a9a22c4b90abbc88eb592621a">FixedTempoEstimator::D::getParameterDescriptors</a>()<span class="keyword"> const</span> +<a name="l00124"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#8030d29905a31a20b9019e5dfc388628">00124</a> <a class="code" href="classFixedTempoEstimator.html#e157465a4e07d180bab05b5c3a4d8987" title="Get the controllable parameters of this plugin.">FixedTempoEstimator::D::getParameterDescriptors</a>()<span class="keyword"> const</span> <a name="l00125"></a>00125 <span class="keyword"></span>{ <a name="l00126"></a>00126 <a class="code" href="classVamp_1_1PluginBase.html#3b6bb4bbd86affe1ca9deceea1aad4f8">ParameterList</a> list; <a name="l00127"></a>00127 <a name="l00128"></a>00128 <a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html">ParameterDescriptor</a> d; -<a name="l00129"></a>00129 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#116fd9f0dc94c2bc4bbc60b5443c598c" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"minbpm"</span>; -<a name="l00130"></a>00130 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0ecebb94fb4ada4aad2640e20aa57084" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Minimum estimated tempo"</span>; -<a name="l00131"></a>00131 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#780ddad41e433d85c82f9ea4d959cbaf" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Minimum beat-per-minute value which the tempo estimator is able to return"</span>; -<a name="l00132"></a>00132 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#3bc3df322e4c02e17e96bc6d44982d7b" title="The unit of the parameter, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; -<a name="l00133"></a>00133 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b3e4d84f5bc199eea8b642b27e425ec8" title="The minimum value of the parameter.">minValue</a> = 10; -<a name="l00134"></a>00134 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b934b20dd708228a0e3c2811a3e2cec4" title="The maximum value of the parameter.">maxValue</a> = 360; -<a name="l00135"></a>00135 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#ec4ef77451ec02193ecc4a0856673fbc" title="The default value of the parameter.">defaultValue</a> = 50; -<a name="l00136"></a>00136 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#7c556d58d552f737ee5a34efdf7f9425" title="True if the parameter values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; +<a name="l00129"></a>00129 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b34ea7114875647281ac031021e45d06" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"minbpm"</span>; +<a name="l00130"></a>00130 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#2c1000e78a6414dab6c5af5201053741" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Minimum estimated tempo"</span>; +<a name="l00131"></a>00131 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0cbc8fe35b0d15fd8e19de2ade33d147" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Minimum beat-per-minute value which the tempo estimator is able to return"</span>; +<a name="l00132"></a>00132 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#e0d6c74d915b99bacb55a0622e0ecb1c" title="The unit of the parameter, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; +<a name="l00133"></a>00133 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#18221c4bb5c57332fe6a1393c5ec3b6d" title="The minimum value of the parameter.">minValue</a> = 10; +<a name="l00134"></a>00134 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#52e0c1f0acfc7ff8622ca1ccc97ad69d" title="The maximum value of the parameter.">maxValue</a> = 360; +<a name="l00135"></a>00135 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#4b36674815777f54846bb7033205bbea" title="The default value of the parameter.">defaultValue</a> = 50; +<a name="l00136"></a>00136 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#6e76a119dafbdd26351521ec486550ea" title="True if the parameter values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; <a name="l00137"></a>00137 list.push_back(d); <a name="l00138"></a>00138 -<a name="l00139"></a>00139 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#116fd9f0dc94c2bc4bbc60b5443c598c" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"maxbpm"</span>; -<a name="l00140"></a>00140 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0ecebb94fb4ada4aad2640e20aa57084" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Maximum estimated tempo"</span>; -<a name="l00141"></a>00141 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#780ddad41e433d85c82f9ea4d959cbaf" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Maximum beat-per-minute value which the tempo estimator is able to return"</span>; -<a name="l00142"></a>00142 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#ec4ef77451ec02193ecc4a0856673fbc" title="The default value of the parameter.">defaultValue</a> = 190; +<a name="l00139"></a>00139 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b34ea7114875647281ac031021e45d06" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"maxbpm"</span>; +<a name="l00140"></a>00140 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#2c1000e78a6414dab6c5af5201053741" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Maximum estimated tempo"</span>; +<a name="l00141"></a>00141 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0cbc8fe35b0d15fd8e19de2ade33d147" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Maximum beat-per-minute value which the tempo estimator is able to return"</span>; +<a name="l00142"></a>00142 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#4b36674815777f54846bb7033205bbea" title="The default value of the parameter.">defaultValue</a> = 190; <a name="l00143"></a>00143 list.push_back(d); <a name="l00144"></a>00144 -<a name="l00145"></a>00145 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#116fd9f0dc94c2bc4bbc60b5443c598c" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"maxdflen"</span>; -<a name="l00146"></a>00146 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0ecebb94fb4ada4aad2640e20aa57084" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Input duration to study"</span>; -<a name="l00147"></a>00147 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#780ddad41e433d85c82f9ea4d959cbaf" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Length of audio input, in seconds, which should be taken into account when estimating tempo. There is no need to supply the plugin with any further input once this time has elapsed since the start of the audio. The tempo estimator may use only the first part of this, up to eight times the slowest beat duration: increasing this value further than that is unlikely to improve results."</span>; -<a name="l00148"></a>00148 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#3bc3df322e4c02e17e96bc6d44982d7b" title="The unit of the parameter, in human-readable form.">unit</a> = <span class="stringliteral">"s"</span>; -<a name="l00149"></a>00149 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b3e4d84f5bc199eea8b642b27e425ec8" title="The minimum value of the parameter.">minValue</a> = 2; -<a name="l00150"></a>00150 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b934b20dd708228a0e3c2811a3e2cec4" title="The maximum value of the parameter.">maxValue</a> = 40; -<a name="l00151"></a>00151 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#ec4ef77451ec02193ecc4a0856673fbc" title="The default value of the parameter.">defaultValue</a> = 10; +<a name="l00145"></a>00145 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#b34ea7114875647281ac031021e45d06" title="The name of the parameter, in computer-usable form.">identifier</a> = <span class="stringliteral">"maxdflen"</span>; +<a name="l00146"></a>00146 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#2c1000e78a6414dab6c5af5201053741" title="The human-readable name of the parameter.">name</a> = <span class="stringliteral">"Input duration to study"</span>; +<a name="l00147"></a>00147 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#0cbc8fe35b0d15fd8e19de2ade33d147" title="A human-readable short text describing the parameter.">description</a> = <span class="stringliteral">"Length of audio input, in seconds, which should be taken into account when estimating tempo. There is no need to supply the plugin with any further input once this time has elapsed since the start of the audio. The tempo estimator may use only the first part of this, up to eight times the slowest beat duration: increasing this value further than that is unlikely to improve results."</span>; +<a name="l00148"></a>00148 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#e0d6c74d915b99bacb55a0622e0ecb1c" title="The unit of the parameter, in human-readable form.">unit</a> = <span class="stringliteral">"s"</span>; +<a name="l00149"></a>00149 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#18221c4bb5c57332fe6a1393c5ec3b6d" title="The minimum value of the parameter.">minValue</a> = 2; +<a name="l00150"></a>00150 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#52e0c1f0acfc7ff8622ca1ccc97ad69d" title="The maximum value of the parameter.">maxValue</a> = 40; +<a name="l00151"></a>00151 d.<a class="code" href="structVamp_1_1PluginBase_1_1ParameterDescriptor.html#4b36674815777f54846bb7033205bbea" title="The default value of the parameter.">defaultValue</a> = 10; <a name="l00152"></a>00152 list.push_back(d); <a name="l00153"></a>00153 <a name="l00154"></a>00154 <span class="keywordflow">return</span> list; <a name="l00155"></a>00155 } <a name="l00156"></a>00156 <a name="l00157"></a>00157 <span class="keywordtype">float</span> -<a name="l00158"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#968ef2e555c81e4a3bde89d19fafb31a">00158</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#968ef2e555c81e4a3bde89d19fafb31a">FixedTempoEstimator::D::getParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>)<span class="keyword"> const</span> +<a name="l00158"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#3e1950da43d6c57b9e9577afb715c338">00158</a> <a class="code" href="classFixedTempoEstimator.html#2030b05fb1228b30ace16200780c9152" title="Get the value of a named parameter.">FixedTempoEstimator::D::getParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>)<span class="keyword"> const</span> <a name="l00159"></a>00159 <span class="keyword"></span>{ <a name="l00160"></a>00160 <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"minbpm"</span>) { -<a name="l00161"></a>00161 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#768fdbb62e4b21a39897963fdbd486ed">m_minbpm</a>; +<a name="l00161"></a>00161 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#0d0e9ff333c6e0e85d2069b730f0f1c2">m_minbpm</a>; <a name="l00162"></a>00162 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"maxbpm"</span>) { -<a name="l00163"></a>00163 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#33e8d045b222addc6173b50df2553ba8">m_maxbpm</a>; +<a name="l00163"></a>00163 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#42f27eb3f218cf57c71b278d5ffd2d8d">m_maxbpm</a>; <a name="l00164"></a>00164 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"maxdflen"</span>) { -<a name="l00165"></a>00165 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#ca506973452865d436e07462eabdebad">m_maxdflen</a>; +<a name="l00165"></a>00165 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator_1_1D.html#fd6ed6bd0ccf828938f3a995757de3b8">m_maxdflen</a>; <a name="l00166"></a>00166 } <a name="l00167"></a>00167 <span class="keywordflow">return</span> 0.f; <a name="l00168"></a>00168 } <a name="l00169"></a>00169 <a name="l00170"></a>00170 <span class="keywordtype">void</span> -<a name="l00171"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#6cafa64d4cc8aa3556bc0ce6b0c49bc4">00171</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#6cafa64d4cc8aa3556bc0ce6b0c49bc4">FixedTempoEstimator::D::setParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>, <span class="keywordtype">float</span> value) +<a name="l00171"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#f66a1106a170c11da1bb24ad54a27ea9">00171</a> <a class="code" href="classFixedTempoEstimator.html#8a5a413025384cf451c64d2c2ce13a75" title="Set a named parameter.">FixedTempoEstimator::D::setParameter</a>(<span class="keywordtype">string</span> <span class="keywordtype">id</span>, <span class="keywordtype">float</span> value) <a name="l00172"></a>00172 { <a name="l00173"></a>00173 <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"minbpm"</span>) { -<a name="l00174"></a>00174 <a class="code" href="classFixedTempoEstimator_1_1D.html#768fdbb62e4b21a39897963fdbd486ed">m_minbpm</a> = value; +<a name="l00174"></a>00174 <a class="code" href="classFixedTempoEstimator_1_1D.html#0d0e9ff333c6e0e85d2069b730f0f1c2">m_minbpm</a> = value; <a name="l00175"></a>00175 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"maxbpm"</span>) { -<a name="l00176"></a>00176 <a class="code" href="classFixedTempoEstimator_1_1D.html#33e8d045b222addc6173b50df2553ba8">m_maxbpm</a> = value; +<a name="l00176"></a>00176 <a class="code" href="classFixedTempoEstimator_1_1D.html#42f27eb3f218cf57c71b278d5ffd2d8d">m_maxbpm</a> = value; <a name="l00177"></a>00177 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == <span class="stringliteral">"maxdflen"</span>) { -<a name="l00178"></a>00178 <a class="code" href="classFixedTempoEstimator_1_1D.html#ca506973452865d436e07462eabdebad">m_maxdflen</a> = value; +<a name="l00178"></a>00178 <a class="code" href="classFixedTempoEstimator_1_1D.html#fd6ed6bd0ccf828938f3a995757de3b8">m_maxdflen</a> = value; <a name="l00179"></a>00179 } <a name="l00180"></a>00180 } <a name="l00181"></a>00181 @@ -207,143 +213,143 @@ <a name="l00186"></a><a class="code" href="FixedTempoEstimator_8cpp.html#5b284021783d79785d46b043b458368d">00186</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="FixedTempoEstimator_8cpp.html#5b284021783d79785d46b043b458368d">FilteredACFOutput</a> = 4; <a name="l00187"></a>00187 <a name="l00188"></a>00188 <a class="code" href="classVamp_1_1Plugin.html#30f531b8fb69fac41a24e3d2a6a08ed9">FixedTempoEstimator::OutputList</a> -<a name="l00189"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#7ce98af800f36045a0dae4b1dbed943f">00189</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7ce98af800f36045a0dae4b1dbed943f">FixedTempoEstimator::D::getOutputDescriptors</a>()<span class="keyword"> const</span> +<a name="l00189"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#833b2a87b05ff7cf2852bd37c8d4a09f">00189</a> <a class="code" href="classFixedTempoEstimator.html#83121c205a723fe6297e2bf8870622a4" title="Get the outputs of this plugin.">FixedTempoEstimator::D::getOutputDescriptors</a>()<span class="keyword"> const</span> <a name="l00190"></a>00190 <span class="keyword"></span>{ <a name="l00191"></a>00191 <a class="code" href="classVamp_1_1Plugin.html#30f531b8fb69fac41a24e3d2a6a08ed9">OutputList</a> list; <a name="l00192"></a>00192 <a name="l00193"></a>00193 <a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html">OutputDescriptor</a> d; -<a name="l00194"></a>00194 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e2c893ddb1860589517ab7eaa989a18b" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"tempo"</span>; -<a name="l00195"></a>00195 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b824b2b34ee50f897a30901c620e8d87" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Tempo"</span>; -<a name="l00196"></a>00196 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f9b4fe8f78e7126ead820ba5dc55efd1" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Estimated tempo"</span>; -<a name="l00197"></a>00197 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#a057a8833fa037f06ac9f7b85b85d5e4" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; -<a name="l00198"></a>00198 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f0e577e1a256ff6eed6ea42133fec77d" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = <span class="keyword">true</span>; -<a name="l00199"></a>00199 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#fdd006959a995e40ef7d565a3a4df6dc" title="The number of values per result of the output.">binCount</a> = 1; -<a name="l00200"></a>00200 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e9ccb65f99f477096b65dd031f4c5e31" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">false</span>; -<a name="l00201"></a>00201 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#1b4858928d23bfd7d5bc557c82a83fb4" title="True if the output values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; -<a name="l00202"></a>00202 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0d1194980d44e31b25ef3b4b070d6b5d" title="Positioning in time of the output results.">sampleType</a> = <a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#bffa9ed50cd756df70fd51f0355f448cdea995a737867f7b22b52f1c43c5432e" title="Results are unevenly spaced and have individual timestamps.">OutputDescriptor::VariableSampleRate</a>; -<a name="l00203"></a>00203 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#dd0cbbdfa9c91764037c39365b1d42af" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>; -<a name="l00204"></a>00204 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b0d7cc6ab19e53b5bd12ee234f549ea3" title="True if the returned results for this output are known to have a duration field.">hasDuration</a> = <span class="keyword">true</span>; <span class="comment">// our returned tempo spans a certain range</span> +<a name="l00194"></a>00194 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#2e6f77bcb12d4c95da25348ac85b8696" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"tempo"</span>; +<a name="l00195"></a>00195 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0992e05ea70425878365ba85663400a7" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Tempo"</span>; +<a name="l00196"></a>00196 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#8b44602d8ccea8bb862fd766e74efa1c" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Estimated tempo"</span>; +<a name="l00197"></a>00197 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#52f4b3d8d7070cc9c5ab4aa6ff0c01a0" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; +<a name="l00198"></a>00198 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0653d3a85fdc226e60fd5e612b399e0c" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = <span class="keyword">true</span>; +<a name="l00199"></a>00199 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#238a4781ebb4151832cbf521feb0fedc" title="The number of values per result of the output.">binCount</a> = 1; +<a name="l00200"></a>00200 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#4b8d0d88bee613709e91b48402e28c8e" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">false</span>; +<a name="l00201"></a>00201 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#43673cd31b2b65af427a8e8b8746b6e8" title="True if the output values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; +<a name="l00202"></a>00202 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#3cd2e0b7a6da19c32bbb6809a83d9adf" title="Positioning in time of the output results.">sampleType</a> = <a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#bffa9ed50cd756df70fd51f0355f448c95be613508cf4009a7dc2f70ddf99547" title="Results are unevenly spaced and have individual timestamps.">OutputDescriptor::VariableSampleRate</a>; +<a name="l00203"></a>00203 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e49cc87dcb0f09b59feb85d2b78e80ef" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>; +<a name="l00204"></a>00204 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#93cc15894c89a142741c2bd088cdd6af" title="True if the returned results for this output are known to have a duration field.">hasDuration</a> = <span class="keyword">true</span>; <span class="comment">// our returned tempo spans a certain range</span> <a name="l00205"></a>00205 list.push_back(d); <a name="l00206"></a>00206 -<a name="l00207"></a>00207 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e2c893ddb1860589517ab7eaa989a18b" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"candidates"</span>; -<a name="l00208"></a>00208 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b824b2b34ee50f897a30901c620e8d87" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Tempo candidates"</span>; -<a name="l00209"></a>00209 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f9b4fe8f78e7126ead820ba5dc55efd1" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Possible tempo estimates, one per bin with the most likely in the first bin"</span>; -<a name="l00210"></a>00210 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#a057a8833fa037f06ac9f7b85b85d5e4" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; -<a name="l00211"></a>00211 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f0e577e1a256ff6eed6ea42133fec77d" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = <span class="keyword">false</span>; +<a name="l00207"></a>00207 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#2e6f77bcb12d4c95da25348ac85b8696" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"candidates"</span>; +<a name="l00208"></a>00208 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0992e05ea70425878365ba85663400a7" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Tempo candidates"</span>; +<a name="l00209"></a>00209 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#8b44602d8ccea8bb862fd766e74efa1c" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Possible tempo estimates, one per bin with the most likely in the first bin"</span>; +<a name="l00210"></a>00210 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#52f4b3d8d7070cc9c5ab4aa6ff0c01a0" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"bpm"</span>; +<a name="l00211"></a>00211 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0653d3a85fdc226e60fd5e612b399e0c" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = <span class="keyword">false</span>; <a name="l00212"></a>00212 list.push_back(d); <a name="l00213"></a>00213 -<a name="l00214"></a>00214 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e2c893ddb1860589517ab7eaa989a18b" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"detectionfunction"</span>; -<a name="l00215"></a>00215 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b824b2b34ee50f897a30901c620e8d87" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Detection Function"</span>; -<a name="l00216"></a>00216 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f9b4fe8f78e7126ead820ba5dc55efd1" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Onset detection function"</span>; -<a name="l00217"></a>00217 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#a057a8833fa037f06ac9f7b85b85d5e4" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">""</span>; -<a name="l00218"></a>00218 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f0e577e1a256ff6eed6ea42133fec77d" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = 1; -<a name="l00219"></a>00219 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#fdd006959a995e40ef7d565a3a4df6dc" title="The number of values per result of the output.">binCount</a> = 1; -<a name="l00220"></a>00220 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e9ccb65f99f477096b65dd031f4c5e31" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">true</span>; -<a name="l00221"></a>00221 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#c9f5924c0be7571bba8e7ae7e7a921f4" title="Minimum value of the results in the output.">minValue</a> = 0.0; -<a name="l00222"></a>00222 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#907b4e8fbb48a46ac5a05f880d72719f" title="Maximum value of the results in the output.">maxValue</a> = 1.0; -<a name="l00223"></a>00223 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#1b4858928d23bfd7d5bc557c82a83fb4" title="True if the output values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; -<a name="l00224"></a>00224 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#3bed37153067b625b95acb40b60dbf0b" title="Quantization resolution of the output values (e.g.">quantizeStep</a> = 0.0; -<a name="l00225"></a>00225 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0d1194980d44e31b25ef3b4b070d6b5d" title="Positioning in time of the output results.">sampleType</a> = <a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#bffa9ed50cd756df70fd51f0355f448c4c74bd2fc96dfe2815623f94b40e5629" title="Results are evenly spaced in time (sampleRate specified below).">OutputDescriptor::FixedSampleRate</a>; -<a name="l00226"></a>00226 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>) { -<a name="l00227"></a>00227 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#dd0cbbdfa9c91764037c39365b1d42af" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a> / <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>; +<a name="l00214"></a>00214 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#2e6f77bcb12d4c95da25348ac85b8696" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"detectionfunction"</span>; +<a name="l00215"></a>00215 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0992e05ea70425878365ba85663400a7" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Detection Function"</span>; +<a name="l00216"></a>00216 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#8b44602d8ccea8bb862fd766e74efa1c" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Onset detection function"</span>; +<a name="l00217"></a>00217 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#52f4b3d8d7070cc9c5ab4aa6ff0c01a0" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">""</span>; +<a name="l00218"></a>00218 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0653d3a85fdc226e60fd5e612b399e0c" title="True if the output has the same number of values per sample for every output sample...">hasFixedBinCount</a> = 1; +<a name="l00219"></a>00219 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#238a4781ebb4151832cbf521feb0fedc" title="The number of values per result of the output.">binCount</a> = 1; +<a name="l00220"></a>00220 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#4b8d0d88bee613709e91b48402e28c8e" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">true</span>; +<a name="l00221"></a>00221 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#1fc73936c43014393918fe6cce46ac6d" title="Minimum value of the results in the output.">minValue</a> = 0.0; +<a name="l00222"></a>00222 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0df82ce301ad1bc337a272cb730426cf" title="Maximum value of the results in the output.">maxValue</a> = 1.0; +<a name="l00223"></a>00223 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#43673cd31b2b65af427a8e8b8746b6e8" title="True if the output values are quantized to a particular resolution.">isQuantized</a> = <span class="keyword">false</span>; +<a name="l00224"></a>00224 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#674cd333889514cf8408c18762fede12" title="Quantization resolution of the output values (e.g.">quantizeStep</a> = 0.0; +<a name="l00225"></a>00225 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#3cd2e0b7a6da19c32bbb6809a83d9adf" title="Positioning in time of the output results.">sampleType</a> = <a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#bffa9ed50cd756df70fd51f0355f448cecfd91605a3f11c716e822dc696c27a3" title="Results are evenly spaced in time (sampleRate specified below).">OutputDescriptor::FixedSampleRate</a>; +<a name="l00226"></a>00226 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>) { +<a name="l00227"></a>00227 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e49cc87dcb0f09b59feb85d2b78e80ef" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a> / <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>; <a name="l00228"></a>00228 } <span class="keywordflow">else</span> { -<a name="l00229"></a>00229 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#dd0cbbdfa9c91764037c39365b1d42af" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a> / (<a class="code" href="classFixedTempoEstimator_1_1D.html#c02826f981736fc2aa5d835fa14e174d">getPreferredBlockSize</a>()/2); +<a name="l00229"></a>00229 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e49cc87dcb0f09b59feb85d2b78e80ef" title="Sample rate of the output results, as samples per second.">sampleRate</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a> / (<a class="code" href="classFixedTempoEstimator_1_1D.html#39b70f63c405045398b1cd3ce7ff5d2b">getPreferredBlockSize</a>()/2); <a name="l00230"></a>00230 } -<a name="l00231"></a>00231 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b0d7cc6ab19e53b5bd12ee234f549ea3" title="True if the returned results for this output are known to have a duration field.">hasDuration</a> = <span class="keyword">false</span>; +<a name="l00231"></a>00231 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#93cc15894c89a142741c2bd088cdd6af" title="True if the returned results for this output are known to have a duration field.">hasDuration</a> = <span class="keyword">false</span>; <a name="l00232"></a>00232 list.push_back(d); <a name="l00233"></a>00233 -<a name="l00234"></a>00234 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e2c893ddb1860589517ab7eaa989a18b" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"acf"</span>; -<a name="l00235"></a>00235 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b824b2b34ee50f897a30901c620e8d87" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Autocorrelation Function"</span>; -<a name="l00236"></a>00236 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f9b4fe8f78e7126ead820ba5dc55efd1" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Autocorrelation of onset detection function"</span>; -<a name="l00237"></a>00237 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e9ccb65f99f477096b65dd031f4c5e31" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">false</span>; -<a name="l00238"></a>00238 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#a057a8833fa037f06ac9f7b85b85d5e4" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"r"</span>; +<a name="l00234"></a>00234 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#2e6f77bcb12d4c95da25348ac85b8696" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"acf"</span>; +<a name="l00235"></a>00235 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0992e05ea70425878365ba85663400a7" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Autocorrelation Function"</span>; +<a name="l00236"></a>00236 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#8b44602d8ccea8bb862fd766e74efa1c" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Autocorrelation of onset detection function"</span>; +<a name="l00237"></a>00237 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#4b8d0d88bee613709e91b48402e28c8e" title="True if the results in each output bin fall within a fixed numeric range (minimum...">hasKnownExtents</a> = <span class="keyword">false</span>; +<a name="l00238"></a>00238 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#52f4b3d8d7070cc9c5ab4aa6ff0c01a0" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"r"</span>; <a name="l00239"></a>00239 list.push_back(d); <a name="l00240"></a>00240 -<a name="l00241"></a>00241 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#e2c893ddb1860589517ab7eaa989a18b" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"filtered_acf"</span>; -<a name="l00242"></a>00242 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#b824b2b34ee50f897a30901c620e8d87" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Filtered Autocorrelation"</span>; -<a name="l00243"></a>00243 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#f9b4fe8f78e7126ead820ba5dc55efd1" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Filtered autocorrelation of onset detection function"</span>; -<a name="l00244"></a>00244 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#a057a8833fa037f06ac9f7b85b85d5e4" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"r"</span>; +<a name="l00241"></a>00241 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#2e6f77bcb12d4c95da25348ac85b8696" title="The name of the output, in computer-usable form.">identifier</a> = <span class="stringliteral">"filtered_acf"</span>; +<a name="l00242"></a>00242 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#0992e05ea70425878365ba85663400a7" title="The human-readable name of the output.">name</a> = <span class="stringliteral">"Filtered Autocorrelation"</span>; +<a name="l00243"></a>00243 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#8b44602d8ccea8bb862fd766e74efa1c" title="A human-readable short text describing the output.">description</a> = <span class="stringliteral">"Filtered autocorrelation of onset detection function"</span>; +<a name="l00244"></a>00244 d.<a class="code" href="structVamp_1_1Plugin_1_1OutputDescriptor.html#52f4b3d8d7070cc9c5ab4aa6ff0c01a0" title="The unit of the output, in human-readable form.">unit</a> = <span class="stringliteral">"r"</span>; <a name="l00245"></a>00245 list.push_back(d); <a name="l00246"></a>00246 <a name="l00247"></a>00247 <span class="keywordflow">return</span> list; <a name="l00248"></a>00248 } <a name="l00249"></a>00249 <a name="l00250"></a>00250 <span class="keywordtype">bool</span> -<a name="l00251"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#f0fcad4493650728babb7e341963c91d">00251</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#f0fcad4493650728babb7e341963c91d">FixedTempoEstimator::D::initialise</a>(<span class="keywordtype">size_t</span>, <span class="keywordtype">size_t</span> stepSize, <span class="keywordtype">size_t</span> blockSize) +<a name="l00251"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#c15e4b26e8a7bc4b53b04bffbe46d65a">00251</a> <a class="code" href="classFixedTempoEstimator.html#a7500a4ffbc4653baaf5101defdb37f5" title="Initialise a plugin to prepare it for use with the given number of input channels...">FixedTempoEstimator::D::initialise</a>(<span class="keywordtype">size_t</span>, <span class="keywordtype">size_t</span> stepSize, <span class="keywordtype">size_t</span> blockSize) <a name="l00252"></a>00252 { -<a name="l00253"></a>00253 <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a> = stepSize; -<a name="l00254"></a>00254 <a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a> = blockSize; +<a name="l00253"></a>00253 <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a> = stepSize; +<a name="l00254"></a>00254 <a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a> = blockSize; <a name="l00255"></a>00255 -<a name="l00256"></a>00256 <span class="keywordtype">float</span> dfLengthSecs = <a class="code" href="classFixedTempoEstimator_1_1D.html#ca506973452865d436e07462eabdebad">m_maxdflen</a>; -<a name="l00257"></a>00257 <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a> = (dfLengthSecs * <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>; +<a name="l00256"></a>00256 <span class="keywordtype">float</span> dfLengthSecs = <a class="code" href="classFixedTempoEstimator_1_1D.html#fd6ed6bd0ccf828938f3a995757de3b8">m_maxdflen</a>; +<a name="l00257"></a>00257 <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a> = (dfLengthSecs * <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>; <a name="l00258"></a>00258 -<a name="l00259"></a>00259 <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a>/2]; -<a name="l00260"></a>00260 <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>]; +<a name="l00259"></a>00259 <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a>/2]; +<a name="l00260"></a>00260 <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[<a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>]; <a name="l00261"></a>00261 -<a name="l00262"></a>00262 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a>/2; ++i) { -<a name="l00263"></a>00263 <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>[i] = 0.f; +<a name="l00262"></a>00262 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a>/2; ++i) { +<a name="l00263"></a>00263 <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>[i] = 0.f; <a name="l00264"></a>00264 } -<a name="l00265"></a>00265 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>; ++i) { -<a name="l00266"></a>00266 <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[i] = 0.f; +<a name="l00265"></a>00265 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>; ++i) { +<a name="l00266"></a>00266 <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[i] = 0.f; <a name="l00267"></a>00267 } <a name="l00268"></a>00268 -<a name="l00269"></a>00269 <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> = 0; +<a name="l00269"></a>00269 <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> = 0; <a name="l00270"></a>00270 <a name="l00271"></a>00271 <span class="keywordflow">return</span> <span class="keyword">true</span>; <a name="l00272"></a>00272 } <a name="l00273"></a>00273 <a name="l00274"></a>00274 <span class="keywordtype">void</span> -<a name="l00275"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#f5ac8147bfe79371d00aba8a19c2f8fd">00275</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#f5ac8147bfe79371d00aba8a19c2f8fd">FixedTempoEstimator::D::reset</a>() +<a name="l00275"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#e2188bc79ddc978b548267a38329527b">00275</a> <a class="code" href="classFixedTempoEstimator.html#c41708397255400c6682fee6c1b3d45f" title="Reset the plugin after use, to prepare it for another clean run.">FixedTempoEstimator::D::reset</a>() <a name="l00276"></a>00276 { -<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!<a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>) <span class="keywordflow">return</span>; +<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!<a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>) <span class="keywordflow">return</span>; <a name="l00278"></a>00278 -<a name="l00279"></a>00279 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a>/2; ++i) { -<a name="l00280"></a>00280 <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>[i] = 0.f; +<a name="l00279"></a>00279 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a>/2; ++i) { +<a name="l00280"></a>00280 <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>[i] = 0.f; <a name="l00281"></a>00281 } -<a name="l00282"></a>00282 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>; ++i) { -<a name="l00283"></a>00283 <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[i] = 0.f; +<a name="l00282"></a>00282 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>; ++i) { +<a name="l00283"></a>00283 <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[i] = 0.f; <a name="l00284"></a>00284 } <a name="l00285"></a>00285 -<a name="l00286"></a>00286 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>; -<a name="l00287"></a>00287 <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a> = 0; +<a name="l00286"></a>00286 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>; +<a name="l00287"></a>00287 <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a> = 0; <a name="l00288"></a>00288 -<a name="l00289"></a>00289 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>; -<a name="l00290"></a>00290 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a> = 0; +<a name="l00289"></a>00289 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>; +<a name="l00290"></a>00290 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a> = 0; <a name="l00291"></a>00291 -<a name="l00292"></a>00292 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>; -<a name="l00293"></a>00293 <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a> = 0; +<a name="l00292"></a>00292 <span class="keyword">delete</span>[] <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>; +<a name="l00293"></a>00293 <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a> = 0; <a name="l00294"></a>00294 -<a name="l00295"></a>00295 <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> = 0; +<a name="l00295"></a>00295 <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> = 0; <a name="l00296"></a>00296 -<a name="l00297"></a>00297 <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a> = RealTime::zeroTime; -<a name="l00298"></a>00298 <a class="code" href="classFixedTempoEstimator_1_1D.html#bacd5ff19c301020efb99c03136b849a">m_lasttime</a> = RealTime::zeroTime; +<a name="l00297"></a>00297 <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a> = RealTime::zeroTime; +<a name="l00298"></a>00298 <a class="code" href="classFixedTempoEstimator_1_1D.html#0043d3c082b20a1506ecf3fbaac5abf8">m_lasttime</a> = RealTime::zeroTime; <a name="l00299"></a>00299 } <a name="l00300"></a>00300 <a name="l00301"></a>00301 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FixedTempoEstimator::FeatureSet</a> -<a name="l00302"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#7fac74fc9fc54f436408705d1e125e20">00302</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7fac74fc9fc54f436408705d1e125e20">FixedTempoEstimator::D::process</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *<span class="keyword">const</span> *inputBuffers, <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">RealTime</a> ts) +<a name="l00302"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#80c7b0f36183d0b595ff482e9096eca1">00302</a> <a class="code" href="classFixedTempoEstimator.html#1cf76b0e55cf4ed3da095cffcdeaec3c" title="Process a single block of input data.">FixedTempoEstimator::D::process</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *<span class="keyword">const</span> *inputBuffers, <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">RealTime</a> ts) <a name="l00303"></a>00303 { <a name="l00304"></a>00304 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> fs; <a name="l00305"></a>00305 -<a name="l00306"></a>00306 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a> == 0) { +<a name="l00306"></a>00306 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a> == 0) { <a name="l00307"></a>00307 cerr << <span class="stringliteral">"ERROR: FixedTempoEstimator::process: "</span> <a name="l00308"></a>00308 << <span class="stringliteral">"FixedTempoEstimator has not been initialised"</span> <a name="l00309"></a>00309 << endl; <a name="l00310"></a>00310 <span class="keywordflow">return</span> fs; <a name="l00311"></a>00311 } <a name="l00312"></a>00312 -<a name="l00313"></a>00313 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> == 0) <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a> = ts; -<a name="l00314"></a>00314 <a class="code" href="classFixedTempoEstimator_1_1D.html#bacd5ff19c301020efb99c03136b849a">m_lasttime</a> = ts; +<a name="l00313"></a>00313 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> == 0) <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a> = ts; +<a name="l00314"></a>00314 <a class="code" href="classFixedTempoEstimator_1_1D.html#0043d3c082b20a1506ecf3fbaac5abf8">m_lasttime</a> = ts; <a name="l00315"></a>00315 -<a name="l00316"></a>00316 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> == <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>) { +<a name="l00316"></a>00316 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> == <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>) { <a name="l00317"></a>00317 <span class="comment">// If we have seen enough input, do the estimation and return</span> -<a name="l00318"></a>00318 <a class="code" href="classFixedTempoEstimator_1_1D.html#4f2cbc11fba5bc8af3fd2a0078156091">calculate</a>(); -<a name="l00319"></a>00319 fs = <a class="code" href="classFixedTempoEstimator_1_1D.html#20389ba1515f6ce4181d3f41e5c4f347">assembleFeatures</a>(); -<a name="l00320"></a>00320 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; +<a name="l00318"></a>00318 <a class="code" href="classFixedTempoEstimator_1_1D.html#5f89ac783061563c73dc684ea073cde6">calculate</a>(); +<a name="l00319"></a>00319 fs = <a class="code" href="classFixedTempoEstimator_1_1D.html#29ca062e20df30685c5478b7a68a9a9b">assembleFeatures</a>(); +<a name="l00320"></a>00320 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <a name="l00321"></a>00321 <span class="keywordflow">return</span> fs; <a name="l00322"></a>00322 } <a name="l00323"></a>00323 <a name="l00324"></a>00324 <span class="comment">// If we have seen more than enough, just discard and return!</span> -<a name="l00325"></a>00325 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> > <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>) <span class="keywordflow">return</span> <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a>(); +<a name="l00325"></a>00325 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> > <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>) <span class="keywordflow">return</span> <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a>(); <a name="l00326"></a>00326 <a name="l00327"></a>00327 <span class="keywordtype">float</span> value = 0.f; <a name="l00328"></a>00328 @@ -351,56 +357,56 @@ <a name="l00330"></a>00330 <span class="comment">// in overall power from one spectral frame to the next --</span> <a name="l00331"></a>00331 <span class="comment">// simplistic but reasonably effective for our purposes.</span> <a name="l00332"></a>00332 -<a name="l00333"></a>00333 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#0b9bf37e600f0564b9f305f73a9517c8">m_blockSize</a>/2; ++i) { +<a name="l00333"></a>00333 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i < <a class="code" href="classFixedTempoEstimator_1_1D.html#d6a062426d0b8f9766e9d4da91cf7db0">m_blockSize</a>/2; ++i) { <a name="l00334"></a>00334 <a name="l00335"></a>00335 <span class="keywordtype">float</span> real = inputBuffers[0][i*2]; <a name="l00336"></a>00336 <span class="keywordtype">float</span> imag = inputBuffers[0][i*2 + 1]; <a name="l00337"></a>00337 <a name="l00338"></a>00338 <span class="keywordtype">float</span> sqrmag = real * real + imag * imag; -<a name="l00339"></a>00339 value += fabsf(sqrmag - <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>[i]); +<a name="l00339"></a>00339 value += fabsf(sqrmag - <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>[i]); <a name="l00340"></a>00340 -<a name="l00341"></a>00341 <a class="code" href="classFixedTempoEstimator_1_1D.html#a59cf1cb5640a910c70884579e5d99ad">m_priorMagnitudes</a>[i] = sqrmag; +<a name="l00341"></a>00341 <a class="code" href="classFixedTempoEstimator_1_1D.html#abf03ffd36a8681592bb602c1b8d212f">m_priorMagnitudes</a>[i] = sqrmag; <a name="l00342"></a>00342 } <a name="l00343"></a>00343 -<a name="l00344"></a>00344 <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>] = value; +<a name="l00344"></a>00344 <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>] = value; <a name="l00345"></a>00345 -<a name="l00346"></a>00346 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; +<a name="l00346"></a>00346 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <a name="l00347"></a>00347 <span class="keywordflow">return</span> fs; <a name="l00348"></a>00348 } <a name="l00349"></a>00349 <a name="l00350"></a>00350 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FixedTempoEstimator::FeatureSet</a> -<a name="l00351"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#7f9c3603bb3374d6936885010dbdd82b">00351</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#7f9c3603bb3374d6936885010dbdd82b">FixedTempoEstimator::D::getRemainingFeatures</a>() +<a name="l00351"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0023f5babc813266d60b7916faf019ff">00351</a> <a class="code" href="classFixedTempoEstimator.html#4965cf99be77fc4d1de51e11d83936b0" title="After all blocks have been processed, calculate and return any remaining features...">FixedTempoEstimator::D::getRemainingFeatures</a>() <a name="l00352"></a>00352 { <a name="l00353"></a>00353 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> fs; -<a name="l00354"></a>00354 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> > <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a>) <span class="keywordflow">return</span> fs; -<a name="l00355"></a>00355 <a class="code" href="classFixedTempoEstimator_1_1D.html#4f2cbc11fba5bc8af3fd2a0078156091">calculate</a>(); -<a name="l00356"></a>00356 fs = <a class="code" href="classFixedTempoEstimator_1_1D.html#20389ba1515f6ce4181d3f41e5c4f347">assembleFeatures</a>(); -<a name="l00357"></a>00357 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; +<a name="l00354"></a>00354 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> > <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a>) <span class="keywordflow">return</span> fs; +<a name="l00355"></a>00355 <a class="code" href="classFixedTempoEstimator_1_1D.html#5f89ac783061563c73dc684ea073cde6">calculate</a>(); +<a name="l00356"></a>00356 fs = <a class="code" href="classFixedTempoEstimator_1_1D.html#29ca062e20df30685c5478b7a68a9a9b">assembleFeatures</a>(); +<a name="l00357"></a>00357 ++<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <a name="l00358"></a>00358 <span class="keywordflow">return</span> fs; <a name="l00359"></a>00359 } <a name="l00360"></a>00360 <a name="l00361"></a>00361 <span class="keywordtype">float</span> -<a name="l00362"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">00362</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">FixedTempoEstimator::D::lag2tempo</a>(<span class="keywordtype">int</span> lag) +<a name="l00362"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">00362</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">FixedTempoEstimator::D::lag2tempo</a>(<span class="keywordtype">int</span> lag) <a name="l00363"></a>00363 { -<a name="l00364"></a>00364 <span class="keywordflow">return</span> 60.f / ((lag * <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>); +<a name="l00364"></a>00364 <span class="keywordflow">return</span> 60.f / ((lag * <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>); <a name="l00365"></a>00365 } <a name="l00366"></a>00366 <a name="l00367"></a>00367 <span class="keywordtype">int</span> -<a name="l00368"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#c6a75212293fc855de6ed0c6581a0fb9">00368</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#c6a75212293fc855de6ed0c6581a0fb9">FixedTempoEstimator::D::tempo2lag</a>(<span class="keywordtype">float</span> tempo) +<a name="l00368"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#406aacbd334ef8c4ae40ea8280918f97">00368</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#406aacbd334ef8c4ae40ea8280918f97">FixedTempoEstimator::D::tempo2lag</a>(<span class="keywordtype">float</span> tempo) <a name="l00369"></a>00369 { -<a name="l00370"></a>00370 <span class="keywordflow">return</span> ((60.f / tempo) * <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>; +<a name="l00370"></a>00370 <span class="keywordflow">return</span> ((60.f / tempo) * <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>; <a name="l00371"></a>00371 } <a name="l00372"></a>00372 <a name="l00373"></a>00373 <span class="keywordtype">void</span> -<a name="l00374"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#4f2cbc11fba5bc8af3fd2a0078156091">00374</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#4f2cbc11fba5bc8af3fd2a0078156091">FixedTempoEstimator::D::calculate</a>() +<a name="l00374"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#5f89ac783061563c73dc684ea073cde6">00374</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#5f89ac783061563c73dc684ea073cde6">FixedTempoEstimator::D::calculate</a>() <a name="l00375"></a>00375 { -<a name="l00376"></a>00376 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>) { +<a name="l00376"></a>00376 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>) { <a name="l00377"></a>00377 cerr << <span class="stringliteral">"FixedTempoEstimator::calculate: calculation already happened?"</span> << endl; <a name="l00378"></a>00378 <span class="keywordflow">return</span>; <a name="l00379"></a>00379 } <a name="l00380"></a>00380 -<a name="l00381"></a>00381 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> < <a class="code" href="classFixedTempoEstimator_1_1D.html#e739e006f2d10ef2b13677770b23e663">m_dfsize</a> / 9 && -<a name="l00382"></a>00382 <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a> < (1.0 * <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>) { <span class="comment">// 1 second</span> +<a name="l00381"></a>00381 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> < <a class="code" href="classFixedTempoEstimator_1_1D.html#cede51fef42d9a32cdec257261f2c783">m_dfsize</a> / 9 && +<a name="l00382"></a>00382 <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a> < (1.0 * <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>) / <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>) { <span class="comment">// 1 second</span> <a name="l00383"></a>00383 cerr << <span class="stringliteral">"FixedTempoEstimator::calculate: Input is too short"</span> << endl; <a name="l00384"></a>00384 <span class="keywordflow">return</span>; <a name="l00385"></a>00385 } @@ -410,16 +416,16 @@ <a name="l00389"></a>00389 <span class="comment">// and m_fr (the filtered autocorrelation from whose peaks tempo</span> <a name="l00390"></a>00390 <span class="comment">// estimates will be taken).</span> <a name="l00391"></a>00391 -<a name="l00392"></a>00392 <span class="keywordtype">int</span> n = <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; <span class="comment">// length of actual df array (m_dfsize is the theoretical max)</span> +<a name="l00392"></a>00392 <span class="keywordtype">int</span> n = <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <span class="comment">// length of actual df array (m_dfsize is the theoretical max)</span> <a name="l00393"></a>00393 -<a name="l00394"></a>00394 <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// raw autocorrelation</span> -<a name="l00395"></a>00395 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// filtered autocorrelation</span> -<a name="l00396"></a>00396 <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// averaged tempo estimate for each lag value</span> +<a name="l00394"></a>00394 <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// raw autocorrelation</span> +<a name="l00395"></a>00395 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// filtered autocorrelation</span> +<a name="l00396"></a>00396 <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a> = <span class="keyword">new</span> <span class="keywordtype">float</span>[n/2]; <span class="comment">// averaged tempo estimate for each lag value</span> <a name="l00397"></a>00397 <a name="l00398"></a>00398 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n/2; ++i) { -<a name="l00399"></a>00399 <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[i] = 0.f; -<a name="l00400"></a>00400 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] = 0.f; -<a name="l00401"></a>00401 <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(i); +<a name="l00399"></a>00399 <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[i] = 0.f; +<a name="l00400"></a>00400 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] = 0.f; +<a name="l00401"></a>00401 <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(i); <a name="l00402"></a>00402 } <a name="l00403"></a>00403 <a name="l00404"></a>00404 <span class="comment">// Calculate the raw autocorrelation of the detection function</span> @@ -427,10 +433,10 @@ <a name="l00406"></a>00406 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n/2; ++i) { <a name="l00407"></a>00407 <a name="l00408"></a>00408 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i; j < n; ++j) { -<a name="l00409"></a>00409 <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[j] * <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[j - i]; +<a name="l00409"></a>00409 <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[j] * <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[j - i]; <a name="l00410"></a>00410 } <a name="l00411"></a>00411 -<a name="l00412"></a>00412 <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[i] /= n - i - 1; +<a name="l00412"></a>00412 <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[i] /= n - i - 1; <a name="l00413"></a>00413 } <a name="l00414"></a>00414 <a name="l00415"></a>00415 <span class="comment">// Filter the autocorrelation and average out the tempo estimates</span> @@ -439,7 +445,7 @@ <a name="l00418"></a>00418 <a name="l00419"></a>00419 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i < n/2-1; ++i) { <a name="l00420"></a>00420 -<a name="l00421"></a>00421 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[i]; +<a name="l00421"></a>00421 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[i]; <a name="l00422"></a>00422 <a name="l00423"></a>00423 <span class="keywordtype">int</span> div = 1; <a name="l00424"></a>00424 @@ -459,8 +465,8 @@ <a name="l00438"></a>00438 <a name="l00439"></a>00439 <span class="keywordflow">if</span> (k < 0 || k >= n/2) <span class="keywordflow">continue</span>; <a name="l00440"></a>00440 -<a name="l00441"></a>00441 <span class="keywordflow">if</span> (!have || (<a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[k] > kvmax)) { kmax = k; kvmax = <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[k]; } -<a name="l00442"></a>00442 <span class="keywordflow">if</span> (!have || (<a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[k] < kvmin)) { kmin = k; kvmin = <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[k]; } +<a name="l00441"></a>00441 <span class="keywordflow">if</span> (!have || (<a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[k] > kvmax)) { kmax = k; kvmax = <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[k]; } +<a name="l00442"></a>00442 <span class="keywordflow">if</span> (!have || (<a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[k] < kvmin)) { kmin = k; kvmin = <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[k]; } <a name="l00443"></a>00443 <a name="l00444"></a>00444 have = <span class="keyword">true</span>; <a name="l00445"></a>00445 } @@ -468,60 +474,60 @@ <a name="l00447"></a>00447 <span class="comment">// Boost the original lag according to the strongest</span> <a name="l00448"></a>00448 <span class="comment">// value found close to this related lag</span> <a name="l00449"></a>00449 -<a name="l00450"></a>00450 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[kmax] / 5; +<a name="l00450"></a>00450 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[kmax] / 5; <a name="l00451"></a>00451 -<a name="l00452"></a>00452 <span class="keywordflow">if</span> ((kmax == 0 || <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[kmax] > <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[kmax-1]) && -<a name="l00453"></a>00453 (kmax == n/2-1 || <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[kmax] > <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[kmax+1]) && +<a name="l00452"></a>00452 <span class="keywordflow">if</span> ((kmax == 0 || <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[kmax] > <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[kmax-1]) && +<a name="l00453"></a>00453 (kmax == n/2-1 || <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[kmax] > <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[kmax+1]) && <a name="l00454"></a>00454 kvmax > kvmin * 1.05) { <a name="l00455"></a>00455 <a name="l00456"></a>00456 <span class="comment">// The strongest value close to the related lag is</span> <a name="l00457"></a>00457 <span class="comment">// also a pretty good looking peak, so use it to</span> <a name="l00458"></a>00458 <span class="comment">// improve our tempo estimate for the original lag</span> <a name="l00459"></a>00459 -<a name="l00460"></a>00460 <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[i] + <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(kmax) * related[j]; +<a name="l00460"></a>00460 <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[i] = <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[i] + <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(kmax) * related[j]; <a name="l00461"></a>00461 ++div; <a name="l00462"></a>00462 } <a name="l00463"></a>00463 } <a name="l00464"></a>00464 } <a name="l00465"></a>00465 -<a name="l00466"></a>00466 <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[i] /= div; +<a name="l00466"></a>00466 <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[i] /= div; <a name="l00467"></a>00467 <a name="l00468"></a>00468 <span class="comment">// Finally apply a primitive perceptual weighting (to prefer</span> <a name="l00469"></a>00469 <span class="comment">// tempi of around 120-130)</span> <a name="l00470"></a>00470 -<a name="l00471"></a>00471 <span class="keywordtype">float</span> weight = 1.f - fabsf(128.f - <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(i)) * 0.005; +<a name="l00471"></a>00471 <span class="keywordtype">float</span> weight = 1.f - fabsf(128.f - <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(i)) * 0.005; <a name="l00472"></a>00472 <span class="keywordflow">if</span> (weight < 0.f) weight = 0.f; <a name="l00473"></a>00473 weight = weight * weight * weight; <a name="l00474"></a>00474 -<a name="l00475"></a>00475 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] * (weight / 3); +<a name="l00475"></a>00475 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] += <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] * (weight / 3); <a name="l00476"></a>00476 } <a name="l00477"></a>00477 } <a name="l00478"></a>00478 <a name="l00479"></a>00479 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FixedTempoEstimator::FeatureSet</a> -<a name="l00480"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#20389ba1515f6ce4181d3f41e5c4f347">00480</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#20389ba1515f6ce4181d3f41e5c4f347">FixedTempoEstimator::D::assembleFeatures</a>() +<a name="l00480"></a><a class="code" href="classFixedTempoEstimator_1_1D.html#29ca062e20df30685c5478b7a68a9a9b">00480</a> <a class="code" href="classFixedTempoEstimator_1_1D.html#29ca062e20df30685c5478b7a68a9a9b">FixedTempoEstimator::D::assembleFeatures</a>() <a name="l00481"></a>00481 { <a name="l00482"></a>00482 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FeatureSet</a> fs; -<a name="l00483"></a>00483 <span class="keywordflow">if</span> (!<a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>) <span class="keywordflow">return</span> fs; <span class="comment">// No autocorrelation: no results</span> +<a name="l00483"></a>00483 <span class="keywordflow">if</span> (!<a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>) <span class="keywordflow">return</span> fs; <span class="comment">// No autocorrelation: no results</span> <a name="l00484"></a>00484 <a name="l00485"></a>00485 <a class="code" href="structVamp_1_1Plugin_1_1Feature.html">Feature</a> feature; -<a name="l00486"></a>00486 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#98907091d0b6a589720ae35ae588a82b" title="True if an output feature has its own timestamp.">hasTimestamp</a> = <span class="keyword">true</span>; -<a name="l00487"></a>00487 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#33686757bd4481c72494122e9bfb9fba" title="True if an output feature has a specified duration.">hasDuration</a> = <span class="keyword">false</span>; -<a name="l00488"></a>00488 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; -<a name="l00489"></a>00489 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.clear(); -<a name="l00490"></a>00490 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.push_back(0.f); +<a name="l00486"></a>00486 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#116bb1b3420a067fc1290b75982fdf62" title="True if an output feature has its own timestamp.">hasTimestamp</a> = <span class="keyword">true</span>; +<a name="l00487"></a>00487 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#2a962f4b26d6417ad1b72ae29949332e" title="True if an output feature has a specified duration.">hasDuration</a> = <span class="keyword">false</span>; +<a name="l00488"></a>00488 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; +<a name="l00489"></a>00489 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.clear(); +<a name="l00490"></a>00490 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.push_back(0.f); <a name="l00491"></a>00491 <a name="l00492"></a>00492 <span class="keywordtype">char</span> buffer[40]; <a name="l00493"></a>00493 -<a name="l00494"></a>00494 <span class="keywordtype">int</span> n = <a class="code" href="classFixedTempoEstimator_1_1D.html#b73af7f1943b76388de04cbb4696a983">m_n</a>; +<a name="l00494"></a>00494 <span class="keywordtype">int</span> n = <a class="code" href="classFixedTempoEstimator_1_1D.html#e0372359fa0d6f00ef8af731460ad5b4">m_n</a>; <a name="l00495"></a>00495 <a name="l00496"></a>00496 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < n; ++i) { <a name="l00497"></a>00497 <a name="l00498"></a>00498 <span class="comment">// Return the detection function in the DF output</span> <a name="l00499"></a>00499 -<a name="l00500"></a>00500 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#caa605f36839c07e76f4882f5e22d8d7" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a> + -<a name="l00501"></a>00501 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>); -<a name="l00502"></a>00502 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#8e2312120e87ad9a48fedeebbaefa396">m_df</a>[i]; -<a name="l00503"></a>00503 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; +<a name="l00500"></a>00500 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#aaf212bd458dc5e6f441bf7606121311" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a> + +<a name="l00501"></a>00501 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>); +<a name="l00502"></a>00502 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#8ab6f840c8a0b77954bacc5e22e06f10">m_df</a>[i]; +<a name="l00503"></a>00503 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; <a name="l00504"></a>00504 fs[<a class="code" href="FixedTempoEstimator_8cpp.html#caa4524f29afce03c812a88ff31159c1">DFOutput</a>].push_back(feature); <a name="l00505"></a>00505 } <a name="l00506"></a>00506 @@ -530,43 +536,43 @@ <a name="l00509"></a>00509 <span class="comment">// Return the raw autocorrelation in the ACF output, each</span> <a name="l00510"></a>00510 <span class="comment">// value labelled according to its corresponding tempo</span> <a name="l00511"></a>00511 -<a name="l00512"></a>00512 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#caa605f36839c07e76f4882f5e22d8d7" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a> + -<a name="l00513"></a>00513 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>); -<a name="l00514"></a>00514 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#7a8c8658ecfeec98962078df89fcd538">m_r</a>[i]; -<a name="l00515"></a>00515 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(i)); -<a name="l00516"></a>00516 <span class="keywordflow">if</span> (i == n/2-1) feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; -<a name="l00517"></a>00517 <span class="keywordflow">else</span> feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = buffer; +<a name="l00512"></a>00512 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#aaf212bd458dc5e6f441bf7606121311" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a> + +<a name="l00513"></a>00513 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>); +<a name="l00514"></a>00514 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#1608202e4efc8174ac07086303dc111c">m_r</a>[i]; +<a name="l00515"></a>00515 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(i)); +<a name="l00516"></a>00516 <span class="keywordflow">if</span> (i == n/2-1) feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; +<a name="l00517"></a>00517 <span class="keywordflow">else</span> feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = buffer; <a name="l00518"></a>00518 fs[<a class="code" href="FixedTempoEstimator_8cpp.html#382c1fe740ac8911c6078cfbceffc870">ACFOutput</a>].push_back(feature); <a name="l00519"></a>00519 } <a name="l00520"></a>00520 -<a name="l00521"></a>00521 <span class="keywordtype">float</span> t0 = <a class="code" href="classFixedTempoEstimator_1_1D.html#768fdbb62e4b21a39897963fdbd486ed">m_minbpm</a>; <span class="comment">// our minimum detected tempo</span> -<a name="l00522"></a>00522 <span class="keywordtype">float</span> t1 = <a class="code" href="classFixedTempoEstimator_1_1D.html#33e8d045b222addc6173b50df2553ba8">m_maxbpm</a>; <span class="comment">// our maximum detected tempo</span> +<a name="l00521"></a>00521 <span class="keywordtype">float</span> t0 = <a class="code" href="classFixedTempoEstimator_1_1D.html#0d0e9ff333c6e0e85d2069b730f0f1c2">m_minbpm</a>; <span class="comment">// our minimum detected tempo</span> +<a name="l00522"></a>00522 <span class="keywordtype">float</span> t1 = <a class="code" href="classFixedTempoEstimator_1_1D.html#42f27eb3f218cf57c71b278d5ffd2d8d">m_maxbpm</a>; <span class="comment">// our maximum detected tempo</span> <a name="l00523"></a>00523 -<a name="l00524"></a>00524 <span class="keywordtype">int</span> p0 = <a class="code" href="classFixedTempoEstimator_1_1D.html#c6a75212293fc855de6ed0c6581a0fb9">tempo2lag</a>(t1); -<a name="l00525"></a>00525 <span class="keywordtype">int</span> p1 = <a class="code" href="classFixedTempoEstimator_1_1D.html#c6a75212293fc855de6ed0c6581a0fb9">tempo2lag</a>(t0); +<a name="l00524"></a>00524 <span class="keywordtype">int</span> p0 = <a class="code" href="classFixedTempoEstimator_1_1D.html#406aacbd334ef8c4ae40ea8280918f97">tempo2lag</a>(t1); +<a name="l00525"></a>00525 <span class="keywordtype">int</span> p1 = <a class="code" href="classFixedTempoEstimator_1_1D.html#406aacbd334ef8c4ae40ea8280918f97">tempo2lag</a>(t0); <a name="l00526"></a>00526 <a name="l00527"></a>00527 std::map<float, int> candidates; <a name="l00528"></a>00528 <a name="l00529"></a>00529 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = p0; i <= p1 && i+1 < n/2; ++i) { <a name="l00530"></a>00530 -<a name="l00531"></a>00531 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] > <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i-1] && -<a name="l00532"></a>00532 <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i] > <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i+1]) { +<a name="l00531"></a>00531 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] > <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i-1] && +<a name="l00532"></a>00532 <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i] > <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i+1]) { <a name="l00533"></a>00533 <a name="l00534"></a>00534 <span class="comment">// This is a peak in the filtered autocorrelation: stick</span> <a name="l00535"></a>00535 <span class="comment">// it into the map from filtered autocorrelation to lag</span> <a name="l00536"></a>00536 <span class="comment">// index -- this sorts our peaks by filtered acf value</span> <a name="l00537"></a>00537 -<a name="l00538"></a>00538 candidates[<a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i]] = i; +<a name="l00538"></a>00538 candidates[<a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i]] = i; <a name="l00539"></a>00539 } <a name="l00540"></a>00540 <a name="l00541"></a>00541 <span class="comment">// Also return the filtered autocorrelation in its own output</span> <a name="l00542"></a>00542 -<a name="l00543"></a>00543 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#caa605f36839c07e76f4882f5e22d8d7" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a> + -<a name="l00544"></a>00544 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#837da9722c63fe3c66c738255990c45f">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#072a0fc30b3912a54858eefdd47f4d4f">m_inputSampleRate</a>); -<a name="l00545"></a>00545 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#b255006072672653e645fc315eea6167">m_fr</a>[i]; -<a name="l00546"></a>00546 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(i)); -<a name="l00547"></a>00547 <span class="keywordflow">if</span> (i == p1 || i == n/2-2) feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; -<a name="l00548"></a>00548 <span class="keywordflow">else</span> feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = buffer; +<a name="l00543"></a>00543 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#aaf212bd458dc5e6f441bf7606121311" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a> + +<a name="l00544"></a>00544 RealTime::frame2RealTime(i * <a class="code" href="classFixedTempoEstimator_1_1D.html#43af246598757e4e21d4a8f3a023715a">m_stepSize</a>, <a class="code" href="classFixedTempoEstimator_1_1D.html#d014ad2638522492cfa1a9989dafbddb">m_inputSampleRate</a>); +<a name="l00545"></a>00545 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#9e5eeec948d2eedf27cd3d8bf1b0b10e">m_fr</a>[i]; +<a name="l00546"></a>00546 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(i)); +<a name="l00547"></a>00547 <span class="keywordflow">if</span> (i == p1 || i == n/2-2) feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; +<a name="l00548"></a>00548 <span class="keywordflow">else</span> feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = buffer; <a name="l00549"></a>00549 fs[<a class="code" href="FixedTempoEstimator_8cpp.html#5b284021783d79785d46b043b458368d">FilteredACFOutput</a>].push_back(feature); <a name="l00550"></a>00550 } <a name="l00551"></a>00551 @@ -575,11 +581,11 @@ <a name="l00554"></a>00554 <span class="keywordflow">return</span> fs; <a name="l00555"></a>00555 } <a name="l00556"></a>00556 -<a name="l00557"></a>00557 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#98907091d0b6a589720ae35ae588a82b" title="True if an output feature has its own timestamp.">hasTimestamp</a> = <span class="keyword">true</span>; -<a name="l00558"></a>00558 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#caa605f36839c07e76f4882f5e22d8d7" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a>; +<a name="l00557"></a>00557 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#116bb1b3420a067fc1290b75982fdf62" title="True if an output feature has its own timestamp.">hasTimestamp</a> = <span class="keyword">true</span>; +<a name="l00558"></a>00558 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#aaf212bd458dc5e6f441bf7606121311" title="Timestamp of the output feature.">timestamp</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a>; <a name="l00559"></a>00559 -<a name="l00560"></a>00560 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#33686757bd4481c72494122e9bfb9fba" title="True if an output feature has a specified duration.">hasDuration</a> = <span class="keyword">true</span>; -<a name="l00561"></a>00561 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#f687c0a7fe041757e922ec296862b115" title="Duration of the output feature.">duration</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#bacd5ff19c301020efb99c03136b849a">m_lasttime</a> - <a class="code" href="classFixedTempoEstimator_1_1D.html#3a3a0b4a4c259087f02d0046241674d0">m_start</a>; +<a name="l00560"></a>00560 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#2a962f4b26d6417ad1b72ae29949332e" title="True if an output feature has a specified duration.">hasDuration</a> = <span class="keyword">true</span>; +<a name="l00561"></a>00561 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#f09e2624341f81c8f1f9c2d9137b4230" title="Duration of the output feature.">duration</a> = <a class="code" href="classFixedTempoEstimator_1_1D.html#0043d3c082b20a1506ecf3fbaac5abf8">m_lasttime</a> - <a class="code" href="classFixedTempoEstimator_1_1D.html#13e48c42618c55f21200ef99bdadc333">m_start</a>; <a name="l00562"></a>00562 <a name="l00563"></a>00563 <span class="comment">// The map contains only peaks and is sorted by filtered acf</span> <a name="l00564"></a>00564 <span class="comment">// value, so the final element in it is our "best" tempo guess</span> @@ -588,24 +594,24 @@ <a name="l00567"></a>00567 --ci; <a name="l00568"></a>00568 <span class="keywordtype">int</span> maxpi = ci->second; <a name="l00569"></a>00569 -<a name="l00570"></a>00570 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[maxpi] > 0) { +<a name="l00570"></a>00570 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[maxpi] > 0) { <a name="l00571"></a>00571 <a name="l00572"></a>00572 <span class="comment">// This lag has an adjusted tempo from the averaging process:</span> <a name="l00573"></a>00573 <span class="comment">// use it</span> <a name="l00574"></a>00574 -<a name="l00575"></a>00575 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[maxpi]; +<a name="l00575"></a>00575 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[maxpi]; <a name="l00576"></a>00576 <a name="l00577"></a>00577 } <span class="keywordflow">else</span> { <a name="l00578"></a>00578 <a name="l00579"></a>00579 <span class="comment">// shouldn't happen -- it would imply that this high value was</span> <a name="l00580"></a>00580 <span class="comment">// not a peak!</span> <a name="l00581"></a>00581 -<a name="l00582"></a>00582 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(maxpi); +<a name="l00582"></a>00582 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0] = <a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(maxpi); <a name="l00583"></a>00583 cerr << <span class="stringliteral">"WARNING: No stored tempo for index "</span> << maxpi << endl; <a name="l00584"></a>00584 } <a name="l00585"></a>00585 -<a name="l00586"></a>00586 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>[0]); -<a name="l00587"></a>00587 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = buffer; +<a name="l00586"></a>00586 sprintf(buffer, <span class="stringliteral">"%.1f bpm"</span>, feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>[0]); +<a name="l00587"></a>00587 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = buffer; <a name="l00588"></a>00588 <a name="l00589"></a>00589 <span class="comment">// Return the best tempo in the main output</span> <a name="l00590"></a>00590 @@ -614,14 +620,14 @@ <a name="l00593"></a>00593 <span class="comment">// And return the other estimates (up to the arbitrarily chosen</span> <a name="l00594"></a>00594 <span class="comment">// number of 10 of them) in the candidates output</span> <a name="l00595"></a>00595 -<a name="l00596"></a>00596 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.clear(); -<a name="l00597"></a>00597 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#8eb1fb35f73b247ed13de9527c18f036" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; +<a name="l00596"></a>00596 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.clear(); +<a name="l00597"></a>00597 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#14ff2ab7442f508fc3bd3d96c3e85eb5" title="Label for the sample of this feature.">label</a> = <span class="stringliteral">""</span>; <a name="l00598"></a>00598 -<a name="l00599"></a>00599 <span class="keywordflow">while</span> (feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.size() < 10) { -<a name="l00600"></a>00600 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[ci->second] > 0) { -<a name="l00601"></a>00601 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.push_back(<a class="code" href="classFixedTempoEstimator_1_1D.html#698446aad2c0f737732a392fb86a612c">m_t</a>[ci->second]); +<a name="l00599"></a>00599 <span class="keywordflow">while</span> (feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.size() < 10) { +<a name="l00600"></a>00600 <span class="keywordflow">if</span> (<a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[ci->second] > 0) { +<a name="l00601"></a>00601 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.push_back(<a class="code" href="classFixedTempoEstimator_1_1D.html#fcde0fa72ac4030892457e6e65d29474">m_t</a>[ci->second]); <a name="l00602"></a>00602 } <span class="keywordflow">else</span> { -<a name="l00603"></a>00603 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#60b9f3057386820dbcaec0eb1189ce71" title="Results for a single sample of this feature.">values</a>.push_back(<a class="code" href="classFixedTempoEstimator_1_1D.html#0a7cb0705938097ab23a6f9187e6bae5">lag2tempo</a>(ci->second)); +<a name="l00603"></a>00603 feature.<a class="code" href="structVamp_1_1Plugin_1_1Feature.html#106162977cdc92a02146fcb5ed18a34d" title="Results for a single sample of this feature.">values</a>.push_back(<a class="code" href="classFixedTempoEstimator_1_1D.html#d06bac4a07652b2599fb3c3b8ea17736">lag2tempo</a>(ci->second)); <a name="l00604"></a>00604 } <a name="l00605"></a>00605 <span class="keywordflow">if</span> (ci == candidates.begin()) <span class="keywordflow">break</span>; <a name="l00606"></a>00606 --ci; @@ -684,13 +690,13 @@ <a name="l00663"></a>00663 <span class="keywordtype">size_t</span> <a name="l00664"></a><a class="code" href="classFixedTempoEstimator.html#d450bb7e7df559ae3d68dfbfb085676f">00664</a> <a class="code" href="classFixedTempoEstimator.html#d450bb7e7df559ae3d68dfbfb085676f" title="Get the preferred step size (window increment -- the distance in sample frames between...">FixedTempoEstimator::getPreferredStepSize</a>()<span class="keyword"> const</span> <a name="l00665"></a>00665 <span class="keyword"></span>{ -<a name="l00666"></a>00666 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#dd749be18355ab1ae5c1ccbacfd2e192">getPreferredStepSize</a>(); +<a name="l00666"></a>00666 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#1c9af63373d85e250d56546fff83d2b6">getPreferredStepSize</a>(); <a name="l00667"></a>00667 } <a name="l00668"></a>00668 <a name="l00669"></a>00669 <span class="keywordtype">size_t</span> <a name="l00670"></a><a class="code" href="classFixedTempoEstimator.html#68b8569b71504a0478caf990dbe30683">00670</a> <a class="code" href="classFixedTempoEstimator.html#68b8569b71504a0478caf990dbe30683" title="Get the preferred block size (window size -- the number of sample frames passed in...">FixedTempoEstimator::getPreferredBlockSize</a>()<span class="keyword"> const</span> <a name="l00671"></a>00671 <span class="keyword"></span>{ -<a name="l00672"></a>00672 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#c02826f981736fc2aa5d835fa14e174d">getPreferredBlockSize</a>(); +<a name="l00672"></a>00672 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#39b70f63c405045398b1cd3ce7ff5d2b">getPreferredBlockSize</a>(); <a name="l00673"></a>00673 } <a name="l00674"></a>00674 <a name="l00675"></a>00675 <span class="keywordtype">bool</span> @@ -699,53 +705,53 @@ <a name="l00678"></a>00678 <span class="keywordflow">if</span> (channels < <a class="code" href="classVamp_1_1Plugin.html#267b42e866df3cf0d190893e8096f525" title="Get the minimum supported number of input channels.">getMinChannelCount</a>() || <a name="l00679"></a>00679 channels > <a class="code" href="classVamp_1_1Plugin.html#2c5ab12b6fa4847cb244bd1e9cb3ae5e" title="Get the maximum supported number of input channels.">getMaxChannelCount</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>; <a name="l00680"></a>00680 -<a name="l00681"></a>00681 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#f0fcad4493650728babb7e341963c91d">initialise</a>(channels, stepSize, blockSize); +<a name="l00681"></a>00681 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#c15e4b26e8a7bc4b53b04bffbe46d65a">initialise</a>(channels, stepSize, blockSize); <a name="l00682"></a>00682 } <a name="l00683"></a>00683 <a name="l00684"></a>00684 <span class="keywordtype">void</span> <a name="l00685"></a><a class="code" href="classFixedTempoEstimator.html#c41708397255400c6682fee6c1b3d45f">00685</a> <a class="code" href="classFixedTempoEstimator.html#c41708397255400c6682fee6c1b3d45f" title="Reset the plugin after use, to prepare it for another clean run.">FixedTempoEstimator::reset</a>() <a name="l00686"></a>00686 { -<a name="l00687"></a>00687 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#f5ac8147bfe79371d00aba8a19c2f8fd">reset</a>(); +<a name="l00687"></a>00687 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#e2188bc79ddc978b548267a38329527b">reset</a>(); <a name="l00688"></a>00688 } <a name="l00689"></a>00689 <a name="l00690"></a>00690 <a class="code" href="classVamp_1_1PluginBase.html#3b6bb4bbd86affe1ca9deceea1aad4f8">FixedTempoEstimator::ParameterList</a> <a name="l00691"></a><a class="code" href="classFixedTempoEstimator.html#e157465a4e07d180bab05b5c3a4d8987">00691</a> <a class="code" href="classFixedTempoEstimator.html#e157465a4e07d180bab05b5c3a4d8987" title="Get the controllable parameters of this plugin.">FixedTempoEstimator::getParameterDescriptors</a>()<span class="keyword"> const</span> <a name="l00692"></a>00692 <span class="keyword"></span>{ -<a name="l00693"></a>00693 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#06fcf80a9a22c4b90abbc88eb592621a">getParameterDescriptors</a>(); +<a name="l00693"></a>00693 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#8030d29905a31a20b9019e5dfc388628">getParameterDescriptors</a>(); <a name="l00694"></a>00694 } <a name="l00695"></a>00695 <a name="l00696"></a>00696 <span class="keywordtype">float</span> <a name="l00697"></a><a class="code" href="classFixedTempoEstimator.html#2030b05fb1228b30ace16200780c9152">00697</a> <a class="code" href="classFixedTempoEstimator.html#2030b05fb1228b30ace16200780c9152" title="Get the value of a named parameter.">FixedTempoEstimator::getParameter</a>(std::string <span class="keywordtype">id</span>)<span class="keyword"> const</span> <a name="l00698"></a>00698 <span class="keyword"></span>{ -<a name="l00699"></a>00699 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#968ef2e555c81e4a3bde89d19fafb31a">getParameter</a>(<span class="keywordtype">id</span>); +<a name="l00699"></a>00699 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#3e1950da43d6c57b9e9577afb715c338">getParameter</a>(<span class="keywordtype">id</span>); <a name="l00700"></a>00700 } <a name="l00701"></a>00701 <a name="l00702"></a>00702 <span class="keywordtype">void</span> <a name="l00703"></a><a class="code" href="classFixedTempoEstimator.html#8a5a413025384cf451c64d2c2ce13a75">00703</a> <a class="code" href="classFixedTempoEstimator.html#8a5a413025384cf451c64d2c2ce13a75" title="Set a named parameter.">FixedTempoEstimator::setParameter</a>(std::string <span class="keywordtype">id</span>, <span class="keywordtype">float</span> value) <a name="l00704"></a>00704 { -<a name="l00705"></a>00705 <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#6cafa64d4cc8aa3556bc0ce6b0c49bc4">setParameter</a>(<span class="keywordtype">id</span>, value); +<a name="l00705"></a>00705 <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#f66a1106a170c11da1bb24ad54a27ea9">setParameter</a>(<span class="keywordtype">id</span>, value); <a name="l00706"></a>00706 } <a name="l00707"></a>00707 <a name="l00708"></a>00708 <a class="code" href="classVamp_1_1Plugin.html#30f531b8fb69fac41a24e3d2a6a08ed9">FixedTempoEstimator::OutputList</a> <a name="l00709"></a><a class="code" href="classFixedTempoEstimator.html#83121c205a723fe6297e2bf8870622a4">00709</a> <a class="code" href="classFixedTempoEstimator.html#83121c205a723fe6297e2bf8870622a4" title="Get the outputs of this plugin.">FixedTempoEstimator::getOutputDescriptors</a>()<span class="keyword"> const</span> <a name="l00710"></a>00710 <span class="keyword"></span>{ -<a name="l00711"></a>00711 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#7ce98af800f36045a0dae4b1dbed943f">getOutputDescriptors</a>(); +<a name="l00711"></a>00711 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#833b2a87b05ff7cf2852bd37c8d4a09f">getOutputDescriptors</a>(); <a name="l00712"></a>00712 } <a name="l00713"></a>00713 <a name="l00714"></a>00714 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FixedTempoEstimator::FeatureSet</a> <a name="l00715"></a><a class="code" href="classFixedTempoEstimator.html#1cf76b0e55cf4ed3da095cffcdeaec3c">00715</a> <a class="code" href="classFixedTempoEstimator.html#1cf76b0e55cf4ed3da095cffcdeaec3c" title="Process a single block of input data.">FixedTempoEstimator::process</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> *<span class="keyword">const</span> *inputBuffers, <a class="code" href="structVamp_1_1RealTime.html" title="RealTime represents time values to nanosecond precision with accurate arithmetic...">RealTime</a> ts) <a name="l00716"></a>00716 { -<a name="l00717"></a>00717 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#7fac74fc9fc54f436408705d1e125e20">process</a>(inputBuffers, ts); +<a name="l00717"></a>00717 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#80c7b0f36183d0b595ff482e9096eca1">process</a>(inputBuffers, ts); <a name="l00718"></a>00718 } <a name="l00719"></a>00719 <a name="l00720"></a>00720 <a class="code" href="classVamp_1_1Plugin.html#448fb57dc245d47923ec9eeaf9856c5f">FixedTempoEstimator::FeatureSet</a> <a name="l00721"></a><a class="code" href="classFixedTempoEstimator.html#4965cf99be77fc4d1de51e11d83936b0">00721</a> <a class="code" href="classFixedTempoEstimator.html#4965cf99be77fc4d1de51e11d83936b0" title="After all blocks have been processed, calculate and return any remaining features...">FixedTempoEstimator::getRemainingFeatures</a>() <a name="l00722"></a>00722 { -<a name="l00723"></a>00723 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#7f9c3603bb3374d6936885010dbdd82b">getRemainingFeatures</a>(); +<a name="l00723"></a>00723 <span class="keywordflow">return</span> <a class="code" href="classFixedTempoEstimator.html#5e1c9abaf33e9f48eb7d3b48f8af3308">m_d</a>-><a class="code" href="classFixedTempoEstimator_1_1D.html#0023f5babc813266d60b7916faf019ff">getRemainingFeatures</a>(); <a name="l00724"></a>00724 } </pre></div></div> -<hr size="1"><address style="text-align: right;"><small>Generated on Mon Dec 8 14:37:18 2008 for VampPluginSDK by +<hr size="1"><address style="text-align: right;"><small>Generated on Thu Sep 24 13:40:13 2009 for VampPluginSDK by <a href="http://www.doxygen.org/index.html"> -<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address> </body> </html>