Browse Source

Update klangfalter to latest upstream code

tags/2018-04-16
falkTX 7 years ago
parent
commit
6a99270cea
16 changed files with 1061 additions and 1035 deletions
  1. +10
    -4
      ports/klangfalter/source/BinaryData.cpp
  2. +11
    -0
      ports/klangfalter/source/BinaryData.h
  3. +5
    -1
      ports/klangfalter/source/Convolver.h
  4. +913
    -802
      ports/klangfalter/source/FFTConvolver/AudioFFT.cpp
  5. +73
    -187
      ports/klangfalter/source/FFTConvolver/AudioFFT.h
  6. +2
    -2
      ports/klangfalter/source/JuceHeader.h
  7. +3
    -3
      ports/klangfalter/source/JucePluginCharacteristics.h
  8. +1
    -1
      ports/klangfalter/source/Processor.cpp
  9. +1
    -6
      ports/klangfalter/source/UI/CustomLookAndFeel.cpp
  10. +3
    -4
      ports/klangfalter/source/UI/CustomLookAndFeel.h
  11. +1
    -1
      ports/klangfalter/source/UI/IRBrowserComponent.cpp
  12. +5
    -0
      ports/klangfalter/source/UI/IRComponent.h
  13. +16
    -17
      ports/klangfalter/source/UI/KlangFalterEditor.cpp
  14. +6
    -0
      ports/klangfalter/source/UI/KlangFalterEditor.h
  15. +7
    -7
      ports/klangfalter/source/UI/SettingsDialogComponent.cpp
  16. +4
    -0
      ports/klangfalter/source/UI/SettingsDialogComponent.h

+ 10
- 4
ports/klangfalter/source/BinaryData.cpp View File

@@ -8,7 +8,7 @@ namespace BinaryData
{
//================== hifi-lofi.jpg ==================
static const unsigned char temp_bf56932[] =
static const unsigned char temp_binary_data_0[] =
{ 255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,72,0,72,0,0,255,225,0,176,69,120,105,102,0,0,73,73,42,0,8,0,0,0,5,0,26,1,5,0,1,0,0,0,74,0,0,0,27,1,5,0,1,0,0,0,82,0,0,0,40,1,3,0,1,0,0,0,2,0,0,0,49,1,2,0,12,0,0,0,90,0,0,0,105,135,4,0,1,0,0,0,102,0,0,0,0,0,0,
0,72,0,0,0,1,0,0,0,72,0,0,0,1,0,0,0,71,73,77,80,32,50,46,54,46,49,48,0,5,0,0,144,7,0,4,0,0,0,48,50,50,48,0,160,7,0,4,0,0,0,48,49,48,48,1,160,3,0,1,0,0,0,255,255,0,0,2,160,4,0,1,0,0,0,100,0,0,0,3,160,4,0,1,0,0,0,100,0,0,0,0,0,0,0,255,226,12,88,73,67,67,
95,80,82,79,70,73,76,69,0,1,1,0,0,12,72,76,105,110,111,2,16,0,0,109,110,116,114,82,71,66,32,88,89,90,32,7,206,0,2,0,9,0,6,0,49,0,0,97,99,115,112,77,83,70,84,0,0,0,0,73,69,67,32,115,82,71,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,214,0,1,0,0,0,0,211,45,72,80,
@@ -116,10 +116,10 @@ static const unsigned char temp_bf56932[] =
180,255,0,74,41,9,37,72,150,20,128,37,184,1,235,234,167,242,161,9,53,79,156,130,173,179,92,31,229,71,31,195,73,52,147,179,102,184,141,139,152,181,3,215,45,182,115,252,53,32,145,81,242,108,182,249,203,253,106,28,87,136,228,19,25,160,160,124,194,130,114,
15,192,211,34,212,87,91,109,145,109,46,60,245,189,164,196,113,121,42,45,36,12,252,70,48,104,160,17,106,81,185,211,11,96,250,82,190,226,63,245,164,133,255,217,0,0 };
const char* hifilofi_jpg = (const char*) temp_bf56932;
const char* hifilofi_jpg = (const char*) temp_binary_data_0;
//================== brushed_aluminium.png ==================
static const unsigned char temp_81a9b93e[] =
static const unsigned char temp_binary_data_1[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,84,0,0,0,110,8,2,0,0,0,247,102,124,157,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,4,103,65,77,65,0,0,177,142,124,251,81,147,0,0,0,32,99,72,82,77,0,0,122,37,0,0,128,131,0,0,249,255,
0,0,128,233,0,0,117,48,0,0,234,96,0,0,58,152,0,0,23,111,146,95,197,70,0,0,56,250,73,68,65,84,120,218,172,83,71,14,192,32,12,75,248,255,153,231,66,17,81,45,203,97,244,80,31,16,114,246,242,90,171,153,185,187,189,224,127,239,221,8,33,10,178,79,240,135,245,
197,48,152,48,247,137,80,64,44,72,51,66,196,230,87,125,206,22,177,6,74,41,98,216,90,147,4,144,24,107,242,7,10,97,203,140,148,47,53,230,90,196,231,1,185,88,97,174,221,56,48,255,226,139,127,214,217,181,98,12,75,218,190,172,37,147,60,71,225,151,185,241,
@@ -328,7 +328,7 @@ static const unsigned char temp_81a9b93e[] =
141,20,180,27,72,224,103,149,105,220,112,255,4,89,131,64,4,23,42,115,215,231,245,156,43,234,151,42,11,138,116,121,82,135,79,3,255,178,101,152,75,177,57,53,232,244,11,46,246,251,67,98,174,121,193,110,222,30,8,28,132,216,112,88,219,73,10,62,169,115,60,
233,137,16,177,58,98,69,178,95,87,93,157,5,174,93,143,182,244,186,210,167,70,131,11,5,88,2,12,0,52,103,80,26,178,200,170,15,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
const char* brushed_aluminium_png = (const char*) temp_81a9b93e;
const char* brushed_aluminium_png = (const char*) temp_binary_data_1;
const char* getNamedResource (const char*, int&) throw();
@@ -350,4 +350,10 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw
return 0;
}
const char* namedResourceList[] =
{
"hifilofi_jpg",
"brushed_aluminium_png"
};
}

