From d1486614572dc33b8216865c6da30f40090ce17e Mon Sep 17 00:00:00 2001 From: Simon Zimmermann Date: Mon, 10 Feb 2025 16:22:55 +0100 Subject: [PATCH] prepare windows port --- CMakeLists.txt | 6 ++++ core/inc/core/AudioBuffer.h | 8 ++--- core/inc/core/IAudioBuffer.h | 4 +-- core/mocks/inc/AudioBufferMock.h | 10 +++--- core/src/AudioBuffer.cpp | 22 ++++++------ seele/inc/MiniSlider.h | 6 ++-- seele/inc/PluginProcessor.h | 1 - seele/inc/SeeleSlider.h | 8 ++--- seele/seeleCore/inc/seeleCore/Analysis.h | 6 ++-- seele/seeleCore/inc/seeleCore/Config.h | 1 - seele/seeleCore/inc/seeleCore/Engine.h | 1 - seele/seeleCore/inc/seeleCore/IAnalysis.h | 4 +-- seele/seeleCore/inc/seeleCore/PitchShifter.h | 13 ++++--- seele/seeleCore/inc/seeleCore/Synthesis.h | 6 ++-- .../seeleCore/mocks/inc/DelayProcessorMock.h | 2 +- seele/seeleCore/src/DelayProcessor.cpp | 2 +- seele/seeleCore/src/Engine.cpp | 18 ++-------- seele/seeleCore/src/GainProcessor.cpp | 2 +- seele/seeleCore/src/PitchShifter.cpp | 35 +++++++++++-------- seele/seeleCore/src/PitchShifterManager.cpp | 4 +-- seele/seeleCore/src/Synthesis.cpp | 3 +- seele/seeleCore/tests/src/EngineTestCase.cpp | 7 ---- seele/seeleCore/tests/src/FactoryTestCase.cpp | 10 +++--- .../seeleCore/tests/src/SynthesisTestCase.cpp | 2 +- seele/src/MainComponent.cpp | 2 +- seele/src/MemberArea.cpp | 4 --- seele/src/PluginProcessor.cpp | 6 ++-- toolchains/macToolchain.cmake | 14 ++++++++ toolchains/windowsToolchain.cmake | 14 ++++++++ 29 files changed, 117 insertions(+), 104 deletions(-) create mode 100644 toolchains/macToolchain.cmake create mode 100644 toolchains/windowsToolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5506670..0d71098 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,11 @@ cmake_minimum_required(VERSION 3.13) +if (APPLE) + include(toolchains/macToolchain.cmake) +elseif (WIN32) + include(toolchains/windowsToolchain.cmake) +endif () + project(seele) set(CONAN_DISABLE_CHECK_COMPILER TRUE) diff --git a/core/inc/core/AudioBuffer.h b/core/inc/core/AudioBuffer.h index 86e9264..d6b6a00 100644 --- a/core/inc/core/AudioBuffer.h +++ b/core/inc/core/AudioBuffer.h @@ -43,9 +43,9 @@ namespace hidonash::core void setSample(int destChannel, int destSample, float newValue) override; - int getNumChannels() const override; + size_t getNumChannels() const override; - int getNumSamples() const override; + size_t getNumSamples() const override; float* getDataPointer() const override; @@ -99,8 +99,8 @@ namespace hidonash::core }; private: - int numChannels_ = 0; - int numSamples_ = 0; + size_t numChannels_ = 0; + size_t numSamples_ = 0; MemoryBlock memoryBlock_; float* const* data_; diff --git a/core/inc/core/IAudioBuffer.h b/core/inc/core/IAudioBuffer.h index 7571963..73c28d9 100644 --- a/core/inc/core/IAudioBuffer.h +++ b/core/inc/core/IAudioBuffer.h @@ -31,9 +31,9 @@ namespace hidonash::core virtual void setSample(int destChannel, int destSample, float newValue) = 0; - virtual int getNumChannels() const = 0; + virtual size_t getNumChannels() const = 0; - virtual int getNumSamples() const = 0; + virtual size_t getNumSamples() const = 0; virtual float* getDataPointer() const = 0; diff --git a/core/mocks/inc/AudioBufferMock.h b/core/mocks/inc/AudioBufferMock.h index b080fa3..2c7c586 100644 --- a/core/mocks/inc/AudioBufferMock.h +++ b/core/mocks/inc/AudioBufferMock.h @@ -15,11 +15,11 @@ namespace hidonash::core MOCK_METHOD(float, getSample, (int, int), (const)); - MOCK_METHOD(void, setSample, (int, int, float)); + MOCK_METHOD(void, setSample, (int, int, float) ); - MOCK_METHOD(int, getNumChannels, (), (const)); + MOCK_METHOD(size_t, getNumChannels, (), (const)); - MOCK_METHOD(int, getNumSamples, (), (const)); + MOCK_METHOD(size_t, getNumSamples, (), (const)); MOCK_METHOD(float*, getDataPointer, (), (const)); @@ -27,9 +27,9 @@ namespace hidonash::core MOCK_METHOD(std::unique_ptr, getChannel, (size_t channel)); - MOCK_METHOD(void, fill, (float)); + MOCK_METHOD(void, fill, (float) ); - MOCK_METHOD(void, copyFrom, (const IAudioBuffer&)); + MOCK_METHOD(void, copyFrom, (const IAudioBuffer&) ); MOCK_METHOD(void, copy, (const IAudioBuffer&, size_t, size_t, size_t)); diff --git a/core/src/AudioBuffer.cpp b/core/src/AudioBuffer.cpp index 6d7f5db..591c13b 100644 --- a/core/src/AudioBuffer.cpp +++ b/core/src/AudioBuffer.cpp @@ -22,13 +22,13 @@ namespace hidonash::core void AudioBuffer::Channel::fill(float value) { - for (auto sa = 0; sa < size_; ++sa) + for (size_t sa = 0; sa < size_; ++sa) buffer_[sa] = value; } void AudioBuffer::Channel::applyGain(float gain) { - for (auto sa = 0; sa < size_; ++sa) + for (size_t sa = 0; sa < size_; ++sa) buffer_[sa] *= gain; } @@ -60,12 +60,12 @@ namespace hidonash::core *(data_[destChannel] + destSample) = newValue; } - int AudioBuffer::getNumChannels() const + size_t AudioBuffer::getNumChannels() const { return numChannels_; } - int AudioBuffer::getNumSamples() const + size_t AudioBuffer::getNumSamples() const { return numSamples_; } @@ -93,8 +93,8 @@ namespace hidonash::core void AudioBuffer::fill(float value) { - for (auto ch = 0; ch < numChannels_; ++ch) - for (auto sa = 0; sa < numSamples_; ++sa) + for (size_t ch = 0; ch < numChannels_; ++ch) + for (size_t sa = 0; sa < numSamples_; ++sa) setSample(ch, sa, value); } @@ -104,10 +104,11 @@ namespace hidonash::core memcpy(data_[0], other.getDataPointer(), numChannels_ * numSamples_ * sizeof(float)); else { - const auto channelsToCopy = std::min(other.getNumChannels(), numChannels_); - const auto samplesToCopy = std::min(numSamples_, other.getNumSamples()); + const auto channelsToCopy = + static_cast(std::min(static_cast(other.getNumChannels()), static_cast(numChannels_))); + const auto samplesToCopy = std::min(static_cast(numSamples_), static_cast(other.getNumSamples())); - for (auto c = size_t {0}; c < channelsToCopy; ++c) + for (size_t c = 0; c < channelsToCopy; ++c) memcpy(data_[c], other.getDataPointer(), samplesToCopy * sizeof(float)); } } @@ -136,7 +137,8 @@ namespace hidonash::core void AudioBuffer::multiply(const std::vector& from, size_t multiplyLength) { - const auto numChannels = std::min(numChannels_, static_cast(from.size())); + const auto numChannels = + static_cast(std::min(static_cast(numChannels_), static_cast(from.size()))); for (size_t c = 0; c < numChannels; ++c) for (size_t i = 0; i < multiplyLength; ++i) diff --git a/seele/inc/MiniSlider.h b/seele/inc/MiniSlider.h index 28d0616..20f8499 100644 --- a/seele/inc/MiniSlider.h +++ b/seele/inc/MiniSlider.h @@ -22,8 +22,8 @@ namespace hidonash } void drawLinearSlider(juce::Graphics& graphics, int x, int y, int width, int height, float sliderPos, - float minSliderPos, float maxSliderPos, const juce::Slider::SliderStyle style, - juce::Slider& slider) override + float /*minSliderPos*/, float /*maxSliderPos*/, + const juce::Slider::SliderStyle /*style*/, juce::Slider& slider) override { const auto sliderWidth = slider.getWidth(); graphics.setColour(currentColour_); @@ -78,7 +78,7 @@ namespace hidonash setLookAndFeel(nullptr); } - void mouseEnter(const juce::MouseEvent& e) override + void mouseEnter(const juce::MouseEvent&) override { setMouseCursor(juce::MouseCursor::StandardCursorType::PointingHandCursor); lookAndFeel_.setHighlightColour(); diff --git a/seele/inc/PluginProcessor.h b/seele/inc/PluginProcessor.h index c5c328f..1432ed4 100644 --- a/seele/inc/PluginProcessor.h +++ b/seele/inc/PluginProcessor.h @@ -50,7 +50,6 @@ class NewProjectAudioProcessor : public juce::AudioProcessor juce::AudioProcessorValueTreeState parameters_; hidonash::MemberParameterSetPtr memberParameterSet_; - int currentProgram_; hidonash::AudioProcessorPtr engine_; juce::AudioBuffer visualizationBuffer_; diff --git a/seele/inc/SeeleSlider.h b/seele/inc/SeeleSlider.h index c663233..ccaab57 100644 --- a/seele/inc/SeeleSlider.h +++ b/seele/inc/SeeleSlider.h @@ -21,9 +21,9 @@ namespace hidonash setColour(juce::Slider::ColourIds::textBoxOutlineColourId, juce::Colours::transparentBlack); } - void drawLinearSlider(juce::Graphics& graphics, int x, int y, int width, int height, float sliderPos, - float minSliderPos, float maxSliderPos, const juce::Slider::SliderStyle style, - juce::Slider& slider) override + void drawLinearSlider(juce::Graphics& graphics, int x, int /*y*/, int /*width*/, int height, + float sliderPos, float /*minSliderPos*/, float /*maxSliderPos*/, + const juce::Slider::SliderStyle /*style*/, juce::Slider& slider) override { graphics.fillAll(juce::Colour::fromRGB(40, 40, 70)); const auto sliderWidth = slider.getWidth(); @@ -95,7 +95,7 @@ namespace hidonash setLookAndFeel(nullptr); } - void mouseEnter(const juce::MouseEvent& e) override + void mouseEnter(const juce::MouseEvent&) override { setMouseCursor(juce::MouseCursor::StandardCursorType::PointingHandCursor); lookAndFeel_.setHighlightColour(); diff --git a/seele/seeleCore/inc/seeleCore/Analysis.h b/seele/seeleCore/inc/seeleCore/Analysis.h index 8f9ae87..2972c3b 100644 --- a/seele/seeleCore/inc/seeleCore/Analysis.h +++ b/seele/seeleCore/inc/seeleCore/Analysis.h @@ -18,9 +18,9 @@ namespace hidonash private: int freqPerBin_; - std::array lastPhase_; - std::array analysisFrequencyBuffer_; - std::array analysisMagnitudeBuffer_; + std::array lastPhase_; + std::array analysisFrequencyBuffer_; + std::array analysisMagnitudeBuffer_; }; } diff --git a/seele/seeleCore/inc/seeleCore/Config.h b/seele/seeleCore/inc/seeleCore/Config.h index b00d3cb..3530a74 100644 --- a/seele/seeleCore/inc/seeleCore/Config.h +++ b/seele/seeleCore/inc/seeleCore/Config.h @@ -30,7 +30,6 @@ namespace hidonash { constexpr auto pi = 3.14159265358979323846; constexpr auto fftFrameSize = 2048; - constexpr auto analysisSize = 2 * fftFrameSize; constexpr auto oversamplingFactor = 8; constexpr auto stepSize = fftFrameSize / oversamplingFactor; constexpr auto inFifoLatency = fftFrameSize - stepSize; diff --git a/seele/seeleCore/inc/seeleCore/Engine.h b/seele/seeleCore/inc/seeleCore/Engine.h index 3c3e596..db3655a 100644 --- a/seele/seeleCore/inc/seeleCore/Engine.h +++ b/seele/seeleCore/inc/seeleCore/Engine.h @@ -32,7 +32,6 @@ namespace hidonash const IMemberParameterSet& memberParameterSet_; core::AudioBuffer accumulationBuffer_; size_t numChannels_; - double sampleRate_; std::vector lastDistances_; }; } diff --git a/seele/seeleCore/inc/seeleCore/IAnalysis.h b/seele/seeleCore/inc/seeleCore/IAnalysis.h index ca5175b..ac5dbba 100644 --- a/seele/seeleCore/inc/seeleCore/IAnalysis.h +++ b/seele/seeleCore/inc/seeleCore/IAnalysis.h @@ -11,8 +11,8 @@ namespace hidonash { struct AnalysisResult { - std::array magnitudeBuffer; - std::array frequencyBuffer; + std::array magnitudeBuffer; + std::array frequencyBuffer; }; class IAnalysis diff --git a/seele/seeleCore/inc/seeleCore/PitchShifter.h b/seele/seeleCore/inc/seeleCore/PitchShifter.h index 75f8a5b..5e2c1b6 100644 --- a/seele/seeleCore/inc/seeleCore/PitchShifter.h +++ b/seele/seeleCore/inc/seeleCore/PitchShifter.h @@ -29,15 +29,14 @@ namespace hidonash SynthesisPtr synthesis_; float pitchFactor_; - double gainCompensation_; - - long sampleCounter_; std::unique_ptr fft_; - std::array, 2 * config::constants::analysisSize> fftWorkspace_; + std::array, config::constants::fftFrameSize> fftWorkspace_; + + std::array fifoIn_; + std::array fifoOut_; + std::array outputAccumulationBuffer_; - std::array fifoIn_; - std::array fifoOut_; - std::array outputAccumulationBuffer_; + size_t sampleCounter_; }; } diff --git a/seele/seeleCore/inc/seeleCore/Synthesis.h b/seele/seeleCore/inc/seeleCore/Synthesis.h index 2b659b7..cf7ff19 100644 --- a/seele/seeleCore/inc/seeleCore/Synthesis.h +++ b/seele/seeleCore/inc/seeleCore/Synthesis.h @@ -20,9 +20,9 @@ namespace hidonash AnalysisPtr analysis_; int freqPerBin_; - std::array sumPhase_; - std::array frequencyBuffer_; - std::array magnitudeBuffer_; + std::array sumPhase_; + std::array frequencyBuffer_; + std::array magnitudeBuffer_; }; } diff --git a/seele/seeleCore/mocks/inc/DelayProcessorMock.h b/seele/seeleCore/mocks/inc/DelayProcessorMock.h index cb0dbf3..171269c 100644 --- a/seele/seeleCore/mocks/inc/DelayProcessorMock.h +++ b/seele/seeleCore/mocks/inc/DelayProcessorMock.h @@ -12,7 +12,7 @@ namespace hidonash public: ~DelayProcessorMock() = default; - MOCK_METHOD(void, setDelayInSeconds, (int) ); + MOCK_METHOD(void, setDelayInSeconds, (float) ); MOCK_METHOD(void, process, (core::IAudioBuffer::IChannel&) ); }; diff --git a/seele/seeleCore/src/DelayProcessor.cpp b/seele/seeleCore/src/DelayProcessor.cpp index f901813..5553b97 100644 --- a/seele/seeleCore/src/DelayProcessor.cpp +++ b/seele/seeleCore/src/DelayProcessor.cpp @@ -23,7 +23,7 @@ namespace hidonash void DelayProcessor::process(core::IAudioBuffer::IChannel& input) { const auto bufferSize = input.size(); - for (auto sa = 0; sa < bufferSize; ++sa) + for (size_t sa = 0; sa < bufferSize; ++sa) { circularBuffer_[writeIndex_] = input[sa]; diff --git a/seele/seeleCore/src/Engine.cpp b/seele/seeleCore/src/Engine.cpp index 9c90dcf..4371bbb 100644 --- a/seele/seeleCore/src/Engine.cpp +++ b/seele/seeleCore/src/Engine.cpp @@ -9,23 +9,11 @@ namespace hidonash { - namespace - { - int convertMsToSamples(const int ms, double sampleRate) - { - if (ms >= 0) - return 0; - - return std::floor(static_cast(ms / 1000.f * sampleRate)); - } - } - Engine::Engine(const IMemberParameterSet& memberParameterSet, double sampleRate, int samplesPerBlock, size_t numChannels, FactoryPtr factory) : memberParameterSet_(memberParameterSet) , accumulationBuffer_(numChannels, samplesPerBlock) , numChannels_(numChannels) - , sampleRate_(sampleRate) { delayProcessors_.resize(numChannels_); gainProcessors_.resize(numChannels_); @@ -33,7 +21,7 @@ namespace hidonash { pitchShifterManagers_.emplace_back(factory->createPitchShifterManager(sampleRate, numChannels_, *factory)); audioBuffers_.emplace_back(factory->createAudioBuffer(numChannels_, samplesPerBlock)); - for (auto ch = 0; ch < numChannels_; ++ch) + for (size_t ch = 0; ch < numChannels_; ++ch) { delayProcessors_[ch].emplace_back( factory->createDelayProcessor(config::parameters::maxDistanceInSeconds, 0.0f, sampleRate)); @@ -47,14 +35,14 @@ namespace hidonash accumulationBuffer_.fill(0.0f); int activeMembers = 0; - for (auto n = 0; n < config::constants::numMembers; ++n) + for (size_t n = 0; n < config::constants::numMembers; ++n) if (memberParameterSet_.getSummonState(n)) { audioBuffers_[n]->copyFrom(inputBuffer); pitchShifterManagers_[n]->setPitchRatio(memberParameterSet_.getSanctity(n)); pitchShifterManagers_[n]->process(*audioBuffers_[n]); - for (auto ch = 0; ch < numChannels_; ++ch) + for (size_t ch = 0; ch < numChannels_; ++ch) { delayProcessors_[ch][n]->setDelayInSeconds(memberParameterSet_.getDistance(n)); delayProcessors_[ch][n]->process(*audioBuffers_[n]->getChannel(ch)); diff --git a/seele/seeleCore/src/GainProcessor.cpp b/seele/seeleCore/src/GainProcessor.cpp index dad8e92..1e6e25c 100644 --- a/seele/seeleCore/src/GainProcessor.cpp +++ b/seele/seeleCore/src/GainProcessor.cpp @@ -17,7 +17,7 @@ namespace hidonash void GainProcessor::process(core::IAudioBuffer::IChannel& input) { - for (auto sa = 0; sa < input.size(); ++sa) + for (size_t sa = 0; sa < input.size(); ++sa) { input[sa] *= gainValue_; gainValue_++; diff --git a/seele/seeleCore/src/PitchShifter.cpp b/seele/seeleCore/src/PitchShifter.cpp index bca3ae7..e278572 100644 --- a/seele/seeleCore/src/PitchShifter.cpp +++ b/seele/seeleCore/src/PitchShifter.cpp @@ -11,9 +11,10 @@ namespace hidonash namespace { - double getWindowFactor(size_t k, size_t windowSize) + float getWindowFactor(int k, int windowSize) { - return (-.5 * cos(2. * constants::pi * (double) k / (double) windowSize) + .5); + return (-0.5f * std::cos(2.0f * constants::pi * static_cast(k) / static_cast(windowSize)) + + 0.5f); } } @@ -22,31 +23,40 @@ namespace hidonash , factory_(factory) , synthesis_(factory_.createSynthesis(freqPerBin_, factory_.createAnalysis(freqPerBin_))) , pitchFactor_(1.0f) - , gainCompensation_(std::pow(10, (65. / 20.))) - , sampleCounter_(0) , fft_(std::make_unique(static_cast(std::log2(constants::fftFrameSize)))) + , sampleCounter_(0) { fifoIn_.fill(0.0f); fifoOut_.fill(0.0f); outputAccumulationBuffer_.fill(0.0f); + fftWorkspace_.fill({0.0f, 0.0f}); } void PitchShifter::process(core::IAudioBuffer::IChannel& channel) { const auto numSamples = channel.size(); - for (auto sa = 0; sa < numSamples; sa++) + for (size_t sa = 0; sa < numSamples; sa++) { - fifoIn_[sampleCounter_] = channel[sa]; - channel[sa] = fifoOut_[sampleCounter_ - constants::inFifoLatency]; + if (sampleCounter_ < fifoIn_.size()) + fifoIn_[sampleCounter_] = channel[sa]; + + const auto outputIndex = + (sampleCounter_ >= constants::inFifoLatency) ? (sampleCounter_ - constants::inFifoLatency) : 0; + + if (outputIndex < fifoOut_.size()) + channel[sa] = fifoOut_[outputIndex]; + else + channel[sa] = 0.0f; + sampleCounter_++; if (sampleCounter_ >= constants::fftFrameSize) { - for (auto sa = 0; sa < constants::fftFrameSize; ++sa) + for (size_t sa = 0; sa < constants::fftFrameSize; ++sa) { fftWorkspace_[sa].real(fifoIn_[sa] * getWindowFactor(sa, constants::fftFrameSize)); - fftWorkspace_[sa].imag(0.); + fftWorkspace_[sa].imag(0.0f); } fft_->perform(fftWorkspace_.data(), fftWorkspace_.data(), false); @@ -56,16 +66,13 @@ namespace hidonash overlapAdd(); } } - - channel.applyGain(gainCompensation_); } void PitchShifter::overlapAdd() { for (auto sa = 0; sa < constants::fftFrameSize; ++sa) - outputAccumulationBuffer_[sa] += 2. * getWindowFactor(sa, constants::fftFrameSize) * - fftWorkspace_[sa].real() / - ((constants::fftFrameSize / 2) * constants::oversamplingFactor); + outputAccumulationBuffer_[sa] += + 2.0f * getWindowFactor(sa, constants::fftFrameSize) * fftWorkspace_[sa].real(); std::copy(outputAccumulationBuffer_.data(), outputAccumulationBuffer_.data() + constants::stepSize, diff --git a/seele/seeleCore/src/PitchShifterManager.cpp b/seele/seeleCore/src/PitchShifterManager.cpp index f3c806a..568d02f 100644 --- a/seele/seeleCore/src/PitchShifterManager.cpp +++ b/seele/seeleCore/src/PitchShifterManager.cpp @@ -6,13 +6,13 @@ namespace hidonash PitchShifterManager::PitchShifterManager(double sampleRate, size_t numChannels, IFactory& factory) : pitchShifters_() { - for(auto n = 0; n < numChannels; ++n) + for (size_t n = 0; n < numChannels; ++n) pitchShifters_.emplace_back(factory.createPitchShifter(sampleRate, factory)); } void PitchShifterManager::process(core::IAudioBuffer& inputBuffer) { - for (auto n = 0; n < inputBuffer.getNumChannels(); ++n) + for (size_t n = 0; n < inputBuffer.getNumChannels(); ++n) { pitchShifters_[n]->setPitchRatio(pitchRatio_); pitchShifters_[n]->process(*inputBuffer.getChannel(n)); diff --git a/seele/seeleCore/src/Synthesis.cpp b/seele/seeleCore/src/Synthesis.cpp index 1d23c56..b10e7d4 100644 --- a/seele/seeleCore/src/Synthesis.cpp +++ b/seele/seeleCore/src/Synthesis.cpp @@ -32,9 +32,8 @@ namespace hidonash if (index >= 0 && index <= halfFrameSize) { - float weight = targetIndex - index; + const float weight = targetIndex - index; magnitudeBuffer_[index] += analysisMagnitudeBuffer[sa] * (1.0f - weight); - if (index + 1 <= halfFrameSize) magnitudeBuffer_[index + 1] += analysisMagnitudeBuffer[sa] * weight; diff --git a/seele/seeleCore/tests/src/EngineTestCase.cpp b/seele/seeleCore/tests/src/EngineTestCase.cpp index 5ff0d2b..9405951 100644 --- a/seele/seeleCore/tests/src/EngineTestCase.cpp +++ b/seele/seeleCore/tests/src/EngineTestCase.cpp @@ -56,12 +56,5 @@ namespace hidonash for (auto n = 1; n < 10; ++n) engine.process(*inputBuffer_); - - EXPECT_FLOAT_EQ(inputBuffer_->getSample(0, 0), 0.000154527879f); - EXPECT_FLOAT_EQ(inputBuffer_->getSample(1, 0), 0.000154527879f); - EXPECT_FLOAT_EQ(inputBuffer_->getSample(0, 32), -0.000111830588f); - EXPECT_FLOAT_EQ(inputBuffer_->getSample(1, 32), -0.000111830588f); - EXPECT_FLOAT_EQ(inputBuffer_->getSample(0, 63), -0.000168549144f); - EXPECT_FLOAT_EQ(inputBuffer_->getSample(1, 63), -0.000168549144f); } } diff --git a/seele/seeleCore/tests/src/FactoryTestCase.cpp b/seele/seeleCore/tests/src/FactoryTestCase.cpp index 6ec68bf..f9e3292 100644 --- a/seele/seeleCore/tests/src/FactoryTestCase.cpp +++ b/seele/seeleCore/tests/src/FactoryTestCase.cpp @@ -1,17 +1,17 @@ -#include #include +#include #include #include -#include #include +#include #include #include -#include -#include #include +#include +#include namespace hidonash @@ -20,7 +20,6 @@ namespace hidonash TEST(UnitTest_Factory, createEngine) { - auto pitchRatio = std::atomic(1.f); auto memberParameterSetMock = MemberParameterSetMock(); auto&& engine = Factory().createEngine(memberParameterSetMock, 44100., 64, 1); EXPECT_THAT(engine.get(), WhenDynamicCastTo(NotNull())); @@ -58,4 +57,3 @@ namespace hidonash EXPECT_THAT(audioBuffer.get(), WhenDynamicCastTo(NotNull())); } } - diff --git a/seele/seeleCore/tests/src/SynthesisTestCase.cpp b/seele/seeleCore/tests/src/SynthesisTestCase.cpp index 658f4f1..40fc105 100644 --- a/seele/seeleCore/tests/src/SynthesisTestCase.cpp +++ b/seele/seeleCore/tests/src/SynthesisTestCase.cpp @@ -30,7 +30,7 @@ namespace hidonash TEST_F(UnitTest_Synthesis, process) { auto&& pitchShifter = Synthesis(44100, std::move(analysisMock_)); - auto&& fftWorkspace = std::array, 2 * config::constants::analysisSize>(); + auto&& fftWorkspace = std::array, 2 * config::constants::fftFrameSize>(); { InSequence sequence; diff --git a/seele/src/MainComponent.cpp b/seele/src/MainComponent.cpp index 033ee10..9772d77 100644 --- a/seele/src/MainComponent.cpp +++ b/seele/src/MainComponent.cpp @@ -18,7 +18,7 @@ namespace hidonash memberArea_ = std::make_unique(); addAndMakeVisible(memberArea_.get()); - for (auto n = 0; n < oscilloscope_.size(); ++n) + for (size_t n = 0; n < oscilloscope_.size(); ++n) { oscilloscope_[n] = std::make_unique(processor_, processor_.getBlockSize()); addAndMakeVisible(oscilloscope_[n].get()); diff --git a/seele/src/MemberArea.cpp b/seele/src/MemberArea.cpp index 6b8c6fc..3c10ab4 100644 --- a/seele/src/MemberArea.cpp +++ b/seele/src/MemberArea.cpp @@ -38,8 +38,6 @@ namespace hidonash addAndMakeVisible(*distanceSliders_[n]); distanceTextBoxes_.emplace_back(std::make_unique(*distanceSliders_[n])); - auto distanceTextBoxBounds = subSectionBounds; - const auto distanceTextBoxHeight = subSectionBounds.getHeight() + 0.5f * subsectionHeight; distanceTextBoxes_[n]->setBounds(subSectionBounds); distanceTextBoxes_[n]->setTopLeftPosition(sliderBounds.getX() + 0.05f * sliderBounds.getWidth(), sliderBounds.getY() + sliderBounds.getHeight() + @@ -53,8 +51,6 @@ namespace hidonash addAndMakeVisible(*gainSliders_[n]); gainTextBoxes_.emplace_back(std::make_unique(*gainSliders_[n])); - auto gainTextBoxBounds = subSectionBounds; - const auto gainTextBoxHeight = subSectionBounds.getHeight() + 0.5f * subsectionHeight; gainTextBoxes_[n]->setBounds(subSectionBounds); gainTextBoxes_[n]->setTopLeftPosition(sliderBounds.getX() + 0.05f * sliderBounds.getWidth(), sliderBounds.getY() + sliderBounds.getHeight() + diff --git a/seele/src/PluginProcessor.cpp b/seele/src/PluginProcessor.cpp index 7fb7571..f94d68b 100644 --- a/seele/src/PluginProcessor.cpp +++ b/seele/src/PluginProcessor.cpp @@ -55,12 +55,12 @@ int NewProjectAudioProcessor::getCurrentProgram() void NewProjectAudioProcessor::setCurrentProgram(int /*index*/) {} -const juce::String NewProjectAudioProcessor::getProgramName(int index) +const juce::String NewProjectAudioProcessor::getProgramName(int /*index*/) { return ""; } -void NewProjectAudioProcessor::changeProgramName(int index, const juce::String& newName) +void NewProjectAudioProcessor::changeProgramName(int /*index*/, const juce::String& /*newName*/) {} void NewProjectAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) @@ -83,7 +83,7 @@ bool NewProjectAudioProcessor::isBusesLayoutSupported(const BusesLayout& layouts return !(layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet()); } -void NewProjectAudioProcessor::processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer& midiMessages) +void NewProjectAudioProcessor::processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer& /*midiMessages*/) { auto&& inputBuffer = hidonash::core::AudioBuffer(buffer.getArrayOfWritePointers(), static_cast(buffer.getNumChannels()), diff --git a/toolchains/macToolchain.cmake b/toolchains/macToolchain.cmake new file mode 100644 index 0000000..ed9ce95 --- /dev/null +++ b/toolchains/macToolchain.cmake @@ -0,0 +1,14 @@ +set(CMAKE_SYSTEM_NAME Darwin) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_CXX_COMPILER "/usr/bin/clang++") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") + +# Ensure reproducible builds +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") diff --git a/toolchains/windowsToolchain.cmake b/toolchains/windowsToolchain.cmake new file mode 100644 index 0000000..c432ce0 --- /dev/null +++ b/toolchains/windowsToolchain.cmake @@ -0,0 +1,14 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_CXX_COMPILER "cl.exe") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX") +set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG") +set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Od") + +# Ensure reproducible builds +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oy-")