master 3d991fd3c833 cached
157 files
2.1 MB
557.0k tokens
678 symbols
1 requests
Download .txt
Showing preview only (2,228K chars total). Download the full file or copy to clipboard to get everything.
Repository: lordmulder/DynamicAudioNormalizer
Branch: master
Commit: 3d991fd3c833
Files: 157
Total size: 2.1 MB

Directory structure:
gitextract_sinsno6i/

├── .gitignore
├── DynamicAudioNormalizerAPI/
│   ├── DynamicAudioNormalizerAPI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerAPI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerAPI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2017.vcxproj.filters
│   ├── include/
│   │   └── DynamicAudioNormalizer.h
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerAPI.rc
│   └── src/
│       ├── Binding_C.cpp
│       ├── Binding_JNI.cpp
│       ├── DLLMain.cpp
│       ├── DynamicAudioNormalizer.cpp
│       ├── FrameBuffer.cpp
│       ├── FrameBuffer.h
│       ├── GaussianFilter.cpp
│       ├── GaussianFilter.h
│       ├── Logging.cpp
│       ├── Logging.h
│       ├── Test_API.c
│       ├── Version.cpp
│       └── Version.h
├── DynamicAudioNormalizerCLI/
│   ├── DynamicAudioNormalizerCLI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerCLI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerCLI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2017.vcxproj.filters
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerCLI.rc
│   └── src/
│       ├── 3rd_party/
│       │   └── memmem.h
│       ├── AudioIO.cpp
│       ├── AudioIO.h
│       ├── AudioIO_Mpg123.cpp
│       ├── AudioIO_Mpg123.h
│       ├── AudioIO_OpusFile.cpp
│       ├── AudioIO_OpusFile.h
│       ├── AudioIO_SndFile.cpp
│       ├── AudioIO_SndFile.h
│       ├── Main.cpp
│       ├── Parameters.cpp
│       ├── Parameters.h
│       ├── Platform.h
│       ├── Platform_Linux.cpp
│       ├── Platform_OSX.cpp
│       └── Platform_Win32.cpp
├── DynamicAudioNormalizerGUI/
│   ├── DynamicAudioNormalizerGUI.qrc
│   ├── DynamicAudioNormalizerGUI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerGUI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerGUI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2017.vcxproj.filters
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerGUI.rc
│   └── src/
│       ├── 3rd_party/
│       │   ├── qcustomplot.cpp
│       │   └── qcustomplot.h
│       ├── Main.cpp
│       └── WinMain.cpp
├── DynamicAudioNormalizerJNI/
│   ├── .classpath
│   ├── .project
│   ├── build.xml
│   ├── generate_headers.bat
│   ├── include/
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer.h
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Error.h
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Logger.h
│   │   └── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_NativeAPI_r8.h
│   ├── makefile
│   ├── samples/
│   │   └── com/
│   │       └── muldersoft/
│   │           └── dynaudnorm/
│   │               └── samples/
│   │                   ├── AudioFileIO.java
│   │                   └── DynamicAudioNormalizerExample.java
│   ├── src/
│   │   └── com/
│   │       └── muldersoft/
│   │           └── dynaudnorm/
│   │               └── JDynamicAudioNormalizer.java
│   └── test/
│       └── com/
│           └── muldersoft/
│               └── dynaudnorm/
│                   └── test/
│                       └── JDynamicAudioNormalizerTest.java
├── DynamicAudioNormalizerNET/
│   ├── DynamicAudioNormalizerNET_VS2013.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerNET_VS2015.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerNET_VS2017.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerNET.rc
│   ├── samples/
│   │   ├── DynamicAudioNormalizerExample.cs
│   │   ├── DynamicAudioNormalizerExample.vb
│   │   ├── DynamicAudioNormalizerExample_CS.csproj
│   │   ├── DynamicAudioNormalizerExample_VB.vbproj
│   │   ├── DynamicAudioNormalizerExamples.sln
│   │   └── Properties/
│   │       ├── AssemblyInfo.cs
│   │       └── AssemblyInfo.vb
│   └── src/
│       ├── AssemblyInfo.cpp
│       ├── DynamicAudioNormalizerNET.cpp
│       ├── DynamicAudioNormalizerNET.h
│       └── resource.h
├── DynamicAudioNormalizerPAS/
│   ├── DynamicAudioNormalizerPAS.cfg
│   ├── DynamicAudioNormalizerPAS.dof
│   ├── DynamicAudioNormalizerPAS.dpr
│   ├── DynamicAudioNormalizerPAS.res
│   ├── include/
│   │   └── DynamicAudioNormalizer.pas
│   └── src/
│       ├── DynamicAudioNormalizerExample.dfm
│       └── DynamicAudioNormalizerExample.pas
├── DynamicAudioNormalizerPYD/
│   ├── DynamicAudioNormalizerPYD_VS2013.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerPYD_VS2015.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerPYD_VS2017.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2017.vcxproj.filters
│   ├── include/
│   │   └── DynamicAudioNormalizer.py
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerPYD.rc
│   ├── samples/
│   │   ├── DynamicAudioNormalizerExample.py
│   │   └── WaveFileUtils.py
│   └── src/
│       └── DynamicAudioNormalizerPYD.cpp
├── DynamicAudioNormalizerShared/
│   ├── include/
│   │   ├── Common.h
│   │   └── Threads.h
│   └── res/
│       ├── compat.manifest
│       └── version.inc
├── DynamicAudioNormalizerSoX/
│   ├── DynamicAudioNormalizerSoX.c
│   ├── INFO.txt
│   ├── extra/
│   │   ├── main.c
│   │   ├── unicode_support.c
│   │   └── unicode_support.h
│   └── patch/
│       ├── SoX-v14.4.2-Patch1-UnicodeSupport+BuildFix.diff
│       └── SoX-v14.4.2-Patch2-AddDynAudNormEffect.diff
├── DynamicAudioNormalizerVST/
│   ├── DynamicAudioNormalizerVST.def
│   ├── DynamicAudioNormalizerVST_VS2013.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerVST_VS2015.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerVST_VS2017.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerVST.rc
│   └── src/
│       ├── DynamicAudioNormalizerVST.cpp
│       ├── DynamicAudioNormalizerVST.h
│       ├── Spooky.cpp
│       └── Spooky.h
├── DynamicAudioNormalizerWA5/
│   ├── DynamicAudioNormalizerWA5_VS2013.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerWA5_VS2015.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerWA5_VS2017.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerWA5.rc
│   └── src/
│       └── DynamicAudioNormalizerWA5.cpp
├── DynamicAudioNormalizer_VS2013.sln
├── DynamicAudioNormalizer_VS2015.sln
├── DynamicAudioNormalizer_VS2017.props
├── DynamicAudioNormalizer_VS2017.sln
├── LICENSE-GPL2.html
├── LICENSE-GPL3.html
├── LICENSE-LGPL.html
├── Makefile
├── README.md
├── etc/
│   ├── vst_sdk/
│   │   └── VST_SDK_INFO.txt
│   └── winamp_sdk/
│       ├── LICENSE.txt
│       └── include/
│           ├── winamp_dsp.h
│           └── winamp_ipc.h
├── img/
│   └── dyauno/
│       └── Style.inc
├── z_build.bat
└── z_test.bat

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.VC.db
*.bin
*.dcu
*.ddp
*.dll
*.dylib
*.exe
*.local.*
*.o
*.old
*.opendb
*.opensdf
*.sdf
*.so
*.suo
*.user
*.~*
*__pycache__*
*_old_*
/.vs
/DynamicAudioNormalizerGUI/tmp
/DynamicAudioNormalizerJNI/.settings
/DynamicAudioNormalizerJNI/bin
/DynamicAudioNormalizerJNI/out
/DynamicAudioNormalizerNET/samples/bin
/DynamicAudioNormalizerNET/samples/obj
/bin
/doc
/etc/vst_sdk/pluginterfaces
/etc/vst_sdk/public.sdk
/ipch
/obj
/out
/tmp


================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2013.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|Win32">
      <Configuration>Release_DLL</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|x64">
      <Configuration>Release_DLL</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|Win32">
      <Configuration>Release_Static</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|x64">
      <Configuration>Release_Static</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\Binding_JNI.cpp" />
    <ClCompile Include="src\DLLMain.cpp" />
    <ClCompile Include="src\DynamicAudioNormalizer.cpp" />
    <ClCompile Include="src\Test_API.c" />
    <ClCompile Include="src\Binding_C.cpp" />
    <ClCompile Include="src\FrameBuffer.cpp" />
    <ClCompile Include="src\GaussianFilter.cpp" />
    <ClCompile Include="src\Logging.cpp" />
    <ClCompile Include="src\Version.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="include\DynamicAudioNormalizer.h" />
    <ClInclude Include="src\FrameBuffer.h" />
    <ClInclude Include="src\GaussianFilter.h" />
    <ClInclude Include="src\Logging.h" />
    <ClInclude Include="src\Version.h" />
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{376386EE-8268-47E3-A335-7663716E4C60}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>DynamicAudioNormalizerAPI</RootNamespace>
    <ProjectName>DynamicAudioNormalizerAPI</ProjectName>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|x64'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2013.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
    <Filter Include="Internal Header Files">
      <UniqueIdentifier>{eec3c662-ede0-4758-ba9f-e053d0324afa}</UniqueIdentifier>
    </Filter>
    <Filter Include="Public Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\DLLMain.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\GaussianFilter.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Version.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\DynamicAudioNormalizer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\FrameBuffer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Logging.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Test_API.c">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_C.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_JNI.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="src\GaussianFilter.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Version.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\DynamicAudioNormalizer.h">
      <Filter>Public Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\FrameBuffer.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Logging.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
  </ItemGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2015.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|Win32">
      <Configuration>Release_DLL</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|x64">
      <Configuration>Release_DLL</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|Win32">
      <Configuration>Release_Static</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|x64">
      <Configuration>Release_Static</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\Binding_JNI.cpp" />
    <ClCompile Include="src\DLLMain.cpp" />
    <ClCompile Include="src\DynamicAudioNormalizer.cpp" />
    <ClCompile Include="src\Test_API.c" />
    <ClCompile Include="src\Binding_C.cpp" />
    <ClCompile Include="src\FrameBuffer.cpp" />
    <ClCompile Include="src\GaussianFilter.cpp" />
    <ClCompile Include="src\Logging.cpp" />
    <ClCompile Include="src\Version.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="include\DynamicAudioNormalizer.h" />
    <ClInclude Include="src\FrameBuffer.h" />
    <ClInclude Include="src\GaussianFilter.h" />
    <ClInclude Include="src\Logging.h" />
    <ClInclude Include="src\Version.h" />
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{376386EE-8268-47E3-A335-7663716E4C60}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>DynamicAudioNormalizerAPI</RootNamespace>
    <ProjectName>DynamicAudioNormalizerAPI</ProjectName>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|x64'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2015.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
    <Filter Include="Internal Header Files">
      <UniqueIdentifier>{eec3c662-ede0-4758-ba9f-e053d0324afa}</UniqueIdentifier>
    </Filter>
    <Filter Include="Public Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\DLLMain.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\GaussianFilter.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Version.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\DynamicAudioNormalizer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\FrameBuffer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Logging.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Test_API.c">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_C.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_JNI.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="src\GaussianFilter.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Version.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\DynamicAudioNormalizer.h">
      <Filter>Public Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\FrameBuffer.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Logging.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
  </ItemGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2017.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|Win32">
      <Configuration>Release_DLL</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|x64">
      <Configuration>Release_DLL</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|Win32">
      <Configuration>Release_Static</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|x64">
      <Configuration>Release_Static</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\Binding_JNI.cpp" />
    <ClCompile Include="src\DLLMain.cpp" />
    <ClCompile Include="src\DynamicAudioNormalizer.cpp" />
    <ClCompile Include="src\Test_API.c" />
    <ClCompile Include="src\Binding_C.cpp" />
    <ClCompile Include="src\FrameBuffer.cpp" />
    <ClCompile Include="src\GaussianFilter.cpp" />
    <ClCompile Include="src\Logging.cpp" />
    <ClCompile Include="src\Version.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="include\DynamicAudioNormalizer.h" />
    <ClInclude Include="src\FrameBuffer.h" />
    <ClInclude Include="src\GaussianFilter.h" />
    <ClInclude Include="src\Logging.h" />
    <ClInclude Include="src\Version.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="res\DynamicAudioNormalizerAPI.rc">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">true</ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">true</ExcludedFromBuild>
    </ResourceCompile>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{376386EE-8268-47E3-A335-7663716E4C60}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>DynamicAudioNormalizerAPI</RootNamespace>
    <ProjectName>DynamicAudioNormalizerAPI</ProjectName>
    <WindowsTargetPlatformVersion>7.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v141_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
    <Import Project="..\DynamicAudioNormalizer_VS2017.props" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <LinkIncremental>false</LinkIncremental>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
    <Manifest>
      <AdditionalManifestFiles>$(SolutionDir)DynamicAudioNormalizerShared\res\compat.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
    </Manifest>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <ShowProgress Condition="'$(Configuration)|$(Platform)'=='Release|x64'">LinkVerboseLib</ShowProgress>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
    <Manifest>
      <AdditionalManifestFiles>$(SolutionDir)DynamicAudioNormalizerShared\res\compat.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
    </Manifest>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <AdditionalIncludeDirectories>$(ProjectDir)\include;$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerJNI\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\etc\vld\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <Lib>
      <Verbose>true</Verbose>
    </Lib>
    <ProjectReference />
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2017.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
    <Filter Include="Internal Header Files">
      <UniqueIdentifier>{eec3c662-ede0-4758-ba9f-e053d0324afa}</UniqueIdentifier>
    </Filter>
    <Filter Include="Public Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\DLLMain.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\GaussianFilter.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Version.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\DynamicAudioNormalizer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\FrameBuffer.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Logging.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Test_API.c">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_C.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Binding_JNI.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="src\GaussianFilter.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Version.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="include\DynamicAudioNormalizer.h">
      <Filter>Public Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\FrameBuffer.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Logging.h">
      <Filter>Internal Header Files</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="res\DynamicAudioNormalizerAPI.rc">
      <Filter>Resource Files</Filter>
    </ResourceCompile>
  </ItemGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerAPI/include/DynamicAudioNormalizer.h
================================================
/* ================================================================================== */
/* Dynamic Audio Normalizer - Audio Processing Library                                */
/* Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.             */
/*                                                                                    */
/* This library is free software; you can redistribute it and/or                      */
/* modify it under the terms of the GNU Lesser General Public                         */
/* License as published by the Free Software Foundation; either                       */
/* version 2.1 of the License, or (at your option) any later version.                 */
/*                                                                                    */
/* This library 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                  */
/* Lesser General Public License for more details.                                    */
/*                                                                                    */
/* You should have received a copy of the GNU Lesser General Public                   */
/* License along with this library; if not, write to the Free Software                */
/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA     */
/*                                                                                    */
/* http://www.gnu.org/licenses/lgpl-2.1.txt                                           */
/* ================================================================================== */

#pragma once

/*StdLib includes*/
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS
#endif
#include <stdint.h>

/*DLL Export Definitions*/
#ifdef _MSC_VER
#  ifdef MDYNAMICAUDIONORMALIZER_EXPORTS
#    pragma message("MDynamicAudioNormalizer DLL: Export")
#    define MDYNAMICAUDIONORMALIZER_DLL __declspec(dllexport)
#  else
#    ifndef MDYNAMICAUDIONORMALIZER_STATIC
#      pragma message("MDynamicAudioNormalizer DLL: Import")
#      define MDYNAMICAUDIONORMALIZER_DLL __declspec(dllimport)
#    else
#      define MDYNAMICAUDIONORMALIZER_DLL
#    endif
#  endif
#else
#  ifdef __GNUC__
#    ifdef MDYNAMICAUDIONORMALIZER_EXPORTS
#      define MDYNAMICAUDIONORMALIZER_DLL __attribute__ ((visibility ("default")))
#    else
#      define MDYNAMICAUDIONORMALIZER_DLL
#    endif
#  else
#    define MDYNAMICAUDIONORMALIZER_DLL
#  endif
#endif

/*Utility macros*/
#define MDYNAMICAUDIONORMALIZER_GLUE1(X,Y) X##Y
#define MDYNAMICAUDIONORMALIZER_GLUE2(X,Y) MDYNAMICAUDIONORMALIZER_GLUE1(X,Y)

/*Interface version*/
#define MDYNAMICAUDIONORMALIZER_CORE 8
#define MDYNAMICAUDIONORMALIZER_FUNCTION(X) MDYNAMICAUDIONORMALIZER_GLUE2(MDynamicAudioNormalizer_##X##_r, MDYNAMICAUDIONORMALIZER_CORE)
#define MDynamicAudioNormalizer MDYNAMICAUDIONORMALIZER_GLUE2(MDynamicAudioNormalizer_r,MDYNAMICAUDIONORMALIZER_CORE)

/*Callback for log messages*/
typedef void (MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction))(const int logLevel, const char *const message);

/* ================================================================================== */
/* API for C++ application                                                            */
/* ================================================================================== */

#ifdef __cplusplus /*C++ compiler!*/

/*Standard Library include*/
#include <cstdio>

/*Opaque Data Class*/
class MDynamicAudioNormalizer_PrivateData;

/*Dynamic Normalizer Class*/
class MDYNAMICAUDIONORMALIZER_DLL MDynamicAudioNormalizer
{
public:
	/*Constructor & Destructor*/
	MDynamicAudioNormalizer(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec = 500, const uint32_t filterSize = 31, const double peakValue = 0.95, const double maxAmplification = 10.0, const double targetRms = 0.0, const double compressFactor = 0.0, const bool channelsCoupled = true, const bool enableDCCorrection = false, const bool altBoundaryMode = false, FILE *const logFile = NULL);
	virtual ~MDynamicAudioNormalizer(void);
	
	/*Public API*/
	bool initialize(void);
	bool process(const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t &outputSize);
	bool processInplace(double *const *const samplesInOut, const int64_t inputSize, int64_t &outputSize);
	bool flushBuffer(double *const *const samplesOut, const int64_t bufferSize, int64_t &outputSize);
	bool reset(void);
	bool getConfiguration(uint32_t &channels, uint32_t &sampleRate, uint32_t &frameLen, uint32_t &filterSize);
	bool getInternalDelay(int64_t &delayInSamples);

	/*Type definitions*/
	typedef MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction) LogFunction;
	enum { LOG_LEVEL_DBG = 0, LOG_LEVEL_WRN = 1, LOG_LEVEL_ERR = 2 };

	/*Static functions*/
	static void getVersionInfo(uint32_t &major, uint32_t &minor, uint32_t &patch);
	static void getBuildInfo(const char **const date, const char **const time, const char **const compiler, const char **const arch, bool &debug);
	static LogFunction *setLogFunction(LogFunction *const logFunction);

private:
	MDynamicAudioNormalizer(const MDynamicAudioNormalizer&) : p(NULL)  { throw "unsupported"; }
	MDynamicAudioNormalizer &operator=(const MDynamicAudioNormalizer&) { throw "unsupported"; }

	MDynamicAudioNormalizer_PrivateData *const p;
};

#endif /*__cplusplus*/

/* ================================================================================== */
/* API for C applications                                                             */
/* ================================================================================== */

#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/

/*Standard Library include*/
#include <stdio.h>

/*Opaque handle*/
typedef struct MDynamicAudioNormalizer_Handle MDynamicAudioNormalizer_Handle;

/*Global Functions*/
MDYNAMICAUDIONORMALIZER_DLL MDynamicAudioNormalizer_Handle* MDYNAMICAUDIONORMALIZER_FUNCTION(createInstance)(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec, const uint32_t filterSize, const double peakValue, const double maxAmplification, const double targetRms, const double compressFactor, const int channelsCoupled, const int enableDCCorrection, const int altBoundaryMode, FILE *const logFile);
MDYNAMICAUDIONORMALIZER_DLL void MDYNAMICAUDIONORMALIZER_FUNCTION(destroyInstance)(MDynamicAudioNormalizer_Handle **const handle);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(process)(MDynamicAudioNormalizer_Handle *const handle, const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t *const outputSize);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(processInplace)(MDynamicAudioNormalizer_Handle *const handle, double *const *const samplesInOut, const int64_t inputSize, int64_t *const outputSize);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(flushBuffer)(MDynamicAudioNormalizer_Handle *const handle, double *const *const samplesOut, const int64_t bufferSize, int64_t *const outputSize);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(reset)(MDynamicAudioNormalizer_Handle *const handle);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(getConfiguration)(MDynamicAudioNormalizer_Handle *const handle, uint32_t *const channels, uint32_t *const sampleRate, uint32_t *const frameLen, uint32_t *const filterSize);
MDYNAMICAUDIONORMALIZER_DLL int  MDYNAMICAUDIONORMALIZER_FUNCTION(getInternalDelay)(MDynamicAudioNormalizer_Handle *const handle, int64_t *const delayInSamples);
MDYNAMICAUDIONORMALIZER_DLL void MDYNAMICAUDIONORMALIZER_FUNCTION(getVersionInfo)(uint32_t *const major, uint32_t *const minor, uint32_t *const patch);
MDYNAMICAUDIONORMALIZER_DLL void MDYNAMICAUDIONORMALIZER_FUNCTION(getBuildInfo)(const char **const date, const char **const time, const char **const compiler, const char **const arch, int *const debug);
MDYNAMICAUDIONORMALIZER_DLL MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction) *MDYNAMICAUDIONORMALIZER_FUNCTION(setLogFunction)(MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction) *const logFunction);

#ifdef __cplusplus
}
#endif /*__cplusplus*/


================================================
FILE: DynamicAudioNormalizerAPI/makefile
================================================
##############################################################################
# Dynamic Audio Normalizer - Audio Processing Library
# Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
#
# http://www.gnu.org/licenses/lgpl-2.1.txt
##############################################################################

ECHO=echo -e
SHELL=/bin/bash

JAVA_HOME ?= $(shell update-java-alternatives -l 2>/dev/null | grep -oE '[^[:space:]]+$$' || echo "/usr/lib/jvm/default")

##############################################################################
# Constants
##############################################################################

LIBRARY_NAME := libDynamicAudioNormalizerAPI

ifndef API_VERSION
   $(error API_VERSION variable is not set!)
endif

##############################################################################
# JDK Checks
##############################################################################

ifneq ($(MAKECMDGOALS),clean)
   ifneq ($(ENABLE_JNI),false)
      JDK_CHECK := $(shell [ -f $(JAVA_HOME)/include/jni.h ] && echo true || echo false)
      ifneq ($(JDK_CHECK),true)
         $(error File "include/jni.h" not found in JAVA_HOME path!)
      endif
   endif
endif

##############################################################################
# Flags
##############################################################################

DEBUG_BUILD ?= 0
MARCH ?= native

ifeq ($(DEBUG_BUILD), 1)
   CONFIG_NAME = Debug
   CXXFLAGS = -g -O0 -D_DEBUG
else
   CONFIG_NAME = Release
   CXXFLAGS = -O3 -Wall -ffast-math -mfpmath=sse -msse -fomit-frame-pointer -fno-tree-vectorize -DNDEBUG -march=$(MARCH)
endif

ifneq ($(findstring MINGW,$(shell uname -s)),MINGW)
   CXXFLAGS += -fPIC
endif

CXXFLAGS += -std=gnu++11
CXXFLAGS += -fvisibility=hidden
CXXFLAGS += -DMDYNAMICAUDIONORMALIZER_EXPORTS

CXXFLAGS += -I./src
CXXFLAGS += -I./include
CXXFLAGS += -I../DynamicAudioNormalizerShared/include
CXXFLAGS += -I../DynamicAudioNormalizerJNI/include

ifneq ($(ENABLE_JNI),false)
   CXXFLAGS += -I$(JAVA_HOME)/include
   ifeq ($(findstring MINGW,$(shell uname -s)),MINGW)
      CXXFLAGS += -I$(JAVA_HOME)/include/win32
   else ifeq ($(shell uname), Darwin)
      CXXFLAGS += -I$(JAVA_HOME)/include/darwin
   else
      CXXFLAGS += -I$(JAVA_HOME)/include/linux
   endif
else
   CXXFLAGS += -DNO_JAVA_SUPPORT
endif

##############################################################################
# File Names
##############################################################################

ifeq ($(findstring MINGW,$(shell uname -s)),MINGW)
   SO_EXT = dll
   LDXFLAGS += -Wl,--out-implib,$@.a
   SHAREDFLAG = -shared
else ifeq ($(shell uname), Darwin)
   SO_EXT = dylib
   SHAREDFLAG = -dynamiclib
else
   SO_EXT = so
   SHAREDFLAG = -shared
endif