+ 11
- 0
ports/klangfalter/source/BinaryData.h View File

@@ -4,6 +4,9 @@
*/
#ifndef BINARYDATA_H_21227425_INCLUDED
#define BINARYDATA_H_21227425_INCLUDED
namespace BinaryData
{
extern const char* hifilofi_jpg;
@@ -12,7 +15,15 @@ namespace BinaryData
extern const char* brushed_aluminium_png;
const int brushed_aluminium_pngSize = 14724;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 2;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
}
#endif

+ 5
- 1
ports/klangfalter/source/Convolver.h View File

@@ -18,9 +18,13 @@
#ifndef _CONVOLVER_H
#define _CONVOLVER_H
// We need to include this before the Juce includes due to some
// name clashes with Apple system headers, for more information see:
// http://www.juce.com/forum/topic/reference-point-ambiguous
#include "FFTConvolver/TwoStageFFTConvolver.h"
#include "JuceHeader.h"
#include "FFTConvolver/TwoStageFFTConvolver.h"
class Convolver : public fftconvolver::TwoStageFFTConvolver


+ 913
- 802
ports/klangfalter/source/FFTConvolver/AudioFFT.cpp
File diff suppressed because it is too large
View File


+ 73
- 187
ports/klangfalter/source/FFTConvolver/AudioFFT.h View File

