From 5b886a9e7a17e5ce069191ace072d6f37a200866 Mon Sep 17 00:00:00 2001 From: jthedering <51533355+jthedering@users.noreply.github.com> Date: Wed, 5 Jun 2019 21:15:06 +0000 Subject: [PATCH] Added: Voicemeeter Potato support Improved: Device strings like "Output A5" no longer accidentally match GUIDs. Now, only strings containing { will match GUIDs. --- VoicemeeterAPOInfo.cpp | 12 +++++++++--- VoicemeeterClient/VoicemeeterClient.cpp | 12 +++++++++--- VoicemeeterClient/VoicemeeterClient.h | 2 +- VoicemeeterClient/VoicemeeterClient.vcxproj | 2 +- VoicemeeterClient/VoicemeeterClient.vcxproj.filters | 2 +- filters/DeviceFilterFactory.cpp | 8 +++++++- uncrustify.cfg | 1 - 7 files changed, 28 insertions(+), 11 deletions(-) diff --git a/VoicemeeterAPOInfo.cpp b/VoicemeeterAPOInfo.cpp index bf6ae7d..0771436 100644 --- a/VoicemeeterAPOInfo.cpp +++ b/VoicemeeterAPOInfo.cpp @@ -38,7 +38,7 @@ static const wchar_t* clientFilename = L"VoicemeeterClient.exe"; static const wchar_t* voicemeeterClientKeyPath = USER_REGPATH L"\\Voicemeeter Client"; static const wchar_t* sampleRateValueName = L"sampleRate"; -typedef NTSTATUS (NTAPI * pfnNtQueryInformationProcess)( +typedef NTSTATUS (NTAPI* pfnNtQueryInformationProcess)( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PVOID ProcessInformation, @@ -59,10 +59,16 @@ void VoicemeeterAPOInfo::prependInfos(vector >& list size_t index = voicemeeterDirectory.find_last_of(L'\\'); wstring setupFilename = voicemeeterDirectory.substr(index + 1); - bool banana = (setupFilename == L"VoicemeeterProSetup.exe"); + long voicemeeterType = 1; + if (setupFilename == L"VoicemeeterProSetup.exe") + voicemeeterType = 2;// banana + else if (setupFilename == L"Voicemeeter8Setup.exe") + voicemeeterType = 3;// potato unsigned outputCount; - if (banana) + if (voicemeeterType == 3) + outputCount = 5; + else if (voicemeeterType == 2) outputCount = 3; else outputCount = 1; diff --git a/VoicemeeterClient/VoicemeeterClient.cpp b/VoicemeeterClient/VoicemeeterClient.cpp index f8f811e..09710b8 100644 --- a/VoicemeeterClient/VoicemeeterClient.cpp +++ b/VoicemeeterClient/VoicemeeterClient.cpp @@ -92,7 +92,11 @@ VoicemeeterClient::VoicemeeterClient(const vector& outputs) if (index != wstring::npos) { wstring setupFilename = voicemeeterDirectory.substr(index + 1); - banana = (setupFilename == L"VoicemeeterProSetup.exe"); + voicemeeterType = 1; + if (setupFilename == L"VoicemeeterProSetup.exe") + voicemeeterType = 2;// banana + else if (setupFilename == L"Voicemeeter8Setup.exe") + voicemeeterType = 3;// potato voicemeeterDirectory = voicemeeterDirectory.substr(0, index); @@ -137,11 +141,13 @@ void VoicemeeterClient::start() { long type; if (vmr.VBVMR_GetVoicemeeterType(&type) == 0) - banana = (type == 2); + voicemeeterType = type; } unsigned outputCount; - if (banana) + if (voicemeeterType == 3) + outputCount = 5; + else if (voicemeeterType == 2) outputCount = 3; else outputCount = 1; diff --git a/VoicemeeterClient/VoicemeeterClient.h b/VoicemeeterClient/VoicemeeterClient.h index 296e04d..451e453 100644 --- a/VoicemeeterClient/VoicemeeterClient.h +++ b/VoicemeeterClient/VoicemeeterClient.h @@ -43,6 +43,6 @@ private: std::vector engines; std::vector idleSampleCounts; bool loggedIn = false; - bool banana = false; + long voicemeeterType = 1; std::vector outputs; }; diff --git a/VoicemeeterClient/VoicemeeterClient.vcxproj b/VoicemeeterClient/VoicemeeterClient.vcxproj index ae3c616..5719dd2 100644 --- a/VoicemeeterClient/VoicemeeterClient.vcxproj +++ b/VoicemeeterClient/VoicemeeterClient.vcxproj @@ -149,11 +149,11 @@ - + diff --git a/VoicemeeterClient/VoicemeeterClient.vcxproj.filters b/VoicemeeterClient/VoicemeeterClient.vcxproj.filters index 3f7d590..f84c460 100644 --- a/VoicemeeterClient/VoicemeeterClient.vcxproj.filters +++ b/VoicemeeterClient/VoicemeeterClient.vcxproj.filters @@ -3,11 +3,11 @@ - helpers + diff --git a/filters/DeviceFilterFactory.cpp b/filters/DeviceFilterFactory.cpp index 91b1238..f62f9b9 100644 --- a/filters/DeviceFilterFactory.cpp +++ b/filters/DeviceFilterFactory.cpp @@ -18,6 +18,7 @@ */ #include "stdafx.h" +#include #include #include "helpers/LogHelper.h" #include "helpers/StringHelper.h" @@ -28,6 +29,8 @@ using namespace std; +static wregex regexGuid(L"\\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\}"); + #ifndef NO_FILTERENGINE void DeviceFilterFactory::initialize(FilterEngine* engine) { @@ -102,6 +105,8 @@ bool DeviceFilterFactory::matchDevice(const std::wstring& deviceString, const st } } + wstring deviceStringNoGuid = regex_replace(deviceString, regexGuid, L""); + bool matches = false; for (unsigned i = 0; i < fullList.size(); i++) @@ -114,7 +119,8 @@ bool DeviceFilterFactory::matchDevice(const std::wstring& deviceString, const st for (unsigned j = 0; j < fullList[i].size(); j++) { wstring word = StringHelper::toLowerCase(fullList[i][j]); - if (StringHelper::toLowerCase(deviceString).find(word) == -1) + const wstring& matchString = word.find('{') == wstring::npos ? deviceStringNoGuid : deviceString; + if (StringHelper::toLowerCase(matchString).find(word) == wstring::npos) { matches = false; break; diff --git a/uncrustify.cfg b/uncrustify.cfg index 86d550e..5170167 100644 --- a/uncrustify.cfg +++ b/uncrustify.cfg @@ -47,7 +47,6 @@ sp_permit_cpp11_shift=false align_keep_tabs=false align_with_tabs=false align_on_tabstop=false -align_number_left=false align_keep_extra_space=false align_func_params=false align_same_func_call_params=false