diff --git a/JuceLibraryCode/AppConfig.h b/JuceLibraryCode/AppConfig.h index a62d774..bd871cc 100644 --- a/JuceLibraryCode/AppConfig.h +++ b/JuceLibraryCode/AppConfig.h @@ -354,10 +354,10 @@ #define JucePlugin_Enable_IAA 0 #endif #ifndef JucePlugin_Name - #define JucePlugin_Name "eBeamer" + #define JucePlugin_Name "Ebeamer" #endif #ifndef JucePlugin_Desc - #define JucePlugin_Desc "eStick beam controller" + #define JucePlugin_Desc "Estick beam controller" #endif #ifndef JucePlugin_Manufacturer #define JucePlugin_Manufacturer "ISPL and Eventide" @@ -390,13 +390,13 @@ #define JucePlugin_EditorRequiresKeyboardFocus 0 #endif #ifndef JucePlugin_Version - #define JucePlugin_Version 1.1.1 + #define JucePlugin_Version 1.1.2 #endif #ifndef JucePlugin_VersionCode - #define JucePlugin_VersionCode 0x10101 + #define JucePlugin_VersionCode 0x10102 #endif #ifndef JucePlugin_VersionString - #define JucePlugin_VersionString "1.1.1" + #define JucePlugin_VersionString "1.1.2" #endif #ifndef JucePlugin_VSTUniqueID #define JucePlugin_VSTUniqueID JucePlugin_PluginCode @@ -414,10 +414,10 @@ #define JucePlugin_AUSubType JucePlugin_PluginCode #endif #ifndef JucePlugin_AUExportPrefix - #define JucePlugin_AUExportPrefix ebeamerAU + #define JucePlugin_AUExportPrefix EbeamerAU #endif #ifndef JucePlugin_AUExportPrefixQuoted - #define JucePlugin_AUExportPrefixQuoted "ebeamerAU" + #define JucePlugin_AUExportPrefixQuoted "EbeamerAU" #endif #ifndef JucePlugin_AUManufacturerCode #define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode @@ -465,7 +465,7 @@ #define JucePlugin_IAASubType JucePlugin_PluginCode #endif #ifndef JucePlugin_IAAName - #define JucePlugin_IAAName "ISPL and Eventide: eBeamer" + #define JucePlugin_IAAName "ISPL and Eventide: Ebeamer" #endif #ifndef JucePlugin_VSTNumMidiInputs #define JucePlugin_VSTNumMidiInputs 16 diff --git a/JuceLibraryCode/JuceHeader.h b/JuceLibraryCode/JuceHeader.h index 95f460b..908d1ad 100644 --- a/JuceLibraryCode/JuceHeader.h +++ b/JuceLibraryCode/JuceHeader.h @@ -48,9 +48,9 @@ #if ! JUCE_DONT_DECLARE_PROJECTINFO namespace ProjectInfo { - const char* const projectName = "eBeamer"; + const char* const projectName = "Ebeamer"; const char* const companyName = "ISPL and Eventide"; - const char* const versionString = "1.1.1"; - const int versionNumber = 0x10101; + const char* const versionString = "1.1.2"; + const int versionNumber = 0x10102; } #endif diff --git a/LICENSE b/LICENSE index d4abb8f..bd32caa 100644 --- a/LICENSE +++ b/LICENSE @@ -629,7 +629,7 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - eBeamer: eStick beamforming VST3 plug-in + Ebeamer: Estick beamforming VST3 plug-in Copyright (C) 2020 Image and Sound Processing Lab, Politecnico di Milano Copyright (C) 2020 Eventide Inc. diff --git a/README.md b/README.md index 5feb4fa..e6f6cad 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -# eBeamer -A JUCE-based VST3 plug-in and standalone application to support the [eStick](https://www.facebook.com/estickproject) project. +# Ebeamer +A JUCE-based VST3 plug-in and standalone application to support the [Estick](https://www.facebook.com/estickproject) project. ![The eBeamer](docs/gui.png) ## Getting Started - Just want to try out the VST or the app? Go the the [release](https://github.com/listensmart/ebeamer/releases) page. -- A demo REAPER project is available [here](docs/eBeamerDemo.rpp). +- A demo REAPER project is available [here](docs/EbeamerDemo.rpp). - If you're not familiar with JUCE, [this](https://juce.com/learn) is a good place to start. - If you're developing on Windows, download and extract the [ASIO ASK](https://www.steinberg.net/en/company/developers.html) in the *ASIO/* folder. -- Don't have the eSticks yet? Start developing with the [eStick simulator](https://github.com/luca-bondi/estick-simulator). +- Don't have the Esticks yet? Start developing with the [Estick simulator](https://github.com/luca-bondi/estick-simulator). ## Contributing - Any contribution to the project is highly appreciated! Get in touch to know more. diff --git a/Source/Beamformer.cpp b/Source/Beamformer.cpp index 1d168df..f94d045 100644 --- a/Source/Beamformer.cpp +++ b/Source/Beamformer.cpp @@ -195,7 +195,7 @@ Beamformer::Beamformer(int numBeams_, MicConfig mic, double sampleRate_, int max } Beamformer::~Beamformer() { - doaThread->stopThread(500); + doaThread->stopThread(3000); } MicConfig Beamformer::getMicConfig() const { diff --git a/Source/BeamformingAlgorithms.cpp b/Source/BeamformingAlgorithms.cpp index adec4b1..ce96995 100644 --- a/Source/BeamformingAlgorithms.cpp +++ b/Source/BeamformingAlgorithms.cpp @@ -21,7 +21,8 @@ namespace DAS { soundspeed = soundspeed_; commonDelay = 64; - firLen = ceil(jmax(numMic/numRows * micDistX,numRows * micDistY) / soundspeed * fs) + 2 * commonDelay; + const float maxDistBetweenMics =sqrt(pow((numMicPerRow-1) * micDistX,2.f)+pow((numRows-1) * micDistY,2.f)); + firLen = maxDistBetweenMics / soundspeed * fs + commonDelay; fft = std::make_unique(ceil(log2(firLen))); diff --git a/Source/MeterComp.cpp b/Source/MeterComp.cpp index a1deee4..b571357 100644 --- a/Source/MeterComp.cpp +++ b/Source/MeterComp.cpp @@ -54,18 +54,18 @@ void MultiChannelLedBar::resized() { auto num = values.size(); Rectangle area = getLocalBounds(); - int step = isHorizontal ? floor(area.getWidth() / num) : floor(area.getHeight() / num); - int otherDim = isHorizontal ? area.getHeight() : area.getWidth(); + float step = isHorizontal ? floor(area.getWidth() / num) : floor(area.getHeight() / num); + float otherDim = isHorizontal ? area.getHeight() : area.getWidth(); otherDim = jmin(otherDim, step - 1); const auto areaCtr = area.getCentre(); // Re-center the area if (isHorizontal) { - area.setWidth((int) (step * num)); + area.setWidth(step * num); area.setHeight(otherDim); } else { - area.setHeight((int) (step * num)); + area.setHeight(step * num); area.setWidth(otherDim); } area.setCentre(areaCtr); diff --git a/Source/MeterDecay.cpp b/Source/MeterDecay.cpp index 70d3a9a..36303fa 100644 --- a/Source/MeterDecay.cpp +++ b/Source/MeterDecay.cpp @@ -25,7 +25,7 @@ MeterDecay::MeterDecay(float fs, float duration, float blockSize, int numChannel void MeterDecay::push(const AudioBuffer &signal) { GenericScopedLock l(minMaxCircularBufferLock); - for (auto channelIdx = 0; channelIdx < signal.getNumChannels(); ++channelIdx) { + for (auto channelIdx = 0; channelIdx < jmin((int)signal.getNumChannels(),(int)minMaxCircularBuffer.size()); ++channelIdx) { Range minMax = FloatVectorOperations::findMinAndMax(signal.getReadPointer(channelIdx), signal.getNumSamples()); float maxAbs = jmax(abs(minMax.getStart()), abs(minMax.getEnd())); diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index d24fd1a..f9cd9f2 100644 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -243,7 +243,7 @@ void EBeamerAudioProcessorEditor::paint(Graphics &g) { versionArea.removeFromBottom(2); g.setColour(Colours::lightgrey); g.setFont(12); - g.drawText("ISPL and Eventide - eBeamer v" + String(JucePlugin_VersionString), versionArea, + g.drawText("ISPL and Eventide - Ebeamer v" + String(JucePlugin_VersionString), versionArea, Justification::centredBottom, false); } @@ -329,8 +329,8 @@ void EBeamerAudioProcessorEditor::resized() { hpfSlider.setBounds(area.removeFromTop(INPUT_HPF_SLIDER_HEIGHT).withTrimmedLeft(INPUT_HPF_LABEL_WIDTH)); auto inputLedArea = area.removeFromTop(INPUT_LED_HEIGHT); - inputLedArea.removeFromLeft(INPUT_LEFT_RIGHT_MARGIN); - inputLedArea.removeFromRight(INPUT_LEFT_RIGHT_MARGIN); + inputLedArea.removeFromLeft(INPUT_LEFT_RIGHT_MARGIN+4); + inputLedArea.removeFromRight(INPUT_LEFT_RIGHT_MARGIN+23); inputMeter.setBounds(inputLedArea); gainSlider.setBounds(area.removeFromTop(INPUT_GAIN_SLIDER_HEIGHT).withTrimmedLeft(INPUT_GAIN_LABEL_WIDTH)); diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 6dd1972..d14879f 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -144,8 +144,8 @@ bool EbeamerAudioProcessor::isBusesLayoutSupported(const BusesLayout &layouts) c } } - if ((layouts.getMainInputChannels() < 2) || (layouts.getMainOutputChannels() < 2)) { - // In any case don't allow less than 2 input and 2 output channels + if ((layouts.getMainInputChannels() < 1) || (layouts.getMainOutputChannels() < 2)) { + // In any case don't allow less than 1 input and 2 output channels return false; } return true; @@ -307,6 +307,7 @@ void EbeamerAudioProcessor::processBlock(AudioBuffer &buffer, MidiBuffer return; } + ScopedNoDenormals noDenormals; /**Apply input gain directly on input buffer */ diff --git a/docs/eBeamerDemo.rpp b/docs/eBeamerDemo.rpp index a6f96f7..0c9deda 100644 --- a/docs/eBeamerDemo.rpp +++ b/docs/eBeamerDemo.rpp @@ -1,4 +1,4 @@ - PRESETNAME "Factory Presets" FLOATPOS 0 0 0 0 - FXID {91C0988A-15B9-8343-9133-FCD73000D650} + FXID {A485AA7B-0EC5-BE44-89C9-7DC41333349B} WAK 0 0 > > diff --git a/docs/gui.png b/docs/gui.png index 26a09b9..2a9388e 100644 Binary files a/docs/gui.png and b/docs/gui.png differ diff --git a/eBeamer.jucer b/eBeamer.jucer index 51d3561..6cc21d1 100644 --- a/eBeamer.jucer +++ b/eBeamer.jucer @@ -1,16 +1,16 @@ - - +