@@ -1,5 +1,5 @@
// ==================================================================================
// Copyright (c) 2013 HiFi-LoFi
// Copyright (c) 2016 HiFi-LoFi
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -10,7 +10,7 @@
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
@@ -25,7 +25,7 @@
/**
* AudioFFT provides real-to-complex/complex-to-real FFT routines.
*
*
* Features:
*
* - Real-complex FFT and complex-real inverse FFT for power-of-2-sized real data.
@@ -44,7 +44,7 @@
*
*
* How to use it in your project:
*
*
* - Add the .h and .cpp file to your project - that's all.
*
* - To get extra speed, you can link FFTW3 to your project and define
@@ -74,8 +74,8 @@
* const size_t fftSize = 1024; // Needs to be power of 2!
*
* std::vector<float> input(fftSize, 0.0f);
* std::vector<float> re(fftaudio::AudioFFT::ComplexSize(fftSize));
* std::vector<float> im(fftaudio::AudioFFT::ComplexSize(fftSize));
* std::vector<float> re(audiofft::AudioFFT::ComplexSize(fftSize));
* std::vector<float> im(audiofft::AudioFFT::ComplexSize(fftSize));
* std::vector<float> output(fftSize);
*
* audiofft::AudioFFT fft;
@@ -88,202 +88,88 @@
#include <cstddef>
#if defined(AUDIOFFT_APPLE_ACCELERATE)
#define AUDIOFFT_APPLE_ACCELERATE_USED
#include <Accelerate/Accelerate.h>
#include <vector>
#elif defined (AUDIOFFT_FFTW3)
#define AUDIOFFT_FFTW3_USED
#include <fftw3.h>
#else
#ifndef AUDIOFFT_OOURA
#define AUDIOFFT_OOURA
#endif
#define AUDIOFFT_OOURA_USED
#include <vector>
#endif
#include <memory>
namespace audiofft
{
/**
* @class AudioFFTBase
* @brief Interface class for FFT implementations
*/
class AudioFFTBase
{
public:
/**
* @brief Constructor
*/
AudioFFTBase()
namespace details
{
}
/**
* @brief Destructor
*/
virtual ~AudioFFTBase()
{
class AudioFFTImpl
{
public:
AudioFFTImpl() = default;
virtual ~AudioFFTImpl() = default;
virtual void init(size_t size) = 0;
virtual void fft(const float* data, float* re, float* im) = 0;
virtual void ifft(float* data, const float* re, const float* im) = 0;
private:
AudioFFTImpl(const AudioFFTImpl&) = delete;
AudioFFTImpl& operator=(const AudioFFTImpl&) = delete;
};
}
/**
* @brief Initializes the FFT object
* @param size Size of the real input (must be power 2)
*/
virtual void init(size_t size) = 0;
/**
* @brief Performs the forward FFT
* @param data The real input data (has to be of the length as specified in init())
* @param re The real part of the complex output (has to be of length as returned by ComplexSize())
* @param im The imaginary part of the complex output (has to be of length as returned by ComplexSize())
*/
virtual void fft(const float* data, float* re, float* im) = 0;
/**
* @brief Performs the inverse FFT
* @param data The real output data (has to be of the length as specified in init())
* @param re The real part of the complex input (has to be of length as returned by ComplexSize())
* @param im The imaginary part of the complex input (has to be of length as returned by ComplexSize())
*/
virtual void ifft(float* data, const float* re, const float* im) = 0;
// ======================================================
/**
* @brief Calculates the necessary size of the real/imaginary complex arrays
* @param size The size of the real data
* @return The size of the real/imaginary complex arrays
*/
static size_t ComplexSize(size_t size)
* @class AudioFFT
* @brief Performs 1D FFTs
*/
class AudioFFT
{
return (size / 2) + 1;
}
private:
AudioFFTBase(const AudioFFTBase&);
AudioFFTBase& operator=(const AudioFFTBase&);
};
// ================================================================
#ifdef AUDIOFFT_APPLE_ACCELERATE_USED
/**
* @class AppleAccelerateFFT
* @brief FFT implementation using the Apple Accelerate framework internally
*/
class AppleAccelerateFFT : public AudioFFTBase
{
public:
AppleAccelerateFFT();
virtual ~AppleAccelerateFFT();
virtual void init(size_t size);
virtual void fft(const float* data, float* re, float* im);
virtual void ifft(float* data, const float* re, const float* im);
public:
/**
* @brief Constructor
*/
AudioFFT();
/**
* @brief Initializes the FFT object
* @param size Size of the real input (must be power 2)
*/
void init(size_t size);
/**
* @brief Performs the forward FFT
* @param data The real input data (has to be of the length as specified in init())
* @param re The real part of the complex output (has to be of length as returned by ComplexSize())
* @param im The imaginary part of the complex output (has to be of length as returned by ComplexSize())
*/
void fft(const float* data, float* re, float* im);
/**
* @brief Performs the inverse FFT
* @param data The real output data (has to be of the length as specified in init())
* @param re The real part of the complex input (has to be of length as returned by ComplexSize())
* @param im The imaginary part of the complex input (has to be of length as returned by ComplexSize())
*/
void ifft(float* data, const float* re, const float* im);
/**
* @brief Calculates the necessary size of the real/imaginary complex arrays
* @param size The size of the real data
* @return The size of the real/imaginary complex arrays
*/
static size_t ComplexSize(size_t size);
private:
std::unique_ptr<details::AudioFFTImpl> _impl;
AudioFFT(const AudioFFT&) = delete;
AudioFFT& operator=(const AudioFFT&) = delete;
};
private:
size_t _size;
size_t _powerOf2;
FFTSetup _fftSetup;
std::vector<float> _re;
std::vector<float> _im;
// Prevent uncontrolled usage
AppleAccelerateFFT(const AppleAccelerateFFT&);
AppleAccelerateFFT& operator=(const AppleAccelerateFFT&);
};
typedef AppleAccelerateFFT AudioFFT;
#endif // AUDIOFFT_APPLE_ACCELERATE_USED
// ================================================================
#ifdef AUDIOFFT_FFTW3_USED
/**
* @class FFTW3FFT
* @brief FFT implementation using FFTW3 internally (see fftw.org)
*/
class FFTW3FFT : public AudioFFTBase
{
public:
FFTW3FFT();
virtual ~FFTW3FFT();
virtual void init(size_t size);
virtual void fft(const float* data, float* re, float* im);
virtual void ifft(float* data, const float* re, const float* im);
private:
size_t _size;
size_t _complexSize;
fftwf_plan _planForward;
fftwf_plan _planBackward;
float* _data;
float* _re;
float* _im;
// Prevent uncontrolled usage
FFTW3FFT(const FFTW3FFT&);
FFTW3FFT& operator=(const FFTW3FFT&);
};
typedef FFTW3FFT AudioFFT;
#endif // AUDIOFFT_FFTW3_USED
// ================================================================
#ifdef AUDIOFFT_OOURA_USED
/**
* @class OouraFFT
* @brief FFT implementation based on the great radix-4 routines by Takuya Ooura
*/
class OouraFFT : public AudioFFTBase
{
public:
OouraFFT();
virtual void init(size_t size);
virtual void fft(const float* data, float* re, float* im);
virtual void ifft(float* data, const float* re, const float* im);
private:
size_t _size;
std::vector<int> _ip;
std::vector<double> _w;
std::vector<double> _buffer;
// The original FFT routines by Takuya Ooura (see http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html)
void rdft(int n, int isgn, double *a, int *ip, double *w);
void makewt(int nw, int *ip, double *w);
void makect(int nc, int *ip, double *c);
void bitrv2(int n, int *ip, double *a);
void cftfsub(int n, double *a, double *w);
void cftbsub(int n, double *a, double *w);
void rftfsub(int n, double *a, int nc, double *c);
void rftbsub(int n, double *a, int nc, double *c);
void cft1st(int n, double *a, double *w);
void cftmdl(int n, int l, double *a, double *w);
// Prevent uncontrolled usage
OouraFFT(const OouraFFT&);
OouraFFT& operator=(const OouraFFT&);
};
typedef OouraFFT AudioFFT;
#endif // AUDIOFFT_OOURA_USED
/**
* @deprecated
* @brief Let's keep an AudioFFTBase type around for now because it has been here already in the 1st version in order to avoid breaking existing code.
*/
typedef AudioFFT AudioFFTBase;
} // End of namespace