SOURCES_CPP = $(wildcard src/*.cpp)
SOURCES_OBJ = $(patsubst %.cpp,%.o,$(SOURCES_CPP))

LIBRARY_OUT = lib/$(LIBRARY_NAME)-$(API_VERSION)
LIBRARY_BIN = $(LIBRARY_OUT).$(SO_EXT)
LIBRARY_DBG = $(LIBRARY_OUT)-DBG.$(SO_EXT)

##############################################################################
# Rules
##############################################################################

.PHONY: all clean

all: $(LIBRARY_DBG) $(LIBRARY_BIN)

#-------------------------------------------------------------
# Link & Strip
#-------------------------------------------------------------

$(LIBRARY_BIN): $(SOURCES_OBJ)
	@$(ECHO) "\e[1;36m[STR] $@\e[0m"
	@mkdir -p $(dir $@)
	g++ $(SHAREDFLAG) -g0 -o $@ $+ $(LDXFLAGS)
ifeq ($(shell uname), Darwin)
	install_name_tool -id "@loader_path/$(notdir $@)" $@
	strip -u -r -x $@
else
	strip --strip-unneeded $@
endif

$(LIBRARY_DBG): $(SOURCES_OBJ)
	@$(ECHO) "\e[1;36m[LNK] $@\e[0m"
	@mkdir -p $(dir $@)
	g++ $(SHAREDFLAG) -o $@ $+ $(LDXFLAGS)
ifeq ($(shell uname), Darwin)
	install_name_tool -id "@loader_path/$(notdir $@)" $@
endif

#-------------------------------------------------------------
# Compile
#-------------------------------------------------------------

%.o: %.cpp
	@$(ECHO) "\e[1;36m[CXX] $<\e[0m"
	@mkdir -p $(dir $@)
	g++ $(CXXFLAGS) -c $< -o $@

#-------------------------------------------------------------
# Clean
#-------------------------------------------------------------

clean:
	rm -fv $(SOURCES_OBJ)
	rm -rfv ./lib



================================================
FILE: DynamicAudioNormalizerAPI/res/DynamicAudioNormalizerAPI.rc
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "WinResrc.h" //"afxres.h"

#define INC_DYNAUDNORM_VERSION_INTERNAL 0x22b4f8a9
#include "../DynamicAudioNormalizerShared/res/version.inc"

//////////////////////////////////////////////////////////////////////////////////
// Neutral resources
//////////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32

//////////////////////////////////////////////////////////////////////////////////
// Version
//////////////////////////////////////////////////////////////////////////////////

VS_VERSION_INFO VERSIONINFO
 FILEVERSION    VER_DYNAUDNORM_MAJOR,VER_DYNAUDNORM_MINOR_HI,VER_DYNAUDNORM_MINOR_LO,VER_DYNAUDNORM_PATCH
 PRODUCTVERSION VER_DYNAUDNORM_MAJOR,VER_DYNAUDNORM_MINOR_HI,VER_DYNAUDNORM_MINOR_LO,VER_DYNAUDNORM_PATCH
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x3L
#else
 FILEFLAGS 0x2L
#endif
 FILEOS 0x40004L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "000004b0"
        BEGIN
            VALUE "Comments", "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License <http://www.gnu.org/>."
            VALUE "CompanyName", "LoRd_MuldeR <mulder2@gmx.de>"
            VALUE "FileDescription", "DynamicAudioNormalizer Core Library"
            VALUE "FileVersion", VER_DYNAUDNORM_STR
            VALUE "InternalName", "DynamicAudioNormalizerAPI"
            VALUE "LegalCopyright", "Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>"
            VALUE "LegalTrademarks", "This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License <http://www.gnu.org/>"
            VALUE "OriginalFilename", "DynamicAudioNormalizerAPI.dll"
            VALUE "ProductName", "DynamicAudioNormalizer"
            VALUE "ProductVersion", VER_DYNAUDNORM_STR
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0, 1200
    END
END

#endif    // Neutral resources


================================================
FILE: DynamicAudioNormalizerAPI/src/Binding_C.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "DynamicAudioNormalizer.h"

#define INT2BOOL(X) ((X) != 0)

extern "C"
{
	MDynamicAudioNormalizer_Handle* MDYNAMICAUDIONORMALIZER_FUNCTION(createInstance)(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec, const uint32_t filterSize, const double peakValue, const double maxAmplification, const double targetRms, const double compressFactor, const int channelsCoupled, const int enableDCCorrection, const int altBoundaryMode, FILE *const logFile)
	{
		try
		{
			MDynamicAudioNormalizer *const instance = new MDynamicAudioNormalizer(channels, sampleRate, frameLenMsec, filterSize, peakValue, maxAmplification, targetRms, compressFactor, INT2BOOL(channelsCoupled), INT2BOOL(enableDCCorrection), INT2BOOL(altBoundaryMode), logFile);
			if(instance->initialize())
			{
				return reinterpret_cast<MDynamicAudioNormalizer_Handle*>(instance);
			}
			else
			{
				delete instance;
				return NULL;
			}
		}
		catch(...)
		{
			return NULL;
		}
	}

	MDYNAMICAUDIONORMALIZER_DLL void MDYNAMICAUDIONORMALIZER_FUNCTION(destroyInstance)(MDynamicAudioNormalizer_Handle **const handle)
	{
		if(MDynamicAudioNormalizer **const instance = reinterpret_cast<MDynamicAudioNormalizer**>(handle))
		{
			try
			{
				delete (*instance);
				(*instance) = NULL;
			}
			catch(...)
			{
				/*ignore exception*/
			}
		}
	}
	
	int  MDYNAMICAUDIONORMALIZER_FUNCTION(process)(MDynamicAudioNormalizer_Handle *const handle, const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t *const outputSize)
	{
		if (MDynamicAudioNormalizer *const instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->process(samplesIn, samplesOut, inputSize, (*outputSize)) ? 1 : 0;
			}
			catch (...)
			{
				return 0;
			}
		}
		return 0;
	}

	int MDYNAMICAUDIONORMALIZER_FUNCTION(processInplace)(MDynamicAudioNormalizer_Handle *const handle, double *const *const samplesInOut, const int64_t inputSize, int64_t *const outputSize)
	{
		if(MDynamicAudioNormalizer *const instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->processInplace(samplesInOut, inputSize, (*outputSize)) ? 1 : 0;
			}
			catch(...)
			{
				return 0;
			}
		}
		return 0;
	}

	int  MDYNAMICAUDIONORMALIZER_FUNCTION(flushBuffer)(MDynamicAudioNormalizer_Handle *const handle, double *const *const samplesOut, const int64_t bufferSize, int64_t *const outputSize)
	{
		if(MDynamicAudioNormalizer *const instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->flushBuffer(samplesOut, bufferSize, (*outputSize)) ? 1 : 0;
			}
			catch(...)
			{
				return 0;
			}
		}
		return 0;
	}

	int MDYNAMICAUDIONORMALIZER_FUNCTION(reset)(MDynamicAudioNormalizer_Handle *const handle)
	{
		if(MDynamicAudioNormalizer *instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->reset() ? 1 : 0;
			}
			catch(...)
			{
				return 0;
			}
		}
		return 0;
	}

	int MDYNAMICAUDIONORMALIZER_FUNCTION(getConfiguration)(MDynamicAudioNormalizer_Handle *const handle, uint32_t *const channels, uint32_t *const sampleRate, uint32_t *const frameLen, uint32_t *const filterSize)
	{
		if(MDynamicAudioNormalizer *const instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->getConfiguration((*channels), (*sampleRate), (*frameLen), (*filterSize)) ? 1 : 0;
			}
			catch(...)
			{
				return 0;
			}
		}
		return 0;
	}

	int MDYNAMICAUDIONORMALIZER_FUNCTION(getInternalDelay)(MDynamicAudioNormalizer_Handle *const handle, int64_t *const delayInSamples)
	{
		if(MDynamicAudioNormalizer *const instance = reinterpret_cast<MDynamicAudioNormalizer*>(handle))
		{
			try
			{
				return instance->getInternalDelay(*delayInSamples) ? 1 : 0;
			}
			catch(...)
			{
				return 0;
			}
		}
		return 0;
	}

	MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction) *MDYNAMICAUDIONORMALIZER_FUNCTION(setLogFunction)(MDYNAMICAUDIONORMALIZER_FUNCTION(LogFunction) *const logFunction)
	{
		return MDynamicAudioNormalizer::setLogFunction(logFunction);
	}

	void MDYNAMICAUDIONORMALIZER_FUNCTION(getVersionInfo)(uint32_t *const major, uint32_t *const minor, uint32_t *const patch)
	{
		MDynamicAudioNormalizer::getVersionInfo((*major), (*minor), (*patch));
	}

	void MDYNAMICAUDIONORMALIZER_FUNCTION(getBuildInfo)(const char **const date, const char **const time, const char **const compiler, const char **const arch, int *const debug)
	{
		bool isDebug;
		MDynamicAudioNormalizer::getBuildInfo(date, time, compiler, arch, isDebug);
		*debug = isDebug ? 1 : 0;
	}
}


================================================
FILE: DynamicAudioNormalizerAPI/src/Binding_JNI.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "DynamicAudioNormalizer.h"

//Java support?
#ifndef NO_JAVA_SUPPORT

//StdLib
#include <algorithm>
#include <stdexcept>
#include <queue>
#include <climits>

#ifdef __APPLE__
#include <stdlib.h>
#else
#include <malloc.h>
#endif //__APPLE__

//C++11 support
#if (__cplusplus >= 201100L) || (defined(_MSC_VER) && (_MSC_VER > 1600))
#include <unordered_map>
#define MAP_TYPE std::unordered_map
#else
#pragma message "C++11 support *not* enabled"
#include <map>
#define MAP_TYPE std::map
#endif

//Generate the JNI header file name
#define JAVA_HDRNAME_GLUE1(X,Y) <X##_r##Y.h>
#define JAVA_HDRNAME_GLUE2(X,Y) JAVA_HDRNAME_GLUE1(X,Y)
#define JAVA_HDRNAME(X) JAVA_HDRNAME_GLUE2(X, MDYNAMICAUDIONORMALIZER_CORE)

//Generate JNI export names and corresponding helper functions
#define JAVA_FUNCTION_GLUE1(X,Y,Z) X##Y##_##Z
#define JAVA_FUNCTION_GLUE2(X,Y,Z) JAVA_FUNCTION_GLUE1(X,Y,Z)
#define JAVA_FUNCTION(X) JAVA_FUNCTION_GLUE2(Java_com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_00024NativeAPI_1r, MDYNAMICAUDIONORMALIZER_CORE, X)
#define JAVA_FUNCIMPL(X) JAVA_FUNCTION_GLUE2(Impl_com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_00024NativeAPI_1r, MDYNAMICAUDIONORMALIZER_CORE, X)

//JNI Headers
#include JAVA_HDRNAME(com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_NativeAPI)

//Internal
#include <Common.h>
#include <Threads.h>

//Globals
static MY_CRITSEC_INIT(g_javaLock);

///////////////////////////////////////////////////////////////////////////////
// Utility Functions
///////////////////////////////////////////////////////////////////////////////

#define JAVA_FIND_CLASS(VAR,NAME,RET) do \
{ \
	(VAR) = env->FindClass((NAME)); \
	if((VAR) == NULL) \
	{ \
		return (RET); \
	} \
} \
while(0)

#define JAVA_GET_METHOD(VAR,CLASS,NAME,ARGS,RET) do \
{ \
	(VAR) = env->GetMethodID((CLASS), (NAME), (ARGS)); \
	if((VAR) == NULL) \
	{ \
		return (RET); \
	} \
} \
while(0)

#define JAVA_GET_METHOD_STATIC(VAR,CLASS,NAME,ARGS,RET) do \
{ \
	(VAR) = env->GetStaticMethodID((CLASS), (NAME), (ARGS)); \
	if((VAR) == NULL) \
	{ \
		return (RET); \
	} \
} \
while(0)

#define JAVA_MAP_PUT_STRING(MAP,KEY,VAL) do \
{ \
	jstring _key = env->NewStringUTF((KEY)); \
	jstring _val = env->NewStringUTF((VAL)); \
	\
	if(_key && _val) \
	{ \
		jobject _ret = env->CallObjectMethod((MAP), putMethod, _key, _val); \
		if(_ret) env->DeleteLocalRef(_ret); \
	} \
	\
	if(_key) env->DeleteLocalRef(_key); \
	if(_val) env->DeleteLocalRef(_val); \
} \
while(0)

#define JAVA_MAP_PUT_INTEGER(MAP,KEY,VAL) do \
{ \
	jstring _key = env->NewStringUTF((KEY)); \
	jobject _val = javaNewInteger(env, (VAL)); \
	\
	if(_key && _val) \
	{ \
		jobject _ret = env->CallObjectMethod((MAP), putMethod, _key, _val); \
		if(_ret) env->DeleteLocalRef(_ret); \
	} \
	\
	if(_key) env->DeleteLocalRef(_key); \
	if(_val) env->DeleteLocalRef(_val); \
} \
while(0)

#define JAVA_THROW_EXCEPTION(TEXT, RET) do \
{ \
	if(jclass runtimeError = env->FindClass("java/lang/Error")) \
	{ \
		env->ThrowNew(runtimeError, (TEXT)); \
		env->DeleteLocalRef(runtimeError); \
	} \
	else \
	{ \
		abort(); \
	} \
	return (RET); \
} \
while(0)

#define JAVA_TRY_CATCH(FUNC_NAME, RET, ...) \
	try \
	{ \
		return JAVA_FUNCIMPL(FUNC_NAME)(__VA_ARGS__); \
	} \
	catch(std::exception e) \
	{ \
		JAVA_THROW_EXCEPTION(e.what(), (RET)); \
	} \
	catch(...) \
	{ \
		JAVA_THROW_EXCEPTION("An unknown C++ exception has occurred!", (RET)); \
	}

///////////////////////////////////////////////////////////////////////////////
// Create Boxed Type
///////////////////////////////////////////////////////////////////////////////

static jobject javaNewInteger(JNIEnv *env, const jint &value)
{
	jclass integerClass;
	jmethodID valueOfMethod;
	JAVA_FIND_CLASS(integerClass, "java/lang/Integer", NULL);
	JAVA_GET_METHOD_STATIC(valueOfMethod, integerClass, "valueOf", "(I)Ljava/lang/Integer;", NULL);
	jobject const integerObj = env->CallStaticObjectMethod(integerClass, valueOfMethod, value);
	env->DeleteLocalRef(integerClass);
	return integerObj;
}

///////////////////////////////////////////////////////////////////////////////
// Logging  Function
///////////////////////////////////////////////////////////////////////////////

static JavaVM *g_javaLoggingJVM = NULL;
static jobject g_javaLoggingHandler = NULL;

static jboolean javaLogMessage_Helper(JNIEnv *env, const int &level, const char *const message)
{
	jclass loggerClass = NULL;
	jmethodID logMethod = NULL;

	JAVA_FIND_CLASS(loggerClass, "com/muldersoft/dynaudnorm/JDynamicAudioNormalizer$Logger", JNI_FALSE);
	JAVA_GET_METHOD(logMethod, loggerClass, "log", "(ILjava/lang/String;)V", JNI_FALSE);

	jstring text = env->NewStringUTF(message);
	if(text)
	{
		env->CallVoidMethod(g_javaLoggingHandler, logMethod, level, text);
		env->DeleteLocalRef(text);
	}

	env->DeleteLocalRef(loggerClass);
	return JNI_TRUE;
}

static void javaLogMessage(const int logLevel, const char *const message)
{
	MY_CRITSEC_ENTER(g_javaLock);
	if(g_javaLoggingHandler && g_javaLoggingJVM)
	{
		JNIEnv *env = NULL;
		if(g_javaLoggingJVM->GetEnv((void**)&env, JNI_VERSION_1_6) == JNI_OK)
		{
			javaLogMessage_Helper(env, logLevel, message);
		}
	}
	MY_CRITSEC_LEAVE(g_javaLock);
}

static void javaSetLoggingHandler(JNIEnv *env, jobject loggerGlobalReference)
{
	MY_CRITSEC_ENTER(g_javaLock);
	if(g_javaLoggingHandler)
	{
		env->DeleteGlobalRef(g_javaLoggingHandler);
		g_javaLoggingHandler = NULL;
	}
	if(loggerGlobalReference)
	{
		if(env->GetJavaVM(&g_javaLoggingJVM) == 0)
		{
			g_javaLoggingHandler = loggerGlobalReference;
			MDynamicAudioNormalizer::setLogFunction(javaLogMessage);
		}
	}
	MY_CRITSEC_LEAVE(g_javaLock);
}

///////////////////////////////////////////////////////////////////////////////
// Instance Handling
///////////////////////////////////////////////////////////////////////////////

#define MY_RANDOMIZE(X) ((X) = ((((X) * 1103515245) + 12345) & INT32_MAX))
static jint g_nextHandleValue = 0x49A887DC;
static MAP_TYPE<jint, MDynamicAudioNormalizer*> g_instances;

static jint javaCreateHandle(MDynamicAudioNormalizer *const instance)
{
	MY_CRITSEC_ENTER(g_javaLock);

	jint handleValue = MY_RANDOMIZE(g_nextHandleValue);
	uint32_t retryCounter = 0;
	while((handleValue <= 0) || (g_instances.find(handleValue) != g_instances.end()))
	{
		if(++retryCounter >= INT32_MAX)
		{
			handleValue = -1;
			break;
		}
		handleValue = MY_RANDOMIZE(g_nextHandleValue);
	}

	if(handleValue >= 0)
	{
		g_instances.insert(std::pair<jint, MDynamicAudioNormalizer*>(handleValue, instance));
	}

	MY_CRITSEC_LEAVE(g_javaLock);
	return handleValue;
}

static MDynamicAudioNormalizer *javaHandleToInstance(const jint &handleValue, const bool remove = false)
{
	MY_CRITSEC_ENTER(g_javaLock);

	MDynamicAudioNormalizer *instance = NULL;
	if(g_instances.find(handleValue) != g_instances.end())
	{
		instance = g_instances[handleValue];
		if(remove)
		{
			g_instances.erase(handleValue);
		}
	}

	MY_CRITSEC_LEAVE(g_javaLock);
	return instance;
}

///////////////////////////////////////////////////////////////////////////////
// 2D Array Support
///////////////////////////////////////////////////////////////////////////////

static jboolean javaRelease2DArrayElements(JNIEnv *const env, jobjectArray const outerArray, const jsize &countOuter, double **const arrayElements)
{
	jclass doubleArrayClass;
	JAVA_FIND_CLASS(doubleArrayClass, "[D", JNI_FALSE);
	jboolean success = JNI_TRUE;

	for(jsize c = 0; c < countOuter; c++)
	{
		if(arrayElements[c])
		{
			jobject innerArray = env->GetObjectArrayElement(outerArray, jsize(c));
			if(innerArray)
			{
				if(env->IsInstanceOf(innerArray, doubleArrayClass))
				{
					env->ReleaseDoubleArrayElements(static_cast<jdoubleArray>(innerArray), arrayElements[c], 0);
				}
				else
				{
					success = JNI_FALSE; /*element is not a double array*/
				}
				env->DeleteLocalRef(innerArray);
			}
			arrayElements[c] = NULL;
		}
	}

	env->DeleteLocalRef(doubleArrayClass);
	return success;
}

static jboolean javaGet2DArrayElements(JNIEnv *const env, const jobjectArray outerArray, const jsize &countOuter, double **arrayElementsOut, jsize &countInnerOut)
{
	jclass doubleArrayClass;
	JAVA_FIND_CLASS(doubleArrayClass, "[D", JNI_FALSE);
	countInnerOut =  INT32_MAX;
	jboolean success = JNI_TRUE;

	for(jsize c = 0; c < countOuter; c++)
	{
		arrayElementsOut[c] = NULL;
		jobject innerArray = env->GetObjectArrayElement(outerArray, jsize(c));
		if(innerArray)
		{
			if(env->IsInstanceOf(innerArray, doubleArrayClass))
			{
				countInnerOut = std::min(countInnerOut, env->GetArrayLength(static_cast<jdoubleArray>(innerArray)));
				if(!(arrayElementsOut[c] = env->GetDoubleArrayElements(static_cast<jdoubleArray>(innerArray), NULL)))
				{
					success = JNI_FALSE; /*failed to get the array elements*/
				}
			}
			else
			{
				success = JNI_FALSE; /*element is not a double array*/
			}
			env->DeleteLocalRef(innerArray);
		}
	}

	if(!success)
	{
		javaRelease2DArrayElements(env, outerArray, countOuter, arrayElementsOut);
	}

	env->DeleteLocalRef(doubleArrayClass);
	return success;
}

///////////////////////////////////////////////////////////////////////////////
// JNI Functions
///////////////////////////////////////////////////////////////////////////////

static jboolean JAVA_FUNCIMPL(getVersionInfo)(JNIEnv *const env, jintArray versionInfo)
{
	if(versionInfo == NULL)
	{
		return JNI_FALSE;
	}

	if(env->GetArrayLength(versionInfo) == 3)
	{
		if(jint *const versionInfoElements = env->GetIntArrayElements(versionInfo, NULL))
		{
			uint32_t major, minor, patch;
			MDynamicAudioNormalizer::getVersionInfo(major, minor, patch);

			versionInfoElements[0] = (int32_t) std::min(major, uint32_t(INT32_MAX));
			versionInfoElements[1] = (int32_t) std::min(minor, uint32_t(INT32_MAX));
			versionInfoElements[2] = (int32_t) std::min(patch, uint32_t(INT32_MAX));

			env->ReleaseIntArrayElements(versionInfo, versionInfoElements, 0);
			return JNI_TRUE;
		}
	}

	return JNI_FALSE;
}

static jboolean JAVA_FUNCIMPL(getBuildInfo)(JNIEnv *const env, jobject const buildInfo)
{
	if(buildInfo == NULL)
	{
		return JNI_FALSE;
	}

	jclass mapClass = NULL;
	jmethodID putMethod = NULL, clearMethod = NULL;

	JAVA_FIND_CLASS(mapClass, "java/util/Map", JNI_FALSE);
	JAVA_GET_METHOD(putMethod, mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", JNI_FALSE);
	JAVA_GET_METHOD(clearMethod, mapClass, "clear", "()V", JNI_FALSE);

	if(!env->IsInstanceOf(buildInfo, mapClass))
	{
		return JNI_FALSE;
	}

	env->CallVoidMethod(buildInfo, clearMethod);

	const char *date, *time, *compiler, *arch;
	bool debug;
	MDynamicAudioNormalizer::getBuildInfo(&date, &time, &compiler, &arch, debug);

	JAVA_MAP_PUT_STRING(buildInfo, "BuildDate",    date);
	JAVA_MAP_PUT_STRING(buildInfo, "BuildTime",    time);
	JAVA_MAP_PUT_STRING(buildInfo, "Compiler",     compiler);
	JAVA_MAP_PUT_STRING(buildInfo, "Architecture", arch);
	JAVA_MAP_PUT_STRING(buildInfo, "DebugBuild",   debug ? "Yes" : "No");

	env->DeleteLocalRef(mapClass);
	return JNI_TRUE;
}

static jboolean JAVA_FUNCIMPL(setLoggingHandler)(JNIEnv *const env, jobject const loggerObject)
{
	if(loggerObject == NULL)
	{
		javaSetLoggingHandler(env, NULL);
		return JNI_TRUE;
	}

	jclass loggerClass = NULL;
	JAVA_FIND_CLASS(loggerClass, "com/muldersoft/dynaudnorm/JDynamicAudioNormalizer$Logger", JNI_FALSE);

	if(!env->IsInstanceOf(loggerObject, loggerClass))
	{
		return JNI_FALSE;
	}

	jobject globalReference = env->NewGlobalRef(loggerObject);
	if(globalReference)
	{
		javaSetLoggingHandler(env, globalReference);
		return JNI_TRUE;
	}

	env->DeleteLocalRef(loggerClass);
	return JNI_FALSE;
}

static jint JAVA_FUNCIMPL(createInstance)(JNIEnv *const env, const jint &channels, const jint &sampleRate, const jint &frameLenMsec, const jint &filterSize, const jdouble &peakValue, const jdouble &maxAmplification, const jdouble &targetRms, const jdouble &compressFactor, const jboolean &channelsCoupled, const jboolean &enableDCCorrection, const jboolean &altBoundaryMode)
{
	if((channels > 0) && (sampleRate > 0) && (frameLenMsec > 0) & (filterSize > 0))
	{
		MDynamicAudioNormalizer *instance = new MDynamicAudioNormalizer(channels, sampleRate, frameLenMsec, filterSize, peakValue, maxAmplification, targetRms, compressFactor, (channelsCoupled != JNI_FALSE), (enableDCCorrection != JNI_FALSE), (altBoundaryMode != JNI_FALSE));
		if(!instance->initialize())
		{
			delete instance;
			return -1;
		}

		const jint handle = javaCreateHandle(instance);
		if(handle < 0)
		{
			delete instance;
			return -1;
		}

		return handle;
	}
	return -1;
}

static jboolean JAVA_FUNCIMPL(destroyInstance)(JNIEnv *const env, const jint &handle)
{
	if(MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle, true))
	{
		delete instance;
		return JNI_TRUE;
	}

	return JNI_FALSE;
}

