From e45dfbc50b3b43f57a470ed15718a655aa7fb7d1 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 23 Feb 2021 02:57:28 +0100 Subject: [PATCH 1/3] Have bit_array as a distinct library --- common.mk | 1 + src/CMakeLists.txt | 7 ++++++- src/sfizz/SynthPrivate.h | 2 +- src/sfizz/utility/{ => bit_array}/BitArray.h | 0 tests/SynthT.cpp | 2 +- 5 files changed, 9 insertions(+), 3 deletions(-) rename src/sfizz/utility/{ => bit_array}/BitArray.h (100%) diff --git a/common.mk b/common.mk index ca23cad7..d27836e8 100644 --- a/common.mk +++ b/common.mk @@ -128,6 +128,7 @@ SFIZZ_SOURCES = \ SFIZZ_C_FLAGS += \ -I$(SFIZZ_DIR)/src/sfizz \ + -I$(SFIZZ_DIR)/src/sfizz/utility/bit_array \ -I$(SFIZZ_DIR)/src/sfizz/utility/spin_mutex # Pkg-config dependency diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b98cf69b..9779d698 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -252,13 +252,18 @@ target_include_directories(sfizz_spin_mutex PUBLIC sfizz/utility/spin_mutex) target_link_libraries(sfizz_spin_mutex PRIVATE sfizz::atomic_queue) add_library(sfizz::spin_mutex ALIAS sfizz_spin_mutex) +# Sfizz bit array +add_library(sfizz_bit_array INTERFACE) +target_include_directories(sfizz_bit_array INTERFACE sfizz/utility/bit_array) +add_library(sfizz::bit_array ALIAS sfizz_bit_array) + # Sfizz internals (use this for testing) add_library(sfizz_internal STATIC) add_library(sfizz::internal ALIAS sfizz_internal) target_sources(sfizz_internal PRIVATE ${SFIZZ_HEADERS} ${SFIZZ_SOURCES} ${FAUST_FILES}) target_include_directories(sfizz_internal PUBLIC "." "sfizz") target_link_libraries(sfizz_internal - PUBLIC absl::strings absl::span sfizz::filesystem sfizz::atomic_queue sfizz::spin_mutex sfizz::simde + PUBLIC absl::strings absl::span sfizz::filesystem sfizz::atomic_queue sfizz::spin_mutex sfizz::bit_array sfizz::simde PRIVATE sfizz::parser sfizz::messaging absl::flat_hash_map Threads::Threads st_audiofile sfizz::pugixml sfizz::spline sfizz::tunings sfizz::hiir sfizz::kissfft sfizz::cephes sfizz::cpuid sfizz::threadpool sfizz::jsl sfizz::atomic) if(SFIZZ_USE_SNDFILE) target_compile_definitions(sfizz_internal PUBLIC "SFIZZ_USE_SNDFILE=1") diff --git a/src/sfizz/SynthPrivate.h b/src/sfizz/SynthPrivate.h index e0d3124a..aaf6f72a 100644 --- a/src/sfizz/SynthPrivate.h +++ b/src/sfizz/SynthPrivate.h @@ -5,12 +5,12 @@ #include "SisterVoiceRing.h" #include "TriggerEvent.h" #include "VoiceManager.h" +#include "BitArray.h" #include "modulations/sources/ADSREnvelope.h" #include "modulations/sources/Controller.h" #include "modulations/sources/FlexEnvelope.h" #include "modulations/sources/ChannelAftertouch.h" #include "modulations/sources/LFO.h" -#include "utility/BitArray.h" namespace sfz { diff --git a/src/sfizz/utility/BitArray.h b/src/sfizz/utility/bit_array/BitArray.h similarity index 100% rename from src/sfizz/utility/BitArray.h rename to src/sfizz/utility/bit_array/BitArray.h diff --git a/tests/SynthT.cpp b/tests/SynthT.cpp index c21fcc9e..cd309176 100644 --- a/tests/SynthT.cpp +++ b/tests/SynthT.cpp @@ -8,7 +8,7 @@ #include "sfizz/SisterVoiceRing.h" #include "sfizz/SfzHelpers.h" #include "sfizz/utility/NumericId.h" -#include "sfizz/utility/BitArray.h" +#include "BitArray.h" #include "TestHelpers.h" #include #include "catch2/catch.hpp" From 9de0648075ea31692c0ee874c5d4a16f8fdcba7b Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 23 Feb 2021 03:03:10 +0100 Subject: [PATCH 2/3] Convert the editor to use BitArray --- plugins/editor/CMakeLists.txt | 2 +- plugins/editor/src/editor/Editor.cpp | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/editor/CMakeLists.txt b/plugins/editor/CMakeLists.txt index ee8b259d..1c10dab7 100644 --- a/plugins/editor/CMakeLists.txt +++ b/plugins/editor/CMakeLists.txt @@ -69,7 +69,7 @@ else() target_include_directories(sfizz_editor PRIVATE ${sfizz-gio_INCLUDE_DIRS}) target_link_libraries(sfizz_editor PRIVATE ${sfizz-gio_LIBRARIES}) endif() -target_link_libraries(sfizz_editor PRIVATE sfizz::filesystem) +target_link_libraries(sfizz_editor PRIVATE sfizz::bit_array sfizz::filesystem) # layout tool if(NOT CMAKE_CROSSCOMPILING) diff --git a/plugins/editor/src/editor/Editor.cpp b/plugins/editor/src/editor/Editor.cpp index fa0bb186..14987bf1 100644 --- a/plugins/editor/src/editor/Editor.cpp +++ b/plugins/editor/src/editor/Editor.cpp @@ -10,6 +10,7 @@ #include "GUIComponents.h" #include "GUIPiano.h" #include "NativeHelpers.h" +#include "BitArray.h" #include "plugin/MessageUtils.h" #include #include @@ -396,11 +397,10 @@ void Editor::Impl::uiReceiveMessage(const char* path, const char* sig, const sfi // TODO(jpc) key ranges } else if (Messages::matchOSC("/cc/slots", path, indices) && !strcmp(sig, "b")) { - const uint8_t* bitChunks = args[0].b->data; - uint32_t byteSize = args[0].b->size; - - for (unsigned cc = 0; cc < 8 * byteSize; ++cc) { - bool used = bitChunks[cc / 8] & (1u << (cc % 8)); + size_t numBits = 8 * args[0].b->size; + ConstBitSpan bits { args[0].b->data, numBits }; + for (unsigned cc = 0; cc < numBits; ++cc) { + bool used = bits.test(cc); updateCCUsed(cc, used); if (used) { char pathBuf[256]; @@ -414,10 +414,10 @@ void Editor::Impl::uiReceiveMessage(const char* path, const char* sig, const sfi } } else if (Messages::matchOSC("/cc/changed", path, indices) && !strcmp(sig, "b")) { - const uint8_t* bitChunks = args[0].b->data; - uint32_t byteSize = args[0].b->size; - for (unsigned cc = 0; cc < 8 * byteSize; ++cc) { - bool changed = bitChunks[cc / 8] & (1u << (cc % 8)); + size_t numBits = 8 * args[0].b->size; + ConstBitSpan bits { args[0].b->data, numBits }; + for (unsigned cc = 0; cc < numBits; ++cc) { + bool changed = bits.test(cc); if (changed) { char pathBuf[256]; sprintf(pathBuf, "/cc%u/value", cc); From 6de95ce2af6fe7398c682556576ce7e74d184c61 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 23 Feb 2021 03:43:29 +0100 Subject: [PATCH 3/3] Update clang-tidy script --- scripts/run_clang_tidy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/run_clang_tidy.sh b/scripts/run_clang_tidy.sh index ceb29530..097e4760 100755 --- a/scripts/run_clang_tidy.sh +++ b/scripts/run_clang_tidy.sh @@ -30,7 +30,7 @@ clang-tidy \ vst/SfizzVstState.cpp \ -- -Iexternal/abseil-cpp -Iexternal/jsl/include -Iexternal/filesystem/include -Iexternal/atomic_queue/include -Iexternal/threadpool -Isrc/external/hiir -Isrc/external/pugixml/src \ -Iexternal/st_audiofile/src -Iexternal/st_audiofile/thirdparty/dr_libs \ - -Isrc/sfizz -Isrc -Isrc/sfizz/utility/spin_mutex -Isrc/external/spline -Isrc/external/cpuid/src -Iexternal/simde \ + -Isrc/sfizz -Isrc -Isrc/sfizz/utility/bit_array -Isrc/sfizz/utility/spin_mutex -Isrc/external/spline -Isrc/external/cpuid/src -Iexternal/simde \ -Ivst -Ivst/external/VST_SDK/VST3_SDK -Ieditor/external/vstgui4 -Ivst/external/ring_buffer \ -Ieditor/src \ -DNDEBUG -std=c++17