+ 2
- 2
ports/klangfalter/source/JuceHeader.h View File

@@ -20,8 +20,8 @@ using namespace juce;
namespace ProjectInfo
{
const char* const projectName = "KlangFalter";
const char* const versionString = "2013.08.31";
const int versionNumber = 0x7dd081f;
const char* const versionString = "2016.09.01";
const int versionNumber = 0x7e00901;
}
#endif // __APPHEADERFILE_IRCJCT__

+ 3
- 3
ports/klangfalter/source/JucePluginCharacteristics.h View File

@@ -54,13 +54,13 @@
#define JucePlugin_EditorRequiresKeyboardFocus 0
#endif
#ifndef JucePlugin_Version
#define JucePlugin_Version 2013.08.31
#define JucePlugin_Version 2016.09.01
#endif
#ifndef JucePlugin_VersionCode
#define JucePlugin_VersionCode 0x7dd081f
#define JucePlugin_VersionCode 0x7e00901
#endif
#ifndef JucePlugin_VersionString
#define JucePlugin_VersionString "2013.08.31"
#define JucePlugin_VersionString "2016.09.01"
#endif
#ifndef JucePlugin_VSTUniqueID
#define JucePlugin_VSTUniqueID JucePlugin_PluginCode


+ 1
- 1
ports/klangfalter/source/Processor.cpp View File