static jlong JAVA_FUNCIMPL(process)(JNIEnv *const env, const jint &handle, jobjectArray const samplesIn, jobjectArray const samplesOut, const jlong &inputSize)
{
	if ((handle < 0) || (samplesIn == NULL) || (samplesOut == NULL)  || (inputSize < 1))
	{
		return -1; /*invalid parameters detected*/
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if (instance == NULL)
	{
		return -1; /*invalid handle value*/
	}

	uint32_t channels, sampleRate, frameLen, filterSize;
	if (!instance->getConfiguration(channels, sampleRate, frameLen, filterSize))
	{
		return -1; /*unable to get configuration*/
	}

	if ((env->GetArrayLength(samplesIn) < jint(channels)) || (env->GetArrayLength(samplesOut) < jint(channels)))
	{
		return -1; /*array diemnsion is too small*/
	}

	double **arrayElementsIn  = (double**)alloca(sizeof(double*) * channels);
	jsize arrayLengthIn = 0;
	if (!javaGet2DArrayElements(env, samplesIn, channels, arrayElementsIn, arrayLengthIn))
	{
		return -1; /*failed to retrieve the array elements*/
	}

	double **arrayElementsOut = (double**)alloca(sizeof(double*) * channels);
	jsize arrayLengthOut = 0;
	if (!javaGet2DArrayElements(env, samplesOut, channels, arrayElementsOut, arrayLengthOut))
	{
		return -1; /*failed to retrieve the array elements*/
	}

	int64_t outputSize = 0;
	const bool success = instance->process(arrayElementsIn, arrayElementsOut, std::min(inputSize, std::min(jlong(arrayLengthIn), jlong(arrayLengthOut))), outputSize);

	if (!javaRelease2DArrayElements(env, samplesIn, channels, arrayElementsIn))
	{
		return -1; /*failed to release the array elements*/
	}

	if (!javaRelease2DArrayElements(env, samplesOut, channels, arrayElementsOut))
	{
		return -1; /*failed to release the array elements*/
	}

	return success ? outputSize : (-1);
}

static jlong JAVA_FUNCIMPL(processInplace)(JNIEnv *const env, const jint &handle, jobjectArray const samplesInOut, const jlong &inputSize)
{
	if((handle < 0) || (samplesInOut == NULL) || (inputSize < 1))
	{
		return -1; /*invalid parameters detected*/
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if(instance == NULL)
	{
		return -1; /*invalid handle value*/
	}

	uint32_t channels, sampleRate, frameLen, filterSize;
	if(!instance->getConfiguration(channels, sampleRate, frameLen, filterSize))
	{
		return -1; /*unable to get configuration*/
	}

	if(env->GetArrayLength(samplesInOut) < jint(channels))
	{
		return -1; /*array diemnsion is too small*/
	}

	double **arrayElements = (double**) alloca(sizeof(double*) * channels);
	jsize arrayLength = 0;
	if(!javaGet2DArrayElements(env, samplesInOut, channels, arrayElements, arrayLength))
	{
		return -1; /*failed to retrieve the array elements*/
	}

	int64_t outputSize = 0;
	const bool success = instance->processInplace(arrayElements, std::min(inputSize, jlong(arrayLength)), outputSize);

	if(!javaRelease2DArrayElements(env, samplesInOut, channels, arrayElements))
	{
		return -1; /*failed to release the array elements*/
	}

	return success ? outputSize : (-1);
}

static jlong JAVA_FUNCIMPL(flushBuffer)(JNIEnv *const env, const jint &handle, jobjectArray const samplesOut)
{
	if((handle < 0) || (samplesOut == NULL))
	{
		return -1; /*invalid parameters detected*/
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if(instance == NULL)
	{
		return -1; /*invalid handle value*/
	}

	uint32_t channels, sampleRate, frameLen, filterSize;
	if(!instance->getConfiguration(channels, sampleRate, frameLen, filterSize))
	{
		return -1; /*unable to get configuration*/
	}

	if(env->GetArrayLength(samplesOut) < jint(channels))
	{
		return -1; /*array diemnsion is too small*/
	}

	double **arrayElements = (double**) alloca(sizeof(double*) * channels);
	jsize arrayLength = 0;
	if(!javaGet2DArrayElements(env, samplesOut, channels, arrayElements, arrayLength))
	{
		return -1; /*failed to retrieve the array elements*/
	}

	int64_t outputSize = 0;
	const bool success = instance->flushBuffer(arrayElements, arrayLength, outputSize);

	if(!javaRelease2DArrayElements(env, samplesOut, channels, arrayElements))
	{
		return -1; /*failed to release the array elements*/
	}

	return success ? outputSize : (-1);
}

static jboolean JAVA_FUNCIMPL(reset)(JNIEnv *const env, const jint &handle)
{
	if(handle < 0)
	{
		return JNI_FALSE;
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if(instance == NULL)
	{
		return JNI_FALSE; /*invalid handle value*/
	}

	return instance->reset() ? JNI_TRUE : JNI_FALSE;
}

static jboolean JAVA_FUNCIMPL(getConfiguration)(JNIEnv *const env, const jint &handle, jobject const configuration)
{
	if((handle < 0) || (configuration == NULL))
	{
		return JNI_FALSE;
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if(instance == NULL)
	{
		return JNI_FALSE; /*invalid handle value*/
	}

	jclass mapClass = NULL;
	jmethodID putMethod = NULL, clearMethod = NULL;

	JAVA_FIND_CLASS(mapClass, "java/util/Map", JNI_FALSE);
	JAVA_GET_METHOD(putMethod, mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", JNI_FALSE);
	JAVA_GET_METHOD(clearMethod, mapClass, "clear", "()V", JNI_FALSE);

	if(!env->IsInstanceOf(configuration, mapClass))
	{
		return JNI_FALSE;
	}

	env->CallVoidMethod(configuration, clearMethod);

	uint32_t channels, sampleRate, frameLen, filterSize;
	if(!instance->getConfiguration(channels, sampleRate, frameLen, filterSize))
	{
		return JNI_FALSE;
	}

	JAVA_MAP_PUT_INTEGER(configuration, "channelCount",   static_cast<jint>(channels));
	JAVA_MAP_PUT_INTEGER(configuration, "sampleRate",     static_cast<jint>(sampleRate));
	JAVA_MAP_PUT_INTEGER(configuration, "frameLen",       static_cast<jint>(frameLen));
	JAVA_MAP_PUT_INTEGER(configuration, "filterSize",     static_cast<jint>(filterSize));

	env->DeleteLocalRef(mapClass);
	return JNI_TRUE;
}

static jlong JAVA_FUNCIMPL(getInternalDelay)(JNIEnv *const env, const jint &handle)
{
	if(handle < 0)
	{
		return -1;
	}

	MDynamicAudioNormalizer *const instance = javaHandleToInstance(handle);
	if(instance == NULL)
	{
		return -1; /*invalid handle value*/
	}

	int64_t delayInSamples = 0;
	if(!instance->getInternalDelay(delayInSamples))
	{
		delayInSamples = -1;
	}

	return delayInSamples;
}

///////////////////////////////////////////////////////////////////////////////
// JNI Entry Points
///////////////////////////////////////////////////////////////////////////////

extern "C"
{
	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(getVersionInfo)(JNIEnv *const env, jobject, jintArray versionInfo)
	{
		JAVA_TRY_CATCH(getVersionInfo, JNI_FALSE, env, versionInfo)
	}

	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(getBuildInfo)(JNIEnv *const env, jobject, jobject buildInfo)
	{
		JAVA_TRY_CATCH(getBuildInfo, JNI_FALSE, env, buildInfo)
	}

	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(setLoggingHandler)(JNIEnv *const env, jobject, jobject loggerObject)
	{
		JAVA_TRY_CATCH(setLoggingHandler, JNI_FALSE, env, loggerObject)
	}

	JNIEXPORT jint JNICALL JAVA_FUNCTION(createInstance)(JNIEnv *const env, jobject, jint channels, jint sampleRate, jint frameLenMsec, jint filterSize, jdouble peakValue, jdouble maxAmplification, jdouble targetRms, jdouble compressFactor, jboolean channelsCoupled, jboolean enableDCCorrection, jboolean altBoundaryMode)
	{
		JAVA_TRY_CATCH(createInstance, -1, env, channels, sampleRate, frameLenMsec, filterSize, peakValue, maxAmplification, targetRms, compressFactor, channelsCoupled, enableDCCorrection, altBoundaryMode)
	}

	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(destroyInstance)(JNIEnv *const env, jobject, jint instance)
	{
		JAVA_TRY_CATCH(destroyInstance, JNI_FALSE, env, instance)
	}

	JNIEXPORT jlong JNICALL JAVA_FUNCTION(process)(JNIEnv *const env, jobject,  jint handle, jobjectArray samplesIn, jobjectArray samplesOut, jlong inputSize)
	{
		JAVA_TRY_CATCH(process, -1, env, handle, samplesIn, samplesOut, inputSize)
	}

	JNIEXPORT jlong JNICALL JAVA_FUNCTION(processInplace)(JNIEnv *const env, jobject, jint handle, jobjectArray samplesInOut, jlong inputSize)
	{
		JAVA_TRY_CATCH(processInplace, -1, env, handle, samplesInOut, inputSize)
	}

	JNIEXPORT jlong JNICALL JAVA_FUNCTION(flushBuffer)(JNIEnv *const env, jobject, jint handle, jobjectArray samplesOut)
	{
		JAVA_TRY_CATCH(flushBuffer, -1, env, handle, samplesOut)
	}

	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(reset)(JNIEnv *const env, jobject, jint handle)
	{
		JAVA_TRY_CATCH(reset, JNI_FALSE, env, handle)
	}

	JNIEXPORT jboolean JNICALL JAVA_FUNCTION(getConfiguration)(JNIEnv *const env, jobject, jint handle, jobject configuration)
	{
		JAVA_TRY_CATCH(getConfiguration, JNI_FALSE, env, handle, configuration)
	}

	JNIEXPORT jlong JNICALL JAVA_FUNCTION(getInternalDelay)(JNIEnv *const env, jobject, jint handle)
	{
		JAVA_TRY_CATCH(getInternalDelay, -1, env, handle)
	}
}


#endif //NO_JAVA_SUPPORT



================================================
FILE: DynamicAudioNormalizerAPI/src/DLLMain.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#ifdef _WIN32 /*Win32 only*/
#ifndef MDYNAMICAUDIONORMALIZER_STATIC /*only if building DLL*/

//Windows
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

//VLD
#ifndef __MINGW32__
#include <vld.h>
#endif

BOOL APIENTRY DllMain(HMODULE hModule,DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

#endif //MDYNAMICAUDIONORMALIZER_STATIC
#endif //_WIN32


================================================
FILE: DynamicAudioNormalizerAPI/src/DynamicAudioNormalizer.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS 1
#endif

#include "DynamicAudioNormalizer.h"

#include "Common.h"
#include "FrameBuffer.h"
#include "GaussianFilter.h"
#include "Logging.h"
#include "Version.h"

#include <cmath>
#include <algorithm>
#include <queue>
#include <deque>
#include <cassert>
#include <stdexcept> 
#include <cfloat>
#include <inttypes.h>

///////////////////////////////////////////////////////////////////////////////
// Constants
///////////////////////////////////////////////////////////////////////////////

static const uint32_t CHANNELS_MIN =  1U;
static const uint32_t CHANNELS_MAX = 16U;

static const uint32_t SAMPLERATE_MIN =   8000U;
static const uint32_t SAMPLERATE_MAX = 192000U;

static const uint32_t FRAMELEN_MIN =      32U;
static const uint32_t FRAMELEN_MAX = 2097152U;

///////////////////////////////////////////////////////////////////////////////
// Static Initializer
///////////////////////////////////////////////////////////////////////////////

namespace DYNAUDNORM_NS
{
	class StaticInitializer
	{
	public:
		StaticInitializer(void)
		{
#if defined(_MSC_VER) && (_MSC_VER >= 1800) && (_MSC_VER < 1900) && defined(_M_X64) && (_M_X64 >= 100)
			// FMA3 support in the MSVC 2013 CRT is broken on Vista and Windows 7 RTM (fixed in SP1).
			// See https://connect.microsoft.com/VisualStudio/feedback/details/987093/x64-log-function-uses-vpsrlq-avx-instruction-without-regard-to-operating-system-so-it-crashes-on-vista-x64
			_set_FMA3_enable(0);
#endif
		}
	};
}

static const DYNAUDNORM_NS::StaticInitializer g_static_init;

///////////////////////////////////////////////////////////////////////////////
// Utility Functions
///////////////////////////////////////////////////////////////////////////////

#undef LOG_AMPFACTORS
#ifdef LOG_AMPFACTORS
static void LOG_VALUE(const double &value, const double &prev, const double &curr, const double &next, const uint32_t &channel, const uint32_t &pos)
{
	static FILE *g_myLogfile = FOPEN(TXT("ampFactors.log"), TXT("w"));
	if(g_myLogfile && (channel == 0) && (pos % 10 == 0))
	{
		fprintf(g_myLogfile, "%.8f\t%.8f %.8f %.8f\n", value, prev, curr, next);
	}
}
#else
#define LOG_VALUE(...) ((void)0)
#endif

template<typename T> static inline T LIMIT(const T &min, const T &val, const T &max)
{
	return std::min(max, std::max(min, val));
}

template<typename T> static inline void UPDATE_MAX(T &max, const T &val)
{
	if (val > max) { max = val; }
}

static inline uint32_t FRAME_SIZE(const uint32_t &sampleRate, const uint32_t &frameLenMsec)
{
	const uint32_t frameSize = static_cast<uint32_t>(round(double(sampleRate) * (double(frameLenMsec) / 1000.0)));
	return frameSize + (frameSize % 2);
}

static inline double UPDATE_VALUE(const double &NEW, const double &OLD, const double &aggressiveness)
{
	assert((aggressiveness >= 0.0) && (aggressiveness <= 1.0));
	return (aggressiveness * NEW) + ((1.0 - aggressiveness) * OLD);
}

static inline double FADE(const double &prev, const double &next, const uint32_t &pos, const double *const fadeFactors[2])
{
	return (fadeFactors[0][pos] * prev) + (fadeFactors[1][pos] * next);
}

static inline double BOUND(const double &threshold, const double &val)
{
	const double SQRT_PI = 0.8862269254527580136490837416705725913987747280611935; //sqrt(PI) / 2.0
	return erf(SQRT_PI * (val / threshold)) * threshold;
}

static inline double POW2(const double &value)
{
	return value * value;
}

#define BOOLIFY(X) ((X) ? "YES" : "NO")
#define POW2(X) ((X)*(X))

#define CLEAR_QUEUE(X) do \
{ \
	while(!(X).empty()) (X).pop(); \
} \
while(0)

///////////////////////////////////////////////////////////////////////////////
// MDynamicAudioNormalizer_PrivateData
///////////////////////////////////////////////////////////////////////////////

class MDynamicAudioNormalizer_PrivateData
{
public:
	MDynamicAudioNormalizer_PrivateData(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec, const uint32_t filterSize, const double peakValue, const double maxAmplification, const double targetRms, const double compressThresh, const bool channelsCoupled, const bool enableDCCorrection, const bool altBoundaryMode, FILE *const logFile);
	~MDynamicAudioNormalizer_PrivateData(void);

	bool initialize(void);
	bool process(const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t &outputSize, const bool &bFlush);
	bool flushBuffer(double *const *const samplesOut, const int64_t bufferSize, int64_t &outputSize);
	bool reset(void);
	bool getConfiguration(uint32_t &channels, uint32_t &sampleRate, uint32_t &frameLen, uint32_t &filterSize);
	bool getInternalDelay(int64_t &delayInSamples);

private:
	const uint32_t m_channels;
	const uint32_t m_sampleRate;
	const uint32_t m_frameLen;
	const uint32_t m_filterSize;
	const uint32_t m_prefillLen;
	const uint32_t m_delay;

	const double m_peakValue;
	const double m_maxAmplification;
	const double m_targetRms;
	const double m_compressFactor;

	const bool m_channelsCoupled;
	const bool m_enableDCCorrection;
	const bool m_altBoundaryMode;

	FILE *const m_logFile;
	
	bool m_initialized;
	bool m_flushBuffer;

	DYNAUDNORM_NS::FrameFIFO *m_buffSrc;
	DYNAUDNORM_NS::FrameFIFO *m_buffOut;
	
	int64_t m_delayedSamples;

	uint64_t m_sampleCounterTotal;
	uint64_t m_sampleCounterClips;
	uint64_t m_sampleCounterCompr;

	DYNAUDNORM_NS::FrameBuffer *m_frameBuffer;

	std::deque<double> *m_gainHistory_original;
	std::deque<double> *m_gainHistory_minimum;
	std::deque<double> *m_gainHistory_smoothed;

	std::queue<double> *m_loggingData_original;
	std::queue<double> *m_loggingData_minimum;
	std::queue<double> *m_loggingData_smoothed;

	DYNAUDNORM_NS::GaussianFilter *m_gaussianFilter;

	double *m_prevAmplificationFactor;
	double *m_dcCorrectionValue;
	double *m_compressThreshold;

	double *m_fadeFactors[2];

protected:
	void analyzeFrame(DYNAUDNORM_NS::FrameData *const frame);
	void amplifyFrame(DYNAUDNORM_NS::FrameData *const frame);
	
	double getMaxLocalGain(DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel = UINT32_MAX);
	double findPeakMagnitude(DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel = UINT32_MAX);
	double computeFrameRMS(const DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel = UINT32_MAX);
	double computeFrameStdDev(const DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel = UINT32_MAX);
	void updateGainHistory(const uint32_t &channel, const double &currentGainFactor);
	void perfromDCCorrection(DYNAUDNORM_NS::FrameData *const frame, const bool &isFirstFrame);
	void perfromCompression(DYNAUDNORM_NS::FrameData *const frame, const bool &isFirstFrame);
	void writeLogFile(void);
	void printParameters(void);
	
	static void precalculateFadeFactors(double *const fadeFactors[2], const uint32_t frameLen);
	static double setupCompressThresh(const double &dThreshold);
};

///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
///////////////////////////////////////////////////////////////////////////////

MDynamicAudioNormalizer::MDynamicAudioNormalizer(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec, const uint32_t filterSize, const double peakValue, const double maxAmplification, const double targetRms, const double compressThresh, const bool channelsCoupled, const bool enableDCCorrection, const bool altBoundaryMode, FILE *const logFile)
:
	p(new MDynamicAudioNormalizer_PrivateData(channels, sampleRate, frameLenMsec, filterSize, peakValue, maxAmplification, targetRms, compressThresh, channelsCoupled, enableDCCorrection, altBoundaryMode,logFile))
{
	/*nothing to do here*/
}

MDynamicAudioNormalizer_PrivateData::MDynamicAudioNormalizer_PrivateData(const uint32_t channels, const uint32_t sampleRate, const uint32_t frameLenMsec, const uint32_t filterSize, const double peakValue, const double maxAmplification, const double targetRms, const double compressFactor, const bool channelsCoupled, const bool enableDCCorrection, const bool altBoundaryMode, FILE *const logFile)
:
	m_channels(channels),
	m_sampleRate(sampleRate),
	m_frameLen(FRAME_SIZE(sampleRate, frameLenMsec)),
	m_filterSize(LIMIT(3u, filterSize, 301u)),
	m_prefillLen(m_filterSize / 2u),
	m_delay(m_frameLen * m_filterSize),
	m_peakValue(LIMIT(0.01, peakValue, 1.0)),
	m_maxAmplification(LIMIT(1.0, maxAmplification, 100.0)),
	m_targetRms(LIMIT(0.0, targetRms, 1.0)),
	m_compressFactor(compressFactor ? LIMIT(1.0, compressFactor, 30.0) : 0.0),
	m_channelsCoupled(channelsCoupled),
	m_enableDCCorrection(enableDCCorrection),
	m_altBoundaryMode(altBoundaryMode),
	m_logFile(logFile)
{
	// LOG2_DBG("channels: %u",           channels);
	// LOG2_DBG("sampleRate: %u",         sampleRate);
	// LOG2_DBG("frameLenMsec: %u",       frameLenMsec);
	// LOG2_DBG("filterSize: %u",         filterSize);
	// LOG2_DBG("peakValue: %.4f",        peakValue);
	// LOG2_DBG("maxAmplification: %.4f", maxAmplification);
	// LOG2_DBG("targetRms: %.4f",        targetRms);
	// LOG2_DBG("compressFactor: %.4f",   compressFactor);
	// LOG2_DBG("channelsCoupled: %s",    channelsCoupled    ? "YES" : "NO");
	// LOG2_DBG("enableDCCorrection: %s", enableDCCorrection ? "YES" : "NO");
	// LOG2_DBG("altBoundaryMode: %s",    altBoundaryMode    ? "YES" : "NO");
	// LOG2_DBG("logFile: %p",            logFile);
	
	m_initialized = false;
	m_flushBuffer = false;

	m_buffSrc = NULL;
	m_buffOut = NULL;
	
	m_delayedSamples = 0;
	m_sampleCounterClips = m_sampleCounterTotal = 0;

	m_frameBuffer = NULL;
	m_gaussianFilter = NULL;

	m_gainHistory_original = NULL;
	m_gainHistory_minimum  = NULL;
	m_gainHistory_smoothed = NULL;

	m_loggingData_original = NULL;
	m_loggingData_minimum  = NULL;
	m_loggingData_smoothed = NULL;

	m_prevAmplificationFactor = NULL;
	m_dcCorrectionValue = NULL;
	m_compressThreshold = NULL;

	m_fadeFactors[0] = m_fadeFactors[1] = NULL;
}

MDynamicAudioNormalizer::~MDynamicAudioNormalizer(void)
{
	delete p;
}

MDynamicAudioNormalizer_PrivateData::~MDynamicAudioNormalizer_PrivateData(void)
{
	LOG2_DBG("Processed %" PRIu64 " samples total, clipped %" PRIu64 " samples (%.2f%%).",
		m_sampleCounterTotal,
		m_sampleCounterClips,
		m_sampleCounterTotal ? (double(m_sampleCounterClips) / double(m_sampleCounterTotal) * 100.0) : 0.0
	);

	MY_DELETE(m_buffSrc);
	MY_DELETE(m_buffOut);

	MY_DELETE(m_frameBuffer);
	MY_DELETE(m_gaussianFilter);
	
	MY_DELETE_ARRAY(m_gainHistory_original);
	MY_DELETE_ARRAY(m_gainHistory_minimum );
	MY_DELETE_ARRAY(m_gainHistory_smoothed);

	MY_DELETE_ARRAY(m_loggingData_original);
	MY_DELETE_ARRAY(m_loggingData_minimum );
	MY_DELETE_ARRAY(m_loggingData_smoothed);

	MY_DELETE_ARRAY(m_prevAmplificationFactor);
	MY_DELETE_ARRAY(m_dcCorrectionValue);
	MY_DELETE_ARRAY(m_compressThreshold);

	MY_DELETE_ARRAY(m_fadeFactors[0]);
	MY_DELETE_ARRAY(m_fadeFactors[1]);
}

///////////////////////////////////////////////////////////////////////////////
// Public API
///////////////////////////////////////////////////////////////////////////////

bool MDynamicAudioNormalizer::initialize(void)
{
	try
	{
		return p->initialize();
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer_PrivateData::initialize(void)
{
	if(m_initialized)
	{
		LOG1_WRN("Already initialized -> ignoring!");
		return true;
	}

	if((m_channels < CHANNELS_MIN) || (m_channels > CHANNELS_MAX))
	{
		LOG2_ERR("Invalid or unsupported channel count. Should be in the %u to %u range!", CHANNELS_MIN, CHANNELS_MAX);
		return false;
	}
	if((m_sampleRate < SAMPLERATE_MIN) || (m_sampleRate > SAMPLERATE_MAX))
	{
		LOG2_ERR("Invalid or unsupported sampling rate. Should be in the %u to %u range!", SAMPLERATE_MIN, SAMPLERATE_MAX);
		return false;
	}
	if((m_frameLen < FRAMELEN_MIN) || (m_frameLen > FRAMELEN_MAX))
	{
		LOG2_ERR("Invalid or unsupported frame size. Should be in the %u to %u range!", FRAMELEN_MIN, FRAMELEN_MAX);
		return false;
	}
	if(m_logFile && (ferror(m_logFile) != 0))
	{
		LOG1_WRN("Specified log file has the error indicator set, no logging information will be created!");
	}

	m_buffSrc = new DYNAUDNORM_NS::FrameFIFO(m_channels, m_frameLen);
	m_buffOut = new DYNAUDNORM_NS::FrameFIFO(m_channels, m_frameLen);

	m_frameBuffer = new DYNAUDNORM_NS::FrameBuffer(m_channels, m_frameLen, m_filterSize + 1);

	m_gainHistory_original = new std::deque<double>[m_channels];
	m_gainHistory_minimum  = new std::deque<double>[m_channels];
	m_gainHistory_smoothed = new std::deque<double>[m_channels];

	m_loggingData_original = new std::queue<double>[m_channels];
	m_loggingData_minimum  = new std::queue<double>[m_channels];
	m_loggingData_smoothed = new std::queue<double>[m_channels];

	const double sigma = (((double(m_filterSize) / 2.0) - 1.0) / 3.0) + (1.0 / 3.0);
	m_gaussianFilter = new DYNAUDNORM_NS::GaussianFilter(m_filterSize, sigma);

	m_dcCorrectionValue       = new double[m_channels];
	m_prevAmplificationFactor = new double[m_channels];
	m_compressThreshold       = new double[m_channels];

	m_fadeFactors[0] = new double[m_frameLen];
	m_fadeFactors[1] = new double[m_frameLen];
	
	precalculateFadeFactors(m_fadeFactors, m_frameLen);
	printParameters();

	if(m_logFile)
	{
		fprintf(m_logFile, "DynamicAudioNormalizer Logfile v%u.%02u-%u\n", DYNAUDNORM_NS::VERSION_MAJOR, DYNAUDNORM_NS::VERSION_MINOR, DYNAUDNORM_NS::VERSION_PATCH);
		fprintf(m_logFile, "CHANNEL_COUNT:%u\n\n", m_channels);
	}

	m_initialized = true;
	reset();
	return true;
}

bool MDynamicAudioNormalizer::reset(void)
{
	try
	{
		return p->reset();
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer_PrivateData::reset(void)
{
	//Check audio normalizer status
	if(!m_initialized)
	{
		LOG1_ERR("Not initialized yet. Must call initialize() first!");
		return false;
	}

	m_delayedSamples = 0;
	m_flushBuffer = false;

	m_buffSrc->reset();
	m_buffOut->reset();

	m_frameBuffer->reset();

	for(uint32_t c = 0; c < m_channels; c++)
	{
		m_gainHistory_original[c].clear();
		m_gainHistory_minimum [c].clear();
		m_gainHistory_smoothed[c].clear();

		CLEAR_QUEUE(m_loggingData_original[c]);
		CLEAR_QUEUE(m_loggingData_minimum [c]);
		CLEAR_QUEUE(m_loggingData_smoothed[c]);

		m_dcCorrectionValue      [c] = 0.0;
		m_prevAmplificationFactor[c] = 1.0;
		m_compressThreshold      [c] = 0.0;
	}

	return true;
}

bool MDynamicAudioNormalizer::getConfiguration(uint32_t &channels, uint32_t &sampleRate, uint32_t &frameLen, uint32_t &filterSize)
{
	try
	{
		return p->getConfiguration(channels, sampleRate, frameLen, filterSize);
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer::getInternalDelay(int64_t &delayInSamples)
{
	try
	{
		return p->getInternalDelay(delayInSamples);
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer_PrivateData::getConfiguration(uint32_t &channels, uint32_t &sampleRate, uint32_t &frameLen, uint32_t &filterSize)
{
	//Check audio normalizer status
	if(!m_initialized)
	{
		LOG1_ERR("Not initialized yet. Must call initialize() first!");
		return false;
	}

	channels = m_channels;
	sampleRate = m_sampleRate;
	frameLen = m_frameLen;
	filterSize = m_filterSize;

	return true;
}

bool MDynamicAudioNormalizer_PrivateData::getInternalDelay(int64_t &delayInSamples)
{
	//Check audio normalizer status
	if(!m_initialized)
	{
		LOG1_ERR("Not initialized yet. Must call initialize() first!");
		return false;
	}

	delayInSamples = m_delay; //m_frameLen * m_filterSize;
	return true;
}

bool MDynamicAudioNormalizer::process(const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t &outputSize)
{
	try
	{
		return p->process(samplesIn, samplesOut, inputSize, outputSize, false);
	}
	catch (std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer::processInplace(double *const *const samplesInOut, const int64_t inputSize, int64_t &outputSize)
{
	try
	{
		return p->process(samplesInOut, samplesInOut, inputSize, outputSize, false);
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer_PrivateData::process(const double *const *const samplesIn, double *const *const samplesOut, const int64_t inputSize, int64_t &outputSize, const bool &bFlush)
{
	outputSize = 0;

	//Check audio normalizer status
	if(!m_initialized)
	{
		LOG1_ERR("Not initialized yet. Must call initialize() first!");
		return false;
	}
	if(m_flushBuffer && (!bFlush))
	{
		LOG1_ERR("Must not call processInplace() after flushBuffer(). Call reset() first!");
		return false;
	}

	bool bStop = false;

	uint32_t inputPos = 0;
	uint32_t inputSamplesLeft = static_cast<uint32_t>(LIMIT(int64_t(0), inputSize, int64_t(UINT32_MAX)));
	
	uint32_t outputPos = 0;
	uint32_t outputBufferLeft = 0;

	while(!bStop)
	{
		bStop = true;

		//Read as many input samples as possible
		while((inputSamplesLeft > 0) && (m_buffSrc->samplesLeftPut() > 0))
		{
			bStop = false;
			
			const uint32_t copyLen = std::min(inputSamplesLeft, m_buffSrc->samplesLeftPut());
			m_buffSrc->putSamples(samplesIn, inputPos, copyLen);

			inputPos         += copyLen;
			inputSamplesLeft -= copyLen;
			outputBufferLeft += copyLen;

			if(!bFlush)
			{
				m_delayedSamples += copyLen;
			}
		}

		//Analyze next input frame, if we have enough input
		if(m_buffSrc->samplesLeftGet() >= m_frameLen)
		{
			bStop = false;
			analyzeFrame(m_buffSrc->data());
			
			if(!m_frameBuffer->putFrame(m_buffSrc))
			{
				LOG1_ERR("Failed to append current input frame to internal buffer!");
				return false;
			}

			m_buffSrc->reset();
		}

		//Amplify next output frame, if we have enough output
		if((m_buffOut->samplesLeftPut() >= m_frameLen) && (m_frameBuffer->framesUsed() > 0) && (!m_gainHistory_smoothed[0].empty()))
		{
			bStop = false;
			
			if(!m_frameBuffer->getFrame(m_buffOut))
			{
				LOG1_ERR("Failed to retrieve next output frame from internal buffer!");
				return false;
			}

			amplifyFrame(m_buffOut->data());
		}

		//Write as many output samples as possible
		while((outputBufferLeft > 0) && (m_buffOut->samplesLeftGet() > 0) && (bFlush || (m_delayedSamples > m_delay)))
		{
			bStop = false;

			const uint32_t pending = bFlush ? UINT32_MAX : uint32_t(m_delayedSamples - m_delay);
			const uint32_t copyLen = std::min(std::min(outputBufferLeft, m_buffOut->samplesLeftGet()), pending);
			m_buffOut->getSamples(samplesOut, outputPos, copyLen);

			outputPos        += copyLen;
			outputBufferLeft -= copyLen;
			m_delayedSamples -= copyLen;

			if((m_buffOut->samplesLeftGet() < 1) && (m_buffOut->samplesLeftPut() < 1))
			{
				m_buffOut->reset();
			}
		}
	}

	outputSize = int64_t(outputPos);

	if(inputSamplesLeft > 0)
	{
		LOG1_WRN("No all input samples could be processed -> discarding pending input!");
		return false;
	}

	return true;
}

bool MDynamicAudioNormalizer::flushBuffer(double *const *const samplesOut, const int64_t bufferSize, int64_t &outputSize)
{
	try
	{
		return p->flushBuffer(samplesOut, bufferSize, outputSize);
	}
	catch(std::exception &e)
	{
		LOG1_ERR(e.what());
		return false;
	}
}

bool MDynamicAudioNormalizer_PrivateData::flushBuffer(double *const *const samplesOut, const int64_t bufferSize, int64_t &outputSize)
{
	outputSize = 0;

	//Check audio normalizer status
	if(!m_initialized)
	{
		LOG1_ERR("Not initialized yet. Must call initialize() first!");
		return false;
	}

	m_flushBuffer = true;
	const uint32_t pendingSamples = static_cast<uint32_t>(LIMIT(int64_t(0), std::min(m_delayedSamples, bufferSize), int64_t(UINT32_MAX)));

	if(pendingSamples < 1)
	{
		return true; /*no pending samples left*/
	}

	bool success = false;
	do
	{
		for(uint32_t c = 0; c < m_channels; c++)
		{
			for(uint32_t i = 0; i < pendingSamples; i++)
			{
				samplesOut[c][i] = m_altBoundaryMode ? DBL_EPSILON : ((m_targetRms > DBL_EPSILON) ? std::min(m_peakValue, m_targetRms) : m_peakValue);
				if(m_enableDCCorrection)
				{
					samplesOut[c][i] *= ((i % 2) == 1) ? (-1) : 1;
					samplesOut[c][i] += m_dcCorrectionValue[c];
				}
			}
		}

		success = process(samplesOut, samplesOut, pendingSamples, outputSize, true);
	}
	while(success && (outputSize <= 0));
	
	return success;
}

///////////////////////////////////////////////////////////////////////////////
// Public Static Functions
///////////////////////////////////////////////////////////////////////////////

void MDynamicAudioNormalizer::getVersionInfo(uint32_t &major, uint32_t &minor,uint32_t &patch)
{
	major = DYNAUDNORM_NS::VERSION_MAJOR;
	minor = DYNAUDNORM_NS::VERSION_MINOR;
	patch = DYNAUDNORM_NS::VERSION_PATCH;
}

void MDynamicAudioNormalizer::getBuildInfo(const char **const date, const char **const time, const char **const compiler, const char **const arch, bool &debug)
{
	*date     = DYNAUDNORM_NS::BUILD_DATE;
	*time     = DYNAUDNORM_NS::BUILD_TIME;
	*compiler = DYNAUDNORM_NS::BUILD_COMPILER;
	*arch     = DYNAUDNORM_NS::BUILD_ARCH;
	debug     = bool(DYNAUDNORM_DEBUG);
}

MDynamicAudioNormalizer::LogFunction *MDynamicAudioNormalizer::setLogFunction(MDynamicAudioNormalizer::LogFunction *const logFunction)
{
	return DYNAUDNORM_NS::setLoggingHandler(logFunction);
}

///////////////////////////////////////////////////////////////////////////////
// Procesing Functions
///////////////////////////////////////////////////////////////////////////////

void MDynamicAudioNormalizer_PrivateData::analyzeFrame(DYNAUDNORM_NS::FrameData *const frame)
{
	//Perform DC Correction (optional)
	if(m_enableDCCorrection)
	{
		perfromDCCorrection(frame, m_gainHistory_original[0].empty());
	}

	//Perform compression (optional)
	if(m_compressFactor > DBL_EPSILON)
	{
		perfromCompression(frame, m_gainHistory_original[0].empty());
	}

	//Find the frame's peak sample value
	if(m_channelsCoupled)
	{
		const double currentGainFactor = getMaxLocalGain(frame);
		for(uint32_t c = 0; c < m_channels; c++)
		{
			updateGainHistory(c, currentGainFactor);
		}
	}
	else
	{
		for(uint32_t c = 0; c < m_channels; c++)
		{
			updateGainHistory(c, getMaxLocalGain(frame, c));
		}
	}

	//Write data to the log file
	writeLogFile();
}

void MDynamicAudioNormalizer_PrivateData::amplifyFrame(DYNAUDNORM_NS::FrameData *const frame)
{
	for(uint32_t c = 0; c < m_channels; c++)
	{
		if(m_gainHistory_smoothed[c].empty())
		{
			LOG1_WRN("There are no information available for the current frame!");
			break;
		}

		double *const dataPtr = frame->data(c);
		const double currAmplificationFactor = m_gainHistory_smoothed[c].front();
		m_gainHistory_smoothed[c].pop_front();

		for(uint32_t i = 0; i < m_frameLen; i++)
		{
			const double amplificationFactor = FADE(m_prevAmplificationFactor[c], currAmplificationFactor, i, m_fadeFactors);
			dataPtr[i] *= amplificationFactor;
			LOG_VALUE(amplificationFactor, m_prevAmplificationFactor[c], currAmplificationFactor, nextAmplificationFactor, c, i);
			if(fabs(dataPtr[i]) > m_peakValue)
			{
				m_sampleCounterClips++;
				dataPtr[i] = copysign(m_peakValue, dataPtr[i]); /*fix rare clipping*/
			}
		}
		
		m_prevAmplificationFactor[c] = currAmplificationFactor;
		m_sampleCounterTotal += m_frameLen;
	}
}

///////////////////////////////////////////////////////////////////////////////
// Helper Functions
///////////////////////////////////////////////////////////////////////////////

double MDynamicAudioNormalizer_PrivateData::getMaxLocalGain(DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel)
{
	const double maximumGain = m_peakValue / findPeakMagnitude(frame, channel);
	const double rmsGain = (m_targetRms > DBL_EPSILON) ? (m_targetRms / computeFrameRMS(frame, channel)) : DBL_MAX;
	return BOUND(m_maxAmplification, std::min(maximumGain, rmsGain));
}

double MDynamicAudioNormalizer_PrivateData::findPeakMagnitude(DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel)
{
	double dMax = DBL_EPSILON;

	if (channel == UINT32_MAX)
	{
		for (uint32_t c = 0; c < m_channels; c++)
		{
			double *const dataPtr = frame->data(c);
			for (uint32_t i = 0; i < m_frameLen; i++)
			{
				UPDATE_MAX(dMax, fabs(dataPtr[i]));
			}
		}
	}
	else
	{
		double *const dataPtr = frame->data(channel);
		for (uint32_t i = 0; i < m_frameLen; i++)
		{
			UPDATE_MAX(dMax, fabs(dataPtr[i]));
		}
	}

	return dMax;
}

double MDynamicAudioNormalizer_PrivateData::computeFrameRMS(const DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel)
{
	double rmsValue = 0.0;
	
	if(channel == UINT32_MAX)
	{
		for(uint32_t c = 0; c < m_channels; c++)
		{
			const double *dataPtr = frame->data(c);
			for(uint32_t i = 0; i < m_frameLen; i++)
			{
				rmsValue += POW2(dataPtr[i]);
			}
		}
		rmsValue /= double(m_frameLen * m_channels);
	}
	else
	{
		const double *dataPtr = frame->data(channel);
		for(uint32_t i = 0; i < m_frameLen; i++)
		{
			rmsValue += POW2(dataPtr[i]);
		}
		rmsValue /= double(m_frameLen);
	}

	return std::max(sqrt(rmsValue), DBL_EPSILON);
}

double MDynamicAudioNormalizer_PrivateData::computeFrameStdDev(const DYNAUDNORM_NS::FrameData *const frame, const uint32_t channel)
{
	double variance = 0.0;

	if(channel == UINT32_MAX)
	{
		for(uint32_t c = 0; c < m_channels; c++)
		{
			const double *dataPtr = frame->data(c);
			for(uint32_t i = 0; i < m_frameLen; i++)
			{
				variance += POW2(dataPtr[i]);	//Assume that MEAN is *zero*
			}
		}
		variance /= double((m_channels * m_frameLen) - 1);
	}
	else
	{
		const double *dataPtr = frame->data(channel);
		for(uint32_t i = 0; i < m_frameLen; i++)
		{
			variance += POW2(dataPtr[i]);	//Assume that MEAN is *zero*
		}
		variance /= double(m_frameLen - 1);
	}


	return std::max(sqrt(variance), DBL_EPSILON);
}

void MDynamicAudioNormalizer_PrivateData::updateGainHistory(const uint32_t &channel, const double &currentGainFactor)
{
	//Pre-fill the gain history
	if(m_gainHistory_original[channel].empty() || m_gainHistory_minimum[channel].empty())
	{
		const double initial_value = m_altBoundaryMode ? currentGainFactor : 1.0;
		m_prevAmplificationFactor[channel] = initial_value;
		while(m_gainHistory_original[channel].size() < m_prefillLen)
		{
			m_gainHistory_original[channel].push_back(initial_value);
		}
	}

	//Insert current gain factor
	m_gainHistory_original[channel].push_back(currentGainFactor);
	m_loggingData_original[channel].push     (currentGainFactor);

	//Apply the minimum filter
	while(m_gainHistory_original[channel].size() >= m_filterSize)
	{
		assert(m_gainHistory_original[channel].size() == m_filterSize);
		if (m_gainHistory_minimum[channel].empty())
		{
			double initial_value = m_altBoundaryMode ? m_gainHistory_original[channel].front() : 1.0;
			std::deque<double>::const_iterator input = m_gainHistory_original[channel].begin() + m_prefillLen;
			while (m_gainHistory_minimum[channel].size() < m_prefillLen)
			{
				initial_value = std::min(initial_value, *(++input));
				m_gainHistory_minimum[channel].push_back(initial_value);
			}
		}
		const double minimum = *std::min_element(m_gainHistory_original[channel].begin(), m_gainHistory_original[channel].end());
		m_gainHistory_original[channel].pop_front();
		m_gainHistory_minimum[channel].push_back(minimum);
		m_loggingData_minimum[channel].push(minimum);
	}

	//Apply the Gaussian filter
	while(m_gainHistory_minimum[channel].size() >= m_filterSize)
	{
		assert(m_gainHistory_minimum[channel].size() == m_filterSize);
		const double smoothed = m_gaussianFilter->apply(m_gainHistory_minimum[channel]);
		m_gainHistory_minimum[channel].pop_front();
		m_gainHistory_smoothed[channel].push_back(smoothed);
		m_loggingData_smoothed[channel].push(smoothed);
	}
}

void MDynamicAudioNormalizer_PrivateData::perfromDCCorrection(DYNAUDNORM_NS::FrameData *const frame, const bool &isFirstFrame)
{
	const double diff = 1.0 / double(m_frameLen);

	for(uint32_t c = 0; c < m_channels; c++)
	{
		double *const dataPtr = frame->data(c);
		double currentAverageValue = 0.0;

		for(uint32_t i = 0; i < m_frameLen; i++)
		{
			currentAverageValue += (dataPtr[i] * diff);
		}

		const double prevValue = isFirstFrame ? currentAverageValue : m_dcCorrectionValue[c];
		m_dcCorrectionValue[c] = isFirstFrame ? currentAverageValue : UPDATE_VALUE(currentAverageValue, m_dcCorrectionValue[c], 0.1);

		for(uint32_t i = 0; i < m_frameLen; i++)
		{
			dataPtr[i] -= FADE(prevValue, m_dcCorrectionValue[c], i, m_fadeFactors);
		}
	}
}

void MDynamicAudioNormalizer_PrivateData::perfromCompression(DYNAUDNORM_NS::FrameData *const frame, const bool &isFirstFrame)
{
	if(m_channelsCoupled)
	{
		const double standardDeviation = computeFrameStdDev(frame);
		const double currentThreshold  = std::min(1.0, m_compressFactor * standardDeviation);

		const double prevValue = isFirstFrame ? currentThreshold : m_compressThreshold[0];
		m_compressThreshold[0] = isFirstFrame ? currentThreshold : UPDATE_VALUE(currentThreshold, m_compressThreshold[0], (1.0/3.0));

		const double prevActualThresh = setupCompressThresh(prevValue);
		const double currActualThresh = setupCompressThresh(m_compressThreshold[0]);

		for(uint32_t c = 0; c < m_channels; c++)
		{
			double *const dataPtr = frame->data(c);
			for(uint32_t i = 0; i < m_frameLen; i++)
			{
				const double localThresh = FADE(prevActualThresh, currActualThresh, i, m_fadeFactors);
				dataPtr[i] = copysign(BOUND(localThresh, fabs(dataPtr[i])), dataPtr[i]);
			}
		}
	}
	else
	{
		for(uint32_t c = 0; c < m_channels; c++)
		{
			const double standardDeviation = computeFrameStdDev(frame, c);
			const double currentThreshold  = setupCompressThresh(std::min(1.0,m_compressFactor * standardDeviation));

			const double prevValue = isFirstFrame ? currentThreshold : m_compressThreshold[c];
			m_compressThreshold[c] = isFirstFrame ? currentThreshold : UPDATE_VALUE(currentThreshold, m_compressThreshold[c], (1.0/3.0));

			const double prevActualThresh = setupCompressThresh(prevValue);
			const double currActualThresh = setupCompressThresh(m_compressThreshold[c]);

			double *const dataPtr = frame->data(c);
			for(uint32_t i = 0; i < m_frameLen; i++)
			{
				const double localThresh = FADE(prevActualThresh, currActualThresh, i, m_fadeFactors);
				dataPtr[i] = copysign(BOUND(localThresh, fabs(dataPtr[i])), dataPtr[i]);
			}
		}
	}
}

void MDynamicAudioNormalizer_PrivateData::writeLogFile(void)
{
	bool bIsEmpty = false;
	for (uint32_t c = 0; c < m_channels; c++)
	{
		bIsEmpty = bIsEmpty || m_loggingData_original[c].empty() || m_loggingData_minimum[c].empty() || m_loggingData_smoothed[c].empty();
	}

	while (!bIsEmpty)
	{
		for (uint32_t c = 0; c < m_channels; c++)
		{
			if (m_logFile && (ferror(m_logFile) == 0))
			{
				if (c > 0)
				{
					fprintf(m_logFile, "\t\t");
				}
				fprintf(m_logFile, "%.5f\t%.5f\t%.5f", m_loggingData_original[c].front(), m_loggingData_minimum[c].front(), m_loggingData_smoothed[c].front());
			}
			m_loggingData_original[c].pop();
			m_loggingData_minimum[c].pop();
			m_loggingData_smoothed[c].pop();
			bIsEmpty = bIsEmpty || m_loggingData_original[c].empty() || m_loggingData_minimum[c].empty() || m_loggingData_smoothed[c].empty();
		}
		if (m_logFile && (ferror(m_logFile) == 0))
		{
			fprintf(m_logFile, "\n");
		}
	}

	if(m_logFile && (ferror(m_logFile) != 0))
	{
		if(ferror(m_logFile) != 0)
		{
			LOG1_WRN("Error while writing to log file. No further logging output will be created.");
		}
	}
}

void MDynamicAudioNormalizer_PrivateData::printParameters(void)
{
	LOG1_DBG("------- DynamicAudioNormalizer -------");
	LOG2_DBG("Lib Version          : %u.%02u-%u", DYNAUDNORM_NS::VERSION_MAJOR, DYNAUDNORM_NS::VERSION_MINOR , DYNAUDNORM_NS::VERSION_PATCH);
	LOG2_DBG("m_channels           : %u",         m_channels);
	LOG2_DBG("m_sampleRate         : %u",         m_sampleRate);
	LOG2_DBG("m_frameLen           : %u",         m_frameLen);
	LOG2_DBG("m_filterSize         : %u",         m_filterSize);
	LOG2_DBG("m_peakValue          : %.4f",       m_peakValue);
	LOG2_DBG("m_maxAmplification   : %.4f",       m_maxAmplification);
	LOG2_DBG("m_targetRms          : %.4f",       m_targetRms);
	LOG2_DBG("m_compressFactor     : %.4f",       m_compressFactor);
	LOG2_DBG("m_channelsCoupled    : %s",         BOOLIFY(m_channelsCoupled));
	LOG2_DBG("m_enableDCCorrection : %s",         BOOLIFY(m_enableDCCorrection));
	LOG2_DBG("m_altBoundaryMode    : %s",         BOOLIFY(m_altBoundaryMode));
	LOG1_DBG("------- DynamicAudioNormalizer -------");
}

///////////////////////////////////////////////////////////////////////////////
// Static Utility Functions
///////////////////////////////////////////////////////////////////////////////

void MDynamicAudioNormalizer_PrivateData::precalculateFadeFactors(double *const fadeFactors[2], const uint32_t frameLen)
{
	assert((frameLen > 0) && ((frameLen % 2) == 0));
	const double dStepSize = 1.0 / double(frameLen);

	for(uint32_t pos = 0; pos < frameLen; pos++)
	{
		fadeFactors[0][pos] = 1.0 - (dStepSize * double(pos + 1U));
		fadeFactors[1][pos] = 1.0 - fadeFactors[0][pos];
	}

	//for(uint32_t pos = 0; pos < frameLen; pos++)
	//{
	//	LOG2_DBG("%.8f %.8f %.8f", fadeFactors[0][pos], fadeFactors[1][pos], fadeFactors[0][pos] + fadeFactors[1][pos]);
	//}
}

double MDynamicAudioNormalizer_PrivateData::setupCompressThresh(const double &dThreshold)
{
	if((dThreshold > DBL_EPSILON) && (dThreshold < (1.0 - DBL_EPSILON)))
	{
		double dCurrentThreshold = dThreshold;
		double dStepSize = 1.0;
		while(dStepSize > DBL_EPSILON)
		{
			while((dCurrentThreshold + dStepSize > dCurrentThreshold) && (BOUND(dCurrentThreshold + dStepSize, 1.0) <= dThreshold))
			{
				dCurrentThreshold += dStepSize;
			}
			dStepSize /= 2.0;
		}
		return dCurrentThreshold;
	}
	else
	{
		return dThreshold;
	}
}


================================================
FILE: DynamicAudioNormalizerAPI/src/FrameBuffer.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "FrameBuffer.h"

///////////////////////////////////////////////////////////////////////////////
// Frame Data
///////////////////////////////////////////////////////////////////////////////

DYNAUDNORM_NS::FrameData::FrameData(const uint32_t &channels, const uint32_t &frameLength)
:
	m_channels(channels),
	m_frameLength(frameLength)
{
	m_data = new double*[m_channels];

	for(uint32_t c = 0; c < m_channels; c++)
	{
		m_data[c] = new double[m_frameLength];
	}

	clear();
}

DYNAUDNORM_NS::FrameData::~FrameData(void)
{
	for(uint32_t c = 0; c < m_channels; c++)
	{
		MY_DELETE_ARRAY(m_data[c]);
	}

	MY_DELETE_ARRAY(m_data);
}

void DYNAUDNORM_NS::FrameData::clear(void)
{
	for(uint32_t c = 0; c < m_channels; c++)
	{
		memset(m_data[c], 0, m_frameLength * sizeof(double));
	}
}

///////////////////////////////////////////////////////////////////////////////
// Frame FIFO
///////////////////////////////////////////////////////////////////////////////

DYNAUDNORM_NS::FrameFIFO::FrameFIFO(const uint32_t &channels, const uint32_t &frameLength)
{
	m_data = new DYNAUDNORM_NS::FrameData(channels, frameLength);
	reset(false);
}

DYNAUDNORM_NS::FrameFIFO::~FrameFIFO(void)
{
	MY_DELETE(m_data);
}

void DYNAUDNORM_NS::FrameFIFO::reset(const bool &bForceClear)
{
	if(bForceClear) m_data->clear();
	m_posPut = m_posGet = m_leftGet = 0;
	m_leftPut = m_data->frameLength();
}

///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
///////////////////////////////////////////////////////////////////////////////

DYNAUDNORM_NS::FrameBuffer::FrameBuffer(const uint32_t &channels, const uint32_t &frameLength, const uint32_t &frameCount)
:
	m_channels(channels),
	m_frameLength(frameLength),
	m_frameCount(frameCount)
{
	m_framesFree = m_frameCount;
	m_framesUsed = 0;
	m_posPut = m_posGet = 0;

	m_frames = new DYNAUDNORM_NS::FrameData*[m_frameCount];

	for(uint32_t i = 0; i < m_frameCount; i++)
	{
		m_frames[i] = new DYNAUDNORM_NS::FrameData(m_channels, m_frameLength);
	}
}

DYNAUDNORM_NS::FrameBuffer::~FrameBuffer(void)
{
	for(uint32_t i = 0; i < m_frameCount; i++)
	{
		MY_DELETE(m_frames[i]);
	}

	MY_DELETE_ARRAY(m_frames);
}

///////////////////////////////////////////////////////////////////////////////
// Reset
///////////////////////////////////////////////////////////////////////////////

void DYNAUDNORM_NS::FrameBuffer::reset(void)
{
	m_framesFree = m_frameCount;
	m_framesUsed = 0;
	m_posPut = m_posGet = 0;

	for(uint32_t i = 0; i < m_frameCount; i++)
	{
		m_frames[i]->clear();
	}
}

///////////////////////////////////////////////////////////////////////////////
// Put / Get Frame
///////////////////////////////////////////////////////////////////////////////

bool DYNAUDNORM_NS::FrameBuffer::putFrame(DYNAUDNORM_NS::FrameFIFO *const src)
{
	if((m_framesFree < 1) && (src->samplesLeftGet() < m_frameLength))
	{
		return false;
	}

	src->getSamples(m_frames[m_posPut], 0, m_frameLength);
	m_posPut = ((m_posPut + 1) % m_frameCount);
	
	m_framesUsed++;
	m_framesFree--;

	return true;
}

bool DYNAUDNORM_NS::FrameBuffer::getFrame(DYNAUDNORM_NS::FrameFIFO *const dest)
{
	if((m_framesUsed < 1) && (dest->samplesLeftPut() < m_frameLength))
	{
		return false;
	}

	dest->putSamples(m_frames[m_posGet], 0, m_frameLength);
	m_posGet = ((m_posGet + 1) % m_frameCount);
	
	m_framesUsed--;
	m_framesFree++;

	return true;
}


================================================
FILE: DynamicAudioNormalizerAPI/src/FrameBuffer.h
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#pragma once

#include "Common.h"
#include <cassert>
#include <cstring>
#include <stdint.h>

namespace DYNAUDNORM_NS
{
	class FrameData
	{
	public:
		FrameData(const uint32_t &channels, const uint32_t &frameLength);
		~FrameData(void);

		inline double *data(const uint32_t &channel)
		{
			assert(channel < m_channels);
			return m_data[channel];
		}

		inline const double *data(const uint32_t &channel) const
		{
			assert(channel < m_channels);
			return m_data[channel];
		}

		inline const uint32_t &channels(void) { return m_channels; }
		inline const uint32_t &frameLength(void) { return m_frameLength; }

		inline void write(const double *const *const src, const uint32_t &srcOffset, const uint32_t &destOffset, const uint32_t &length)
		{
			assert(length + destOffset <= m_frameLength);
			for (uint32_t c = 0; c < m_channels; c++)
			{
				memcpy(&m_data[c][destOffset], &src[c][srcOffset], length * sizeof(double));
			}
		}

		inline void write(const FrameData *const src, const uint32_t &srcOffset, const uint32_t &destOffset, const uint32_t &length)
		{
			assert(length + destOffset <= m_frameLength);
			for (uint32_t c = 0; c < m_channels; c++)
			{
				memcpy(&m_data[c][destOffset], &src->data(c)[srcOffset], length * sizeof(double));
			}
		}

		inline void read(double *const *const dest, const uint32_t &destOffset, const uint32_t &srcOffset, const uint32_t &length)
		{
			assert(length + srcOffset <= m_frameLength);
			for (uint32_t c = 0; c < m_channels; c++)
			{
				memcpy(&dest[c][destOffset], &m_data[c][srcOffset], length * sizeof(double));
			}
		}

		inline void read(FrameData *const dest, const uint32_t &destOffset, const uint32_t &srcOffset, const uint32_t &length)
		{
			assert(length + srcOffset <= m_frameLength);
			for (uint32_t c = 0; c < m_channels; c++)
			{
				memcpy(&dest->data(c)[destOffset], &m_data[c][srcOffset], length * sizeof(double));
			}
		}

		void clear(void);

	private:
		FrameData(const FrameData&) : m_channels(0), m_frameLength(0) { throw "unsupported"; }
		FrameData &operator=(const FrameData&) { throw "unsupported"; }

		const uint32_t m_channels;
		const uint32_t m_frameLength;

		double **m_data;
	};

	class FrameFIFO
	{
	public:
		FrameFIFO(const uint32_t &channels, const uint32_t &frameLength);
		~FrameFIFO(void);

		inline uint32_t samplesLeftPut(void) { return m_leftPut; }
		inline uint32_t samplesLeftGet(void) { return m_leftGet; }

		inline void putSamples(const double *const *const src, const uint32_t &srcOffset, const uint32_t &length)
		{
			assert(length <= samplesLeftPut());
			m_data->write(src, srcOffset, m_posPut, length);
			m_posPut += length;
			m_leftPut -= length;
			m_leftGet += length;
		}

		inline void putSamples(const FrameData *const src, const uint32_t &srcOffset, const uint32_t &length)
		{
			assert(length <= samplesLeftPut());
			m_data->write(src, srcOffset, m_posPut, length);
			m_posPut += length;
			m_leftPut -= length;
			m_leftGet += length;
		}

		inline void getSamples(double *const *const dest, const uint32_t &destOffset, const uint32_t &length)
		{
			assert(length <= samplesLeftGet());
			m_data->read(dest, destOffset, m_posGet, length);
			m_posGet += length;
			m_leftGet -= length;
		}

		inline void getSamples(FrameData *const dest, const uint32_t &destOffset, const uint32_t &length)
		{
			assert(length <= samplesLeftGet());
			m_data->read(dest, destOffset, m_posGet, length);
			m_posGet += length;
			m_leftGet -= length;
		}

		inline FrameData *data(void)
		{
			return m_data;
		}

		void reset(const bool &bForceClear = true);

	private:
		FrameData *m_data;

		uint32_t m_posPut;
		uint32_t m_posGet;
		uint32_t m_leftPut;
		uint32_t m_leftGet;
	};

	class FrameBuffer
	{
	public:
		FrameBuffer(const uint32_t &channels, const uint32_t &frameLength, const uint32_t &frameCount);
		~FrameBuffer(void);

		bool putFrame(FrameFIFO *const src);
		bool getFrame(FrameFIFO *const dest);

		inline const uint32_t &channels(void) { return m_channels; }
		inline const uint32_t &frameLength(void) { return m_frameLength; }
		inline const uint32_t &frameCount(void) { return m_frameCount; }

		inline const uint32_t &framesFree(void) { return m_framesFree; }
		inline const uint32_t &framesUsed(void) { return m_framesUsed; }

		void reset(void);

	private:
		FrameBuffer(const FrameBuffer&) : m_channels(0), m_frameLength(0), m_frameCount(0) { throw "unsupported"; }
		FrameBuffer &operator=(const FrameBuffer&) { throw "unsupported"; }

		const uint32_t m_channels;
		const uint32_t m_frameLength;
		const uint32_t m_frameCount;

		uint32_t m_framesFree;
		uint32_t m_framesUsed;

		uint32_t m_posPut;
		uint32_t m_posGet;

		FrameData **m_frames;
	};
}


================================================
FILE: DynamicAudioNormalizerAPI/src/GaussianFilter.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "GaussianFilter.h"

#include "Common.h"

#include <cmath>
#include <cstring>
#include <stdexcept>

static const double s_pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;

///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
///////////////////////////////////////////////////////////////////////////////

DYNAUDNORM_NS::GaussianFilter::GaussianFilter(const uint32_t &filterSize, const double &sigma)
:
	m_filterSize(filterSize)
{
	if((filterSize < 1) || ((filterSize % 2) != 1))
	{
		throw std::runtime_error("Filter size must be a positive and odd value!");
	}
	
	//Allocate weights
	m_weights = new double[filterSize];
	double totalWeight = 0.0;

	//Pre-computer constants
	const uint32_t offset = m_filterSize / 2;
	const double c1 = 1.0 / (sigma * sqrt(2.0 * s_pi));
	const double c2 = 2.0 * pow(sigma, 2.0);

	//Compute weights
	for(uint32_t i = 0; i < m_filterSize; i++)
	{
		const int32_t x = int32_t(i) - int32_t(offset);
		m_weights[i] = c1 * exp(-(pow(x, 2.0) / c2));
		totalWeight += m_weights[i];
	}

	//Adjust weights
	const double adjust = 1.0 / totalWeight;
	for(uint32_t i = 0; i < m_filterSize; i++)
	{
		m_weights[i] *= adjust;
		//LOG_WRN(TXT("Gauss Weight %02u = %.4f"), i, m_weights[i]);
	}
}

DYNAUDNORM_NS::GaussianFilter::~GaussianFilter(void)
{
	MY_DELETE_ARRAY(m_weights);
}

///////////////////////////////////////////////////////////////////////////////
// Apply Filter
///////////////////////////////////////////////////////////////////////////////

double DYNAUDNORM_NS::GaussianFilter::apply(const std::deque<double> &values)
{
	if(values.size() != m_filterSize)
	{
		throw std::runtime_error("Input data has the wrong size!");
	}
	
	uint32_t w = 0;
	double result = 0.0;

	//Apply Gaussian filter
	for(std::deque<double>::const_iterator iter = values.begin(); iter != values.end(); iter++)
	{
		result += (*iter) * m_weights[w++];
	}

	return result;
}


================================================
FILE: DynamicAudioNormalizerAPI/src/GaussianFilter.h
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#pragma once

#include "Common.h"
#include <cstdlib>
#include <stdint.h>
#include <deque>

namespace DYNAUDNORM_NS
{
	class GaussianFilter
	{
	public:
		GaussianFilter(const uint32_t &filterSize, const double &sigma);
		virtual ~GaussianFilter(void);

		double apply(const std::deque<double> &values);

	private:
		const uint32_t m_filterSize;
		double *m_weights;

		GaussianFilter &operator=(const GaussianFilter &) { throw 666; }
	};
}


================================================
FILE: DynamicAudioNormalizerAPI/src/Logging.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "Logging.h"

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

//Internal
#include <Threads.h>

//Stdlib
#include <cstdlib>
#include <cstdio>
#include <cstdarg>

//Globals
static MY_CRITSEC_INIT(g_mutex);
static DYNAUDNORM_NS::LoggingCallback *g_loggingCallback = NULL;
static char g_messageBuffer[1024];

///////////////////////////////////////////////////////////////////////////////
// Logging Functions
///////////////////////////////////////////////////////////////////////////////

DYNAUDNORM_NS::LoggingCallback *DYNAUDNORM_NS::setLoggingHandler(LoggingCallback *const callback)
{
	LoggingCallback *oldValue;

	MY_CRITSEC_ENTER(g_mutex);
	oldValue = g_loggingCallback;
	g_loggingCallback = callback;
	MY_CRITSEC_LEAVE(g_mutex);

	return oldValue;
}

void DYNAUDNORM_NS::postLogMessage(const int &logLevel, const char *const message, ...)
{
	MY_CRITSEC_ENTER(g_mutex);

	if(g_loggingCallback)
	{
		va_list args;
		va_start (args, message);
		vsnprintf(g_messageBuffer, 1024, message, args);
		va_end(args);
		g_loggingCallback(logLevel, g_messageBuffer);
	}

	MY_CRITSEC_LEAVE(g_mutex);
}


================================================
FILE: DynamicAudioNormalizerAPI/src/Logging.h
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#pragma once

#include "Common.h"

namespace DYNAUDNORM_NS
{
	typedef void (LoggingCallback)(const int logLevel, const char *const message);
	LoggingCallback *setLoggingHandler(LoggingCallback *const callback);
	void postLogMessage(const int &logLevel, const char *const message, ...);
}

#define LOG1_DBG(X) DYNAUDNORM_NS::postLogMessage(0, (X))
#define LOG1_WRN(X) DYNAUDNORM_NS::postLogMessage(1, (X))
#define LOG1_ERR(X) DYNAUDNORM_NS::postLogMessage(2, (X))

#define LOG2_DBG(X,...) DYNAUDNORM_NS::postLogMessage(0, (X), __VA_ARGS__)
#define LOG2_WRN(X,...) DYNAUDNORM_NS::postLogMessage(1, (X), __VA_ARGS__)
#define LOG2_ERR(X,...) DYNAUDNORM_NS::postLogMessage(2, (X), __VA_ARGS__)


================================================
FILE: DynamicAudioNormalizerAPI/src/Test_API.c
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "DynamicAudioNormalizer.h"

void MDynamicAudioNormalizer_Test_C_API(void)
{
	MDynamicAudioNormalizer_Handle *handle = MDYNAMICAUDIONORMALIZER_FUNCTION(createInstance)(2, 44100, 500, 31, 0.95, 10.0, 0.0, 0.0, 1, 0, 0, NULL);
	if (handle)
	{
		uint32_t channels, sampleRate, frameLen, filterSize;
		MDYNAMICAUDIONORMALIZER_FUNCTION(getConfiguration)(handle, &channels, &sampleRate, &frameLen, &filterSize);
		MDYNAMICAUDIONORMALIZER_FUNCTION(destroyInstance)(&handle);
	}
}


================================================
FILE: DynamicAudioNormalizerAPI/src/Version.cpp
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#include "Version.h"

#define INC_DYNAUDNORM_VERSION_INTERNAL 0x22b4f8a9
#include "../../DynamicAudioNormalizerShared/res/version.inc"

//Version info
const unsigned int DYNAUDNORM_NS::VERSION_MAJOR = VER_DYNAUDNORM_MAJOR;
const unsigned int DYNAUDNORM_NS::VERSION_MINOR = VER_DYNAUDNORM_MINOR;
const unsigned int DYNAUDNORM_NS::VERSION_PATCH = VER_DYNAUDNORM_PATCH;

//Build date/time
const char *const DYNAUDNORM_NS::BUILD_DATE = __DATE__;
const char *const DYNAUDNORM_NS::BUILD_TIME = __TIME__;

//Compiler detection
const char *const DYNAUDNORM_NS::BUILD_COMPILER =
#if defined(__INTEL_COMPILER)
	#if (__INTEL_COMPILER >= 1600)
		"ICL 16.x";
	#elif (__INTEL_COMPILER >= 1500)
		"ICL 15.x";
	#elif (__INTEL_COMPILER >= 1400)
		"ICL 14.x";
	#elif (__INTEL_COMPILER >= 1300)
		"ICL 13.x";
	#elif (__INTEL_COMPILER >= 1200)
		"ICL 12.x";
	#elif (__INTEL_COMPILER >= 1100)
		"ICL 11.x";
	#elif (__INTEL_COMPILER >= 1000)
		"ICL 10.x";
	#else
		#error Compiler is not supported!
	#endif
#elif defined(_MSC_VER)
	#if (_MSC_VER == 1916)
		#if((_MSC_FULL_VER >= 191627024) && (_MSC_FULL_VER <= 191627034))
			"MSVC 2017.9";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1915)
		#if((_MSC_FULL_VER >= 191526726) && (_MSC_FULL_VER <= 191526732))
			"MSVC 2017.8";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1914)
		#if((_MSC_FULL_VER >= 191426430) && (_MSC_FULL_VER <= 191426433))
			"MSVC 2017.7";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1913)
		#if((_MSC_FULL_VER >= 191326128) && (_MSC_FULL_VER <= 191326132))
			"MSVC 2017.6";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1912)
		#if((_MSC_FULL_VER >= 191225830) && (_MSC_FULL_VER <= 191225835))
			"MSVC 2017.5";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1911)
		#if((_MSC_FULL_VER >= 191125542) && (_MSC_FULL_VER <= 191125547))
			"MSVC 2017.4";
		#elif((_MSC_FULL_VER >= 191125506) && (_MSC_FULL_VER <= 191125508))
			"MSVC 2017.3";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1910)
		#if (_MSC_FULL_VER >= 191025017) && (_MSC_FULL_VER <= 191025019)
			"MSVC 2017.2";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1900)
		#if (_MSC_FULL_VER == 190023026)
			"MSVC 2015";
		#elif (_MSC_FULL_VER == 190023506)
			"MSVC 2015.1";
		#elif (_MSC_FULL_VER == 190023918)
			"MSVC 2015.2";
		#elif (_MSC_FULL_VER >= 190024210) && (_MSC_FULL_VER <= 190024215)
			"MSVC 2015.3";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1800)
		#if (_MSC_FULL_VER == 180021005)
			"MSVC 2013";
		#elif (_MSC_FULL_VER == 180030501)
			"MSVC 2013.2";
		#elif (_MSC_FULL_VER == 180030723)
			"MSVC 2013.3";
		#elif (_MSC_FULL_VER == 180031101)
			"MSVC 2013.4";
		#elif (_MSC_FULL_VER == 180040629)
			"MSVC 2013.5";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1700)
		#if (_MSC_FULL_VER == 170050727)
			"MSVC 2012";
		#elif (_MSC_FULL_VER == 170051106)
			"MSVC 2012.1";
		#elif (_MSC_FULL_VER == 170060315)
			"MSVC 2012.2";
		#elif (_MSC_FULL_VER == 170060610)
			"MSVC 2012.3";
		#elif (_MSC_FULL_VER == 170061030)
			"MSVC 2012.4";
		#else
			#error Compiler version is not supported yet!
		#endif
	#elif (_MSC_VER == 1600)
		#if (_MSC_FULL_VER >= 160040219)
			"MSVC 2010-SP1";
		#else
			"MSVC 2010";
		#endif
	#elif (_MSC_VER == 1500)
		#if (_MSC_FULL_VER >= 150030729)
			"MSVC 2008-SP1";
		#else
			"MSVC 2008";
		#endif
	#else
		#error Compiler is not supported!
	#endif
	// Note: /arch:SSE and /arch:SSE2 are only available for the x86 platform
	#if !defined(_M_X64) && defined(_M_IX86_FP)
		#if (_M_IX86_FP == 1)
			#pragma message("SSE instruction set is enabled!")
		#elif (_M_IX86_FP >= 2)
			#pragma message("SSE2 (or higher) instruction set is enabled!")
		#endif
	#endif
#elif defined(__GNUC__)
	#define GCC_VERSION_GLUE1(X,Y,Z) "GCC " #X "." #Y "." #Z
	#define GCC_VERSION_GLUE2(X,Y,Z) GCC_VERSION_GLUE1(X,Y,Z)
	GCC_VERSION_GLUE2(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
#else
	#error Compiler is not supported!
#endif

//Architecture detection
const char *const DYNAUDNORM_NS::BUILD_ARCH =
#if defined(_M_X64) || defined(__x86_64__)
	"x64";
#elif defined(_M_IX86) || defined(__i386__)
	"x86";
#else
	#error Architecture is not supported!
#endif


================================================
FILE: DynamicAudioNormalizerAPI/src/Version.h
================================================
//////////////////////////////////////////////////////////////////////////////////
// Dynamic Audio Normalizer - Audio Processing Library
// Copyright (c) 2014-2019 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
//
// http://www.gnu.org/licenses/lgpl-2.1.txt
//////////////////////////////////////////////////////////////////////////////////

#pragma once

#include "Common.h"

//=============================================================================
// Version
//=============================================================================

namespace DYNAUDNORM_NS
{
	//Version info
	extern const unsigned int VERSION_MAJOR;
	extern const unsigned int VERSION_MINOR;
	extern const unsigned int VERSION_PATCH;

	//Build date/time
	extern const char *const BUILD_DATE;
	extern const char *const BUILD_TIME;

	//Compiler info
	extern const char *const BUILD_COMPILER;
	extern const char *const BUILD_ARCH;
}


================================================
FILE: DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2013.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|Win32">
      <Configuration>Release_DLL</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|Win32">
      <Configuration>Release_Static</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\AudioIO.cpp" />
    <ClCompile Include="src\AudioIO_Mpg123.cpp" />
    <ClCompile Include="src\AudioIO_SndFile.cpp" />
    <ClCompile Include="src\Main.cpp" />
    <ClCompile Include="src\Parameters.cpp" />
    <ClCompile Include="src\Platform_Linux.cpp" />
    <ClCompile Include="src\Platform_Win32.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\DynamicAudioNormalizerShared\include\Common.h" />
    <ClInclude Include="src\AudioIO.h" />
    <ClInclude Include="src\AudioIO_Mpg123.h" />
    <ClInclude Include="src\AudioIO_SndFile.h" />
    <ClInclude Include="src\Parameters.h" />
    <ClInclude Include="src\Platform.h" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\DynamicAudioNormalizerAPI\DynamicAudioNormalizerAPI_VS2013.vcxproj">
      <Project>{376386ee-8268-47e3-a335-7663716e4c60}</Project>
      <Private>true</Private>
      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
      <LinkLibraryDependencies>true</LinkLibraryDependencies>
      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
    </ProjectReference>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{5B755CC3-EC17-490F-AE82-CBC16E2EB143}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>DynamicAudioNormalizerCLI</RootNamespace>
    <ProjectName>DynamicAudioNormalizerCLI</ProjectName>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerAPI\include;$(SolutionDir)\..\Prerequisites\PthreadsW32\include;$(SolutionDir)\..\Prerequisites\LibSndFile\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(SolutionDir)\..\Prerequisites\LibMpg123\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\LibSndFile\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\LibMpg123\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>libsndfile-1.lib;libmpg123.$(PlatformToolset).lib;%(AdditionalDependencies)</AdditionalDependencies>
      <ShowProgress>LinkVerboseLib</ShowProgress>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerAPI\include;$(SolutionDir)\..\Prerequisites\PthreadsW32\include;$(SolutionDir)\..\Prerequisites\LibSndFile\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(SolutionDir)\..\Prerequisites\LibMpg123\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\PthreadsW32\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\LibSndFile\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\LibMpg123\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\VisualLeaksDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>libsndfile-1.lib;libmpg123.$(PlatformToolset).lib;%(AdditionalDependencies)</AdditionalDependencies>
      <ShowProgress>LinkVerboseLib</ShowProgress>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;MDYNAMICAUDIONORMALIZER_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerAPI\include;$(SolutionDir)\..\Prerequisites\PthreadsW32\include;$(SolutionDir)\..\Prerequisites\LibSndFile\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(SolutionDir)\..\Prerequisites\LibMpg123\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <OmitFramePointers>true</OmitFramePointers>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <FloatingPointModel>Fast</FloatingPointModel>
      <WholeProgramOptimization>true</WholeProgramOptimization>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\PthreadsW32\lib\Win32\static;$(SolutionDir)\..\Prerequisites\LibSndFile\lib\$(Platform)\static;$(SolutionDir)\..\Prerequisites\VisualLeaksDetector\lib\$(Platform);$(SolutionDir)\..\Prerequisites\XiphAudioLibs\lib\$(Platform)\static;$(SolutionDir)\..\Prerequisites\LibMpg123\lib\Win32\static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>libsndfile_msvc.$(PlatformToolset).lib;libogg_static.$(PlatformToolset).lib;libvorbis_static.$(PlatformToolset).lib;libFLAC_static.$(PlatformToolset).lib;libmpg123.$(PlatformToolset).lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <ShowProgress>LinkVerboseLib</ShowProgress>
    </Link>
  </ItemDefinitionGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2013.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\Main.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Parameters.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Platform_Linux.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\Platform_Win32.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\AudioIO_SndFile.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\AudioIO.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="src\AudioIO_Mpg123.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="src\Parameters.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="..\DynamicAudioNormalizerShared\include\Common.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\Platform.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\AudioIO.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\AudioIO_SndFile.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="src\AudioIO_Mpg123.h">
      <Filter>Header Files</Filter>
    </ClInclude>
  </ItemGroup>
</Project>

================================================
FILE: DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2015.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_DLL|Win32">
      <Configuration>Release_DLL</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release_Static|Win32">
      <Configuration>Release_Static</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\AudioIO.cpp" />
    <ClCompile Include="src\AudioIO_Mpg123.cpp" />
    <ClCompile Include="src\AudioIO_SndFile.cpp" />
    <ClCompile Include="src\Main.cpp" />
    <ClCompile Include="src\Parameters.cpp" />
    <ClCompile Include="src\Platform_Linux.cpp" />
    <ClCompile Include="src\Platform_Win32.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\DynamicAudioNormalizerShared\include\Common.h" />
    <ClInclude Include="src\AudioIO.h" />
    <ClInclude Include="src\AudioIO_Mpg123.h" />
    <ClInclude Include="src\AudioIO_SndFile.h" />
    <ClInclude Include="src\Parameters.h" />
    <ClInclude Include="src\Platform.h" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\DynamicAudioNormalizerAPI\DynamicAudioNormalizerAPI_VS2015.vcxproj">
      <Project>{376386ee-8268-47e3-a335-7663716e4c60}</Project>
      <Private>true</Private>
      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
      <LinkLibraryDependencies>true</LinkLibraryDependencies>
      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
    </ProjectReference>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{5B755CC3-EC17-490F-AE82-CBC16E2EB143}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>DynamicAudioNormalizerCLI</RootNamespace>
    <ProjectName>DynamicAudioNormalizerCLI</ProjectName>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v140_xp</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)\bin\$(Platform)\$(PlatformToolset)\$(Configuration)\</OutDir>
    <IntDir>$(SolutionDir)\obj\$(ProjectName)\$(Platform)\$(PlatformToolset)\$(Configuration)\</IntDir>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>$(SolutionDir)\DynamicAudioNormalizerShared\include;$(SolutionDir)\DynamicAudioNormalizerAPI\include;$(SolutionDir)\..\Prerequisites\PthreadsW32\include;$(SolutionDir)\..\Prerequisites\LibSndFile\include;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\include;$(SolutionDir)\..\Prerequisites\LibMpg123\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
      <OmitFramePointers>false</OmitFramePointers>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <ExceptionHandling>Sync</ExceptionHandling>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>$(SolutionDir)\..\Prerequisites\LibSndFile\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\LibMpg123\lib\$(Platform)\shared;$(SolutionDir)\..\Prerequisites\VisualLeakDetector\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>libsndfile-1.lib;libmpg123.$(PlatformToolset).lib;%(AdditionalDependencies)</AdditionalDependencies>
      <ShowProgress>LinkVerboseLib</ShowProgress>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_DLL|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <
Download .txt
gitextract_sinsno6i/

├── .gitignore
├── DynamicAudioNormalizerAPI/
│   ├── DynamicAudioNormalizerAPI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerAPI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerAPI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerAPI_VS2017.vcxproj.filters
│   ├── include/
│   │   └── DynamicAudioNormalizer.h
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerAPI.rc
│   └── src/
│       ├── Binding_C.cpp
│       ├── Binding_JNI.cpp
│       ├── DLLMain.cpp
│       ├── DynamicAudioNormalizer.cpp
│       ├── FrameBuffer.cpp
│       ├── FrameBuffer.h
│       ├── GaussianFilter.cpp
│       ├── GaussianFilter.h
│       ├── Logging.cpp
│       ├── Logging.h
│       ├── Test_API.c
│       ├── Version.cpp
│       └── Version.h
├── DynamicAudioNormalizerCLI/
│   ├── DynamicAudioNormalizerCLI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerCLI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerCLI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerCLI_VS2017.vcxproj.filters
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerCLI.rc
│   └── src/
│       ├── 3rd_party/
│       │   └── memmem.h
│       ├── AudioIO.cpp
│       ├── AudioIO.h
│       ├── AudioIO_Mpg123.cpp
│       ├── AudioIO_Mpg123.h
│       ├── AudioIO_OpusFile.cpp
│       ├── AudioIO_OpusFile.h
│       ├── AudioIO_SndFile.cpp
│       ├── AudioIO_SndFile.h
│       ├── Main.cpp
│       ├── Parameters.cpp
│       ├── Parameters.h
│       ├── Platform.h
│       ├── Platform_Linux.cpp
│       ├── Platform_OSX.cpp
│       └── Platform_Win32.cpp
├── DynamicAudioNormalizerGUI/
│   ├── DynamicAudioNormalizerGUI.qrc
│   ├── DynamicAudioNormalizerGUI_VS2013.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerGUI_VS2015.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerGUI_VS2017.vcxproj
│   ├── DynamicAudioNormalizerGUI_VS2017.vcxproj.filters
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerGUI.rc
│   └── src/
│       ├── 3rd_party/
│       │   ├── qcustomplot.cpp
│       │   └── qcustomplot.h
│       ├── Main.cpp
│       └── WinMain.cpp
├── DynamicAudioNormalizerJNI/
│   ├── .classpath
│   ├── .project
│   ├── build.xml
│   ├── generate_headers.bat
│   ├── include/
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer.h
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Error.h
│   │   ├── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Logger.h
│   │   └── com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_NativeAPI_r8.h
│   ├── makefile
│   ├── samples/
│   │   └── com/
│   │       └── muldersoft/
│   │           └── dynaudnorm/
│   │               └── samples/
│   │                   ├── AudioFileIO.java
│   │                   └── DynamicAudioNormalizerExample.java
│   ├── src/
│   │   └── com/
│   │       └── muldersoft/
│   │           └── dynaudnorm/
│   │               └── JDynamicAudioNormalizer.java
│   └── test/
│       └── com/
│           └── muldersoft/
│               └── dynaudnorm/
│                   └── test/
│                       └── JDynamicAudioNormalizerTest.java
├── DynamicAudioNormalizerNET/
│   ├── DynamicAudioNormalizerNET_VS2013.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerNET_VS2015.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerNET_VS2017.vcxproj
│   ├── DynamicAudioNormalizerNET_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerNET.rc
│   ├── samples/
│   │   ├── DynamicAudioNormalizerExample.cs
│   │   ├── DynamicAudioNormalizerExample.vb
│   │   ├── DynamicAudioNormalizerExample_CS.csproj
│   │   ├── DynamicAudioNormalizerExample_VB.vbproj
│   │   ├── DynamicAudioNormalizerExamples.sln
│   │   └── Properties/
│   │       ├── AssemblyInfo.cs
│   │       └── AssemblyInfo.vb
│   └── src/
│       ├── AssemblyInfo.cpp
│       ├── DynamicAudioNormalizerNET.cpp
│       ├── DynamicAudioNormalizerNET.h
│       └── resource.h
├── DynamicAudioNormalizerPAS/
│   ├── DynamicAudioNormalizerPAS.cfg
│   ├── DynamicAudioNormalizerPAS.dof
│   ├── DynamicAudioNormalizerPAS.dpr
│   ├── DynamicAudioNormalizerPAS.res
│   ├── include/
│   │   └── DynamicAudioNormalizer.pas
│   └── src/
│       ├── DynamicAudioNormalizerExample.dfm
│       └── DynamicAudioNormalizerExample.pas
├── DynamicAudioNormalizerPYD/
│   ├── DynamicAudioNormalizerPYD_VS2013.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerPYD_VS2015.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerPYD_VS2017.vcxproj
│   ├── DynamicAudioNormalizerPYD_VS2017.vcxproj.filters
│   ├── include/
│   │   └── DynamicAudioNormalizer.py
│   ├── makefile
│   ├── res/
│   │   └── DynamicAudioNormalizerPYD.rc
│   ├── samples/
│   │   ├── DynamicAudioNormalizerExample.py
│   │   └── WaveFileUtils.py
│   └── src/
│       └── DynamicAudioNormalizerPYD.cpp
├── DynamicAudioNormalizerShared/
│   ├── include/
│   │   ├── Common.h
│   │   └── Threads.h
│   └── res/
│       ├── compat.manifest
│       └── version.inc
├── DynamicAudioNormalizerSoX/
│   ├── DynamicAudioNormalizerSoX.c
│   ├── INFO.txt
│   ├── extra/
│   │   ├── main.c
│   │   ├── unicode_support.c
│   │   └── unicode_support.h
│   └── patch/
│       ├── SoX-v14.4.2-Patch1-UnicodeSupport+BuildFix.diff
│       └── SoX-v14.4.2-Patch2-AddDynAudNormEffect.diff
├── DynamicAudioNormalizerVST/
│   ├── DynamicAudioNormalizerVST.def
│   ├── DynamicAudioNormalizerVST_VS2013.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerVST_VS2015.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerVST_VS2017.vcxproj
│   ├── DynamicAudioNormalizerVST_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerVST.rc
│   └── src/
│       ├── DynamicAudioNormalizerVST.cpp
│       ├── DynamicAudioNormalizerVST.h
│       ├── Spooky.cpp
│       └── Spooky.h
├── DynamicAudioNormalizerWA5/
│   ├── DynamicAudioNormalizerWA5_VS2013.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2013.vcxproj.filters
│   ├── DynamicAudioNormalizerWA5_VS2015.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2015.vcxproj.filters
│   ├── DynamicAudioNormalizerWA5_VS2017.vcxproj
│   ├── DynamicAudioNormalizerWA5_VS2017.vcxproj.filters
│   ├── res/
│   │   └── DynamicAudioNormalizerWA5.rc
│   └── src/
│       └── DynamicAudioNormalizerWA5.cpp
├── DynamicAudioNormalizer_VS2013.sln
├── DynamicAudioNormalizer_VS2015.sln
├── DynamicAudioNormalizer_VS2017.props
├── DynamicAudioNormalizer_VS2017.sln
├── LICENSE-GPL2.html
├── LICENSE-GPL3.html
├── LICENSE-LGPL.html
├── Makefile
├── README.md
├── etc/
│   ├── vst_sdk/
│   │   └── VST_SDK_INFO.txt
│   └── winamp_sdk/
│       ├── LICENSE.txt
│       └── include/
│           ├── winamp_dsp.h
│           └── winamp_ipc.h
├── img/
│   └── dyauno/
│       └── Style.inc
├── z_build.bat
└── z_test.bat
Download .txt
SYMBOL INDEX (678 symbols across 50 files)

FILE: DynamicAudioNormalizerAPI/include/DynamicAudioNormalizer.h
  function class (line 80) | class MDYNAMICAUDIONORMALIZER_DLL MDynamicAudioNormalizer
  type MDynamicAudioNormalizer_Handle (line 126) | typedef struct MDynamicAudioNormalizer_Handle MDynamicAudioNormalizer_Ha...

FILE: DynamicAudioNormalizerAPI/src/Binding_C.cpp
  function MDynamicAudioNormalizer_Handle (line 28) | MDynamicAudioNormalizer_Handle* MDYNAMICAUDIONORMALIZER_FUNCTION(createI...
  function MDYNAMICAUDIONORMALIZER_DLL (line 49) | MDYNAMICAUDIONORMALIZER_DLL void MDYNAMICAUDIONORMALIZER_FUNCTION(destro...

FILE: DynamicAudioNormalizerAPI/src/Binding_JNI.cpp
  function jobject (line 169) | static jobject javaNewInteger(JNIEnv *env, const jint &value)
  function jboolean (line 187) | static jboolean javaLogMessage_Helper(JNIEnv *env, const int &level, con...
  function javaLogMessage (line 206) | static void javaLogMessage(const int logLevel, const char *const message)
  function javaSetLoggingHandler (line 220) | static void javaSetLoggingHandler(JNIEnv *env, jobject loggerGlobalRefer...
  function jint (line 247) | static jint javaCreateHandle(MDynamicAudioNormalizer *const instance)
  function MDynamicAudioNormalizer (line 272) | static MDynamicAudioNormalizer *javaHandleToInstance(const jint &handleV...
  function jboolean (line 294) | static jboolean javaRelease2DArrayElements(JNIEnv *const env, jobjectArr...
  function jboolean (line 325) | static jboolean javaGet2DArrayElements(JNIEnv *const env, const jobjectA...
  function jboolean (line 367) | static jboolean JAVA_FUNCIMPL(getVersionInfo)(JNIEnv *const env, jintArr...
  function jboolean (line 393) | static jboolean JAVA_FUNCIMPL(getBuildInfo)(JNIEnv *const env, jobject c...
  function jboolean (line 428) | static jboolean JAVA_FUNCIMPL(setLoggingHandler)(JNIEnv *const env, jobj...
  function jint (line 455) | static jint JAVA_FUNCIMPL(createInstance)(JNIEnv *const env, const jint ...
  function jboolean (line 478) | static jboolean JAVA_FUNCIMPL(destroyInstance)(JNIEnv *const env, const ...
  function jlong (line 489) | static jlong JAVA_FUNCIMPL(process)(JNIEnv *const env, const jint &handl...
  function jlong (line 543) | static jlong JAVA_FUNCIMPL(processInplace)(JNIEnv *const env, const jint...
  function jlong (line 585) | static jlong JAVA_FUNCIMPL(flushBuffer)(JNIEnv *const env, const jint &h...
  function jboolean (line 627) | static jboolean JAVA_FUNCIMPL(reset)(JNIEnv *const env, const jint &handle)
  function jboolean (line 643) | static jboolean JAVA_FUNCIMPL(getConfiguration)(JNIEnv *const env, const...
  function jlong (line 685) | static jlong JAVA_FUNCIMPL(getInternalDelay)(JNIEnv *const env, const ji...

FILE: DynamicAudioNormalizerAPI/src/DLLMain.cpp
  function BOOL (line 34) | BOOL APIENTRY DllMain(HMODULE hModule,DWORD  ul_reason_for_call, LPVOID ...

FILE: DynamicAudioNormalizerAPI/src/DynamicAudioNormalizer.cpp
  type DYNAUDNORM_NS (line 60) | namespace DYNAUDNORM_NS
    class StaticInitializer (line 62) | class StaticInitializer
      method StaticInitializer (line 65) | StaticInitializer(void)
  function LOG_VALUE (line 84) | static void LOG_VALUE(const double &value, const double &prev, const dou...
  function T (line 96) | static inline T LIMIT(const T &min, const T &val, const T &max)
  function UPDATE_MAX (line 101) | static inline void UPDATE_MAX(T &max, const T &val)
  function FRAME_SIZE (line 106) | static inline uint32_t FRAME_SIZE(const uint32_t &sampleRate, const uint...
  function UPDATE_VALUE (line 112) | static inline double UPDATE_VALUE(const double &NEW, const double &OLD, ...
  function FADE (line 118) | static inline double FADE(const double &prev, const double &next, const ...
  function BOUND (line 123) | static inline double BOUND(const double &threshold, const double &val)
  function POW2 (line 129) | static inline double POW2(const double &value)
  class MDynamicAudioNormalizer_PrivateData (line 147) | class MDynamicAudioNormalizer_PrivateData

FILE: DynamicAudioNormalizerAPI/src/FrameBuffer.h
  function namespace (line 29) | namespace DYNAUDNORM_NS
  function class (line 100) | class FrameFIFO
  function class (line 159) | class FrameBuffer

FILE: DynamicAudioNormalizerAPI/src/GaussianFilter.h
  function namespace (line 29) | namespace DYNAUDNORM_NS

FILE: DynamicAudioNormalizerAPI/src/Logging.h
  function namespace (line 26) | namespace DYNAUDNORM_NS

FILE: DynamicAudioNormalizerAPI/src/Test_API.c
  function MDynamicAudioNormalizer_Test_C_API (line 24) | void MDynamicAudioNormalizer_Test_C_API(void)

FILE: DynamicAudioNormalizerAPI/src/Version.h
  function namespace (line 30) | namespace DYNAUDNORM_NS

FILE: DynamicAudioNormalizerCLI/src/AudioIO.cpp
  function parseName (line 73) | static uint8_t parseName(const CHR *const name)
  function CHR (line 93) | static const CHR* getLibName(const uint8_t id)
  function checkFileType (line 106) | static bool checkFileType(bool(*const check)(FILE *const), FILE *const f...
  function CHR (line 117) | const CHR *const *AudioIO::getSupportedLibraries(const CHR **const list,...
  function AudioIO (line 134) | AudioIO *AudioIO::createInstance(const CHR *const name)
  function CHR (line 147) | const CHR *const *AudioIO::getSupportedFormats(const CHR **const list, c...
  function CHR (line 160) | const CHR *AudioIO::getLibraryVersion(const CHR *const name)
  function CHR (line 173) | const CHR *AudioIO::detectSourceType(const CHR *const fileName, const bo...

FILE: DynamicAudioNormalizerCLI/src/AudioIO.h
  function class (line 31) | class AudioIO

FILE: DynamicAudioNormalizerCLI/src/AudioIO_Mpg123.cpp
  type mpg123_fmt (line 103) | struct mpg123_fmt
  class AudioIO_Mpg123_Private (line 115) | class AudioIO_Mpg123_Private
    type mpg123_fmt (line 144) | struct mpg123_fmt
  type mpg123_fmt (line 187) | struct mpg123_fmt
  function CHR (line 235) | const CHR *AudioIO_Mpg123::libraryVersion(void)
  function CHR (line 240) | const CHR *const *AudioIO_Mpg123::supportedFormats(const CHR **const lis...
  type mpg123_fmt (line 353) | struct mpg123_fmt
  function CHR (line 456) | const CHR *AudioIO_Mpg123_Private::libraryVersion(void)
  function CHR (line 467) | const CHR *const *AudioIO_Mpg123_Private::supportedFormats(const CHR **c...

FILE: DynamicAudioNormalizerCLI/src/AudioIO_Mpg123.h
  function class (line 28) | class AudioIO_Mpg123 : public AudioIO

FILE: DynamicAudioNormalizerCLI/src/AudioIO_OpusFile.cpp
  class AudioIO_OpusFile_Private (line 48) | class AudioIO_OpusFile_Private
  function CHR (line 165) | const CHR *AudioIO_OpusFile::libraryVersion(void)
  function CHR (line 170) | const CHR *const *AudioIO_OpusFile::supportedFormats(const CHR **const l...
  function CHR (line 394) | const CHR *AudioIO_OpusFile_Private::libraryVersion(void)
  function CHR (line 405) | const CHR *const *AudioIO_OpusFile_Private::supportedFormats(const CHR *...

FILE: DynamicAudioNormalizerCLI/src/AudioIO_OpusFile.h
  function class (line 28) | class AudioIO_OpusFile : public AudioIO

FILE: DynamicAudioNormalizerCLI/src/AudioIO_SndFile.cpp
  class AudioIO_SndFile_Private (line 85) | class AudioIO_SndFile_Private
  function CHR (line 198) | const CHR *AudioIO_SndFile::libraryVersion(void)
  function CHR (line 203) | const CHR *const *AudioIO_SndFile::supportedFormats(const CHR **const li...
  function CHR (line 475) | const CHR *AudioIO_SndFile_Private::libraryVersion(void)
  function CHR (line 488) | const CHR *const *AudioIO_SndFile_Private::supportedFormats(const CHR **...

FILE: DynamicAudioNormalizerCLI/src/AudioIO_SndFile.h
  function class (line 28) | class AudioIO_SndFile : public AudioIO

FILE: DynamicAudioNormalizerCLI/src/Main.cpp
  function CHR (line 61) | static const CHR *appName(const CHR* argv0)
  function CHR (line 69) | static const CHR *timeToString(CHR *timeBuffer, const size_t buffSize, c...
  function loggingCallback_default (line 91) | static void loggingCallback_default(const int logLevel, const char *cons...
  function loggingCallback_verbose (line 104) | static void loggingCallback_verbose(const int logLevel, const char *cons...
  function openFiles (line 120) | static bool openFiles(const Parameters &parameters, AudioIO **sourceFile...
  function printProgress (line 184) | static void printProgress(const int64_t &length, const int64_t &remainin...
  function processingLoop (line 202) | static int processingLoop(MDynamicAudioNormalizer *normalizer, AudioIO *...
  function processFiles (line 303) | static int processFiles(const Parameters &parameters, AudioIO *const sou...
  function printHelpScreen (line 377) | static void printHelpScreen(int argc, CHR* argv[])
  function printLogo (line 414) | static void printLogo(void)
  function dynamicNormalizerMain (line 446) | int dynamicNormalizerMain(int argc, CHR* argv[])
  function mainEx (line 503) | int mainEx(int argc, CHR* argv[])
  function MAIN (line 525) | int MAIN(int argc, CHR* argv[])

FILE: DynamicAudioNormalizerCLI/src/Parameters.cpp
  function STR_TO_FLT (line 54) | static bool STR_TO_FLT(double &output, const CHR *str)
  function STR_TO_UINT (line 65) | static bool STR_TO_UINT(uint32_t &output, const CHR *str)
  function CHECK_ENUM (line 96) | static bool CHECK_ENUM(const CHR *const str, const CHR *const *const val...
  function CHR (line 108) | static const CHR *JOIN_STR(CHR *const buffer, uint32_t buffSize, const C...

FILE: DynamicAudioNormalizerCLI/src/Parameters.h
  function class (line 27) | class Parameters

FILE: DynamicAudioNormalizerCLI/src/Platform.h
  type wchar_t (line 70) | typedef wchar_t CHR;
  type STAT64_T (line 71) | typedef struct _stat64 STAT64_T;
  function PRINT (line 73) | inline static int PRINT(const CHR *const format, ...)
  function PUTS (line 82) | inline static int PUTS(const CHR *const format)
  function FLUSH (line 87) | inline static void FLUSH(void)
  function FILE (line 92) | inline static FILE *FOPEN(const CHR *const fileName, const CHR *const mode)
  function OPEN (line 102) | inline static int OPEN(const CHR *const fileName, const int flags)
  function CLOSE (line 112) | inline static int CLOSE(const int fd)
  function FILENO (line 117) | inline static int FILENO(FILE *const file)
  function FSTAT64 (line 122) | inline static int FSTAT64(const int fd, STAT64_T *stat)
  function FSEEK64 (line 127) | inline static int FSEEK64(FILE *const file, int64_t offset, const int or...
  function FTELL64 (line 132) | inline static int64_t FTELL64(FILE *const file)
  function ACCESS (line 137) | inline static int ACCESS(const CHR *const fileName, const int mode)
  function STAT64 (line 142) | inline static int STAT64(const CHR *const fileName, STAT64_T *stat)
  function STRCASECMP (line 147) | inline static int STRCASECMP(const CHR *const s1, const CHR *const s2)
  function CHR (line 152) | inline static const CHR *STRCHR(const CHR *const str, const CHR c)
  function CHR (line 157) | inline static const CHR *STRRCHR(const CHR *const str, const CHR c)
  function SNPRINTF (line 162) | inline static int SNPRINTF(CHR *const buffer, size_t buffSize, const CHR...
  function SSCANF (line 171) | inline static int SSCANF(const CHR *const str, const CHR *const format, ...
  function CHR (line 180) | inline static const CHR *STRNCAT(CHR *const buff, const CHR *const str, ...
  type wchar_t (line 216) | typedef wchar_t CHR;
  type STAT64_T (line 217) | typedef struct _stati64 STAT64_T;
  function PRINT (line 219) | inline static int PRINT(const CHR *const format, ...)
  function FLUSH (line 228) | inline static void FLUSH(void)
  function FILE (line 233) | inline static FILE *FOPEN(const CHR *const fileName, const CHR *const mode)
  function FILENO (line 238) | inline static int FILENO(FILE *const file)
  function FSTAT64 (line 243) | inline static int FSTAT64(const int fd, STAT64_T *stat)
  function FSEEK64 (line 248) | inline static int FSEEK64(FILE *const file, int64_t offset, const int or...
  function FTELL64 (line 253) | inline static int64_t FTELL64(FILE *const file)
  function ACCESS (line 258) | inline static int ACCESS(const CHR *const fileName, const int mode)
  function STAT64 (line 263) | inline static int STAT64(const CHR *const fileName, STAT64_T *stat)
  function STRCASECMP (line 268) | inline static int STRCASECMP(const CHR *const s1, const CHR *const s2)
  function CHR (line 273) | inline static const CHR *STRCHR(const CHR *const str, const CHR c)
  function CHR (line 278) | inline static const CHR *STRRCHR(const CHR *const str, const CHR c)
  function SNPRINTF (line 283) | inline static int SNPRINTF(CHR *const buffer, size_t buffSize, const CHR...
  function SSCANF (line 293) | inline static int SSCANF(const CHR *const str, const CHR *const format, ...
  function CHR (line 302) | inline static const CHR *STRNCAT(CHR *const buff, const CHR *const str, ...
  type CHR (line 337) | typedef char CHR;
  type STAT64_T (line 338) | typedef struct stat64 STAT64_T;
  function PRINT (line 340) | inline static int PRINT(const CHR *const format, ...)
  function FLUSH (line 349) | inline static void FLUSH(void)
  function FILE (line 354) | inline static FILE *FOPEN(const CHR *const fileName, const CHR *const mode)
  function FILENO (line 359) | inline static int FILENO(FILE *const file)
  function FSTAT64 (line 364) | inline static int FSTAT64(const int fd, STAT64_T *stat)
  function FSEEK64 (line 369) | inline static int FSEEK64(FILE *const file, int64_t offset, const int or...
  function FTELL64 (line 374) | inline static int64_t FTELL64(FILE *const file)
  function ACCESS (line 379) | inline static int ACCESS(const CHR *const fileName, const int mode)
  function STAT64 (line 384) | inline static int STAT64(const CHR *const fileName, STAT64_T *stat)
  function STRCASECMP (line 389) | inline static int STRCASECMP(const CHR *const s1, const CHR *const s2)
  function CHR (line 394) | inline static const CHR *STRCHR(const CHR *const str, const CHR c)
  function CHR (line 399) | inline static const CHR *STRRCHR(const CHR *const str, const CHR c)
  function SNPRINTF (line 404) | inline static int SNPRINTF(CHR *const buffer, size_t buffSize, const CHR...
  function SSCANF (line 413) | inline static int SSCANF(const CHR *const str, const CHR *const format, ...
  function CHR (line 422) | inline static const CHR *STRNCAT(CHR *const buff, const CHR *const str, ...
  type CHR (line 457) | typedef char CHR;
  type STAT64_T (line 458) | typedef struct stat STAT64_T;
  function PRINT (line 460) | inline static int PRINT(const CHR *const format, ...)
  function FLUSH (line 469) | inline static void FLUSH(void)
  function FILE (line 474) | inline static FILE *FOPEN(const CHR *const fileName, const CHR *const mode)
  function FILENO (line 479) | inline static int FILENO(FILE *const file)
  function FSTAT64 (line 484) | inline static int FSTAT64(const int fd, STAT64_T *_stat)
  function FSEEK64 (line 489) | inline static int FSEEK64(FILE *const file, int64_t offset, const int or...
  function FTELL64 (line 494) | inline static int64_t FTELL64(FILE *const file)
  function ACCESS (line 499) | inline static int ACCESS(const CHR *const fileName, const int mode)
  function STAT64 (line 504) | inline static int STAT64(const CHR *const fileName, STAT64_T *stat)
  function STRCASECMP (line 509) | inline static int STRCASECMP(const CHR *const s1, const CHR *const s2)
  function CHR (line 514) | inline static const CHR *STRCHR(const CHR *const str, const CHR c)
  function CHR (line 519) | inline static const CHR *STRRCHR(const CHR *const str, const CHR c)
  function SNPRINTF (line 524) | inline static int SNPRINTF(CHR *const buffer, size_t buffSize, const CHR...
  function SSCANF (line 533) | inline static int SSCANF(const CHR *const str, const CHR *const format, ...
  function CHR (line 542) | inline static const CHR *STRNCAT(CHR *const buff, const CHR *const str, ...
  function FD_ISREG (line 568) | inline static bool FD_ISREG(const int fd)
  function PATH_ISREG (line 578) | inline static bool PATH_ISREG(const CHR *const fileName)

FILE: DynamicAudioNormalizerCLI/src/Platform_Linux.cpp
  function my_crash_handler (line 31) | static void my_crash_handler(const char *const message)
  function my_signal_handler (line 48) | static void my_signal_handler(int signal_num)
  function SYSTEM_INIT (line 60) | void SYSTEM_INIT(const bool &debugMode)

FILE: DynamicAudioNormalizerCLI/src/Platform_OSX.cpp
  function my_crash_handler (line 31) | static void my_crash_handler(const char *const message)
  function my_signal_handler (line 48) | static void my_signal_handler(int signal_num)
  function SYSTEM_INIT (line 60) | void SYSTEM_INIT(const bool &debugMode)

FILE: DynamicAudioNormalizerCLI/src/Platform_Win32.cpp
  function my_crash_handler (line 42) | static void my_crash_handler(const char *const message)
  function my_invalid_param_handler (line 63) | static void my_invalid_param_handler(const wchar_t*, const wchar_t*, con...
  function my_signal_handler (line 68) | static void my_signal_handler(int signal_num)
  function LONG (line 82) | static LONG WINAPI my_exception_handler(struct _EXCEPTION_POINTERS*)
  function SYSTEM_INIT (line 88) | void SYSTEM_INIT(const bool &debugMode)
  function main (line 112) | int main()

FILE: DynamicAudioNormalizerGUI/src/3rd_party/qcustomplot.cpp
  function QRect (line 1215) | QRect QCPLayerable::clipRect() const
  function QCPRange (line 1375) | QCPRange QCPRange::expanded(const QCPRange &otherRange) const
  function QCPRange (line 1394) | QCPRange QCPRange::sanitizedForLogScale() const
  function QCPRange (line 1443) | QCPRange QCPRange::sanitizedForLinScale() const
  function foreach (line 2064) | foreach (QCP::MarginSide side, QList<QCP::MarginSide>() << QCP::msLeft <...
  function QSize (line 2089) | QSize QCPLayoutElement::minimumSizeHint() const
  function QSize (line 2101) | QSize QCPLayoutElement::maximumSizeHint() const
  function foreach (line 2157) | foreach (QCPLayoutElement* el, elements(false))
  function QCPLayoutElement (line 2636) | QCPLayoutElement *QCPLayoutGrid::element(int row, int column) const
  function QCPLayoutElement (line 2960) | QCPLayoutElement *QCPLayoutGrid::elementAt(int index) const
  function QCPLayoutElement (line 2969) | QCPLayoutElement *QCPLayoutGrid::takeAt(int index)
  function QSize (line 3078) | QSize QCPLayoutGrid::minimumSizeHint() const
  function QSize (line 3093) | QSize QCPLayoutGrid::maximumSizeHint() const
  function QRectF (line 3255) | QRectF QCPLayoutInset::insetRect(int index) const
  function QCPLayoutElement (line 3363) | QCPLayoutElement *QCPLayoutInset::elementAt(int index) const
  function QCPLayoutElement (line 3372) | QCPLayoutElement *QCPLayoutInset::takeAt(int index)
  function QString (line 4206) | QString QCPAxis::numberFormat() const
  function QCPLineEnding (line 4256) | QCPLineEnding QCPAxis::lowerEnding() const
  function QCPLineEnding (line 4262) | QCPLineEnding QCPAxis::upperEnding() const
  function QPen (line 6011) | QPen QCPAxis::getBasePen() const
  function QPen (line 6021) | QPen QCPAxis::getTickPen() const
  function QPen (line 6031) | QPen QCPAxis::getSubTickPen() const
  function QFont (line 6041) | QFont QCPAxis::getTickLabelFont() const
  function QFont (line 6051) | QFont QCPAxis::getLabelFont() const
  function QColor (line 6061) | QColor QCPAxis::getTickLabelColor() const
  function QColor (line 6071) | QColor QCPAxis::getLabelColor() const
  function QByteArray (line 6416) | QByteArray QCPAxisPainterPrivate::generateLabelParameterHash() const
  function QPointF (line 6632) | QPointF QCPAxisPainterPrivate::getTickLabelDrawOffset(const TickLabelDat...
  function QRect (line 7230) | QRect QCPAbstractPlottable::clipRect() const
  function QPointF (line 7276) | const QPointF QCPAbstractPlottable::coordsToPixels(double key, double va...
  function QPen (line 7330) | QPen QCPAbstractPlottable::mainPen() const
  function QBrush (line 7340) | QBrush QCPAbstractPlottable::mainBrush() const
  function QPointF (line 7535) | QPointF QCPItemAnchor::pixelPoint() const
  function QCPAxisRect (line 7640) | QCPAxisRect *QCPItemPosition::axisRect() const
  function QPointF (line 7798) | QPointF QCPItemPosition::pixelPoint() const
  function QCPAxisRect (line 8225) | QCPAxisRect *QCPAbstractItem::clipAxisRect() const
  function QCPItemPosition (line 8307) | QCPItemPosition *QCPAbstractItem::position(const QString &name) const
  function QCPItemAnchor (line 8328) | QCPItemAnchor *QCPAbstractItem::anchor(const QString &name) const
  function QRect (line 8366) | QRect QCPAbstractItem::clipRect() const
  function QPointF (line 8478) | QPointF QCPAbstractItem::anchorPixelPoint(int anchorId) const
  function QCPItemPosition (line 8498) | QCPItemPosition *QCPAbstractItem::createPosition(const QString &name)
  function QCPItemAnchor (line 8532) | QCPItemAnchor *QCPAbstractItem::createAnchor(const QString &name, int an...
  function QCPAbstractPlottable (line 9512) | QCPAbstractPlottable *QCustomPlot::plottable(int index)
  function QCPAbstractPlottable (line 9531) | QCPAbstractPlottable *QCustomPlot::plottable()
  function foreach (line 9651) | foreach (QCPAbstractPlottable *plottable, mPlottables)
  function QCPAbstractPlottable (line 9671) | QCPAbstractPlottable *QCustomPlot::plottableAt(const QPointF &pos, bool ...
  function QCPGraph (line 9712) | QCPGraph *QCustomPlot::graph(int index) const
  function QCPGraph (line 9731) | QCPGraph *QCustomPlot::graph() const
  function QCPGraph (line 9752) | QCPGraph *QCustomPlot::addGraph(QCPAxis *keyAxis, QCPAxis *valueAxis)
  function foreach (line 9841) | foreach (QCPGraph *graph, mGraphs)
  function QCPAbstractItem (line 9857) | QCPAbstractItem *QCustomPlot::item(int index) const
  function QCPAbstractItem (line 9876) | QCPAbstractItem *QCustomPlot::item() const
  function foreach (line 9975) | foreach (QCPAbstractItem *item, mItems)
  function QCPAbstractItem (line 9996) | QCPAbstractItem *QCustomPlot::itemAt(const QPointF &pos, bool onlySelect...
  function QCPLayer (line 10037) | QCPLayer *QCustomPlot::layer(const QString &name) const
  function QCPLayer (line 10053) | QCPLayer *QCustomPlot::layer(int index) const
  function QCPLayer (line 10068) | QCPLayer *QCustomPlot::currentLayer() const
  function QCPAxisRect (line 10260) | QCPAxisRect *QCustomPlot::axisRect(int index) const
  function QCPLayoutElement (line 10310) | QCPLayoutElement *QCustomPlot::layoutElementAt(const QPointF &pos) const
  function foreach (line 10343) | foreach (QCPAxis *axis, allAxes)
  function foreach (line 10397) | foreach (QCPLayer *layer, mLayers)
  function QSize (line 10677) | QSize QCustomPlot::minimumSizeHint() const
  function QSize (line 10687) | QSize QCustomPlot::sizeHint() const
  function foreach (line 10833) | foreach (QCPLayer *layer, mLayers)
  function foreach (line 10923) | foreach (QCPLayer *layer, mLayers)
  function QCPLayerable (line 11044) | QCPLayerable *QCustomPlot::layerableAt(const QPointF &pos, bool onlySele...
  function QPixmap (line 11098) | QPixmap QCustomPlot::toPixmap(int width, int height, double scale)
  function QRgb (line 11410) | QRgb QCPColorGradient::color(double position, const QCPRange &range, boo...
  function QCPColorGradient (line 11563) | QCPColorGradient QCPColorGradient::inverted() const
  function QCPAxis (line 11837) | QCPAxis *QCPAxisRect::axis(QCPAxis::AxisType type, int index) const
  function QCPAxis (line 11897) | QCPAxis *QCPAxisRect::addAxis(QCPAxis::AxisType type)
  function QCPAxis (line 12273) | QCPAxis *QCPAxisRect::rangeDragAxis(Qt::Orientation orientation)
  function QCPAxis (line 12283) | QCPAxis *QCPAxisRect::rangeZoomAxis(Qt::Orientation orientation)
  function QRect (line 12766) | QRect QCPAbstractLegendItem::clipRect() const
  function QPen (line 12845) | QPen QCPPlottableLegendItem::getIconBorderPen() const
  function QColor (line 12855) | QColor QCPPlottableLegendItem::getTextColor() const
  function QFont (line 12865) | QFont QCPPlottableLegendItem::getFont() const
  function QSize (line 12905) | QSize QCPPlottableLegendItem::minimumSizeHint() const
  function QCPAbstractLegendItem (line 13241) | QCPAbstractLegendItem *QCPLegend::item(int index) const
  function QCPPlottableLegendItem (line 13252) | QCPPlottableLegendItem *QCPLegend::itemWithPlottable(const QCPAbstractPl...
  function QPen (line 13399) | QPen QCPLegend::getBorderPen() const
  function QBrush (line 13409) | QBrush QCPLegend::getBrush() const
  function QSize (line 13659) | QSize QCPPlotTitle::minimumSizeHint() const
  function QSize (line 13669) | QSize QCPPlotTitle::maximumSizeHint() const
  function QFont (line 13722) | QFont QCPPlotTitle::mainFont() const
  function QColor (line 13732) | QColor QCPPlotTitle::mainTextColor() const
  function QString (line 13853) | QString QCPColorScale::label() const
  function foreach (line 13922) | foreach (QCPAxis::AxisType atype, QList<QCPAxis::AxisType>() << QCPAxis:...
  function foreach (line 14256) | foreach (QCPAxis::AxisType type, QList<QCPAxis::AxisType>() << QCPAxis::...
  function foreach (line 14277) | foreach (QCPAxis::AxisType type, QList<QCPAxis::AxisType>() << QCPAxis::...
  function QPointF (line 16038) | QPointF QCPGraph::lowerFillBasePoint(double lowerKey) const
  function QPointF (line 16103) | QPointF QCPGraph::upperFillBasePoint(double upperKey) const
  function QPolygonF (line 16163) | const QPolygonF QCPGraph::getChannelFillPolygon(const QVector<QPointF> *...
  function QCPRange (line 16463) | QCPRange QCPGraph::getKeyRange(bool &foundRange, SignDomain inSignDomain...
  function QCPRange (line 16471) | QCPRange QCPGraph::getValueRange(bool &foundRange, SignDomain inSignDoma...
  function QCPRange (line 16484) | QCPRange QCPGraph::getKeyRange(bool &foundRange, SignDomain inSignDomain...
  function QCPRange (line 16590) | QCPRange QCPGraph::getValueRange(bool &foundRange, SignDomain inSignDoma...
  function QPointF (line 17299) | QPointF QCPCurve::outsideCoordsToPixels(double key, double value, int re...
  function QCPRange (line 17322) | QCPRange QCPCurve::getKeyRange(bool &foundRange, SignDomain inSignDomain...
  function QCPRange (line 17355) | QCPRange QCPCurve::getValueRange(bool &foundRange, SignDomain inSignDoma...
  function QPolygonF (line 17806) | QPolygonF QCPBars::getBarPolygon(double key, double value) const
  function QCPRange (line 17885) | QCPRange QCPBars::getKeyRange(bool &foundRange, SignDomain inSignDomain)...
  function QCPRange (line 17918) | QCPRange QCPBars::getValueRange(bool &foundRange, SignDomain inSignDomai...
  function QCPRange (line 18337) | QCPRange QCPStatisticalBox::getKeyRange(bool &foundRange, SignDomain inS...
  function QCPRange (line 18371) | QCPRange QCPStatisticalBox::getValueRange(bool &foundRange, SignDomain i...
  function QCPColorMapData (line 18497) | QCPColorMapData &QCPColorMapData::operator=(const QCPColorMapData &other)
  function QCPRange (line 19253) | QCPRange QCPColorMap::getKeyRange(bool &foundRange, SignDomain inSignDom...
  function QCPRange (line 19275) | QCPRange QCPColorMap::getValueRange(bool &foundRange, SignDomain inSignD...
  function QLineF (line 19395) | QLineF QCPItemStraightLine::getRectClippedStraightLine(const QVector2D &...
  function QPen (line 19479) | QPen QCPItemStraightLine::mainPen() const
  function QLineF (line 19607) | QLineF QCPItemLine::getRectClippedLine(const QVector2D &start, const QVe...
  function QPen (line 19705) | QPen QCPItemLine::mainPen() const
  function QPen (line 19864) | QPen QCPItemCurve::mainPen() const
  function QPointF (line 19984) | QPointF QCPItemRect::anchorPixelPoint(int anchorId) const
  function QPen (line 20006) | QPen QCPItemRect::mainPen() const
  function QBrush (line 20016) | QBrush QCPItemRect::mainBrush() const
  function QPointF (line 20267) | QPointF QCPItemText::anchorPixelPoint(int anchorId) const
  function QPointF (line 20308) | QPointF QCPItemText::getTextDrawPoint(const QPointF &pos, const QRectF &...
  function QFont (line 20330) | QFont QCPItemText::mainFont() const
  function QColor (line 20340) | QColor QCPItemText::mainColor() const
  function QPen (line 20350) | QPen QCPItemText::mainPen() const
  function QBrush (line 20360) | QBrush QCPItemText::mainBrush() const
  function QPointF (line 20509) | QPointF QCPItemEllipse::anchorPixelPoint(int anchorId) const
  function QPen (line 20534) | QPen QCPItemEllipse::mainPen() const
  function QBrush (line 20544) | QBrush QCPItemEllipse::mainBrush() const
  function QPointF (line 20670) | QPointF QCPItemPixmap::anchorPixelPoint(int anchorId) const
  function QRect (line 20742) | QRect QCPItemPixmap::getFinalRect(bool *flippedHorz, bool *flippedVert) ...
  function QPen (line 20786) | QPen QCPItemPixmap::mainPen() const
  function QPen (line 21139) | QPen QCPItemTracer::mainPen() const
  function QBrush (line 21149) | QBrush QCPItemTracer::mainBrush() const
  function QPointF (line 21340) | QPointF QCPItemBracket::anchorPixelPoint(int anchorId) const
  function QPen (line 21366) | QPen QCPItemBracket::mainPen() const

FILE: DynamicAudioNormalizerGUI/src/3rd_party/qcustomplot.h
  function namespace (line 92) | namespace QCP
  function Q_DECLARE_OPERATORS_FOR_FLAGS (line 227) | Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements)
  type PainterMode (line 319) | enum PainterMode { pmDefault       = 0x00   ///< <tt>0x00</tt> Default m...
  function antialiasing (line 332) | bool antialiasing() const { return testRenderHint(QPainter::Antialiasing...
  function QCP_LIB_DECL (line 364) | QCP_LIB_DECL QCPLayer : public QObject
  function QCustomPlot (line 423) | QCustomPlot *parentPlot() const { return mParentPlot; }
  function QCPLayerable (line 424) | QCPLayerable *parentLayerable() const { return mParentLayerable.data(); }
  function QCPLayer (line 425) | QCPLayer *layer() const { return mLayer; }
  function isEmpty (line 608) | bool isEmpty() const;
  function elementCount (line 729) | int elementCount() const = 0;
  function virtual (line 789) | virtual int elementCount() const;
  function Q_GADGET (line 873) | Q_GADGET
  function boundingDistance (line 915) | double boundingDistance() const;
  function Q_OBJECT (line 981) | Q_OBJECT
  function QString (line 1101) | QString numberFormat() const;
  function tickLengthIn (line 1106) | int tickLengthIn() const;
  function virtual (line 1315) | virtual int size() const;
  type CachedLabel (line 1348) | struct CachedLabel
  type TickLabelData (line 1353) | struct TickLabelData
  function virtual (line 1364) | virtual QByteArray generateLabelParameterHash() const;
  function QCPAxis (line 1403) | QCPAxis *keyAxis() const { return mKeyAxis.data(); }
  function QCPAxis (line 1404) | QCPAxis *valueAxis() const { return mValueAxis.data(); }
  function virtual (line 1426) | virtual bool removeFromLegend() const;
  type PositionType (line 1533) | enum PositionType { ptAbsolute        ///< Static positioning in pixels,...
  function QCPItemAnchor (line 1548) | QCPItemAnchor *parentAnchor() const { return mParentAnchor; }
  function QCPAxis (line 1552) | QCPAxis *keyAxis() const { return mKeyAxis.data(); }
  function QCPAxis (line 1553) | QCPAxis *valueAxis() const { return mValueAxis.data(); }
  function QCPLayoutGrid (line 1699) | QCPLayoutGrid *plotLayout() const { return mPlotLayout; }
  type ColorInterpolation (line 1885) | enum ColorInterpolation { ciRGB  ///< Color channels red, green and blue...
  function GradientPreset (line 1888) | Q_ENUMS(ColorInterpolation)
  function QCPLayoutInset (line 1993) | QCPLayoutInset *insetLayout() const { return mInsetLayout; }
  function QCPLegend (line 2073) | QCPLegend *parentLegend() const { return mParentLegend; }
  function virtual (line 2106) | virtual QCP::Interaction selectionCategory() const;
  function virtual (line 2136) | virtual QSize minimumSizeHint() const;
  function SelectableParts (line 2189) | SelectableParts selectedParts() const;
  function virtual (line 2323) | virtual QSize minimumSizeHint() const;
  function QCPAxis (line 2380) | QCPAxis *axis() const { return mColorAxis.data(); }
  function QString (line 2385) | QString label() const;
  type QMap (line 2461) | typedef QMap<double, QCPData> QCPDataMap;
  type QMapIterator (line 2462) | typedef QMapIterator<double, QCPData> QCPDataMapIterator;
  type QMutableMapIterator (line 2463) | typedef QMutableMapIterator<double, QCPData> QCPDataMutableMapIterator;
  function ErrorType (line 2493) | Q_ENUMS(LineStyle)
  function class (line 2614) | class QCP_LIB_DECL QCPCurveData
  type QMap (line 2631) | typedef QMap<double, QCPCurveData> QCPCurveDataMap;
  type QMapIterator (line 2632) | typedef QMapIterator<double, QCPCurveData> QCPCurveDataMapIterator;
  type QMutableMapIterator (line 2633) | typedef QMutableMapIterator<double, QCPCurveData> QCPCurveDataMutableMap...
  type LineStyle (line 2649) | enum LineStyle { lsNone  ///< No line is drawn between data points (e.g....
  function QCPCurveDataMap (line 2656) | QCPCurveDataMap *data() const { return mData; }
  function class (line 2711) | class QCP_LIB_DECL QCPBarData
  type QMap (line 2727) | typedef QMap<double, QCPBarData> QCPBarDataMap;
  type QMapIterator (line 2728) | typedef QMapIterator<double, QCPBarData> QCPBarDataMapIterator;
  type QMutableMapIterator (line 2729) | typedef QMutableMapIterator<double, QCPBarData> QCPBarDataMutableMapIter...
  function QCPBars (line 2746) | QCPBars *barBelow() const { return mBarBelow.data(); }
  function QCPBars (line 2747) | QCPBars *barAbove() const { return mBarAbove.data(); }
  function QCPBarDataMap (line 2748) | QCPBarDataMap *data() const { return mData; }
  function class (line 2879) | class QCP_LIB_DECL QCPColorMapData
  function QCPColorMapData (line 2944) | QCPColorMapData *data() const { return mMapData; }
  function QCPColorScale (line 2950) | QCPColorScale *colorScale() const { return mColorScale.data(); }
  type AnchorIndex (line 3170) | enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, ai...
  function virtual (line 3178) | virtual QPointF anchorPixelPoint(int anchorId) const;
  type AnchorIndex (line 3252) | enum AnchorIndex {aiTopLeft, aiTop, aiTopRight, aiRight, aiBottomRight, ...
  function virtual (line 3267) | virtual QPointF anchorPixelPoint(int anchorId) const;
  type AnchorIndex (line 3319) | enum AnchorIndex {aiTopLeftRim, aiTop, aiTopRightRim, aiRight, aiBottomR...
  function virtual (line 3327) | virtual QPointF anchorPixelPoint(int anchorId) const;
  type AnchorIndex (line 3375) | enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, ai...
  function Q_OBJECT (line 3397) | Q_OBJECT
  function Q_OBJECT (line 3477) | Q_OBJECT

FILE: DynamicAudioNormalizerGUI/src/Main.cpp
  function makeAxisBold (line 55) | static void makeAxisBold(QCPAxis *axis)
  function QString (line 63) | static QString readNextLine(QTextStream &textStream)
  function parseHeader (line 76) | static bool parseHeader(QWidget &parent, QTextStream &textStream, quint3...
  function parseLine (line 119) | static bool parseLine(const quint32 channels, const QStringList &input, ...
  function parseData (line 136) | static void parseData(QTextStream &textStream, const quint32 channels, L...
  function createGraph (line 167) | static void createGraph(QCustomPlot *const plot, QVector<double> &steps,...
  function dynamicNormalizerGuiMain (line 177) | static int dynamicNormalizerGuiMain(int argc, char* argv[])
  function main (line 346) | int main(int argc, char* argv[])

FILE: DynamicAudioNormalizerGUI/src/WinMain.cpp
  function LONG (line 30) | static LONG WINAPI my_exception_handler(struct _EXCEPTION_POINTERS*)
  function win32EntryPoint (line 41) | int win32EntryPoint(void)

FILE: DynamicAudioNormalizerJNI/samples/com/muldersoft/dynaudnorm/samples/AudioFileIO.java
  class AudioFileIO (line 37) | public class AudioFileIO {
    type PCMFileType (line 39) | public enum PCMFileType
    class PCMFileBase (line 49) | private static class PCMFileBase {
      method getEndianess (line 50) | protected static ByteOrder getEndianess(final PCMFileType type) {
      method getSampleSize (line 65) | protected static int getSampleSize(final PCMFileType type) {
      method readSample (line 81) | protected static double readSample(final PCMFileType type, final Byt...
      method writeSample (line 97) | protected static ByteBuffer writeSample(final PCMFileType type, fina...
      method ShortToDouble (line 113) | private static double ShortToDouble(final short val) {
      method doubleToShort (line 117) | private static short doubleToShort(final double val) {
    class PCMFileReader (line 122) | public static class PCMFileReader extends PCMFileBase implements AutoC...
      method PCMFileReader (line 128) | public PCMFileReader(final String fileName, final int channels, fina...
      method read (line 137) | public int read(double[][] buffer) throws IOException {
      method close (line 174) | public void close() throws IOException {
    class PCMFileWriter (line 183) | public static class PCMFileWriter extends PCMFileBase implements AutoC...
      method PCMFileWriter (line 189) | public PCMFileWriter(final String fileName, final int channels, fina...
      method write (line 198) | public void write(double[][] buffer, final int sampleCount) throws I...
      method flush (line 228) | public void flush() throws IOException {
      method close (line 232) | public void close() throws IOException {

FILE: DynamicAudioNormalizerJNI/samples/com/muldersoft/dynaudnorm/samples/DynamicAudioNormalizerExample.java
  class DynamicAudioNormalizerExample (line 34) | public class DynamicAudioNormalizerExample {
    method printLogo (line 49) | private static void printLogo() {
    method processFile (line 87) | public static void processFile(final String inputFile, final String ou...
    method main (line 169) | public static void main(final String [] args)

FILE: DynamicAudioNormalizerJNI/src/com/muldersoft/dynaudnorm/JDynamicAudioNormalizer.java
  class JDynamicAudioNormalizer (line 33) | public class JDynamicAudioNormalizer implements AutoCloseable
    class Error (line 39) | public static class Error extends RuntimeException
      method Error (line 43) | public Error(String string)
    class Logger (line 53) | public static abstract class Logger
      method log (line 55) | public abstract void log(final int level, final String message);
    class NativeAPI_r8 (line 62) | private static class NativeAPI_r8
      method getInstance (line 67) | public static synchronized NativeAPI_r8 getInstance()
      method NativeAPI_r8 (line 77) | private NativeAPI_r8()
      method getCoreVersion (line 91) | private int getCoreVersion()
      method getVersionInfo (line 114) | private native boolean getVersionInfo(final int versionInfo[]);
      method getBuildInfo (line 115) | private native boolean getBuildInfo(final Map<String,String> buildIn...
      method setLoggingHandler (line 116) | private native boolean setLoggingHandler(final Logger logger);
      method createInstance (line 119) | private native int createInstance(final int channels, final int samp...
      method destroyInstance (line 120) | private native boolean destroyInstance(final int handle);
      method process (line 123) | private native long process(final int handle, final double [][] samp...
      method processInplace (line 124) | private native long processInplace(final int handle, final double []...
      method flushBuffer (line 125) | private native long flushBuffer(final int handle, final double [][] ...
      method reset (line 126) | private native boolean reset(final int handle);
      method getConfiguration (line 129) | private native boolean getConfiguration(final int handle, final Map<...
      method getInternalDelay (line 130) | private native long getInternalDelay(final int handle);
    method getVersionInfo (line 137) | public static synchronized int[] getVersionInfo()
    method getBuildInfo (line 159) | public static synchronized Map<String,String> getBuildInfo()
    method setLoggingHandler (line 181) | public static synchronized void setLoggingHandler(final Logger logger)
    method JDynamicAudioNormalizer (line 206) | public JDynamicAudioNormalizer(final int channels, final int sampleRat...
    method close (line 223) | public synchronized void close()
    method finalize (line 251) | protected synchronized void finalize()
    method process (line 260) | public synchronized long process(final double [][] samplesIn, final do...
    method processInplace (line 282) | public synchronized long processInplace(final double [][] samplesInOut...
    method flushBuffer (line 304) | public synchronized long flushBuffer(final double [][] samplesOut)
    method reset (line 326) | public synchronized void reset()
    method getConfiguration (line 350) | public synchronized Map<String,Integer> getConfiguration()
    method getInternalDelay (line 374) | public synchronized long getInternalDelay()
    method getHandle (line 396) | @Deprecated
    method handleError (line 406) | private static void handleError(final Throwable e, final String message)
    method checkInstance (line 418) | private void checkInstance()
    method main (line 429) | public static void main(String [] args)

FILE: DynamicAudioNormalizerJNI/test/com/muldersoft/dynaudnorm/test/JDynamicAudioNormalizerTest.java
  class JDynamicAudioNormalizerTest (line 53) | @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    method double2DArrayRandom (line 60) | private static void double2DArrayRandom(double[][] output) {
    method sha1sum (line 74) | public static String sha1sum(double[][] input) throws NoSuchAlgorithmE...
    method double2DArrayToBytes (line 79) | private static byte[] double2DArrayToBytes(double[][] input) throws IO...
    method byteArrayToHex (line 93) | private static String byteArrayToHex(final byte[] hash) {
    method setUp (line 106) | @Before
    method shutDown (line 111) | @After
    method test1_setLoggingHandler (line 116) | @Test
    method test2_getVersionInfo (line 138) | @Test
    method test3_getBuildInfo (line 144) | @Test
    method test4_getConfiguration (line 152) | @Test
    method test5_getInternalDelay (line 162) | @Test
    method test6_constructorAndRelease (line 170) | @Test
    method test7_processRandomData (line 202) | @Test
    method test8_processAudioFile (line 229) | @Test
    method test9_processAudioFile_outOfPlace (line 298) | @Test

FILE: DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExample.cs
  class SampleReader (line 34) | class SampleReader : IDisposable
    method SampleReader (line 36) | public SampleReader(String fileName)
    method read (line 41) | public int read(double[,] samplesOut)
    method Dispose (line 64) | public void Dispose()
  class SampleWriter (line 72) | class SampleWriter : IDisposable
    method SampleWriter (line 74) | public SampleWriter(String fileName)
    method write (line 79) | public void write(double[,] samplesIn, int sampleCount)
    method Dispose (line 92) | public void Dispose()
  class Program (line 100) | class Program
    method Main (line 102) | static void Main(string[] args)
    method runTest (line 117) | private static void runTest()
    method process (line 160) | private static void process(SampleReader reader, SampleWriter writer, ...

FILE: DynamicAudioNormalizerNET/src/DynamicAudioNormalizerNET.cpp
  function INIT_ARRAY_2D (line 39) | static void INIT_ARRAY_2D(T *basePtr, T **outPtr, const int64_t dimOuter...
  type DynamicAudioNormalizer (line 85) | namespace DynamicAudioNormalizer
    function private (line 87) | private ref class Lock
  function private (line 106) | private ref class LoggingSupport
  function dotNetLoggingHandler (line 136) | static void dotNetLoggingHandler(const int logLevel, const char *const m...
  function MDynamicAudioNormalizer (line 176) | static MDynamicAudioNormalizer *createNewInstance(const uint32_t &channe...

FILE: DynamicAudioNormalizerNET/src/DynamicAudioNormalizerNET.h
  function namespace (line 33) | namespace DynamicAudioNormalizer

FILE: DynamicAudioNormalizerPYD/include/DynamicAudioNormalizer.py
  class PyDynamicAudioNormalizer (line 51) | class PyDynamicAudioNormalizer:
    method __str__ (line 54) | def __str__(self):
    method __init__ (line 60) | def __init__(self, channels, samplerate, filterSize=31, frameLen=500, ...
    method __enter__ (line 74) | def __enter__(self):
    method __exit__ (line 79) | def __exit__(self, type, value, traceback):
    method __del__ (line 85) | def __del__(self):
    method getConfiguration (line 89) | def getConfiguration(self):
    method getInternalDelay (line 94) | def getInternalDelay(self):
    method process (line 99) | def process(self, samplesIn, samplesOut, count):
    method processInplace (line 104) | def processInplace(self, samplesInOut, count):
    method flushBuffer (line 109) | def flushBuffer(self, samplesOut):
    method setLogFunction (line 115) | def setLogFunction(callback):
    method getVersion (line 119) | def getVersion():

FILE: DynamicAudioNormalizerPYD/samples/DynamicAudioNormalizerExample.py
  function alloc_sample_buffers (line 44) | def alloc_sample_buffers(channles, length):
  function my_log_func (line 60) | def my_log_func(level, message):
  function normalize_samples (line 70) | def normalize_samples(wav_reader, wav_writer, logfile, config):

FILE: DynamicAudioNormalizerPYD/samples/WaveFileUtils.py
  class _WaveFileBase (line 37) | class _WaveFileBase:
    method _unpack_samples (line 41) | def _unpack_samples(self, samples, buffers, channels, sampwidth):
    method _repack_samples (line 54) | def _repack_samples(self, buffers, channels, sampwidth, length):
    method _minimum_buff_length (line 68) | def _minimum_buff_length(self, buffers):
    method _get_sample_type (line 76) | def _get_sample_type(self, sampwidth):
  class WaveFileReader (line 91) | class WaveFileReader(_WaveFileBase):
    method __init__ (line 94) | def __init__(self,filename):
    method __enter__ (line 101) | def __enter__(self):
    method __exit__ (line 109) | def __exit__(self, type, value, traceback):
    method __del__ (line 118) | def __del__(self):
    method getChannels (line 122) | def getChannels(self):
    method getSamplerate (line 127) | def getSamplerate(self):
    method getSampleWidth (line 132) | def getSampleWidth(self):
    method read (line 137) | def read(self, buffers):
  class WaveFileWriter (line 152) | class WaveFileWriter(_WaveFileBase):
    method __init__ (line 155) | def __init__(self,filename,channels,samplewidth,samplerate):
    method __enter__ (line 162) | def __enter__(self):
    method __exit__ (line 170) | def __exit__(self, type, value, traceback):
    method __del__ (line 179) | def __del__(self):
    method getChannels (line 183) | def getChannels(self):
    method getSamplerate (line 188) | def getSamplerate(self):
    method getSampleWidth (line 193) | def getSampleWidth(self):
    method write (line 198) | def write(self, buffers, length):

FILE: DynamicAudioNormalizerPYD/src/DynamicAudioNormalizerPYD.cpp
  function PY_FREE (line 69) | static void PY_FREE(PyObject **const obj)
  function log_callback_set (line 83) | static int log_callback_set(PyObject *const callback)
  function log_callback_invoke (line 98) | static void log_callback_invoke(const int logLevel, const char *const me...
  function global_init_function (line 122) | static bool global_init_function(void)
  function global_exit_function (line 140) | static bool global_exit_function(void)
  function global_init (line 147) | static bool global_init(void)
  function global_exit (line 159) | static bool global_exit(void)
  function MDynamicAudioNormalizer (line 178) | static MDynamicAudioNormalizer *instance_add(MDynamicAudioNormalizer *co...
  function MDynamicAudioNormalizer (line 186) | static MDynamicAudioNormalizer *instance_remove(MDynamicAudioNormalizer ...
  function instance_check (line 198) | static bool instance_check(MDynamicAudioNormalizer *const instance)
  function MDynamicAudioNormalizer (line 207) | static MDynamicAudioNormalizer *PY2INSTANCE(PyObject *const obj)
  class PyBufferWrapper (line 227) | class PyBufferWrapper
    method PyBufferWrapper (line 230) | PyBufferWrapper(PyObject *const data, const uint32_t count, const bool...
    method getLength (line 304) | uint32_t getLength(void) const
    method releaseBuffers (line 321) | void releaseBuffers(void)
    method PyBufferWrapper (line 335) | PyBufferWrapper& operator=(const PyBufferWrapper&) { throw 666; }
    method PyBufferWrapper (line 336) | PyBufferWrapper(const PyBufferWrapper&):m_count(0) { throw 666; }
  function PY_METHOD_IMPL (line 343) | PY_METHOD_IMPL(CreateInstance)
  function PY_METHOD_IMPL (line 399) | PY_METHOD_IMPL(DestroyInstance)
  function PY_METHOD_IMPL (line 411) | PY_METHOD_IMPL(GetConfiguration)
  function PY_METHOD_IMPL (line 428) | PY_METHOD_IMPL(GetInternalDelay)
  function PY_METHOD_IMPL (line 442) | PY_METHOD_IMPL(ProcessInplace)
  function PY_METHOD_IMPL (line 485) | PY_METHOD_IMPL(Process)
  function PY_METHOD_IMPL (line 534) | PY_METHOD_IMPL(FlushBuffer)
  function PY_METHOD_IMPL (line 571) | PY_METHOD_IMPL(SetLogFunction)
  function PY_METHOD_IMPL (line 587) | PY_METHOD_IMPL(GetVersionInfo)
  function PY_METHOD_IMPL (line 611) | PY_METHOD_IMPL(GetCoreVersion)
  type PyModuleDef (line 664) | struct PyModuleDef
  function PyMODINIT_FUNC (line 673) | PyMODINIT_FUNC PyInit_DynamicAudioNormalizerPYD(void)

FILE: DynamicAudioNormalizerSoX/DynamicAudioNormalizerSoX.c
  type settings_t (line 65) | typedef struct
  type priv_t (line 80) | typedef struct
  function parseArgInt (line 93) | static int parseArgInt(const char *const str, uint32_t *parameter, const...
  function parseArgDbl (line 105) | static int parseArgDbl(const char *const str, double *parameter, const d...
  function dynaudnorm_defaults (line 126) | static void dynaudnorm_defaults(settings_t *settings)
  function dynaudnorm_parse_args (line 141) | static int dynaudnorm_parse_args(settings_t *settings, int argc, char **...
  function dynaudnorm_deinterleave (line 197) | static void dynaudnorm_deinterleave(double **temp, const sox_sample_t *c...
  function dynaudnorm_interleave (line 210) | static void dynaudnorm_interleave(sox_sample_t *const out, const double ...
  function dynaudnorm_print (line 223) | static void dynaudnorm_print(sox_effect_t *effp, const char *const fmt, ...
  function dynaudnorm_log (line 234) | static void dynaudnorm_log(const int logLevel, const char *const message)
  function dynaudnorm_update_buffsize (line 250) | static void dynaudnorm_update_buffsize(const sox_effect_t *const effp, p...
  function dynaudnorm_kill (line 268) | static int dynaudnorm_kill(sox_effect_t *effp)
  function dynaudnorm_create (line 275) | static int dynaudnorm_create(sox_effect_t *effp, int argc, char **argv)
  function dynaudnorm_stop (line 293) | static int dynaudnorm_stop(sox_effect_t *effp)
  function dynaudnorm_start (line 326) | static int dynaudnorm_start(sox_effect_t *effp)
  function dynaudnorm_flow (line 382) | static int dynaudnorm_flow(sox_effect_t *effp, const sox_sample_t *ibuf,...
  function dynaudnorm_drain (line 411) | static int dynaudnorm_drain(sox_effect_t * effp, sox_sample_t * obuf, si...
  function sox_effect_handler_t (line 444) | sox_effect_handler_t const * lsx_dynaudnorm_effect_fn(void)

FILE: DynamicAudioNormalizerSoX/extra/main.c
  function main (line 1) | int main( int argc, char **argv )

FILE: DynamicAudioNormalizerSoX/extra/unicode_support.c
  function wchar_t (line 69) | static wchar_t *utf8_to_utf16(const char *input)
  function lsx_init_commandline_arguments (line 84) | void lsx_init_commandline_arguments(int *argc, char ***argv)
  function lsx_free_commandline_arguments (line 119) | void lsx_free_commandline_arguments(int *argc, char ***argv)
  function FILE (line 138) | FILE *lsx_fopen(const char *filename_utf8, const char *mode_utf8)
  function lsx_stat (line 157) | int lsx_stat(const char *path_utf8, struct _stat *buf)
  function lsx_unlink (line 171) | int lsx_unlink(const char *path_utf8)
  function lsx_init_console (line 185) | void lsx_init_console(void)
  function lsx_uninit_console (line 191) | void lsx_uninit_console(void)

FILE: DynamicAudioNormalizerSoX/extra/unicode_support.h
  type _stat (line 45) | struct _stat

FILE: DynamicAudioNormalizerVST/src/DynamicAudioNormalizerVST.cpp
  function outputMessage (line 102) | static void outputMessage(const char *const format, ...)
  function logFunction (line 115) | static void logFunction(const int logLevel, const char *const message)
  function showErrorMsg (line 134) | static void showErrorMsg(const char *const text)
  function DWORD (line 139) | static DWORD regValueGet(const wchar_t *const name)
  function regValueSet (line 157) | static bool regValueSet(const wchar_t *const name, const DWORD &value)
  function getAppUuid (line 171) | static bool getAppUuid(wchar_t *const uuidOut, const size_t &size)
  function VstInt32 (line 191) | static VstInt32 getPlugUuid(void)
  function T (line 208) | static T *allocBuffer(size_t size)
  function applyStepSize (line 224) | static double applyStepSize(const double &val, const double &step)
  function param2value (line 229) | static double param2value(const double &min, const double &val, const do...
  function value2param (line 235) | static float value2param(const double &min, const double &val, const dou...
  function value2string (line 241) | static void value2string(char *text, const double &val, const double &mi...
  function value2integer (line 265) | static uint32_t value2integer(const double &val) { return static_cast<ui...
  function value2boolean (line 266) | static bool     value2boolean(const double &val) { return (val >= 0.5); }
  type DynamicAudioNormalizerVST_Program (line 272) | struct DynamicAudioNormalizerVST_Program
  class DynamicAudioNormalizerVST_PrivateData (line 282) | class DynamicAudioNormalizerVST_PrivateData
    method DynamicAudioNormalizerVST_PrivateData (line 287) | DynamicAudioNormalizerVST_PrivateData(void)
  function VstInt32 (line 574) | VstInt32 DynamicAudioNormalizerVST::getVendorVersion ()
  function VstPlugCategory (line 583) | VstPlugCategory DynamicAudioNormalizerVST::getPlugCategory(void)
  function VstInt32 (line 708) | VstInt32 DynamicAudioNormalizerVST::getGetTailSize(void)
  function appendStr (line 899) | static void appendStr(wchar_t *buffer, const size_t &size, const wchar_t...
  function showAboutScreen (line 909) | static bool showAboutScreen(const uint32_t & major, const uint32_t & min...
  function initializeCoreLibrary (line 928) | static bool initializeCoreLibrary(void)
  function AudioEffect (line 956) | AudioEffect* createEffectInstance(audioMasterCallback audioMaster)

FILE: DynamicAudioNormalizerVST/src/DynamicAudioNormalizerVST.h
  function class (line 44) | class DynamicAudioNormalizerVST : public AudioEffectX

FILE: DynamicAudioNormalizerVST/src/Spooky.cpp
  function Rot64 (line 18) | static inline uint64_t Rot64(uint64_t x, int k)
  function Mix (line 23) | static inline void Mix
  function ShortMix (line 45) | static inline void ShortMix(uint64_t &h0, uint64_t &h1, uint64_t &h2, ui...
  function ShortEnd (line 61) | static inline void ShortEnd(uint64_t &h0, uint64_t &h1, uint64_t &h2, ui...
  function Short (line 76) | static void Short(const void *message, size_t length, uint64_t *hash1, u...
  function EndPartial (line 174) | static inline void EndPartial
  function End (line 195) | static inline void End
  function hash128 (line 211) | void hash128(const void *const message, size_t length, uint64_t *hash1, ...
  function hash128 (line 268) | void hash128(const wchar_t *const message, uint64_t *hash1, uint64_t *ha...

FILE: DynamicAudioNormalizerWA5/src/DynamicAudioNormalizerWA5.cpp
  type winampDSPModule (line 66) | struct winampDSPModule
  type winampDSPModule (line 67) | struct winampDSPModule
  type winampDSPModule (line 68) | struct winampDSPModule
  type winampDSPModule (line 69) | struct winampDSPModule
  function outputMessage (line 121) | static void outputMessage(const char *const format, ...)
  function logFunction (line 134) | static void logFunction(const int logLevel, const char *const message)
  function showErrorMsg (line 153) | static void showErrorMsg(const char *const text)
  function DWORD (line 158) | static DWORD regValueGet(const wchar_t *const name)
  function regValueSet (line 176) | static bool regValueSet(const wchar_t *const name, const DWORD &value)
  function updateBufferSize (line 214) | static void updateBufferSize(const int &numsamples)
  function deinterleave (line 234) | static void deinterleave(const short int *const input, const int &numsam...
  function interleave (line 266) | static void interleave(short int *const output, const int &numsamples, c...
  function createNewInstance (line 298) | static bool createNewInstance(const uint32_t sampleRate, const uint32_t ...
  function detectWinampVersion (line 334) | static bool detectWinampVersion(const HWND &hwndParent)
  function LRESULT (line 370) | static LRESULT CALLBACK winampWindowHook(const HWND hwnd, const UINT uMs...
  function config (line 389) | static void config(struct winampDSPModule *this_mod)
  function init (line 402) | static int init(struct winampDSPModule *this_mod)
  function quit (line 429) | static void quit(struct winampDSPModule *this_mod)
  function modify_samples (line 452) | static int modify_samples(struct winampDSPModule *this_mod, short int *s...
  function appendStr (line 509) | static void appendStr(wchar_t *buffer, const size_t &size, const wchar_t...
  function showAboutScreen (line 519) | static bool showAboutScreen(const uint32_t &major, const uint32_t &minor...
  function initializeCoreLibrary (line 547) | static bool initializeCoreLibrary(void)
  function winampDSPModule (line 575) | static winampDSPModule *getModule(int which)
  function sf (line 598) | static int sf(int v)	/*Note: The "sf" function was copied 1:1 from the e...
  function DLL_EXPORT (line 608) | DLL_EXPORT winampDSPHeader *winampDSPGetHeader2()

FILE: etc/winamp_sdk/include/winamp_dsp.h
  type winampDSPModule (line 12) | typedef struct winampDSPModule {
  type winampDSPHeader (line 30) | typedef struct {
  type winampDSPHeader (line 39) | typedef winampDSPHeader* (*winampDSPGetHeaderType)(HWND);
  type winampDSPHeader (line 44) | typedef winampDSPHeader* (*winampDSPGetHeaderType)(HWND);

FILE: etc/winamp_sdk/include/winamp_ipc.h
  type enqueueFileWithMetaStruct (line 77) | typedef struct {
  type enqueueFileWithMetaStructW (line 85) | typedef struct {
  type extendedFileInfoStruct (line 611) | typedef struct {
  type basicFileInfoStruct (line 620) | typedef struct {
  type basicFileInfoStructW (line 633) | typedef struct {
  type infoBoxParam (line 650) | typedef struct {
  type infoBoxParamW (line 657) | typedef struct {
  type waFormatTitle (line 681) | typedef struct
  type waFormatTitleExtended (line 695) | typedef struct
  type copyFileInfoStruct (line 711) | typedef struct
  type copyFileInfoStructW (line 719) | typedef struct
  type wa_inflate_struct (line 726) | typedef struct {
  type prefsDlgRec (line 742) | typedef struct _prefsDlgRec {
  type prefsDlgRecW (line 760) | typedef struct _prefsDlgRecW {
  type embedWindowState (line 1003) | typedef struct
  type SKINWINDOWPARAM (line 1046) | typedef struct __SKINWINDOWPARAM
  type embedEnumStruct (line 1055) | typedef struct embedEnumStruct
  type convertFileStruct (line 1085) | typedef struct
  type convertFileStructW (line 1107) | typedef struct
  type convertConfigStruct (line 1142) | typedef struct {
  type converterEnumFmtStruct (line 1156) | typedef struct
  type burnCDStruct (line 1165) | typedef struct
  type convertSetPriority (line 1178) | typedef struct
  type convertSetPriorityW (line 1187) | typedef struct
  type convertConfigItem (line 1197) | typedef struct
  type waHookTitleStruct (line 1211) | typedef struct
  type waHookTitleStructW (line 1238) | typedef struct
  type waSetPlColorsStruct (line 1269) | typedef struct
  type waSpawnMenuParms (line 1301) | typedef struct
  type waSpawnMenuParms2 (line 1309) | typedef struct
  type VideoOpenStruct (line 1373) | typedef struct
  type YV12_PLANE (line 1389) | struct YV12_PLANE {
  type YV12_PLANES (line 1394) | struct YV12_PLANES {
  function class (line 1401) | class IVideoOutput
  function class (line 1416) | class ITrackSelector
  type transAccelStruct (line 1582) | typedef struct {
  type windowCommand (line 1594) | typedef struct {
  type DispatchInfo (line 2290) | typedef struct
  type extendedFileInfoStructW (line 2331) | typedef struct {
  type artFetchData (line 2418) | typedef struct {
Condensed preview — 157 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,296K chars).
[
  {
    "path": ".gitignore",
    "chars": 432,
    "preview": "*.VC.db\n*.bin\n*.dcu\n*.ddp\n*.dll\n*.dylib\n*.exe\n*.local.*\n*.o\n*.old\n*.opendb\n*.opensdf\n*.sdf\n*.so\n*.suo\n*.user\n*.~*\n*__pyc"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2013.vcxproj",
    "chars": 18708,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2013.vcxproj.filters",
    "chars": 2446,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2015.vcxproj",
    "chars": 18708,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2015.vcxproj.filters",
    "chars": 2446,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2017.vcxproj",
    "chars": 19866,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerAPI/DynamicAudioNormalizerAPI_VS2017.vcxproj.filters",
    "chars": 2601,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerAPI/include/DynamicAudioNormalizer.h",
    "chars": 8379,
    "preview": "/* ================================================================================== */\n/* Dynamic Audio Normalizer - A"
  },
  {
    "path": "DynamicAudioNormalizerAPI/makefile",
    "chars": 5009,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer - Audio Proces"
  },
  {
    "path": "DynamicAudioNormalizerAPI/res/DynamicAudioNormalizerAPI.rc",
    "chars": 3231,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Binding_C.cpp",
    "chars": 5740,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Binding_JNI.cpp",
    "chars": 22756,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/DLLMain.cpp",
    "chars": 1602,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/DynamicAudioNormalizer.cpp",
    "chars": 34779,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/FrameBuffer.cpp",
    "chars": 4490,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/FrameBuffer.h",
    "chars": 5790,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/GaussianFilter.cpp",
    "chars": 3101,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/GaussianFilter.h",
    "chars": 1531,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Logging.cpp",
    "chars": 2202,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Logging.h",
    "chars": 1781,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Test_API.c",
    "chars": 1573,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Version.cpp",
    "chars": 5568,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerAPI/src/Version.h",
    "chars": 1663,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2013.vcxproj",
    "chars": 11903,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2013.vcxproj.filters",
    "chars": 2180,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2015.vcxproj",
    "chars": 11903,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2015.vcxproj.filters",
    "chars": 2180,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2017.vcxproj",
    "chars": 13426,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerCLI/DynamicAudioNormalizerCLI_VS2017.vcxproj.filters",
    "chars": 2811,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerCLI/makefile",
    "chars": 3843,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer - Audio Proces"
  },
  {
    "path": "DynamicAudioNormalizerCLI/res/DynamicAudioNormalizerCLI.rc",
    "chars": 3241,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/3rd_party/memmem.h",
    "chars": 2398,
    "preview": "/*\n * Copyright (C) 2008 The Android Open Source Project\n * All rights reserved.\n *\n * Redistribution and use in source "
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO.cpp",
    "chars": 6474,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO.h",
    "chars": 2690,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_Mpg123.cpp",
    "chars": 16617,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_Mpg123.h",
    "chars": 2282,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_OpusFile.cpp",
    "chars": 11747,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_OpusFile.h",
    "chars": 2298,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_SndFile.cpp",
    "chars": 17697,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/AudioIO_SndFile.h",
    "chars": 2291,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Main.cpp",
    "chars": 16603,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Parameters.cpp",
    "chars": 10661,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Parameters.h",
    "chars": 3523,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Platform.h",
    "chars": 13294,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Platform_Linux.cpp",
    "chars": 2095,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Platform_OSX.cpp",
    "chars": 2151,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerCLI/src/Platform_Win32.cpp",
    "chars": 3598,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI.qrc",
    "chars": 104,
    "preview": "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n\t<qresource>\n\t\t<file>res/chart_curve.png</file>\n\t</qresource>\n</RCC>\n"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2013.vcxproj",
    "chars": 13675,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2013.vcxproj.filters",
    "chars": 2060,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2015.vcxproj",
    "chars": 13675,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2015.vcxproj.filters",
    "chars": 2060,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2017.vcxproj",
    "chars": 14300,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerGUI/DynamicAudioNormalizerGUI_VS2017.vcxproj.filters",
    "chars": 2064,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerGUI/makefile",
    "chars": 4514,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer - Audio Proces"
  },
  {
    "path": "DynamicAudioNormalizerGUI/res/DynamicAudioNormalizerGUI.rc",
    "chars": 3446,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerGUI/src/3rd_party/qcustomplot.cpp",
    "chars": 765483,
    "preview": "/***************************************************************************\n**                                         "
  },
  {
    "path": "DynamicAudioNormalizerGUI/src/3rd_party/qcustomplot.h",
    "chars": 138463,
    "preview": "/***************************************************************************\n**                                         "
  },
  {
    "path": "DynamicAudioNormalizerGUI/src/Main.cpp",
    "chars": 11367,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerGUI/src/WinMain.cpp",
    "chars": 1738,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerJNI/.classpath",
    "chars": 390,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" path=\"src\"/>\n\t<classpathentry kind=\"src\" "
  },
  {
    "path": "DynamicAudioNormalizerJNI/.project",
    "chars": 384,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>DynamicAudioNormalizerJNI</name>\n\t<comment></comment>"
  },
  {
    "path": "DynamicAudioNormalizerJNI/build.xml",
    "chars": 923,
    "preview": "<project name=\"JDynamicAudioNormalizer\" default=\"deploy\">\n\t<target name=\"clean\">\n\t\t<delete dir=\"bin\"/>\n\t\t<delete dir=\"ou"
  },
  {
    "path": "DynamicAudioNormalizerJNI/generate_headers.bat",
    "chars": 541,
    "preview": "@echo off\n\nif not exist \"%JAVA_HOME%\\bin\\javah.exe\" (\n\techo Could not find 'javah.exe', please check your JDK_PATH envir"
  },
  {
    "path": "DynamicAudioNormalizerJNI/include/com_muldersoft_dynaudnorm_JDynamicAudioNormalizer.h",
    "chars": 355,
    "preview": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class com_muldersoft_dynaudnorm_JDy"
  },
  {
    "path": "DynamicAudioNormalizerJNI/include/com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Error.h",
    "chars": 1112,
    "preview": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class com_muldersoft_dynaudnorm_JDy"
  },
  {
    "path": "DynamicAudioNormalizerJNI/include/com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_Logger.h",
    "chars": 376,
    "preview": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class com_muldersoft_dynaudnorm_JDy"
  },
  {
    "path": "DynamicAudioNormalizerJNI/include/com_muldersoft_dynaudnorm_JDynamicAudioNormalizer_NativeAPI_r8.h",
    "chars": 3695,
    "preview": "/* DO NOT EDIT THIS FILE - it is machine generated */\n#include <jni.h>\n/* Header for class com_muldersoft_dynaudnorm_JDy"
  },
  {
    "path": "DynamicAudioNormalizerJNI/makefile",
    "chars": 2561,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer - Audio Proces"
  },
  {
    "path": "DynamicAudioNormalizerJNI/samples/com/muldersoft/dynaudnorm/samples/AudioFileIO.java",
    "chars": 7505,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Java/JN"
  },
  {
    "path": "DynamicAudioNormalizerJNI/samples/com/muldersoft/dynaudnorm/samples/DynamicAudioNormalizerExample.java",
    "chars": 8165,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Java/JN"
  },
  {
    "path": "DynamicAudioNormalizerJNI/src/com/muldersoft/dynaudnorm/JDynamicAudioNormalizer.java",
    "chars": 13822,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Java/JN"
  },
  {
    "path": "DynamicAudioNormalizerJNI/test/com/muldersoft/dynaudnorm/test/JDynamicAudioNormalizerTest.java",
    "chars": 13132,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Java/JN"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2013.vcxproj",
    "chars": 16592,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2013.vcxproj.filters",
    "chars": 1292,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2015.vcxproj",
    "chars": 16594,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2015.vcxproj.filters",
    "chars": 1292,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2017.vcxproj",
    "chars": 17855,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/DynamicAudioNormalizerNET_VS2017.vcxproj.filters",
    "chars": 1447,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerNET/res/DynamicAudioNormalizerNET.rc",
    "chars": 3231,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExample.cs",
    "chars": 7472,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExample.vb",
    "chars": 8601,
    "preview": "REM //////////////////////////////////////////////////////////////////////////////////\nREM // Dynamic Audio Normalizer "
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExample_CS.csproj",
    "chars": 5349,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExample_VB.vbproj",
    "chars": 6448,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/DynamicAudioNormalizerExamples.sln",
    "chars": 1939,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMini"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/Properties/AssemblyInfo.cs",
    "chars": 1503,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "DynamicAudioNormalizerNET/samples/Properties/AssemblyInfo.vb",
    "chars": 1145,
    "preview": "Imports System\nImports System.Reflection\nImports System.Runtime.InteropServices\n\n' General Information about an assembl"
  },
  {
    "path": "DynamicAudioNormalizerNET/src/AssemblyInfo.cpp",
    "chars": 2955,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Microso"
  },
  {
    "path": "DynamicAudioNormalizerNET/src/DynamicAudioNormalizerNET.cpp",
    "chars": 13272,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Microso"
  },
  {
    "path": "DynamicAudioNormalizerNET/src/DynamicAudioNormalizerNET.h",
    "chars": 3613,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Microso"
  },
  {
    "path": "DynamicAudioNormalizerNET/src/resource.h",
    "chars": 1502,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Microso"
  },
  {
    "path": "DynamicAudioNormalizerPAS/DynamicAudioNormalizerPAS.cfg",
    "chars": 408,
    "preview": "-$A8\n-$B-\n-$C+\n-$D+\n-$E-\n-$F-\n-$G+\n-$H+\n-$I+\n-$J-\n-$K-\n-$L+\n-$M-\n-$N+\n-$O+\n-$P+\n-$Q-\n-$R-\n-$S-\n-$T-\n-$U-\n-$V+\n-$W-\n-$X+\n"
  },
  {
    "path": "DynamicAudioNormalizerPAS/DynamicAudioNormalizerPAS.dof",
    "chars": 2263,
    "preview": "[FileVersion]\nVersion=7.0\n[Compiler]\nA=8\nB=0\nC=1\nD=1\nE=0\nF=0\nG=1\nH=1\nI=1\nJ=0\nK=0\nL=1\nM=0\nN=1\nO=1\nP=1\nQ=0\nR=0\nS=0\nT=0\nU=0"
  },
  {
    "path": "DynamicAudioNormalizerPAS/DynamicAudioNormalizerPAS.dpr",
    "chars": 1855,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Delphi/"
  },
  {
    "path": "DynamicAudioNormalizerPAS/include/DynamicAudioNormalizer.pas",
    "chars": 14154,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Delphi/"
  },
  {
    "path": "DynamicAudioNormalizerPAS/src/DynamicAudioNormalizerExample.dfm",
    "chars": 1895,
    "preview": "object DynamicAudioNormalizerTestApp: TDynamicAudioNormalizerTestApp\n  Left = 618\n  Top = 301\n  BorderIcons = [biSystemM"
  },
  {
    "path": "DynamicAudioNormalizerPAS/src/DynamicAudioNormalizerExample.pas",
    "chars": 10582,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Delphi/"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2013.vcxproj",
    "chars": 17776,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2013.vcxproj.filters",
    "chars": 958,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2015.vcxproj",
    "chars": 17776,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2015.vcxproj.filters",
    "chars": 958,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2017.vcxproj",
    "chars": 18968,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerPYD/DynamicAudioNormalizerPYD_VS2017.vcxproj.filters",
    "chars": 1113,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerPYD/include/DynamicAudioNormalizer.py",
    "chars": 5306,
    "preview": "##################################################################################\n# Dynamic Audio Normalizer - Python W"
  },
  {
    "path": "DynamicAudioNormalizerPYD/makefile",
    "chars": 5071,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer - Audio Proces"
  },
  {
    "path": "DynamicAudioNormalizerPYD/res/DynamicAudioNormalizerPYD.rc",
    "chars": 3233,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerPYD/samples/DynamicAudioNormalizerExample.py",
    "chars": 5542,
    "preview": "##################################################################################\n# Dynamic Audio Normalizer - Python W"
  },
  {
    "path": "DynamicAudioNormalizerPYD/samples/WaveFileUtils.py",
    "chars": 6932,
    "preview": "##################################################################################\n# Dynamic Audio Normalizer - Python W"
  },
  {
    "path": "DynamicAudioNormalizerPYD/src/DynamicAudioNormalizerPYD.cpp",
    "chars": 21475,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Python "
  },
  {
    "path": "DynamicAudioNormalizerShared/include/Common.h",
    "chars": 1663,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerShared/include/Threads.h",
    "chars": 2437,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerShared/res/compat.manifest",
    "chars": 539,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersi"
  },
  {
    "path": "DynamicAudioNormalizerShared/res/version.inc",
    "chars": 2389,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerSoX/DynamicAudioNormalizerSoX.c",
    "chars": 14802,
    "preview": "/* ================================================================================== */\n/* Dynamic Audio Normalizer - S"
  },
  {
    "path": "DynamicAudioNormalizerSoX/INFO.txt",
    "chars": 1170,
    "preview": "Dynamic Audio Normalizer - SoX Wrapper\n======================================\n\nThe purpose of the SoX Wrapper is integra"
  },
  {
    "path": "DynamicAudioNormalizerSoX/extra/main.c",
    "chars": 320,
    "preview": "int main( int argc, char **argv )\n{\n  int sox_argc;\n  char **sox_argv;\n  int exit_code;\n  \n  lsx_init_console();\n  lsx_i"
  },
  {
    "path": "DynamicAudioNormalizerSoX/extra/unicode_support.c",
    "chars": 4808,
    "preview": "/* Copyright (c) 2004-2012 LoRd_MuldeR <mulder2@gmx.de>\n   File: unicode_support.c\n\n   This file was originally part of "
  },
  {
    "path": "DynamicAudioNormalizerSoX/extra/unicode_support.h",
    "chars": 2131,
    "preview": "/* Copyright (c) 2004-2019 LoRd_MuldeR <mulder2@gmx.de>\n   File: unicode_support.h\n\n   This file was originally part of "
  },
  {
    "path": "DynamicAudioNormalizerSoX/patch/SoX-v14.4.2-Patch1-UnicodeSupport+BuildFix.diff",
    "chars": 15602,
    "preview": " src/effects_i.c       |   3 +-\n src/formats.c         |  51 ++++++-------\n src/libsox_i.c        |   7 +-\n src/noisepro"
  },
  {
    "path": "DynamicAudioNormalizerSoX/patch/SoX-v14.4.2-Patch2-AddDynAudNormEffect.diff",
    "chars": 15898,
    "preview": " src/DynamicAudioNormalizerSoX.c | 479 ++++++++++++++++++++++++++++++++++++++++\n src/effects.h                   |   1 +"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST.def",
    "chars": 42,
    "preview": "EXPORTS\n\tVSTPluginMain\n\tmain=VSTPluginMain"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2013.vcxproj",
    "chars": 18865,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2013.vcxproj.filters",
    "chars": 2449,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2015.vcxproj",
    "chars": 18865,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2015.vcxproj.filters",
    "chars": 2449,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2017.vcxproj",
    "chars": 20126,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerVST/DynamicAudioNormalizerVST_VS2017.vcxproj.filters",
    "chars": 2604,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerVST/res/DynamicAudioNormalizerVST.rc",
    "chars": 3229,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerVST/src/DynamicAudioNormalizerVST.cpp",
    "chars": 28744,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - VST 2.x"
  },
  {
    "path": "DynamicAudioNormalizerVST/src/DynamicAudioNormalizerVST.h",
    "chars": 4025,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - VST 2.x"
  },
  {
    "path": "DynamicAudioNormalizerVST/src/Spooky.cpp",
    "chars": 7477,
    "preview": "// Spooky Hash\n// A 128-bit noncryptographic hash, for checksums and table lookup\n// By Bob Jenkins.  Public domain.\n//\n"
  },
  {
    "path": "DynamicAudioNormalizerVST/src/Spooky.h",
    "chars": 477,
    "preview": "// Spooky Hash\n// A 128-bit noncryptographic hash, for checksums and table lookup\n// By Bob Jenkins.  Public domain.\n//\n"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2013.vcxproj",
    "chars": 9661,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"12.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2013.vcxproj.filters",
    "chars": 954,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2015.vcxproj",
    "chars": 9957,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2015.vcxproj.filters",
    "chars": 954,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2017.vcxproj",
    "chars": 10674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "DynamicAudioNormalizerWA5/DynamicAudioNormalizerWA5_VS2017.vcxproj.filters",
    "chars": 1113,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "DynamicAudioNormalizerWA5/res/DynamicAudioNormalizerWA5.rc",
    "chars": 3232,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Audio P"
  },
  {
    "path": "DynamicAudioNormalizerWA5/src/DynamicAudioNormalizerWA5.cpp",
    "chars": 17290,
    "preview": "//////////////////////////////////////////////////////////////////////////////////\n// Dynamic Audio Normalizer - Winamp "
  },
  {
    "path": "DynamicAudioNormalizer_VS2013.sln",
    "chars": 8229,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30723.0\nMi"
  },
  {
    "path": "DynamicAudioNormalizer_VS2015.sln",
    "chars": 8227,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMini"
  },
  {
    "path": "DynamicAudioNormalizer_VS2017.props",
    "chars": 476,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
  },
  {
    "path": "DynamicAudioNormalizer_VS2017.sln",
    "chars": 8228,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26430.16\nMin"
  },
  {
    "path": "LICENSE-GPL2.html",
    "chars": 19999,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head>\n <meta http-equiv=\"Content-Type\" content=\"t"
  },
  {
    "path": "LICENSE-GPL3.html",
    "chars": 36844,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head>\n <meta http-equiv=\"Content-Type\" content=\"t"
  },
  {
    "path": "LICENSE-LGPL.html",
    "chars": 28028,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html><head>\n <meta http-equiv=\"Content-Type\" content=\"t"
  },
  {
    "path": "Makefile",
    "chars": 9543,
    "preview": "##############################################################################\n# Dynamic Audio Normalizer\n# Copyright (c"
  },
  {
    "path": "README.md",
    "chars": 109618,
    "preview": "% ![](img/dyauno/DynAudNorm.png)  \nDynamic Audio Normalizer\n% by LoRd_MuldeR &lt;<mulder2@gmx>&gt; | <http://muldersoft."
  },
  {
    "path": "etc/vst_sdk/VST_SDK_INFO.txt",
    "chars": 731,
    "preview": "VST SDK Installation Instructions\n=================================\n\nPlease put the VST SDK files (v2.4) into this direc"
  },
  {
    "path": "etc/winamp_sdk/LICENSE.txt",
    "chars": 922,
    "preview": "Copyright 1999-2001 Nullsoft, Inc.\n\n  This software is provided 'as-is', without any express or implied\n  warranty.  In "
  },
  {
    "path": "etc/winamp_sdk/include/winamp_dsp.h",
    "chars": 2692,
    "preview": "#ifndef NULLSOFT_WINAMP_DSP_H\n#define NULLSOFT_WINAMP_DSP_H\n// DSP plugin interface\n\n// notes:\n// any window that remain"
  },
  {
    "path": "etc/winamp_sdk/include/winamp_ipc.h",
    "chars": 88194,
    "preview": "/*\n** Copyright (C) 1997-2008 Nullsoft, Inc.\n**\n** This software is provided 'as-is', without any express or implied war"
  },
  {
    "path": "img/dyauno/Style.inc",
    "chars": 9221,
    "preview": "<style type=\"text/css\">\n/*!normalize.css v3.0.1 | MIT License | git.io/normalize*/body,h1,h2,html,mark{color:#000}blockq"
  },
  {
    "path": "z_build.bat",
    "chars": 18720,
    "preview": "@echo off\nsetlocal enabledelayedexpansion\n\nREM /////////////////////////////////////////////////////////////////////////"
  },
  {
    "path": "z_test.bat",
    "chars": 1508,
    "preview": "@echo off\n\nset \"WAV2PNG=D:\\Temp\\Downloads\\wav2png.exe\"\nset \"CONVERT=D:\\ImageMagick-6.9.0-Q16\\convert.exe\"\n\nrmdir /Q /S \""
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the lordmulder/DynamicAudioNormalizer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 157 files (2.1 MB), approximately 557.0k tokens, and a symbol index with 678 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!