diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..fd268a01 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,37 @@ +--- +Checks: 'clang-diagnostic-*,clang-analyzer-*,abseil-*,bugprone-*,performance-*,-abseil-no-internal-dependencies' +WarningsAsErrors: 'clang-diagnostic-*,clang-analyzer-*,abseil-*,bugprone-*,performance-*' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +FormatStyle: file +User: paul +CheckOptions: + - key: cert-dcl16-c.NewSuffixes + value: 'L;LL;LU;LLU' + - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField + value: '0' + - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors + value: '1' + - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: '1' + - key: google-readability-braces-around-statements.ShortStatementLines + value: '1' + - key: google-readability-function-size.StatementThreshold + value: '800' + - key: google-readability-namespace-comments.ShortNamespaceLines + value: '10' + - key: google-readability-namespace-comments.SpacesBeforeComments + value: '2' + - key: modernize-loop-convert.MaxCopySize + value: '16' + - key: modernize-loop-convert.MinConfidence + value: reasonable + - key: modernize-loop-convert.NamingStyle + value: CamelCase + - key: modernize-pass-by-value.IncludeStyle + value: llvm + - key: modernize-replace-auto-ptr.IncludeStyle + value: llvm + - key: modernize-use-nullptr.NullMacros + value: 'NULL' +... diff --git a/.gitignore b/.gitignore index d232a9b0..cc8d2bc2 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,7 @@ compile_commands.json *.a *.txt.user *.autosave - +/Doxyfile .DS_Store clients/sfizz_jack diff --git a/.travis.yml b/.travis.yml index 9f31aedc..e137e58e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,110 +1,161 @@ language: cpp +os: linux +dist: bionic jobs: include: - - os: linux + - name: "clang-tidy checks" + stage: "Tests" + addons: + apt: + packages: + - clang-tidy + - libsndfile-dev + install: skip + script: scripts/run_clang_tidy.sh + + - name: "Linux amd64 tests" + arch: amd64 + addons: + apt: + packages: + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: .travis/download_cmake.sh + script: .travis/script_test.sh + + - name: "Linux arm64 tests" + arch: amd64 + addons: + apt: + packages: + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: .travis/download_cmake.sh + script: .travis/script_test.sh + + - name: "Windows mingw32" + stage: "Build" env: - CROSS_COMPILE=mingw32 - CONTAINER=cross - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-mingw32" + before_install: .travis/before_install_mingw.sh + install: .travis/install_mingw.sh + script: .travis/script_mingw.sh + after_success: .travis/prepare_tarball.sh - - os: linux + - name: "Windows mingw64" env: - CROSS_COMPILE=mingw64 - CONTAINER=cross - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-mingw64" + before_install: .travis/before_install_mingw.sh + install: .travis/install_mingw.sh + script: .travis/script_mingw.sh + after_success: .travis/prepare_tarball.sh - - os: linux + - name: "Linux amd64 library" arch: amd64 - dist: bionic env: - - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" + - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" addons: apt: - sources: - - sourceline: 'ppa:ubuntu-toolchain-r/test' - packages: - - doxygen + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: .travis/download_cmake.sh + script: .travis/script_library.sh + after_success: .travis/prepare_tarball.sh - - os: linux + - name: "Linux arm64 library" arch: arm64 - dist: bionic env: - - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" + - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" addons: apt: - sources: - - sourceline: 'ppa:ubuntu-toolchain-r/test' + packages: + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: .travis/download_cmake.sh + script: .travis/script_library.sh + after_success: .travis/prepare_tarball.sh - - os: linux + - name: "Linux arm64 static LV2" arch: arm64 - dist: bionic env: - - BUILD_TYPE=lv2 - - INSTALL_DIR="sfizz-lv2-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" + - INSTALL_DIR="sfizz-lv2-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" addons: apt: - sources: - - sourceline: 'ppa:ubuntu-toolchain-r/test' + packages: + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: + - .travis/download_cmake.sh + - .travis/download_static_libs.sh + script: .travis/script_lv2.sh + after_success: .travis/prepare_tarball.sh - - os: linux - arch: amd64 - dist: bionic + - name: "Linux amd64 static LV2" env: - - BUILD_TYPE=lv2 - - INSTALL_DIR="sfizz-lv2-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" + - INSTALL_DIR="sfizz-lv2-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" addons: apt: - sources: - - sourceline: 'ppa:ubuntu-toolchain-r/test' + packages: + - libasound2-dev + - libjack-jackd2-dev + - libsndfile1-dev + install: + - .travis/download_cmake.sh + - .travis/download_static_libs.sh + script: .travis/script_lv2.sh + after_success: .travis/prepare_tarball.sh - - os: osx + - name: "macOS" + os: osx osx_image: xcode10.1 env: - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" + install: .travis/install_osx.sh + script: .travis/script_osx.sh + after_success: .travis/prepare_tarball.sh - - os: linux + - stage: "Deploy" + name: "Source packaging" + if: (tag IS present) AND (branch = master) env: - - BUILD_TYPE=source - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-src" addons: apt: packages: - python-pip + install: sudo pip install git-archive-all + script: git-archive-all --prefix="sfizz-${TRAVIS_BRANCH}/" -9 "${INSTALL_DIR}.tar.gz" - before_install: - - true + - name: "Generate documentation" + if: (tag IS present) AND (branch = master) + addons: + apt: + packages: + - doxygen + - cmake + - libsndfile-dev + install: skip + script: .travis/update_dox.sh - install: - - sudo pip install git-archive-all - - script: - - git-archive-all --prefix="sfizz-${TRAVIS_BRANCH}/" -9 "${INSTALL_DIR}.tar.gz" - - after_failure: - - true - - after_success: - - true - -before_install: -- bash ${TRAVIS_BUILD_DIR}/.travis/before_install.sh - -install: -- bash ${TRAVIS_BUILD_DIR}/.travis/install.sh - -script: -- bash ${TRAVIS_BUILD_DIR}/.travis/script.sh + - name: "Discord Webhook" + install: skip + script: bash ${TRAVIS_BUILD_DIR}/.travis/discord_webhook.sh success +# Signal discord on failure after_failure: - bash ${TRAVIS_BUILD_DIR}/.travis/discord_webhook.sh failure -after_success: -- bash ${TRAVIS_BUILD_DIR}/.travis/discord_webhook.sh success -- bash ${TRAVIS_BUILD_DIR}/.travis/update_dox.sh -- bash ${TRAVIS_BUILD_DIR}/.travis/after_success.sh - deploy: provider: releases skip_cleanup: true diff --git a/.travis/before_install_mingw.sh b/.travis/before_install_mingw.sh new file mode 100755 index 00000000..7431f4e9 --- /dev/null +++ b/.travis/before_install_mingw.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -ex +. .travis/mingw_container.sh + +buildenv bash -c "echo Hello from container" # ensure to start the container +docker cp "$container":/etc/pacman.conf pacman.conf +cat >>pacman.conf < ${TRAVIS_BUILD_DIR}/docker-container-id - fi -} diff --git a/.travis/install.sh b/.travis/install.sh deleted file mode 100755 index 8b48d209..00000000 --- a/.travis/install.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -ex -. .travis/environment.sh - -if [[ ${CROSS_COMPILE} == "mingw32" || ${CROSS_COMPILE} == "mingw64" ]]; then - buildenv pacman -Sqy --noconfirm - buildenv pacman -Sq --noconfirm base-devel wget mingw-w64-cmake mingw-w64-gcc mingw-w64-pkg-config mingw-w64-libsndfile - buildenv i686-w64-mingw32-gcc -v && buildenv i686-w64-mingw32-g++ -v && buildenv i686-w64-mingw32-cmake --version -elif [[ ${BUILD_TYPE} == "lv2" ]]; then - wget -q https://github.com/sfztools/sndfile-libraries/releases/download/${TRAVIS_OS_NAME}/sndfile-libraries-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}.tar.gz - tar xf sndfile-libraries-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}.tar.gz - sudo cp -R sndfile-libraries-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}/usr / -elif [[ ${TRAVIS_OS_NAME} == "linux" ]]; then - sudo apt-get install libasound2-dev libjack-jackd2-dev libsndfile1-dev - gcc -v && g++ -v && cmake --version && /usr/local/bin/cmake --version && $SHELL --version -fi diff --git a/.travis/install_mingw.sh b/.travis/install_mingw.sh new file mode 100755 index 00000000..593c7de8 --- /dev/null +++ b/.travis/install_mingw.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -ex +. .travis/mingw_container.sh + +buildenv pacman -Sqy --noconfirm +buildenv pacman -Sq --noconfirm base-devel wget mingw-w64-cmake mingw-w64-gcc mingw-w64-pkg-config mingw-w64-libsndfile +buildenv i686-w64-mingw32-gcc -v && buildenv i686-w64-mingw32-g++ -v && buildenv i686-w64-mingw32-cmake --version diff --git a/.travis/install_osx.sh b/.travis/install_osx.sh new file mode 100755 index 00000000..c04bc695 --- /dev/null +++ b/.travis/install_osx.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -ex + +sudo ln -s /usr/local /opt/local +brew update +brew upgrade cmake +brew install jack diff --git a/.travis/mingw_container.sh b/.travis/mingw_container.sh new file mode 100755 index 00000000..5629657f --- /dev/null +++ b/.travis/mingw_container.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +buildenv() { + setup_container archlinux + docker exec -w "$(pwd)" -i -t "$container" "$@" +} + +setup_container() { + if [ -f ${TRAVIS_BUILD_DIR}/docker-container-id ]; then + container=$(cat ${TRAVIS_BUILD_DIR}/docker-container-id) + else + container=$(docker run -d -i -t -v /home:/home "$1" /bin/bash) + echo "$container" > ${TRAVIS_BUILD_DIR}/docker-container-id + fi +} diff --git a/.travis/after_success.sh b/.travis/prepare_tarball.sh similarity index 61% rename from .travis/after_success.sh rename to .travis/prepare_tarball.sh index a2afdeba..9e7e79ce 100755 --- a/.travis/after_success.sh +++ b/.travis/prepare_tarball.sh @@ -1,7 +1,12 @@ #!/bin/bash set -ex -. .travis/environment.sh +. .travis/mingw_container.sh + +# Do not prepare a tarball without a tag +if [[ ${TRAVIS_TAG} == "" ]]; then + exit 0 +fi cd build buildenv make DESTDIR=${PWD}/${INSTALL_DIR} install diff --git a/.travis/script.sh b/.travis/script.sh deleted file mode 100755 index 0ecc8086..00000000 --- a/.travis/script.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -set -ex -. .travis/environment.sh - -mkdir -p build/${INSTALL_DIR} && cd build - -if [[ ${CROSS_COMPILE} == "mingw32" ]]; then - - buildenv i686-w64-mingw32-cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. - buildenv make -j -elif [[ ${CROSS_COMPILE} == "mingw64" ]]; then - - buildenv x86_64-w64-mingw32-cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. - buildenv make -j -elif [[ ${BUILD_TYPE} == "lv2" ]]; then - - buildenv cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_TESTS=OFF -DSFIZZ_SHARED=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. - buildenv make -j -elif [[ ${TRAVIS_OS_NAME} == "linux" ]]; then - - buildenv cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_LV2=OFF -DSFIZZ_TESTS=OFF .. - buildenv make -j$(nproc) -elif [[ ${TRAVIS_OS_NAME} == "osx" ]]; then - - buildenv cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_TESTS=OFF .. - buildenv make -j$(sysctl -n hw.ncpu) - -# Xcode not currently supported, see https://gitlab.kitware.com/cmake/cmake/issues/18088 -# xcodebuild -project sfizz.xcodeproj -alltargets -configuration Debug build -fi diff --git a/.travis/script_library.sh b/.travis/script_library.sh new file mode 100755 index 00000000..07008903 --- /dev/null +++ b/.travis/script_library.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -ex + +mkdir -p build/${INSTALL_DIR} && cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_TYPE=Release -DSFIZZ_LV2=OFF -DSFIZZ_TESTS=OFF .. +make -j$(nproc) diff --git a/.travis/script_lv2.sh b/.travis/script_lv2.sh new file mode 100755 index 00000000..d121ea1f --- /dev/null +++ b/.travis/script_lv2.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -ex + +mkdir -p build/${INSTALL_DIR} && cd build +cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_TESTS=OFF -DSFIZZ_SHARED=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. +make -j$(nproc) diff --git a/.travis/script_mingw.sh b/.travis/script_mingw.sh new file mode 100755 index 00000000..f8a0e833 --- /dev/null +++ b/.travis/script_mingw.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -ex +. .travis/mingw_container.sh + +mkdir -p build/${INSTALL_DIR} && cd build +if [[ ${CROSS_COMPILE} == "mingw32" ]]; then + buildenv i686-w64-mingw32-cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. + buildenv make -j +elif [[ ${CROSS_COMPILE} == "mingw64" ]]; then + buildenv x86_64-w64-mingw32-cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_STATIC_LIBSNDFILE=ON .. + buildenv make -j +fi diff --git a/.travis/script_osx.sh b/.travis/script_osx.sh new file mode 100755 index 00000000..39a19577 --- /dev/null +++ b/.travis/script_osx.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -ex + +mkdir -p build/${INSTALL_DIR} && cd build +cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_TESTS=OFF .. +make -j$(sysctl -n hw.ncpu) +# Xcode not currently supported, see https://gitlab.kitware.com/cmake/cmake/issues/18088 +# xcodebuild -project sfizz.xcodeproj -alltargets -configuration Debug build diff --git a/.travis/script_test.sh b/.travis/script_test.sh new file mode 100755 index 00000000..a3c90749 --- /dev/null +++ b/.travis/script_test.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -ex + +mkdir build && cd build +cmake -DCMAKE_BUILD_TYPE=Release -DSFIZZ_JACK=OFF -DSFIZZ_TESTS=ON -DSFIZZ_SHARED=OFF -DSFIZZ_STATIC_LIBSNDFILE=OFF -DSFIZZ_LV2=OFF .. +make -j$(nproc) sfizz_tests +tests/sfizz_tests diff --git a/.travis/update_dox.sh b/.travis/update_dox.sh index 8b74e4e8..e838dc05 100755 --- a/.travis/update_dox.sh +++ b/.travis/update_dox.sh @@ -3,11 +3,7 @@ set -x # No fail, we need to go back to the original branch at the end . .travis/environment.sh -# Build documentation only from Linux x86_64 builds -if [[ ${TRAVIS_CPU_ARCH} != "amd64" || ${TRAVIS_OS_NAME} != "linux" || "${CROSS_COMPILE}" != "" || ${TRAVIS_TAG} == "" ]]; then - exit 0 -fi - +mkdir build && cd build && cmake -DSFIZZ_JACK=OFF -DSFIZZ_SHARED=OFF -DSFIZZ_LV2=OFF .. && cd .. doxygen Doxyfile git fetch --depth=1 https://github.com/${TRAVIS_REPO_SLUG}.git refs/heads/gh-pages:refs/remotes/origin/gh-pages git checkout origin/gh-pages diff --git a/Doxyfile b/doxygen/scripts/Doxyfile.in similarity index 99% rename from Doxyfile rename to doxygen/scripts/Doxyfile.in index 1de7cecd..53dc1502 100644 --- a/Doxyfile +++ b/doxygen/scripts/Doxyfile.in @@ -38,7 +38,7 @@ PROJECT_NAME = sfizz # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.1.0 +PROJECT_NUMBER = @PROJECT_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doxygen/scripts/generate_api_index.sh b/doxygen/scripts/generate_api_index.sh new file mode 100755 index 00000000..34a494d0 --- /dev/null +++ b/doxygen/scripts/generate_api_index.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Must be called from the root directory +cat >>index.md <> index.md + fi +done diff --git a/scripts/run_clang_tidy.sh b/scripts/run_clang_tidy.sh new file mode 100755 index 00000000..e660173b --- /dev/null +++ b/scripts/run_clang_tidy.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +clang-tidy \ + src/sfizz/ADSREnvelope.cpp \ + src/sfizz/Effects.cpp \ + src/sfizz/EQPool.cpp \ + src/sfizz/EventEnvelopes.cpp \ + src/sfizz/FilePool.cpp \ + src/sfizz/FilterPool.cpp \ + src/sfizz/FloatEnvelopes.cpp \ + src/sfizz/Logger.cpp \ + src/sfizz/MidiState.cpp \ + src/sfizz/Opcode.cpp \ + src/sfizz/Oversampler.cpp \ + src/sfizz/Parser.cpp \ + src/sfizz/sfizz.cpp \ + src/sfizz/Region.cpp \ + src/sfizz/SfzHelpers.cpp \ + src/sfizz/SIMDSSE.cpp \ + src/sfizz/Synth.cpp \ + src/sfizz/Voice.cpp \ + src/sfizz/effects/Lofi.cpp \ + src/sfizz/effects/Nothing.cpp \ + -- -Iexternal/abseil-cpp -Isrc/external -Isrc/external/pugixml/src -Isrc/sfizz -Isrc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2475fd65..5b22a2b2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -52,6 +52,8 @@ if(WIN32) configure_file (${PROJECT_SOURCE_DIR}/scripts/innosetup.iss.in ${PROJECT_BINARY_DIR}/innosetup.iss @ONLY) endif() +configure_file (${PROJECT_SOURCE_DIR}/doxygen/scripts/Doxyfile.in ${PROJECT_SOURCE_DIR}/Doxyfile @ONLY) + add_library (sfizz::parser ALIAS sfizz_parser) add_library (sfizz::sfizz ALIAS sfizz_static) if (LIBATOMIC_FOUND) diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index c1fad38e..e795d53f 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -178,7 +178,8 @@ void ADSREnvelope::getBlock(absl::Span output) noexcept if (shouldRelease) { remainingSamples = static_cast(originalSpan.size()); - if (releaseDelay > remainingSamples) { + if (releaseDelay > remainingSamples) + { releaseDelay -= remainingSamples; return; } diff --git a/src/sfizz/Defaults.h b/src/sfizz/Defaults.h index 2b734d91..4d01301c 100644 --- a/src/sfizz/Defaults.h +++ b/src/sfizz/Defaults.h @@ -125,7 +125,7 @@ namespace Default constexpr Range rtDecayRange { 0.0f, 200.0f }; // Performance parameters: Filters - constexpr float numFilters { 2 }; + constexpr int numFilters { 2 }; constexpr float filterCutoff { 0 }; constexpr float filterResonance { 0 }; constexpr float filterGain { 0 }; @@ -147,7 +147,7 @@ namespace Default constexpr Range filterResonanceModRange { 0.0f, 96.0f }; // Performance parameters: EQ - constexpr float numEQs { 3 }; + constexpr int numEQs { 3 }; constexpr float eqBandwidth { 1.0f }; constexpr float eqBandwidthCC { 0.0f }; constexpr float eqFrequencyUnset { 0.0f }; diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 89492265..a716d32b 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -218,7 +218,7 @@ bool sfz::FilePool::preloadFile(const std::string& filename, uint32_t maxOffset) } else { preloadedFiles.insert_or_assign(filename, { readFromFile(sndFile, framesToLoad, oversamplingFactor), - static_cast(oversamplingFactor) * sndFile.samplerate() + static_cast(oversamplingFactor) * static_cast(sndFile.samplerate()) }); } diff --git a/src/sfizz/FilterPool.cpp b/src/sfizz/FilterPool.cpp index af56f3b6..354486df 100644 --- a/src/sfizz/FilterPool.cpp +++ b/src/sfizz/FilterPool.cpp @@ -31,7 +31,7 @@ void sfz::FilterHolder::setup(const FilterDescription& description, unsigned num } const auto keytrack = description.keytrack * (noteNumber - description.keycenter); baseCutoff *= centsFactor(keytrack); - const auto veltrack = description.veltrack * normalizeVelocity(velocity); + const auto veltrack = static_cast(description.veltrack) * normalizeVelocity(velocity); baseCutoff *= centsFactor(veltrack); baseCutoff = Default::filterCutoffRange.clamp(baseCutoff); diff --git a/src/sfizz/Logger.cpp b/src/sfizz/Logger.cpp index 53bfa66b..15b7fa86 100644 --- a/src/sfizz/Logger.cpp +++ b/src/sfizz/Logger.cpp @@ -98,12 +98,12 @@ sfz::Logger::~Logger() } -void sfz::Logger::logCallbackTime(CallbackBreakdown&& breakdown, int numVoices, size_t numSamples) +void sfz::Logger::logCallbackTime(const CallbackBreakdown& breakdown, int numVoices, size_t numSamples) { if (!loggingEnabled) return; - callbackTimeQueue.try_push({ std::move(breakdown), numVoices, numSamples }); + callbackTimeQueue.try_push({ breakdown, numVoices, numSamples }); } void sfz::Logger::logFileTime(std::chrono::duration waitDuration, std::chrono::duration loadDuration, uint32_t fileSize, absl::string_view filename) diff --git a/src/sfizz/Logger.h b/src/sfizz/Logger.h index 449c19d9..d23cb618 100644 --- a/src/sfizz/Logger.h +++ b/src/sfizz/Logger.h @@ -108,7 +108,7 @@ public: * @param numVoices The number of active voices * @param numSamples The number of samples in the callback */ - void logCallbackTime(CallbackBreakdown&& breakdown, int numVoices, size_t numSamples); + void logCallbackTime(const CallbackBreakdown& breakdown, int numVoices, size_t numSamples); /** * @brief Log a file loading and waiting duration diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index 004b5fe9..ddf2a764 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -250,7 +250,7 @@ bool sfz::Region::parseOpcode(const Opcode& opcode) case hash("volume"): setValueFromOpcode(opcode, volume, Default::volumeRange); break; - case hash("gain_cc&"): [[fallthrough]]; + case hash("gain_cc&"): case hash("gain_oncc&"): [[fallthrough]]; case hash("volume_oncc&"): setCCPairFromOpcode(opcode, volumeCC, Default::volumeCCRange); @@ -395,8 +395,8 @@ bool sfz::Region::parseOpcode(const Opcode& opcode) setValueFromOpcode(opcode, filters[filterIndex].resonance, Default::filterResonanceRange); } break; - case hash("cutoff_oncc&"): [[fallthrough]]; - case hash("cutoff_cc&"): [[fallthrough]]; + case hash("cutoff_oncc&"): + case hash("cutoff_cc&"): case hash("cutoff&_oncc&"): [[fallthrough]]; case hash("cutoff&_cc&"): { @@ -411,8 +411,8 @@ bool sfz::Region::parseOpcode(const Opcode& opcode) ); } break; - case hash("resonance&_oncc&"): [[fallthrough]]; - case hash("resonance&_cc&"): [[fallthrough]]; + case hash("resonance&_oncc&"): + case hash("resonance&_cc&"): case hash("resonance_oncc&"): [[fallthrough]]; case hash("resonance_cc&"): { diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 476317ab..09d4e965 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -568,7 +568,7 @@ void sfz::Synth::renderBlock(AudioSpan buffer) noexcept buffer.applyGain(db2mag(volume)); callbackBreakdown.dispatch = dispatchDuration; - resources.logger.logCallbackTime(std::move(callbackBreakdown), numActiveVoices, numFrames); + resources.logger.logCallbackTime(callbackBreakdown, numActiveVoices, numFrames); // Reset the dispatch counter dispatchDuration = Duration(0); @@ -939,7 +939,7 @@ void sfz::Synth::resetAllControllers(int delay) noexcept fs::file_time_type sfz::Synth::checkModificationTime() { auto returnedTime = modificationTime; - for (auto file: getIncludedFiles()) { + for (const auto& file: getIncludedFiles()) { const auto fileTime = fs::last_write_time(file); if (returnedTime < fileTime) returnedTime = fileTime; diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index df3e3c10..8f75c25c 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -82,7 +82,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value pitchBendEnvelope.setFunction([region](float pitchValue){ const auto normalizedBend = normalizeBend(pitchValue); - const auto bendInCents = normalizedBend > 0.0f ? normalizedBend * region->bendUp : -normalizedBend * region->bendDown; + const auto bendInCents = normalizedBend > 0.0f ? normalizedBend * static_cast(region->bendUp) : -normalizedBend * static_cast(region->bendDown); return centsFactor(bendInCents); }); pitchBendEnvelope.reset(static_cast(resources.midiState.getPitchBend())); @@ -106,7 +106,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, uint8_t value sourcePosition = region->getOffset(); triggerDelay = delay; - initialDelay = delay + static_cast(region->getDelay() * sampleRate); + initialDelay = delay + static_cast(region->getDelay() * sampleRate); baseFrequency = midiNoteFrequency(number); bendStepFactor = centsFactor(region->bendStep); egEnvelope.reset(*region, resources.midiState, delay, value, sampleRate); diff --git a/src/sfizz/effects/Lofi.cpp b/src/sfizz/effects/Lofi.cpp index 1fcc3304..60b66949 100644 --- a/src/sfizz/effects/Lofi.cpp +++ b/src/sfizz/effects/Lofi.cpp @@ -132,7 +132,7 @@ namespace fx { for (uint32_t i = 0; i < nframes; ++i) { float x = in[i]; - float y = std::copysign((int)(0.5f + std::fabs(x * steps)), x) * invSteps; + float y = std::copysign((int)(0.5f + std::fabs(x * steps)), x) * invSteps; // NOLINT float y2x[2]; y2x[0] = (y != lastValue) ? (0.5f * (y + lastValue)) : y; @@ -150,7 +150,7 @@ namespace fx { /// void Lofi::Decim::init(double sampleRate) { - fSampleTime = 1.0 / sampleRate; + fSampleTime = 1.0f / static_cast(sampleRate); static constexpr double coefs2x[12] = { 0.036681502163648017, 0.13654762463195794, 0.27463175937945444, 0.42313861743656711, 0.56109869787919531, 0.67754004997416184, 0.76974183386322703, 0.83988962484963892, 0.89226081800387902, 0.9315419599631839, 0.96209454837808417, 0.98781637073289585 }; fDownsampler2x.set_coefs(coefs2x); @@ -192,7 +192,7 @@ namespace fx { phase += dt; float y = (phase > 1.0f) ? x : lastValue; - phase -= static_cast(phase); + phase -= static_cast(static_cast(phase)); float y2x[2]; y2x[0] = (y != lastValue) ? (0.5f * (y + lastValue)) : y;