@@ -226,7 +226,7 @@ void Processor::prepareToPlay(double /*sampleRate*/, int samplesPerBlock)
{
_convolverHeadBlockSize *= 2;
}
_convolverTailBlockSize = std::max(size_t(8192), 2 * _convolverTailBlockSize);
_convolverTailBlockSize = std::max(size_t(8192), 2 * _convolverHeadBlockSize);
}
// Prepare convolution buffers


+ 1
- 6
ports/klangfalter/source/UI/CustomLookAndFeel.cpp View File

@@ -21,12 +21,7 @@
CustomLookAndFeel::CustomLookAndFeel() :
juce::LookAndFeel_V2()
{
}
CustomLookAndFeel::~CustomLookAndFeel()
juce::LookAndFeel_V3()
{
}


+ 3
- 4
ports/klangfalter/source/UI/CustomLookAndFeel.h View File

@@ -20,11 +20,10 @@
#include "../JuceHeader.h"
class CustomLookAndFeel : public juce::LookAndFeel_V2
class CustomLookAndFeel : public juce::LookAndFeel_V3
{
public:
CustomLookAndFeel();
virtual ~CustomLookAndFeel();
static const CustomLookAndFeel& GetCustomLookAndFeel(juce::Component* component);
@@ -45,8 +44,8 @@ public:
juce::Colour getEnvelopeNodeColour(bool highlighted) const;
private:
CustomLookAndFeel(const CustomLookAndFeel&);
CustomLookAndFeel& operator=(const CustomLookAndFeel&);
CustomLookAndFeel(const CustomLookAndFeel&) = delete;
CustomLookAndFeel& operator=(const CustomLookAndFeel&) = delete;
};


+ 1
- 1
ports/klangfalter/source/UI/IRBrowserComponent.cpp View File

@@ -175,7 +175,7 @@ void IRBrowserComponent::selectionChanged()
}
_infoLabel->setJustificationType(juce::Justification(juce::Justification::topLeft));
_infoLabel->setText(infoText, sendNotification);
_infoLabel->setText(infoText, juce::sendNotification);
}
}


+ 5
- 0
ports/klangfalter/source/UI/IRComponent.h View File

@@ -64,6 +64,11 @@ public:
void buttonClicked (Button* buttonThatWasClicked);
void comboBoxChanged (ComboBox* comboBoxThatHasChanged);
//==============================================================================
juce_UseDebuggingNewOperator
private:
//[UserVariables] -- You can add your own custom variables in this section.
IRAgent* _irAgent;


+ 16
- 17
ports/klangfalter/source/UI/KlangFalterEditor.cpp View File

