diff --git a/.travis.yml b/.travis.yml index f118980a..0c653e66 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,8 +14,10 @@ jobs: apt: packages: - clang-tidy + - wget + - unzip - libsndfile-dev - install: skip + install: .travis/download_vst_sdk.sh script: scripts/run_clang_tidy.sh - name: "Linux amd64 tests" diff --git a/.travis/download_vst_sdk.sh b/.travis/download_vst_sdk.sh new file mode 100755 index 00000000..3eee309e --- /dev/null +++ b/.travis/download_vst_sdk.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -ex + +vst_download_prefix="vst/download" +vst_sdk_archive="vst-sdk_3.6.14_build-24_2019-11-29.zip" +mkdir -p ${vst_download_prefix} +if ! [[ -f "${vst_download_prefix}/${vst_sdk_archive}" ]]; then + wget -P ${vst_download_prefix} "https://download.steinberg.net/sdk_downloads/${vst_sdk_archive}" +fi +mkdir -p vst/external +unzip -ouq "${vst_download_prefix}/${vst_sdk_archive}" -d "vst/external" diff --git a/scripts/run_clang_tidy.sh b/scripts/run_clang_tidy.sh index e660173b..7431d3f5 100755 --- a/scripts/run_clang_tidy.sh +++ b/scripts/run_clang_tidy.sh @@ -19,6 +19,14 @@ clang-tidy \ src/sfizz/SIMDSSE.cpp \ src/sfizz/Synth.cpp \ src/sfizz/Voice.cpp \ + src/sfizz/effects/Eq.cpp \ + src/sfizz/effects/Filter.cpp \ src/sfizz/effects/Lofi.cpp \ src/sfizz/effects/Nothing.cpp \ - -- -Iexternal/abseil-cpp -Isrc/external -Isrc/external/pugixml/src -Isrc/sfizz -Isrc + vst/SfizzVstController.cpp \ + vst/SfizzVstProcessor.cpp \ + vst/SfizzVstEditor.cpp \ + vst/SfizzVstState.cpp \ + -- -Iexternal/abseil-cpp -Isrc/external -Isrc/external/pugixml/src \ + -Isrc/sfizz -Isrc \ + -Ivst -Ivst/external/VST_SDK/VST3_SDK -Ivst/external/VST_SDK/VST3_SDK/vstgui4 -DNDEBUG diff --git a/vst/SfizzVstController.cpp b/vst/SfizzVstController.cpp index cc13b355..5598ca43 100644 --- a/vst/SfizzVstController.cpp +++ b/vst/SfizzVstController.cpp @@ -84,7 +84,7 @@ tresult PLUGIN_API SfizzVstControllerNoUi::getParamStringByValue(Vst::ParamID ta switch (tag) { case kPidOversampling: { - int factorLog2 = kParamOversamplingRange.denormalize(valueNormalized); + auto factorLog2 = static_cast(kParamOversamplingRange.denormalize(valueNormalized)); Steinberg::String buf; buf.printf("%dX", 1 << factorLog2); buf.copyTo(string); diff --git a/vst/SfizzVstProcessor.cpp b/vst/SfizzVstProcessor.cpp index 55877da3..62d6b785 100644 --- a/vst/SfizzVstProcessor.cpp +++ b/vst/SfizzVstProcessor.cpp @@ -12,7 +12,13 @@ #include "pluginterfaces/vst/ivstparameterchanges.h" #include -#pragma message("TODO: send tempo") +#pragma message("TODO: send tempo") // NOLINT + +template +constexpr int fastRound(T x) +{ + return static_cast(x + T{ 0.5 }); // NOLINT +} SfizzVstProcessor::SfizzVstProcessor() : _fifoToWorker(1024) @@ -22,7 +28,11 @@ SfizzVstProcessor::SfizzVstProcessor() SfizzVstProcessor::~SfizzVstProcessor() { - setActive(false); // to be sure + try { + stopBackgroundWork(); + } catch (const std::exception& e) { + fprintf(stderr, "Caught exception: %s\n", e.what()); + } } tresult PLUGIN_API SfizzVstProcessor::initialize(FUnknown* context) @@ -186,7 +196,7 @@ void SfizzVstProcessor::processParameterChanges(Vst::IParameterChanges& pc) break; msg->setMessageID("SetNumVoices"); Vst::IAttributeList* attr = msg->getAttributes(); - attr->setInt("NumVoices", kParamNumVoicesRange.denormalize(value)); + attr->setInt("NumVoices", static_cast(kParamNumVoicesRange.denormalize(value))); if (!_fifoToWorker.push(msg)) { msg->release(); break; @@ -201,7 +211,7 @@ void SfizzVstProcessor::processParameterChanges(Vst::IParameterChanges& pc) break; msg->setMessageID("SetOversampling"); Vst::IAttributeList* attr = msg->getAttributes(); - attr->setInt("Oversampling", kParamOversamplingRange.denormalize(value)); + attr->setInt("Oversampling", static_cast(kParamOversamplingRange.denormalize(value))); if (!_fifoToWorker.push(msg)) { msg->release(); break; @@ -216,7 +226,7 @@ void SfizzVstProcessor::processParameterChanges(Vst::IParameterChanges& pc) break; msg->setMessageID("SetPreloadSize"); Vst::IAttributeList* attr = msg->getAttributes(); - attr->setInt("PreloadSize", kParamPreloadSizeRange.denormalize(value)); + attr->setInt("PreloadSize", static_cast(kParamPreloadSizeRange.denormalize(value))); if (!_fifoToWorker.push(msg)) { msg->release(); break; @@ -246,10 +256,10 @@ void SfizzVstProcessor::processControllerChanges(Vst::IParameterChanges& pc) switch (id) { default: if (id >= kPidMidiCC0 && id <= kPidMidiCCLast) { - int ccNumber = id - kPidMidiCC0; + auto ccNumber = static_cast(id - kPidMidiCC0); for (uint32 pointIndex = 0; pointIndex < pointCount; ++pointIndex) { if (vq->getPoint(pointIndex, sampleOffset, value) == kResultTrue) - synth.cc(sampleOffset, ccNumber, (int)(0.5 + value * 127.0)); + synth.cc(sampleOffset, ccNumber, fastRound(value * 127.0)); } } break; @@ -257,14 +267,14 @@ void SfizzVstProcessor::processControllerChanges(Vst::IParameterChanges& pc) case kPidMidiAftertouch: for (uint32 pointIndex = 0; pointIndex < pointCount; ++pointIndex) { if (vq->getPoint(pointIndex, sampleOffset, value) == kResultTrue) - synth.aftertouch(sampleOffset, (int)(0.5 + value * 127.0)); + synth.aftertouch(sampleOffset, fastRound(value * 127.0)); } break; case kPidMidiPitchBend: for (uint32 pointIndex = 0; pointIndex < pointCount; ++pointIndex) { if (vq->getPoint(pointIndex, sampleOffset, value) == kResultTrue) - synth.pitchWheel(sampleOffset, (int)(0.5 + value * 16383) - 8192); + synth.pitchWheel(sampleOffset, fastRound(value * 16383) - 8192); } break; }