Version 0.9
Added: Filter type "IIR", which allows to specify a user-defined IIR filter of arbitrary order with custom coefficients. Improved: For playback devices, the APO is now installed both as GFX (post-mix) and LFX (pre-mix) APO. Normally the filtering happens in GFX, but the command "Stage" allows to select LFX to apply effects based on the number of input channels. Added: Expression language. The commands "If", "ElseIf", "Else", "EndIf", "Eval" and inline expressions allow to change the filter behaviour based on runtime conditions. Added: Command "Copy", which copies audio data between channels. Added: Command "Delay", which delays the audio on the currently selected channels. Improved: Configuration files are now locked exclusively for writing while reading them. Improved: There is now a transition (10 ms) from old to new configuration after loading. Improved: Substantial internal restructuring to improve extensibility and maintainability. Filtering commands now work exactly in the order they were specified. Fixed: When the microphone input was in stereo but the application requested a mono stream, the audio was heavily distorted. Fixed: The sine sweep generated by the Benchmark application had floating-point precision issues leading to severe artifacts when certain filters were applied.
This commit is contained in:
1 parent
11e52f6210
commit
90ee2b0aa9
89 files changed
+6396
-1375
No files matched your search
+63
-26
@@ -17,20 +17,27 @@
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <stdlib.h>
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
#include <cstdio>
|
||||
#define _USE_MATH_DEFINES
|
||||
#include <cmath>
|
||||
#include <string>
|
||||
#include <sndfile.h>
|
||||
#include <tclap/CmdLine.h>
|
||||
#include <mpParser.h>
|
||||
|
||||
#include "../version.h"
|
||||
#include "../ParametricEQ.h"
|
||||
#include "../LogHelper.h"
|
||||
#include "../StringHelper.h"
|
||||
#include "PerformanceCounter.h"
|
||||
#include "version.h"
|
||||
#include "FilterEngine.h"
|
||||
#include "helpers/LogHelper.h"
|
||||
#include "helpers/StringHelper.h"
|
||||
#include "helpers/PrecisionTimer.h"
|
||||
#include "helpers/MemoryHelper.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace mup;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
@@ -54,13 +61,18 @@ int main(int argc, char** argv)
|
||||
TCLAP::ValueArg<string> inputArg("i", "input", "File to load sound data from instead of generating sweep", false, "", "string", cmd);
|
||||
TCLAP::ValueArg<unsigned> rateArg("r", "rate", "Sample rate of generated sweep (Default: 44100)", false, 44100, "integer", cmd);
|
||||
TCLAP::ValueArg<float> toArg("t", "to", "End frequency of generated sweep in Hz (Default: 20000.0)", false, 20000.0f, "float", cmd);
|
||||
TCLAP::ValueArg<float> fromArg("f", "from", "Start frequency of generated sweep in Hz (Default: 0.1)", false, 0.1f, "float", cmd);
|
||||
TCLAP::ValueArg<float> fromArg("f", "from", "Start frequency of generated sweep in Hz (Default: 0.1)", false, 1.0f, "float", cmd);
|
||||
TCLAP::ValueArg<float> lengthArg("l", "length", "Length of generated sweep in seconds (Default: 200.0)", false, 200.0f, "float", cmd);
|
||||
TCLAP::ValueArg<unsigned> channelArg("c", "channels", "Number of channels of generated sweep (Default: 2)", false, 2, "integer", cmd);
|
||||
|
||||
cmd.parse(argc, argv);
|
||||
|
||||
LogHelper::set(stderr, verboseArg.getValue(), true, true);
|
||||
bool verbose = verboseArg.getValue();
|
||||
LogHelper::set(stderr, verbose, true, true);
|
||||
#ifdef _DEBUG
|
||||
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
||||
//_CrtSetBreakAlloc(3318);
|
||||
#endif
|
||||
|
||||
unsigned sampleRate;
|
||||
unsigned channelCount;
|
||||
@@ -80,8 +92,12 @@ int main(int argc, char** argv)
|
||||
string input = inputArg.getValue();
|
||||
if(input != "")
|
||||
{
|
||||
SF_INFO info;
|
||||
printf("Reading sound data from %s\n", input.c_str());
|
||||
|
||||
PrecisionTimer timer;
|
||||
timer.start();
|
||||
|
||||
SF_INFO info;
|
||||
SNDFILE* inFile = sf_open(input.c_str(), SFM_READ, &info);
|
||||
if(inFile == NULL)
|
||||
{
|
||||
@@ -103,6 +119,9 @@ int main(int argc, char** argv)
|
||||
|
||||
sf_close(inFile);
|
||||
inFile = NULL;
|
||||
|
||||
double readTime = timer.stop();
|
||||
printf("Reading input file took %g seconds\n", readTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -117,32 +136,49 @@ int main(int argc, char** argv)
|
||||
|
||||
printf("No input file given, so generating linear sine sweep from %g to %g Hz over %g seconds\n", sweepFrom, sweepTo, length);
|
||||
|
||||
PrecisionTimer timer;
|
||||
timer.start();
|
||||
|
||||
buf = new float[frameCount * channelCount];
|
||||
for(unsigned i=0; i<frameCount; i++)
|
||||
{
|
||||
double t=i*1.0 / sampleRate;
|
||||
float s = (float)sin(((sweepFrom + sweepDiff*(t/length)/2)*t)*2*M_PI);
|
||||
|
||||
for(unsigned i=0;i<frameCount;i++)
|
||||
for(unsigned j=0;j<channelCount;j++)
|
||||
{
|
||||
float t=(i*1.0f / sampleRate);
|
||||
for(unsigned j=0; j<channelCount; j++)
|
||||
buf[i*channelCount + j] = s;
|
||||
}
|
||||
|
||||
buf[i*channelCount + j] = sin(((sweepFrom + sweepDiff*(t/length)/2)*t)*2*(float)M_PI);
|
||||
}
|
||||
double genTime = timer.stop();
|
||||
printf("Generating sweep took %g seconds\n", genTime);
|
||||
}
|
||||
|
||||
printf("\nProcessing %d frames from %d channel(s)\n", frameCount, channelCount);
|
||||
unsigned batchsize = batchsizeArg.getValue();
|
||||
|
||||
ParametricEQ peq;
|
||||
peq.setDeviceInfo(StringHelper::toWString(devicenameArg.getValue(), CP_ACP),
|
||||
StringHelper::toWString(connectionnameArg.getValue(), CP_ACP),
|
||||
StringHelper::toWString(guidArg.getValue(), CP_ACP));
|
||||
peq.initialize((float)sampleRate, channelCount, channelMask);
|
||||
float* buf2 = new float[frameCount * channelCount];
|
||||
for(unsigned i=0;i<frameCount*channelCount;i++)
|
||||
buf2[i]=0.0f;
|
||||
|
||||
PrecisionTimer timer;
|
||||
timer.start();
|
||||
|
||||
unsigned batchsize = batchsizeArg.getValue();
|
||||
FilterEngine engine;
|
||||
engine.setDeviceInfo(false, StringHelper::toWString(devicenameArg.getValue(), CP_ACP),
|
||||
StringHelper::toWString(connectionnameArg.getValue(), CP_ACP),
|
||||
StringHelper::toWString(guidArg.getValue(), CP_ACP));
|
||||
engine.initialize((float)sampleRate, channelCount, channelCount, channelCount, channelMask, batchsize);
|
||||
|
||||
double initTime = timer.stop();
|
||||
if(!verbose)
|
||||
printf("\nLoading configuration took %g ms\n", initTime * 1000.0);
|
||||
|
||||
printf("\nProcessing %d frames from %d channel(s)\n", frameCount, channelCount);
|
||||
|
||||
timer.start();
|
||||
|
||||
for(unsigned i=0; i<frameCount; i+=batchsize)
|
||||
{
|
||||
peq.process(buf + i*channelCount, buf + i*channelCount, min(batchsize, frameCount - i));
|
||||
engine.process(buf2 + i*channelCount, buf + i*channelCount, min(batchsize, frameCount - i));
|
||||
}
|
||||
|
||||
double time = timer.stop();
|
||||
@@ -154,7 +190,7 @@ int main(int argc, char** argv)
|
||||
float max = 0;
|
||||
for(unsigned i=0; i<frameCount*channelCount; i++)
|
||||
{
|
||||
float f = fabs(buf[i]);
|
||||
float f = fabs(buf2[i]);
|
||||
if(f > max)
|
||||
max = f;
|
||||
if(f > 1.0f)
|
||||
@@ -188,12 +224,13 @@ int main(int argc, char** argv)
|
||||
|
||||
sf_count_t numWritten = 0;
|
||||
while(numWritten < frameCount)
|
||||
numWritten += sf_writef_float(outFile, buf + numWritten * channelCount, frameCount - numWritten);
|
||||
numWritten += sf_writef_float(outFile, buf2 + numWritten * channelCount, frameCount - numWritten);
|
||||
|
||||
sf_close(outFile);
|
||||
outFile = NULL;
|
||||
|
||||
delete[] buf;
|
||||
delete[] buf2;
|
||||
|
||||
if(!noPauseArg.getValue())
|
||||
system("pause");
|
||||
@@ -202,7 +239,7 @@ int main(int argc, char** argv)
|
||||
}
|
||||
catch(TCLAP::ArgException e)
|
||||
{
|
||||
printf("Error: %s for arg %s\n", e.error(), e.argId());
|
||||
printf("Error: %s for arg %s\n", e.error().c_str(), e.argId().c_str());
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
+70
-23
@@ -64,23 +64,23 @@
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(SolutionDir);C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files (x86)\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib64;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(SolutionDir);C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(SolutionDir);C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files (x86)\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib64;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(SolutionDir);C:\Program Files\tclap-1.2.1\include;C:\Program Files\libsndfile\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files\libsndfile\lib;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
@@ -93,7 +93,7 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>muparserxd.lib;version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
@@ -107,7 +107,7 @@
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>muparserxd.lib;version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
@@ -126,7 +126,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>muparserx.lib;version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
@@ -145,24 +145,71 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>muparserx.lib;version.lib;Shlwapi.lib;libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\BiQuad.cpp" />
|
||||
<ClCompile Include="..\LogHelper.cpp" />
|
||||
<ClCompile Include="..\ParametricEQ.cpp" />
|
||||
<ClCompile Include="..\RegistryHelper.cpp" />
|
||||
<ClCompile Include="..\StringHelper.cpp" />
|
||||
<ClCompile Include="..\FilterConfiguration.cpp" />
|
||||
<ClCompile Include="..\FilterEngine.cpp" />
|
||||
<ClCompile Include="..\filters\BiQuad.cpp" />
|
||||
<ClCompile Include="..\filters\BiQuadFilter.cpp" />
|
||||
<ClCompile Include="..\filters\BiQuadFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\ChannelFilter.cpp" />
|
||||
<ClCompile Include="..\filters\ChannelFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\CopyFilter.cpp" />
|
||||
<ClCompile Include="..\filters\CopyFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\DelayFilter.cpp" />
|
||||
<ClCompile Include="..\filters\DelayFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\DeviceFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\ExpressionFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\IfFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\IIRFilter.cpp" />
|
||||
<ClCompile Include="..\filters\IIRFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\IncludeFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\PreampFilter.cpp" />
|
||||
<ClCompile Include="..\filters\PreampFilterFactory.cpp" />
|
||||
<ClCompile Include="..\filters\StageFilterFactory.cpp" />
|
||||
<ClCompile Include="..\helpers\LogHelper.cpp" />
|
||||
<ClCompile Include="..\helpers\MemoryHelper.cpp" />
|
||||
<ClCompile Include="..\helpers\RegistryHelper.cpp" />
|
||||
<ClCompile Include="..\helpers\StringHelper.cpp" />
|
||||
<ClCompile Include="..\IFilter.cpp" />
|
||||
<ClCompile Include="..\parser\RegexFunctions.cpp" />
|
||||
<ClCompile Include="..\parser\RegistryFunctions.cpp" />
|
||||
<ClCompile Include="..\parser\StringOperators.cpp" />
|
||||
<ClCompile Include="Benchmark.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\BiQuad.h" />
|
||||
<ClInclude Include="..\LogHelper.h" />
|
||||
<ClInclude Include="..\ParametricEQ.h" />
|
||||
<ClInclude Include="..\RegistryHelper.h" />
|
||||
<ClInclude Include="..\StringHelper.h" />
|
||||
<ClInclude Include="PerformanceCounter.h" />
|
||||
<ClInclude Include="..\FilterConfiguration.h" />
|
||||
<ClInclude Include="..\FilterEngine.h" />
|
||||
<ClInclude Include="..\filters\BiQuad.h" />
|
||||
<ClInclude Include="..\filters\BiQuadFilter.h" />
|
||||
<ClInclude Include="..\filters\BiQuadFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\ChannelFilter.h" />
|
||||
<ClInclude Include="..\filters\ChannelFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\CopyFilter.h" />
|
||||
<ClInclude Include="..\filters\CopyFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\DelayFilter.h" />
|
||||
<ClInclude Include="..\filters\DelayFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\DeviceFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\ExpressionFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\IfFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\IIRFilter.h" />
|
||||
<ClInclude Include="..\filters\IIRFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\IncludeFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\PreampFilter.h" />
|
||||
<ClInclude Include="..\filters\PreampFilterFactory.h" />
|
||||
<ClInclude Include="..\filters\StageFilterFactory.h" />
|
||||
<ClInclude Include="..\helpers\LogHelper.h" />
|
||||
<ClInclude Include="..\helpers\MemoryHelper.h" />
|
||||
<ClInclude Include="..\helpers\PrecisionTimer.h" />
|
||||
<ClInclude Include="..\helpers\RegistryHelper.h" />
|
||||
<ClInclude Include="..\helpers\StringHelper.h" />
|
||||
<ClInclude Include="..\IFilter.h" />
|
||||
<ClInclude Include="..\IFilterFactory.h" />
|
||||
<ClInclude Include="..\parser\RegexFunctions.h" />
|
||||
<ClInclude Include="..\parser\RegistryFunctions.h" />
|
||||
<ClInclude Include="..\parser\StringOperators.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\FilterEngine.cpp" />
|
||||
<ClCompile Include="Benchmark.cpp" />
|
||||
<ClCompile Include="..\FilterConfiguration.cpp" />
|
||||
<ClCompile Include="..\IFilter.cpp" />
|
||||
<ClCompile Include="..\parser\RegexFunctions.cpp">
|
||||
<Filter>parser</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\parser\RegistryFunctions.cpp">
|
||||
<Filter>parser</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\BiQuad.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\BiQuadFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\BiQuadFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\ChannelFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\ChannelFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\CopyFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\CopyFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\DelayFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\DelayFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\DeviceFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\ExpressionFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\IncludeFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\PreampFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\PreampFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\StageFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\helpers\LogHelper.cpp">
|
||||
<Filter>helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\helpers\MemoryHelper.cpp">
|
||||
<Filter>helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\helpers\RegistryHelper.cpp">
|
||||
<Filter>helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\helpers\StringHelper.cpp">
|
||||
<Filter>helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\IfFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\IIRFilterFactory.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\filters\IIRFilter.cpp">
|
||||
<Filter>filters</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\parser\StringOperators.cpp">
|
||||
<Filter>parser</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\FilterEngine.h" />
|
||||
<ClInclude Include="..\FilterConfiguration.h" />
|
||||
<ClInclude Include="..\IFilterFactory.h" />
|
||||
<ClInclude Include="..\IFilter.h" />
|
||||
<ClInclude Include="..\parser\RegexFunctions.h">
|
||||
<Filter>parser</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\parser\RegistryFunctions.h">
|
||||
<Filter>parser</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\BiQuad.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\BiQuadFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\BiQuadFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\ChannelFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\ChannelFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\CopyFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\CopyFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\DelayFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\DelayFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\DeviceFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\ExpressionFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\IncludeFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\PreampFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\PreampFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\StageFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\helpers\LogHelper.h">
|
||||
<Filter>helpers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\helpers\MemoryHelper.h">
|
||||
<Filter>helpers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\helpers\PrecisionTimer.h">
|
||||
<Filter>helpers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\helpers\RegistryHelper.h">
|
||||
<Filter>helpers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\helpers\StringHelper.h">
|
||||
<Filter>helpers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\IfFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\IIRFilterFactory.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\filters\IIRFilter.h">
|
||||
<Filter>filters</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\parser\StringOperators.h">
|
||||
<Filter>parser</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="parser">
|
||||
<UniqueIdentifier>{af133437-31da-454b-abde-b62ce82af9b1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="filters">
|
||||
<UniqueIdentifier>{80c1c047-44e8-49fc-81d6-349c41e979a7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="helpers">
|
||||
<UniqueIdentifier>{4bf76d90-8b50-493a-848b-019f88fa1f11}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
This file is part of EqualizerAPO, a system-wide equalizer.
|
||||
Copyright (C) 2012 Jonas Thedering
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
class PrecisionTimer
|
||||
{
|
||||
LARGE_INTEGER freq;
|
||||
LARGE_INTEGER startCount;
|
||||
|
||||
public:
|
||||
PrecisionTimer()
|
||||
{
|
||||
QueryPerformanceFrequency(&freq);
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
QueryPerformanceCounter(&startCount);
|
||||
}
|
||||
|
||||
double stop()
|
||||
{
|
||||
LARGE_INTEGER stopCount;
|
||||
QueryPerformanceCounter(&stopCount);
|
||||
|
||||
return double(stopCount.QuadPart - startCount.QuadPart) / freq.QuadPart;
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user