@@ -23,7 +23,6 @@
#include "../DecibelScaling.h"
#include "../Parameters.h"
#include "../BinaryData.h"
//[/Headers]
@@ -1101,7 +1100,7 @@ void KlangFalterEditor::updateUI()
_stretchSlider->setEnabled(irAvailable);
_stretchSlider->setRange(0.5, 1.5);
_stretchSlider->setValue(stretch, juce::dontSendNotification);
_stretchLabel->setText(String(static_cast<int>(100.0*stretch)) + String("%"), sendNotification);
_stretchLabel->setText(String(static_cast<int>(100.0*stretch)) + String("%"), juce::sendNotification);
}
{
const float db = _processor.getParameter(Parameters::DryDecibels);
@@ -1109,7 +1108,7 @@ void KlangFalterEditor::updateUI()
_drySlider->setEnabled(true);
_drySlider->setRange(0.0, 1.0);
_drySlider->setValue(scale, juce::dontSendNotification);
_dryLevelLabel->setText(DecibelScaling::DecibelString(db), sendNotification);
_dryLevelLabel->setText(DecibelScaling::DecibelString(db), juce::sendNotification);
_dryButton->setToggleState(_processor.getParameter(Parameters::DryOn), juce::dontSendNotification);
}
{
@@ -1118,7 +1117,7 @@ void KlangFalterEditor::updateUI()
_wetSlider->setEnabled(true);
_wetSlider->setRange(0.0, 1.0);
_wetSlider->setValue(scale, juce::dontSendNotification);
_wetLevelLabel->setText(DecibelScaling::DecibelString(db), sendNotification);
_wetLevelLabel->setText(DecibelScaling::DecibelString(db), juce::sendNotification);
_wetButton->setToggleState(_processor.getParameter(Parameters::WetOn), juce::dontSendNotification);
}
{
@@ -1129,37 +1128,37 @@ void KlangFalterEditor::updateUI()
const double irBegin = _processor.getIRBegin();
_beginSlider->setEnabled(irAvailable);
_beginSlider->setValue(irBegin, juce::dontSendNotification);
_beginLabel->setText(juce::String(static_cast<int>(100.0 * irBegin)) + juce::String("%"), sendNotification);
_beginLabel->setText(juce::String(static_cast<int>(100.0 * irBegin)) + juce::String("%"), juce::sendNotification);
}
{
const double irEnd = _processor.getIREnd();
_endSlider->setEnabled(irAvailable);
_endSlider->setValue(irEnd, juce::dontSendNotification);
_endLabel->setText(juce::String(static_cast<int>(100.0 * irEnd)) + juce::String("%"), sendNotification);
_endLabel->setText(juce::String(static_cast<int>(100.0 * irEnd)) + juce::String("%"), juce::sendNotification);
}
{
const double predelayMs = _processor.getPredelayMs();
_predelaySlider->setValue(predelayMs);
_predelaySlider->setEnabled(irAvailable);
_predelayLabel->setText(FormatSeconds(predelayMs / 1000.0), sendNotification);
_predelayLabel->setText(FormatSeconds(predelayMs / 1000.0), juce::sendNotification);
}
{
const double attackLength = _processor.getAttackLength();
_attackLengthSlider->setValue(attackLength);
_attackLengthSlider->setEnabled(irAvailable);
_attackLengthLabel->setText(juce::String(100.0 * attackLength, 1)+juce::String("%"), sendNotification);
_attackLengthLabel->setText(juce::String(100.0 * attackLength, 1)+juce::String("%"), juce::sendNotification);
}
{
const double attackShape = _processor.getAttackShape();
_attackShapeSlider->setValue(attackShape);
_attackShapeSlider->setEnabled(irAvailable);
_attackShapeLabel->setText((attackShape < 0.0001) ? juce::String("Neutral") : juce::String(attackShape, 2), sendNotification);
_attackShapeLabel->setText((attackShape < 0.0001) ? juce::String("Neutral") : juce::String(attackShape, 2), juce::sendNotification);
}
{
const double decayShape = _processor.getDecayShape();
_decayShapeSlider->setValue(decayShape);
_decayShapeSlider->setEnabled(irAvailable);
_decayShapeLabel->setText((decayShape < 0.0001) ? juce::String("Neutral") : juce::String(decayShape, 2), sendNotification);
_decayShapeLabel->setText((decayShape < 0.0001) ? juce::String("Neutral") : juce::String(decayShape, 2), juce::sendNotification);
}
{
const float autoGainDecibels = _processor.getParameter(Parameters::AutoGainDecibels);
@@ -1177,19 +1176,19 @@ void KlangFalterEditor::updateUI()
_lowEqButton->setButtonText(lowEqType == Parameters::Shelf ? juce::String("Low Shelf") : juce::String("Low Cut"));
_lowCutFreqHeaderLabel->setVisible(lowEqType == Parameters::Cut);
_lowCutFreqLabel->setVisible(lowEqType == Parameters::Cut);
_lowCutFreqLabel->setText((::fabs(cutFreq-Parameters::EqLowCutFreq.getMinValue()) > 0.0001f) ? FormatFrequency(cutFreq) : juce::String("Off"), dontSendNotification);
_lowCutFreqLabel->setText((::fabs(cutFreq-Parameters::EqLowCutFreq.getMinValue()) > 0.0001f) ? FormatFrequency(cutFreq) : juce::String("Off"), juce::sendNotification);
_lowCutFreqSlider->setVisible(lowEqType == Parameters::Cut);
_lowCutFreqSlider->setEnabled(loEqEnabled);
_lowCutFreqSlider->setValue(cutFreq, juce::dontSendNotification);
_loFreqHeaderLabel->setVisible(lowEqType == Parameters::Shelf);
_loFreqLabel->setVisible(lowEqType == Parameters::Shelf);
_loFreqLabel->setText(FormatFrequency(shelfFreq), dontSendNotification);
_loFreqLabel->setText(FormatFrequency(shelfFreq), juce::sendNotification);
_loFreqSlider->setVisible(lowEqType == Parameters::Shelf);
_loFreqSlider->setEnabled(loEqEnabled);
_loFreqSlider->setValue(shelfFreq, juce::dontSendNotification);
_loGainHeaderLabel->setVisible(lowEqType == Parameters::Shelf);
_loGainLabel->setVisible(lowEqType == Parameters::Shelf);
_loGainLabel->setText(DecibelScaling::DecibelString(shelfGainDb), dontSendNotification);
_loGainLabel->setText(DecibelScaling::DecibelString(shelfGainDb), juce::sendNotification);
_loGainSlider->setVisible(lowEqType == Parameters::Shelf);
_loGainSlider->setEnabled(loEqEnabled);
_loGainSlider->setValue(shelfGainDb, juce::dontSendNotification);
@@ -1203,19 +1202,19 @@ void KlangFalterEditor::updateUI()
_highEqButton->setButtonText(highEqType == Parameters::Shelf ? juce::String("High Shelf") : juce::String("High Cut"));
_highCutFreqHeaderLabel->setVisible(highEqType == Parameters::Cut);
_highCutFreqLabel->setVisible(highEqType == Parameters::Cut);
_highCutFreqLabel->setText((::fabs(cutFreq-Parameters::EqHighCutFreq.getMaxValue()) > 0.0001f) ? FormatFrequency(cutFreq) : juce::String("Off"), dontSendNotification);
_highCutFreqLabel->setText((::fabs(cutFreq-Parameters::EqHighCutFreq.getMaxValue()) > 0.0001f) ? FormatFrequency(cutFreq) : juce::String("Off"), juce::sendNotification);
_highCutFreqSlider->setVisible(highEqType == Parameters::Cut);
_highCutFreqSlider->setEnabled(hiEqEnabled);
_highCutFreqSlider->setValue(cutFreq, juce::dontSendNotification);
_hiFreqHeaderLabel->setVisible(highEqType == Parameters::Shelf);
_hiFreqLabel->setVisible(highEqType == Parameters::Shelf);
_hiFreqLabel->setText(FormatFrequency(shelfFreq), dontSendNotification);
_hiFreqLabel->setText(FormatFrequency(shelfFreq), juce::sendNotification);
_hiFreqSlider->setVisible(highEqType == Parameters::Shelf);
_hiFreqSlider->setEnabled(hiEqEnabled);
_hiFreqSlider->setValue(shelfFreq, juce::dontSendNotification);
_hiGainHeaderLabel->setVisible(highEqType == Parameters::Shelf);
_hiGainLabel->setVisible(highEqType == Parameters::Shelf);
_hiGainLabel->setText(DecibelScaling::DecibelString(shelfGainDb), dontSendNotification);
_hiGainLabel->setText(DecibelScaling::DecibelString(shelfGainDb), juce::sendNotification);
_hiGainSlider->setVisible(highEqType == Parameters::Shelf);
_hiGainSlider->setEnabled(hiEqEnabled);
_hiGainSlider->setValue(shelfGainDb, juce::dontSendNotification);
@@ -1227,7 +1226,7 @@ void KlangFalterEditor::updateUI()
_widthLabel->setVisible(numOutputChannels >= 2);
const float stereoWidth = _processor.getParameter(Parameters::StereoWidth);
_widthSlider->setValue(stereoWidth, juce::dontSendNotification);
_widthLabel->setText((::fabs(1.0f-stereoWidth) < 0.001) ? juce::String("Neutral") : juce::String(stereoWidth, 2), dontSendNotification);
_widthLabel->setText((::fabs(1.0f-stereoWidth) < 0.001) ? juce::String("Neutral") : juce::String(stereoWidth, 2), juce::sendNotification);
}
{
_levelMeterDry->setChannelCount(numInputChannels);


+ 6
- 0
ports/klangfalter/source/UI/KlangFalterEditor.h View File

@@ -24,6 +24,7 @@
//[Headers] -- You can add your own extra header files here --
#include "../JuceHeader.h"
#include "../BinaryData.h"
#include "CustomLookAndFeel.h"
#include "DecibelScale.h"
@@ -69,6 +70,11 @@ public:
void sliderValueChanged (Slider* sliderThatWasMoved);
void buttonClicked (Button* buttonThatWasClicked);
//==============================================================================
juce_UseDebuggingNewOperator
private:
//[UserVariables] -- You can add your own custom variables in this section.
CustomLookAndFeel _customLookAndFeel;


+ 7
- 7
ports/klangfalter/source/UI/SettingsDialogComponent.cpp View File

@@ -220,13 +220,13 @@ SettingsDialogComponent::SettingsDialogComponent (Processor& processor)
//[Constructor] You can add your own custom stuff here..
_nameVersionLabel->setText(ProjectInfo::projectName + juce::String(" - Version ") + ProjectInfo::versionString, dontSendNotification);
_juceVersionLabel->setText(juce::SystemStats::getJUCEVersion(), dontSendNotification);
_numberInputsLabel->setText(juce::String(_processor.getTotalNumInputChannels()), dontSendNotification);
_numberOutputsLabel->setText(juce::String(_processor.getTotalNumOutputChannels()), dontSendNotification);
_sseOptimizationLabel->setText((fftconvolver::SSEEnabled() == true) ? juce::String("Yes") : juce::String("No"), dontSendNotification);
_headBlockSizeLabel->setText(juce::String(static_cast<int>(_processor.getConvolverHeadBlockSize())), dontSendNotification);
_tailBlockSizeLabel->setText(juce::String(static_cast<int>(_processor.getConvolverTailBlockSize())), dontSendNotification);
_nameVersionLabel->setText(ProjectInfo::projectName + juce::String(" - Version ") + ProjectInfo::versionString, juce::sendNotification);
_juceVersionLabel->setText(juce::SystemStats::getJUCEVersion(), juce::sendNotification);
_numberInputsLabel->setText(juce::String(_processor.getTotalNumInputChannels()), juce::sendNotification);
_numberOutputsLabel->setText(juce::String(_processor.getTotalNumOutputChannels()), juce::sendNotification);
_sseOptimizationLabel->setText((fftconvolver::SSEEnabled() == true) ? juce::String("Yes") : juce::String("No"), juce::sendNotification);
_headBlockSizeLabel->setText(juce::String(static_cast<int>(_processor.getConvolverHeadBlockSize())), juce::sendNotification);
_tailBlockSizeLabel->setText(juce::String(static_cast<int>(_processor.getConvolverTailBlockSize())), juce::sendNotification);
//[/Constructor]
}


+ 4
- 0
ports/klangfalter/source/UI/SettingsDialogComponent.h View File

@@ -58,6 +58,10 @@ public:
static const char* hifilofi_jpg;
static const int hifilofi_jpgSize;
//==============================================================================
juce_UseDebuggingNewOperator
private:
//[UserVariables] -- You can add your own custom variables in this section.
Processor& _processor;


Loading…
Cancel
Save