Version 0.9
Added: Filter type "IIR", which allows to specify a user-defined IIR filter of arbitrary order with custom coefficients. Improved: For playback devices, the APO is now installed both as GFX (post-mix) and LFX (pre-mix) APO. Normally the filtering happens in GFX, but the command "Stage" allows to select LFX to apply effects based on the number of input channels. Added: Expression language. The commands "If", "ElseIf", "Else", "EndIf", "Eval" and inline expressions allow to change the filter behaviour based on runtime conditions. Added: Command "Copy", which copies audio data between channels. Added: Command "Delay", which delays the audio on the currently selected channels. Improved: Configuration files are now locked exclusively for writing while reading them. Improved: There is now a transition (10 ms) from old to new configuration after loading. Improved: Substantial internal restructuring to improve extensibility and maintainability. Filtering commands now work exactly in the order they were specified. Fixed: When the microphone input was in stereo but the application requested a mono stream, the audio was heavily distorted. Fixed: The sine sweep generated by the Benchmark application had floating-point precision issues leading to severe artifacts when certain filters were applied.
This commit is contained in:
1 parent
11e52f6210
commit
90ee2b0aa9
89 files changed
+6396
-1375
No files matched your search
+39
-16
@@ -23,8 +23,8 @@
|
||||
|
||||
#include "EqualizerAPO.h"
|
||||
#include "ClassFactory.h"
|
||||
#include "RegistryHelper.h"
|
||||
#include "LogHelper.h"
|
||||
#include "helpers/RegistryHelper.h"
|
||||
#include "helpers/LogHelper.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -48,7 +48,7 @@ STDAPI DllCanUnloadNow()
|
||||
|
||||
STDAPI DllGetClassObject(const CLSID& clsid, const IID& iid, void** ppv)
|
||||
{
|
||||
if(clsid != __uuidof(EqualizerAPO))
|
||||
if(clsid != EQUALIZERAPO_GFX_GUID && clsid != EQUALIZERAPO_LFX_GUID)
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
|
||||
ClassFactory* factory = new ClassFactory();
|
||||
@@ -66,26 +66,43 @@ STDAPI DllRegisterServer()
|
||||
wchar_t filename[1024];
|
||||
GetModuleFileNameW(hModule, filename, sizeof(filename)/sizeof(wchar_t));
|
||||
|
||||
HRESULT hr = RegisterAPO(EqualizerAPO::regProperties);
|
||||
HRESULT hr = RegisterAPO(EqualizerAPO::regGfxProperties);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
UnregisterAPO(__uuidof(EqualizerAPO));
|
||||
UnregisterAPO(EQUALIZERAPO_GFX_GUID);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = RegisterAPO(EqualizerAPO::regLfxProperties);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
UnregisterAPO(EQUALIZERAPO_GFX_GUID);
|
||||
UnregisterAPO(EQUALIZERAPO_LFX_GUID);
|
||||
return hr;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
wstring apoClsidString = RegistryHelper::getGuidString(__uuidof(EqualizerAPO));
|
||||
wstring apoClsidString = RegistryHelper::getGuidString(EQUALIZERAPO_GFX_GUID);
|
||||
|
||||
RegistryHelper::createKey(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
RegistryHelper::writeValue(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString, L"", L"EqualizerAPO Class");
|
||||
RegistryHelper::createKey(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::writeValue(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"", filename);
|
||||
RegistryHelper::writeValue(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"ThreadingModel", L"Both");
|
||||
RegistryHelper::createKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString, L"", L"EqualizerAPO GFX Class");
|
||||
RegistryHelper::createKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"", filename);
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"ThreadingModel", L"Both");
|
||||
|
||||
apoClsidString = RegistryHelper::getGuidString(EQUALIZERAPO_LFX_GUID);
|
||||
|
||||
RegistryHelper::createKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString, L"", L"EqualizerAPO LFX Class");
|
||||
RegistryHelper::createKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"", filename);
|
||||
RegistryHelper::writeValue(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32", L"ThreadingModel", L"Both");
|
||||
}
|
||||
catch(RegistryException e)
|
||||
{
|
||||
UnregisterAPO(__uuidof(EqualizerAPO));
|
||||
UnregisterAPO(EQUALIZERAPO_GFX_GUID);
|
||||
UnregisterAPO(EQUALIZERAPO_LFX_GUID);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
@@ -96,17 +113,23 @@ STDAPI DllUnregisterServer()
|
||||
{
|
||||
try
|
||||
{
|
||||
wstring apoClsidString = RegistryHelper::getGuidString(__uuidof(EqualizerAPO));
|
||||
wstring apoClsidString = RegistryHelper::getGuidString(EQUALIZERAPO_GFX_GUID);
|
||||
|
||||
RegistryHelper::deleteKey(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::deleteKey(L"SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
RegistryHelper::deleteKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::deleteKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
|
||||
apoClsidString = RegistryHelper::getGuidString(EQUALIZERAPO_LFX_GUID);
|
||||
|
||||
RegistryHelper::deleteKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString + L"\\InprocServer32");
|
||||
RegistryHelper::deleteKey(L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID\\" + apoClsidString);
|
||||
}
|
||||
catch(RegistryException e)
|
||||
{
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
HRESULT hr = UnregisterAPO(__uuidof(EqualizerAPO));
|
||||
HRESULT hr = UnregisterAPO(EQUALIZERAPO_GFX_GUID);
|
||||
UnregisterAPO(EQUALIZERAPO_LFX_GUID);
|
||||
|
||||
return hr;
|
||||
}
|
||||
Reference in new issue
Block a user