1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

AudioPluginHost: Include example plugins in project

This change adds the examples from `examples/Plugins` to the
AudioPluginHost, surfacing them as 'internal' plugins in the popup menu.
This commit is contained in:
reuk 2020-03-18 12:03:41 +00:00 committed by ed
parent 8433c098b9
commit f20b93a458
33 changed files with 1641 additions and 450 deletions

View file

@ -67,10 +67,19 @@ inline File getExamplesDirectory() noexcept
if (exampleDir.exists()) if (exampleDir.exists())
return exampleDir; return exampleDir;
int numTries = 0; // keep track of the number of parent directories so we don't go on endlessly // keep track of the number of parent directories so we don't go on endlessly
for (int numTries = 0; numTries < 15; ++numTries)
{
if (currentFile.getFileName() == "examples")
return currentFile;
const auto sibling = currentFile.getSiblingFile ("examples");
if (sibling.exists())
return sibling;
while (currentFile.getFileName() != "examples" && numTries++ < 15)
currentFile = currentFile.getParentDirectory(); currentFile = currentFile.getParentDirectory();
}
return currentFile; return currentFile;
#endif #endif

View file

@ -67,10 +67,19 @@ inline File getExamplesDirectory() noexcept
if (exampleDir.exists()) if (exampleDir.exists())
return exampleDir; return exampleDir;
int numTries = 0; // keep track of the number of parent directories so we don't go on endlessly // keep track of the number of parent directories so we don't go on endlessly
for (int numTries = 0; numTries < 15; ++numTries)
{
if (currentFile.getFileName() == "examples")
return currentFile;
const auto sibling = currentFile.getSiblingFile ("examples");
if (sibling.exists())
return sibling;
while (currentFile.getFileName() != "examples" && numTries++ < 15)
currentFile = currentFile.getParentDirectory(); currentFile = currentFile.getParentDirectory();
}
return currentFile; return currentFile;
#endif #endif

View file

@ -259,9 +259,9 @@ private:
//============================================================================== //==============================================================================
AudioProcessorParameter* getParameter (const String& paramId) AudioProcessorParameter* getParameter (const String& paramId)
{ {
if (auto* processor = getAudioProcessor()) if (auto* audioProcessor = getAudioProcessor())
{ {
auto& params = processor->getParameters(); auto& params = audioProcessor->getParameters();
for (auto p : params) for (auto p : params)
{ {
@ -356,13 +356,14 @@ public:
reverb.processStereo (buffer.getWritePointer (0), buffer.getWritePointer (1), buffer.getNumSamples()); reverb.processStereo (buffer.getWritePointer (0), buffer.getWritePointer (1), buffer.getNumSamples());
} }
using AudioProcessor::processBlock;
//============================================================================== //==============================================================================
void releaseResources() override { currentRecording.setSize (1, 1); } void releaseResources() override { currentRecording.setSize (1, 1); }
//============================================================================== //==============================================================================
bool acceptsMidi() const override { return true; } bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; } bool producesMidi() const override { return false; }
bool silenceInProducesSilenceOut() const override { return false; }
double getTailLengthSeconds() const override { return 0.0; } double getTailLengthSeconds() const override { return 0.0; }
//============================================================================== //==============================================================================
@ -383,6 +384,7 @@ public:
case 1: return "Singing"; case 1: return "Singing";
case 2: return "Pinched Balloon"; case 2: return "Pinched Balloon";
case 3: return "Gazeebo"; case 3: return "Gazeebo";
default: break;
} }
return "<Unknown>"; return "<Unknown>";
@ -408,6 +410,7 @@ public:
roomSizeParam->setValueNotifyingHost (stream.readFloat()); roomSizeParam->setValueNotifyingHost (stream.readFloat());
} }
private: private:
//============================================================================== //==============================================================================
void loadNewSampleBinary (const void* data, int dataSize, const char* format) void loadNewSampleBinary (const void* data, int dataSize, const char* format)

View file

@ -71,7 +71,7 @@ public:
notes.clear(); notes.clear();
currentNote = 0; currentNote = 0;
lastNoteValue = -1; lastNoteValue = -1;
time = 0.0; time = 0;
rate = static_cast<float> (sampleRate); rate = static_cast<float> (sampleRate);
} }
@ -119,6 +119,8 @@ public:
time = (time + numSamples) % noteDuration; time = (time + numSamples) % noteDuration;
} }
using AudioProcessor::processBlock;
//============================================================================== //==============================================================================
bool isMidiEffect() const override { return true; } bool isMidiEffect() const override { return true; }

View file

@ -275,7 +275,7 @@ public:
} }
//============================================================================== //==============================================================================
const String getName() const override { return JucePlugin_Name; } const String getName() const override { return "AudioPluginDemo"; }
bool acceptsMidi() const override { return true; } bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return true; } bool producesMidi() const override { return true; }
double getTailLengthSeconds() const override { return 0.0; } double getTailLengthSeconds() const override { return 0.0; }

View file

@ -198,6 +198,8 @@ public:
} }
} }
using AudioProcessor::processBlock;
void reset() override void reset() override
{ {
lowPassFilter .reset(); lowPassFilter .reset();
@ -217,7 +219,7 @@ public:
//============================================================================== //==============================================================================
bool acceptsMidi() const override { return false; } bool acceptsMidi() const override { return false; }
bool producesMidi() const override { return false; } bool producesMidi() const override { return false; }
const String getName() const override { return JucePlugin_Name; } const String getName() const override { return "DSPModulePluginDemo"; }
double getTailLengthSeconds() const override { return 0.0; } double getTailLengthSeconds() const override { return 0.0; }
//============================================================================== //==============================================================================

View file

@ -71,6 +71,11 @@ public:
buffer.applyGain (*gain); buffer.applyGain (*gain);
} }
void processBlock (AudioBuffer<double>& buffer, MidiBuffer&) override
{
buffer.applyGain ((float) *gain);
}
//============================================================================== //==============================================================================
AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); } AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); }
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }

View file

@ -79,8 +79,6 @@ public:
g.fillRoundedRectangle (area.toFloat(), 6.0); g.fillRoundedRectangle (area.toFloat(), 6.0);
} }
void resized() override {}
//============================================================================== //==============================================================================
// Called from the audio thread. // Called from the audio thread.
void update (float newLevel) void update (float newLevel)
@ -215,7 +213,7 @@ public:
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }
//============================================================================== //==============================================================================
const String getName() const override { return JucePlugin_Name; } const String getName() const override { return "InterAppAudioEffectPlugin"; }
bool acceptsMidi() const override { return false; } bool acceptsMidi() const override { return false; }
bool producesMidi() const override { return false; } bool producesMidi() const override { return false; }
double getTailLengthSeconds() const override { return 0.0; } double getTailLengthSeconds() const override { return 0.0; }

View file

@ -73,12 +73,49 @@ private:
std::vector<MidiMessage> messages = std::vector<MidiMessage> (queueSize); std::vector<MidiMessage> messages = std::vector<MidiMessage> (queueSize);
}; };
// Stores the last N messages. Safe to access from the message thread only.
class MidiListModel
{
public:
template <typename It>
void addMessages (It begin, It end)
{
const auto numNewMessages = (int) std::distance (begin, end);
const auto numToAdd = juce::jmin (numToStore, numNewMessages);
const auto numToRemove = jmax (0, (int) messages.size() + numToAdd - numToStore);
messages.erase (messages.begin(), std::next (messages.begin(), numToRemove));
messages.insert (messages.end(), std::prev (end, numToAdd), end);
if (onChange != nullptr)
onChange();
}
void clear()
{
messages.clear();
if (onChange != nullptr)
onChange();
}
const MidiMessage& operator[] (size_t ind) const { return messages[ind]; }
size_t size() const { return messages.size(); }
std::function<void()> onChange;
private:
static constexpr auto numToStore = 1000;
std::vector<MidiMessage> messages;
};
//============================================================================== //==============================================================================
class MidiTable : public Component, class MidiTable : public Component,
private TableListBoxModel private TableListBoxModel
{ {
public: public:
MidiTable() MidiTable (MidiListModel& m)
: messages (m)
{ {
addAndMakeVisible (table); addAndMakeVisible (table);
@ -92,27 +129,14 @@ public:
header->addColumn ("Data", dataColumn, 200, 30, -1, TableHeaderComponent::notSortable); header->addColumn ("Data", dataColumn, 200, 30, -1, TableHeaderComponent::notSortable);
return header; return header;
}()); }());
messages.onChange = [&] { table.updateContent(); };
} }
~MidiTable() override { messages.onChange = nullptr; }
void resized() override { table.setBounds (getLocalBounds()); } void resized() override { table.setBounds (getLocalBounds()); }
template <typename It>
void addMessages (It begin, It end)
{
const auto numNewMessages = (int) std::distance (begin, end);
const auto numToAdd = juce::jmin (numToStore, numNewMessages);
const auto numToRemove = jmax (0, (int) messages.size() + numToAdd - numToStore);
messages.erase (messages.begin(), std::next (messages.begin(), numToRemove));
messages.insert (messages.end(), end - numToAdd, end);
table.updateContent();
}
void clear()
{
messages.clear();
table.updateContent();
}
private: private:
enum enum
{ {
@ -185,22 +209,24 @@ private:
return {}; return {};
} }
static constexpr auto numToStore = 1000; MidiListModel& messages;
std::vector<MidiMessage> messages;
TableListBox table; TableListBox table;
}; };
//============================================================================== //==============================================================================
class MidiLoggerPluginDemoProcessor : public AudioPluginInstance class MidiLoggerPluginDemoProcessor : public AudioProcessor,
private Timer
{ {
public: public:
MidiLoggerPluginDemoProcessor() MidiLoggerPluginDemoProcessor()
: AudioPluginInstance (BusesProperties()) : AudioProcessor (BusesProperties())
{ {
state.addChild ({ "uiState", { { "width", 500 }, { "height", 300 } }, {} }, -1, nullptr); state.addChild ({ "uiState", { { "width", 500 }, { "height", 300 } }, {} }, -1, nullptr);
startTimerHz (60);
} }
~MidiLoggerPluginDemoProcessor() override { stopTimer(); }
void processBlock (AudioBuffer<float>& audio, MidiBuffer& midi) override { process (audio, midi); } void processBlock (AudioBuffer<float>& audio, MidiBuffer& midi) override { process (audio, midi); }
void processBlock (AudioBuffer<double>& audio, MidiBuffer& midi) override { process (audio, midi); } void processBlock (AudioBuffer<double>& audio, MidiBuffer& midi) override { process (audio, midi); }
@ -211,7 +237,7 @@ public:
const String getName() const override { return "MIDILogger"; } const String getName() const override { return "MIDILogger"; }
bool acceptsMidi() const override { return true; } bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; } bool producesMidi() const override { return true; }
double getTailLengthSeconds() const override { return 0.0; } double getTailLengthSeconds() const override { return 0.0; }
int getNumPrograms() override { return 0; } int getNumPrograms() override { return 0; }
@ -235,28 +261,15 @@ public:
state = ValueTree::fromXml (*xmlState); state = ValueTree::fromXml (*xmlState);
} }
void fillInPluginDescription (PluginDescription& d) const override
{
d.name = getName();
d.uid = d.name.hashCode();
d.category = "Utility";
d.pluginFormatName = "Internal";
d.manufacturerName = "JUCE";
d.version = "1.0";
d.isInstrument = false;
d.numInputChannels = getTotalNumInputChannels();
d.numOutputChannels = getTotalNumOutputChannels();
}
private: private:
class Editor : public AudioProcessorEditor, class Editor : public AudioProcessorEditor,
private Timer,
private Value::Listener private Value::Listener
{ {
public: public:
explicit Editor (MidiLoggerPluginDemoProcessor& ownerIn) explicit Editor (MidiLoggerPluginDemoProcessor& ownerIn)
: AudioProcessorEditor (ownerIn), : AudioProcessorEditor (ownerIn),
owner (ownerIn) owner (ownerIn),
table (owner.model)
{ {
addAndMakeVisible (table); addAndMakeVisible (table);
addAndMakeVisible (clearButton); addAndMakeVisible (clearButton);
@ -269,15 +282,7 @@ private:
lastUIWidth. addListener (this); lastUIWidth. addListener (this);
lastUIHeight.addListener (this); lastUIHeight.addListener (this);
clearButton.onClick = [&] { table.clear(); }; clearButton.onClick = [&] { owner.model.clear(); };
startTimerHz (60);
}
~Editor() override
{
stopTimer();
owner.editorBeingDeleted (this);
} }
void paint (Graphics& g) override void paint (Graphics& g) override
@ -297,13 +302,6 @@ private:
} }
private: private:
void timerCallback() override
{
std::vector<MidiMessage> messages;
owner.queue.pop (std::back_inserter (messages));
table.addMessages (messages.begin(), messages.end());
}
void valueChanged (Value&) override void valueChanged (Value&) override
{ {
setSize (lastUIWidth.getValue(), lastUIHeight.getValue()); setSize (lastUIWidth.getValue(), lastUIHeight.getValue());
@ -317,6 +315,13 @@ private:
Value lastUIWidth, lastUIHeight; Value lastUIWidth, lastUIHeight;
}; };
void timerCallback() override
{
std::vector<MidiMessage> messages;
queue.pop (std::back_inserter (messages));
model.addMessages (messages.begin(), messages.end());
}
template <typename Element> template <typename Element>
void process (AudioBuffer<Element>& audio, MidiBuffer& midi) void process (AudioBuffer<Element>& audio, MidiBuffer& midi)
{ {
@ -326,6 +331,8 @@ private:
ValueTree state { "state" }; ValueTree state { "state" };
MidiQueue queue; MidiQueue queue;
MidiListModel model; // The data to show in the UI. We keep it around in the processor so that
// the view is persistent even when the plugin UI is closed and reopened.
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiLoggerPluginDemoProcessor) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiLoggerPluginDemoProcessor)
}; };

View file

@ -124,6 +124,8 @@ public:
} }
} }
using AudioProcessor::processBlock;
//============================================================================== //==============================================================================
AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); } AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); }
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }

View file

@ -105,6 +105,8 @@ public:
} }
} }
using AudioProcessor::processBlock;
//============================================================================== //==============================================================================
AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); } AudioProcessorEditor* createEditor() override { return new GenericAudioProcessorEditor (*this); }
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }

View file

@ -95,53 +95,73 @@ enum class LoopMode
pingpong pingpong
}; };
template <typename Movable> // We want to send type-erased commands to the audio thread, but we also
class MoveOnlyFifo final // want those commands to contain move-only resources, so that we can
// construct resources on the gui thread, and then transfer ownership
// cheaply to the audio thread. We can't do this with std::function
// because it enforces that functions are copy-constructible.
// Therefore, we use a very simple templated type-eraser here.
template <typename Proc>
struct Command
{
virtual ~Command() noexcept = default;
virtual void run (Proc& proc) = 0;
};
template <typename Proc, typename Func>
class TemplateCommand : public Command<Proc>,
private Func
{ {
public: public:
explicit MoveOnlyFifo (int size) template <typename FuncPrime>
explicit TemplateCommand (FuncPrime&& funcPrime)
: Func (std::forward<FuncPrime> (funcPrime))
{}
void run (Proc& proc) override { (*this) (proc); }
};
template <typename Proc>
class CommandFifo final
{
public:
explicit CommandFifo (int size)
: buffer ((size_t) size), : buffer ((size_t) size),
abstractFifo (size) abstractFifo (size)
{} {}
MoveOnlyFifo() CommandFifo()
: MoveOnlyFifo (1024) : CommandFifo (1024)
{} {}
template <typename Convertible> template <typename Item>
Convertible push (Convertible item) noexcept void push (Item&& item) noexcept
{ {
auto writer = abstractFifo.write (1); auto command = makeCommand (std::forward<Item> (item));
if (writer.blockSize1 == 1) abstractFifo.write (1).forEach ([&] (int index)
{ {
buffer[(size_t) writer.startIndex1] = move (item); buffer[size_t (index)] = std::move (command);
item = {}; });
}
else if (writer.blockSize2 == 1)
{
buffer[(size_t) writer.startIndex2] = move (item);
item = {};
}
return item;
} }
Movable pop() noexcept void call (Proc& proc) noexcept
{ {
auto reader = abstractFifo.read (1); abstractFifo.read (abstractFifo.getNumReady()).forEach ([&] (int index)
{
if (reader.blockSize1 == 1) buffer[size_t (index)]->run (proc);
return move (buffer[(size_t) reader.startIndex1]); });
if (reader.blockSize2 == 1)
return move (buffer[(size_t) reader.startIndex2]);
return {};
} }
private: private:
std::vector<Movable> buffer; template <typename Func>
static std::unique_ptr<Command<Proc>> makeCommand (Func&& func)
{
using Decayed = typename std::decay<Func>::type;
return std::make_unique<TemplateCommand<Proc, Decayed>> (std::forward<Func> (func));
}
std::vector<std::unique_ptr<Command<Proc>>> buffer;
AbstractFifo abstractFifo; AbstractFifo abstractFifo;
}; };
@ -239,7 +259,7 @@ class MPESamplerVoice : public MPESynthesiserVoice
{ {
public: public:
explicit MPESamplerVoice (std::shared_ptr<const MPESamplerSound> sound) explicit MPESamplerVoice (std::shared_ptr<const MPESamplerSound> sound)
: samplerSound (move (sound)) : samplerSound (std::move (sound))
{ {
jassert (samplerSound != nullptr); jassert (samplerSound != nullptr);
} }
@ -290,6 +310,25 @@ public:
void renderNextBlock (AudioBuffer<float>& outputBuffer, void renderNextBlock (AudioBuffer<float>& outputBuffer,
int startSample, int startSample,
int numSamples) override int numSamples) override
{
render (outputBuffer, startSample, numSamples);
}
void renderNextBlock (AudioBuffer<double>& outputBuffer,
int startSample,
int numSamples) override
{
render (outputBuffer, startSample, numSamples);
}
double getCurrentSamplePosition() const
{
return currentSamplePos;
}
private:
template <typename Element>
void render (AudioBuffer<Element>& outputBuffer, int startSample, int numSamples)
{ {
jassert (samplerSound->getSample() != nullptr); jassert (samplerSound->getSample() != nullptr);
@ -316,16 +355,11 @@ public:
writePos += 1; writePos += 1;
} }
double getCurrentSamplePosition() const template <typename Element>
{
return currentSamplePos;
}
private:
bool renderNextSample (const float* inL, bool renderNextSample (const float* inL,
const float* inR, const float* inR,
float* outL, Element* outL,
float* outR, Element* outR,
size_t writePos) size_t writePos)
{ {
auto currentLevel = level.getNextValue(); auto currentLevel = level.getNextValue();
@ -347,13 +381,13 @@ private:
auto pos = (int) currentSamplePos; auto pos = (int) currentSamplePos;
auto nextPos = pos + 1; auto nextPos = pos + 1;
auto alpha = (float) (currentSamplePos - pos); auto alpha = (Element) (currentSamplePos - pos);
auto invAlpha = 1.0f - alpha; auto invAlpha = 1.0f - alpha;
// just using a very simple linear interpolation here.. // just using a very simple linear interpolation here..
auto l = static_cast<float> (currentLevel * (inL[pos] * invAlpha + inL[nextPos] * alpha)); auto l = static_cast<Element> (currentLevel * (inL[pos] * invAlpha + inL[nextPos] * alpha));
auto r = static_cast<float> ((inR != nullptr) ? currentLevel * (inR[pos] * invAlpha + inR[nextPos] * alpha) auto r = static_cast<Element> ((inR != nullptr) ? currentLevel * (inR[pos] * invAlpha + inR[nextPos] * alpha)
: l); : l);
if (outR != nullptr) if (outR != nullptr)
{ {
@ -416,6 +450,9 @@ private:
case Direction::backward: case Direction::backward:
nextSamplePos -= nextPitchRatio; nextSamplePos -= nextPitchRatio;
break; break;
default:
break;
} }
// Update current sample position, taking loop mode into account // Update current sample position, taking loop mode into account
@ -521,7 +558,7 @@ public:
dataSize (dataSizeIn) dataSize (dataSizeIn)
{} {}
std::unique_ptr<AudioFormatReader> make (AudioFormatManager&manager ) const override std::unique_ptr<AudioFormatReader> make (AudioFormatManager& manager) const override
{ {
return makeAudioFormatReader (manager, sampleData, dataSize); return makeAudioFormatReader (manager, sampleData, dataSize);
} }
@ -621,7 +658,7 @@ struct VariantConverter<std::shared_ptr<AudioFormatReaderFactory>>
} // namespace juce } // namespace juce
//============================================================================== //==============================================================================
class VisibleRangeDataModel : public ValueTree::Listener class VisibleRangeDataModel : private ValueTree::Listener
{ {
public: public:
class Listener class Listener
@ -722,7 +759,7 @@ private:
}; };
//============================================================================== //==============================================================================
class MPESettingsDataModel : public ValueTree::Listener class MPESettingsDataModel : private ValueTree::Listener
{ {
public: public:
class Listener class Listener
@ -912,7 +949,7 @@ private:
}; };
//============================================================================== //==============================================================================
class DataModel : public ValueTree::Listener class DataModel : private ValueTree::Listener
{ {
public: public:
class Listener class Listener
@ -1098,7 +1135,7 @@ constexpr int controlSeparation = 6;
//============================================================================== //==============================================================================
class MPELegacySettingsComponent final : public Component, class MPELegacySettingsComponent final : public Component,
public MPESettingsDataModel::Listener private MPESettingsDataModel::Listener
{ {
public: public:
explicit MPELegacySettingsComponent (const MPESettingsDataModel& model, explicit MPELegacySettingsComponent (const MPESettingsDataModel& model,
@ -1220,7 +1257,7 @@ private:
//============================================================================== //==============================================================================
class MPENewSettingsComponent final : public Component, class MPENewSettingsComponent final : public Component,
public MPESettingsDataModel::Listener private MPESettingsDataModel::Listener
{ {
public: public:
MPENewSettingsComponent (const MPESettingsDataModel& model, MPENewSettingsComponent (const MPESettingsDataModel& model,
@ -1316,7 +1353,7 @@ private:
//============================================================================== //==============================================================================
class MPESettingsComponent final : public Component, class MPESettingsComponent final : public Component,
public MPESettingsDataModel::Listener private MPESettingsDataModel::Listener
{ {
public: public:
MPESettingsComponent (const MPESettingsDataModel& model, MPESettingsComponent (const MPESettingsDataModel& model,
@ -1487,7 +1524,7 @@ private:
//============================================================================== //==============================================================================
class Ruler : public Component, class Ruler : public Component,
public VisibleRangeDataModel::Listener private VisibleRangeDataModel::Listener
{ {
public: public:
explicit Ruler (const VisibleRangeDataModel& model) explicit Ruler (const VisibleRangeDataModel& model)
@ -1533,14 +1570,13 @@ private:
auto xPos = (time - visibleRange.getVisibleRange().getStart()) * getWidth() auto xPos = (time - visibleRange.getVisibleRange().getStart()) * getWidth()
/ visibleRange.getVisibleRange().getLength(); / visibleRange.getVisibleRange().getLength();
std::ostringstream out_stream; std::ostringstream outStream;
out_stream << std::setprecision (roundToInt (precision)) << roundToInt (time); outStream << std::setprecision (roundToInt (precision)) << time;
g.drawText (out_stream.str(), const auto bounds = Rectangle<int> (Point<int> (roundToInt (xPos) + 3, 0),
Rectangle<int> (Point<int> (roundToInt (xPos) + 3, 0), Point<int> (roundToInt (xPos + minDivisionWidth), getHeight()));
Point<int> (roundToInt (xPos + minDivisionWidth), getHeight())),
Justification::centredLeft, g.drawText (outStream.str(), bounds, Justification::centredLeft, false);
false);
g.drawVerticalLine (roundToInt (xPos), 2.0f, (float) getHeight()); g.drawVerticalLine (roundToInt (xPos), 2.0f, (float) getHeight());
} }
@ -1579,8 +1615,8 @@ private:
//============================================================================== //==============================================================================
class LoopPointsOverlay : public Component, class LoopPointsOverlay : public Component,
public DataModel::Listener, private DataModel::Listener,
public VisibleRangeDataModel::Listener private VisibleRangeDataModel::Listener
{ {
public: public:
LoopPointsOverlay (const DataModel& dModel, LoopPointsOverlay (const DataModel& dModel,
@ -1680,8 +1716,8 @@ private:
//============================================================================== //==============================================================================
class PlaybackPositionOverlay : public Component, class PlaybackPositionOverlay : public Component,
public Timer, private Timer,
public VisibleRangeDataModel::Listener private VisibleRangeDataModel::Listener
{ {
public: public:
using Provider = std::function<std::vector<float>()>; using Provider = std::function<std::vector<float>()>;
@ -1727,9 +1763,9 @@ private:
//============================================================================== //==============================================================================
class WaveformView : public Component, class WaveformView : public Component,
public ChangeListener, private ChangeListener,
public DataModel::Listener, private DataModel::Listener,
public VisibleRangeDataModel::Listener private VisibleRangeDataModel::Listener
{ {
public: public:
WaveformView (const DataModel& model, WaveformView (const DataModel& model,
@ -1814,7 +1850,7 @@ private:
//============================================================================== //==============================================================================
class WaveformEditor : public Component, class WaveformEditor : public Component,
public DataModel::Listener private DataModel::Listener
{ {
public: public:
WaveformEditor (const DataModel& model, WaveformEditor (const DataModel& model,
@ -1870,7 +1906,8 @@ private:
//============================================================================== //==============================================================================
class MainSamplerView : public Component, class MainSamplerView : public Component,
public DataModel::Listener private DataModel::Listener,
private ChangeListener
{ {
public: public:
MainSamplerView (const DataModel& model, MainSamplerView (const DataModel& model,
@ -1878,19 +1915,21 @@ public:
UndoManager& um) UndoManager& um)
: dataModel (model), : dataModel (model),
waveformEditor (dataModel, move (provider), um), waveformEditor (dataModel, move (provider), um),
undoManager (&um) undoManager (um)
{ {
dataModel.addListener (*this); dataModel.addListener (*this);
addAndMakeVisible (waveformEditor); addAndMakeVisible (waveformEditor);
addAndMakeVisible (loadNewSampleButton); addAndMakeVisible (loadNewSampleButton);
addAndMakeVisible (undoButton);
addAndMakeVisible (redoButton);
auto setReader = [this] (const FileChooser& fc) auto setReader = [this] (const FileChooser& fc)
{ {
undoManager->beginNewTransaction(); undoManager.beginNewTransaction();
auto readerFactory = new FileAudioFormatReaderFactory (fc.getResult()); auto readerFactory = new FileAudioFormatReaderFactory (fc.getResult());
dataModel.setSampleReader (std::unique_ptr<AudioFormatReaderFactory> (readerFactory), dataModel.setSampleReader (std::unique_ptr<AudioFormatReaderFactory> (readerFactory),
undoManager); &undoManager);
}; };
loadNewSampleButton.onClick = [this, setReader] loadNewSampleButton.onClick = [this, setReader]
@ -1903,9 +1942,9 @@ public:
addAndMakeVisible (centreFrequency); addAndMakeVisible (centreFrequency);
centreFrequency.onValueChange = [this] centreFrequency.onValueChange = [this]
{ {
undoManager->beginNewTransaction(); undoManager.beginNewTransaction();
dataModel.setCentreFrequencyHz (centreFrequency.getValue(), dataModel.setCentreFrequencyHz (centreFrequency.getValue(),
centreFrequency.isMouseButtonDown() ? nullptr : undoManager); centreFrequency.isMouseButtonDown() ? nullptr : &undoManager);
}; };
centreFrequency.setRange (20, 20000, 1); centreFrequency.setRange (20, 20000, 1);
@ -1925,8 +1964,8 @@ public:
{ {
if (loopKindNone.getToggleState()) if (loopKindNone.getToggleState())
{ {
undoManager->beginNewTransaction(); undoManager.beginNewTransaction();
dataModel.setLoopMode (LoopMode::none, undoManager); dataModel.setLoopMode (LoopMode::none, &undoManager);
} }
}; };
@ -1934,8 +1973,8 @@ public:
{ {
if (loopKindForward.getToggleState()) if (loopKindForward.getToggleState())
{ {
undoManager->beginNewTransaction(); undoManager.beginNewTransaction();
dataModel.setLoopMode (LoopMode::forward, undoManager); dataModel.setLoopMode (LoopMode::forward, &undoManager);
} }
}; };
@ -1943,16 +1982,36 @@ public:
{ {
if (loopKindPingpong.getToggleState()) if (loopKindPingpong.getToggleState())
{ {
undoManager->beginNewTransaction(); undoManager.beginNewTransaction();
dataModel.setLoopMode (LoopMode::pingpong, undoManager); dataModel.setLoopMode (LoopMode::pingpong, &undoManager);
} }
}; };
undoButton.onClick = [this] { undoManager.undo(); };
redoButton.onClick = [this] { undoManager.redo(); };
addAndMakeVisible (centreFrequencyLabel); addAndMakeVisible (centreFrequencyLabel);
addAndMakeVisible (loopKindLabel); addAndMakeVisible (loopKindLabel);
changeListenerCallback (&undoManager);
undoManager.addChangeListener (this);
}
~MainSamplerView() override
{
undoManager.removeChangeListener (this);
} }
private: private:
void changeListenerCallback (ChangeBroadcaster* source) override
{
if (source == &undoManager)
{
undoButton.setEnabled (undoManager.canUndo());
redoButton.setEnabled (undoManager.canRedo());
}
}
void resized() override void resized() override
{ {
auto bounds = getLocalBounds(); auto bounds = getLocalBounds();
@ -1960,6 +2019,8 @@ private:
auto topBar = bounds.removeFromTop (50); auto topBar = bounds.removeFromTop (50);
auto padding = 4; auto padding = 4;
loadNewSampleButton .setBounds (topBar.removeFromRight (100).reduced (padding)); loadNewSampleButton .setBounds (topBar.removeFromRight (100).reduced (padding));
redoButton .setBounds (topBar.removeFromRight (100).reduced (padding));
undoButton .setBounds (topBar.removeFromRight (100).reduced (padding));
centreFrequencyLabel.setBounds (topBar.removeFromLeft (100).reduced (padding)); centreFrequencyLabel.setBounds (topBar.removeFromLeft (100).reduced (padding));
centreFrequency .setBounds (topBar.removeFromLeft (100).reduced (padding)); centreFrequency .setBounds (topBar.removeFromLeft (100).reduced (padding));
@ -1985,6 +2046,9 @@ private:
case LoopMode::pingpong: case LoopMode::pingpong:
loopKindPingpong.setToggleState (true, dontSendNotification); loopKindPingpong.setToggleState (true, dontSendNotification);
break; break;
default:
break;
} }
} }
@ -1996,6 +2060,8 @@ private:
DataModel dataModel; DataModel dataModel;
WaveformEditor waveformEditor; WaveformEditor waveformEditor;
TextButton loadNewSampleButton { "Load New Sample" }; TextButton loadNewSampleButton { "Load New Sample" };
TextButton undoButton { "Undo" };
TextButton redoButton { "Redo" };
Slider centreFrequency; Slider centreFrequency;
TextButton loopKindNone { "None" }, TextButton loopKindNone { "None" },
@ -2009,7 +2075,7 @@ private:
FileChooser fileChooser { "Select a file to load...", File(), FileChooser fileChooser { "Select a file to load...", File(),
dataModel.getAudioFormatManager().getWildcardForAllFormats() }; dataModel.getAudioFormatManager().getWildcardForAllFormats() };
UndoManager* undoManager; UndoManager& undoManager;
}; };
//============================================================================== //==============================================================================
@ -2074,7 +2140,7 @@ public:
// This function will be called from the message thread. We lock the command // This function will be called from the message thread. We lock the command
// queue to ensure that no messages are processed for the duration of this // queue to ensure that no messages are processed for the duration of this
// call. // call.
std::lock_guard<std::mutex> lock (commandQueueMutex); SpinLock::ScopedLockType lock (commandQueueMutex);
ProcessorState state; ProcessorState state;
state.synthVoices = synthesiser.getNumVoices(); state.synthVoices = synthesiser.getNumVoices();
@ -2096,7 +2162,7 @@ public:
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }
//============================================================================== //==============================================================================
const String getName() const override { return JucePlugin_Name; } const String getName() const override { return "SamplerPlugin"; }
bool acceptsMidi() const override { return true; } bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; } bool producesMidi() const override { return false; }
bool isMidiEffect() const override { return false; } bool isMidiEffect() const override { return false; }
@ -2114,49 +2180,14 @@ public:
void setStateInformation (const void*, int) override {} void setStateInformation (const void*, int) override {}
//============================================================================== //==============================================================================
void processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages) override void processBlock (AudioBuffer<float>& buffer, MidiBuffer& midi) override
{ {
// Try to acquire a lock on the command queue. process (buffer, midi);
// If we were successful, we pop all pending commands off the queue and }
// apply them to the processor.
// If we weren't able to acquire the lock, it's because someone called
// createEditor, which requires that the processor data model stays in
// a valid state for the duration of the call.
std::unique_lock<std::mutex> lock (commandQueueMutex, std::try_to_lock);
if (lock.owns_lock()) void processBlock (AudioBuffer<double>& buffer, MidiBuffer& midi) override
{ {
while (auto command = incomingCommands.pop()) process (buffer, midi);
{
command->run (*this);
// We push the command onto the outgoing buffer, as long as it has
// room. If it doesn't have room for some reason, we'll delete
// the command right here on this thread, which might take a while
// and cause the audio to glitch, so I hope the buffer size is big
// enough!
outgoingCommands.push (move (command));
}
}
synthesiser.renderNextBlock (buffer, midiMessages, 0, buffer.getNumSamples());
auto loadedSamplerSound = samplerSound;
if (loadedSamplerSound->getSample() == nullptr)
return;
auto numVoices = synthesiser.getNumVoices();
// Update the current playback positions
for (auto i = 0; i < maxVoices; ++i)
{
auto* voicePtr = dynamic_cast<MPESamplerVoice*> (synthesiser.getVoice (i));
if (i < numVoices && voicePtr != nullptr)
playbackPositions[(size_t) i] = static_cast<float> (voicePtr->getCurrentSamplePosition() / loadedSamplerSound->getSample()->getSampleRate());
else
playbackPositions[(size_t) i] = 0.0f;
}
} }
// These should be called from the GUI thread, and will block until the // These should be called from the GUI thread, and will block until the
@ -2205,75 +2236,75 @@ public:
if (fact == nullptr) if (fact == nullptr)
{ {
pushCommand (SetSampleCommand (move (fact), commands.push (SetSampleCommand (move (fact),
nullptr, nullptr,
move (newSamplerVoices))); move (newSamplerVoices)));
} }
else else
{ {
auto reader = fact->make (formatManager); auto reader = fact->make (formatManager);
pushCommand (SetSampleCommand (move (fact), commands.push (SetSampleCommand (move (fact),
std::unique_ptr<Sample> (new Sample (*reader, 10.0)), std::unique_ptr<Sample> (new Sample (*reader, 10.0)),
move (newSamplerVoices))); move (newSamplerVoices)));
} }
} }
void setCentreFrequency (double centreFrequency) void setCentreFrequency (double centreFrequency)
{ {
pushCommand ([centreFrequency] (SamplerAudioProcessor& proc) commands.push ([centreFrequency] (SamplerAudioProcessor& proc)
{ {
auto loaded = proc.samplerSound; auto loaded = proc.samplerSound;
if (loaded != nullptr) if (loaded != nullptr)
loaded->setCentreFrequencyInHz (centreFrequency); loaded->setCentreFrequencyInHz (centreFrequency);
}); });
} }
void setLoopMode (LoopMode loopMode) void setLoopMode (LoopMode loopMode)
{ {
pushCommand ([loopMode] (SamplerAudioProcessor& proc) commands.push ([loopMode] (SamplerAudioProcessor& proc)
{ {
auto loaded = proc.samplerSound; auto loaded = proc.samplerSound;
if (loaded != nullptr) if (loaded != nullptr)
loaded->setLoopMode (loopMode); loaded->setLoopMode (loopMode);
}); });
} }
void setLoopPoints (Range<double> loopPoints) void setLoopPoints (Range<double> loopPoints)
{ {
pushCommand ([loopPoints] (SamplerAudioProcessor& proc) commands.push ([loopPoints] (SamplerAudioProcessor& proc)
{ {
auto loaded = proc.samplerSound; auto loaded = proc.samplerSound;
if (loaded != nullptr) if (loaded != nullptr)
loaded->setLoopPointsInSeconds (loopPoints); loaded->setLoopPointsInSeconds (loopPoints);
}); });
} }
void setMPEZoneLayout (MPEZoneLayout layout) void setMPEZoneLayout (MPEZoneLayout layout)
{ {
pushCommand ([layout] (SamplerAudioProcessor& proc) commands.push ([layout] (SamplerAudioProcessor& proc)
{ {
// setZoneLayout will lock internally, so we don't care too much about // setZoneLayout will lock internally, so we don't care too much about
// ensuring that the layout doesn't get copied or destroyed on the // ensuring that the layout doesn't get copied or destroyed on the
// audio thread. If the audio glitches while updating midi settings // audio thread. If the audio glitches while updating midi settings
// it doesn't matter too much. // it doesn't matter too much.
proc.synthesiser.setZoneLayout (layout); proc.synthesiser.setZoneLayout (layout);
}); });
} }
void setLegacyModeEnabled (int pitchbendRange, Range<int> channelRange) void setLegacyModeEnabled (int pitchbendRange, Range<int> channelRange)
{ {
pushCommand ([pitchbendRange, channelRange] (SamplerAudioProcessor& proc) commands.push ([pitchbendRange, channelRange] (SamplerAudioProcessor& proc)
{ {
proc.synthesiser.enableLegacyMode (pitchbendRange, channelRange); proc.synthesiser.enableLegacyMode (pitchbendRange, channelRange);
}); });
} }
void setVoiceStealingEnabled (bool voiceStealingEnabled) void setVoiceStealingEnabled (bool voiceStealingEnabled)
{ {
pushCommand ([voiceStealingEnabled] (SamplerAudioProcessor& proc) commands.push ([voiceStealingEnabled] (SamplerAudioProcessor& proc)
{ {
proc.synthesiser.setVoiceStealingEnabled (voiceStealingEnabled); proc.synthesiser.setVoiceStealingEnabled (voiceStealingEnabled);
}); });
} }
void setNumberOfVoices (int numberOfVoices) void setNumberOfVoices (int numberOfVoices)
@ -2287,7 +2318,7 @@ public:
{ {
public: public:
SetNumVoicesCommand (std::vector<std::unique_ptr<MPESamplerVoice>> newVoicesIn) SetNumVoicesCommand (std::vector<std::unique_ptr<MPESamplerVoice>> newVoicesIn)
: newVoices (move (newVoicesIn)) : newVoices (std::move (newVoicesIn))
{} {}
void operator() (SamplerAudioProcessor& proc) void operator() (SamplerAudioProcessor& proc)
@ -2311,7 +2342,7 @@ public:
for (auto i = 0; i != numberOfVoices; ++i) for (auto i = 0; i != numberOfVoices; ++i)
newSamplerVoices.emplace_back (new MPESamplerVoice (loadedSamplerSound)); newSamplerVoices.emplace_back (new MPESamplerVoice (loadedSamplerSound));
pushCommand (SetNumVoicesCommand (move (newSamplerVoices))); commands.push (SetNumVoicesCommand (move (newSamplerVoices)));
} }
// These accessors are just for an 'overview' and won't give the exact // These accessors are just for an 'overview' and won't give the exact
@ -2327,8 +2358,8 @@ private:
//============================================================================== //==============================================================================
class SamplerAudioProcessorEditor : public AudioProcessorEditor, class SamplerAudioProcessorEditor : public AudioProcessorEditor,
public FileDragAndDropTarget, public FileDragAndDropTarget,
public DataModel::Listener, private DataModel::Listener,
public MPESettingsDataModel::Listener private MPESettingsDataModel::Listener
{ {
public: public:
SamplerAudioProcessorEditor (SamplerAudioProcessor& p, ProcessorState state) SamplerAudioProcessorEditor (SamplerAudioProcessor& p, ProcessorState state)
@ -2497,6 +2528,7 @@ private:
DataModel dataModel { formatManager }; DataModel dataModel { formatManager };
UndoManager undoManager; UndoManager undoManager;
MPESettingsDataModel mpeSettings { dataModel.mpeSettings() }; MPESettingsDataModel mpeSettings { dataModel.mpeSettings() };
TabbedComponent tabbedComponent { TabbedButtonBar::Orientation::TabsAtTop }; TabbedComponent tabbedComponent { TabbedButtonBar::Orientation::TabsAtTop };
MPESettingsComponent settingsComponent { dataModel.mpeSettings(), undoManager }; MPESettingsComponent settingsComponent { dataModel.mpeSettings(), undoManager };
MainSamplerView mainSamplerView; MainSamplerView mainSamplerView;
@ -2505,79 +2537,43 @@ private:
}; };
//============================================================================== //==============================================================================
// We want to send type-erased commands to the audio thread, but we also template <typename Element>
// want those commands to contain move-only resources, so that we can void process (AudioBuffer<Element>& buffer, MidiBuffer& midiMessages)
// construct resources on the gui thread, and then transfer ownership
// cheaply to the audio thread. We can't do this with std::function
// because it enforces that functions are copy-constructible.
// Therefore, we use a very simple templated type-eraser here.
struct Command
{ {
virtual ~Command() noexcept = default; // Try to acquire a lock on the command queue.
virtual void run (SamplerAudioProcessor& proc) = 0; // If we were successful, we pop all pending commands off the queue and
}; // apply them to the processor.
// If we weren't able to acquire the lock, it's because someone called
// createEditor, which requires that the processor data model stays in
// a valid state for the duration of the call.
const GenericScopedTryLock<SpinLock> lock (commandQueueMutex);
template <typename Func> if (lock.isLocked())
class TemplateCommand : public Command, commands.call (*this);
public Func
{
public:
template <typename FuncPrime>
explicit TemplateCommand (FuncPrime&& funcPrime)
: Func (std::forward<FuncPrime> (funcPrime))
{}
void run (SamplerAudioProcessor& proc) override synthesiser.renderNextBlock (buffer, midiMessages, 0, buffer.getNumSamples());
auto loadedSamplerSound = samplerSound;
if (loadedSamplerSound->getSample() == nullptr)
return;
auto numVoices = synthesiser.getNumVoices();
// Update the current playback positions
for (auto i = 0; i < maxVoices; ++i)
{ {
(*this) (proc); auto* voicePtr = dynamic_cast<MPESamplerVoice*> (synthesiser.getVoice (i));
}
}; if (i < numVoices && voicePtr != nullptr)
playbackPositions[(size_t) i] = static_cast<float> (voicePtr->getCurrentSamplePosition() / loadedSamplerSound->getSample()->getSampleRate());
else
playbackPositions[(size_t) i] = 0.0f;
}
template <typename Func>
static std::unique_ptr<Command> make_command (Func&& func)
{
return std::unique_ptr<TemplateCommand<Func>> (new TemplateCommand<Func> (std::forward<Func> (func)));
} }
using CommandFifo = MoveOnlyFifo<std::unique_ptr<Command>>; CommandFifo<SamplerAudioProcessor> commands;
class OutgoingBufferCleaner : public Timer
{
public:
explicit OutgoingBufferCleaner (CommandFifo& bufferToEmpty)
: buffer (bufferToEmpty)
{
startTimer (500);
}
private:
void timerCallback() override
{
while (auto command = buffer.pop())
command = {};
}
CommandFifo& buffer;
};
// Spin, trying to post a command to the sampler sound, until there's
// enough room in the command buffer to accept the new command.
template <typename Func>
void pushCommand (Func&& func)
{
auto command = make_command (std::forward<Func> (func));
while (command)
command = incomingCommands.push (move (command));
}
// We have an incoming and an outgoing command queue. The incoming commands
// are used to update the sampler sound in a thread-safe way, without
// blocking. Once we've consumed a command, we push it back onto the
// outgoing command queue, which is cleaned up periodically by the
// outgoingBufferCleaner.
CommandFifo incomingCommands;
CommandFifo outgoingCommands;
OutgoingBufferCleaner outgoingBufferCleaner { outgoingCommands };
MemoryBlock mb; MemoryBlock mb;
std::unique_ptr<AudioFormatReaderFactory> readerFactory; std::unique_ptr<AudioFormatReaderFactory> readerFactory;
@ -2587,9 +2583,9 @@ private:
// This mutex is used to ensure we don't modify the processor state during // This mutex is used to ensure we don't modify the processor state during
// a call to createEditor, which would cause the UI to become desynched // a call to createEditor, which would cause the UI to become desynched
// with the real state of the processor. // with the real state of the processor.
std::mutex commandQueueMutex; SpinLock commandQueueMutex;
static const int maxVoices { 20 }; static constexpr auto maxVoices { 20 };
// This is used for visualising the current playback position of each voice. // This is used for visualising the current playback position of each voice.
std::array<std::atomic<float>, maxVoices> playbackPositions; std::array<std::atomic<float>, maxVoices> playbackPositions;

View file

@ -270,6 +270,8 @@ public:
} }
} }
using AudioProcessor::processBlock;
//============================================================================== //==============================================================================
AudioProcessorEditor* createEditor() override { return new SurroundEditor (*this); } AudioProcessorEditor* createEditor() override { return new SurroundEditor (*this); }
bool hasEditor() const override { return true; } bool hasEditor() const override { return true; }

View file

@ -29,6 +29,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</XCODE_MAC> </XCODE_MAC>
<LINUX_MAKE targetFolder="Builds/LinuxMakefile" smallIcon="c97aUr" bigIcon="c97aUr"> <LINUX_MAKE targetFolder="Builds/LinuxMakefile" smallIcon="c97aUr" bigIcon="c97aUr">
@ -51,6 +52,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</LINUX_MAKE> </LINUX_MAKE>
<VS2015 targetFolder="Builds/VisualStudio2015" smallIcon="c97aUr" bigIcon="c97aUr" <VS2015 targetFolder="Builds/VisualStudio2015" smallIcon="c97aUr" bigIcon="c97aUr"
@ -74,6 +76,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</VS2015> </VS2015>
<VS2017 targetFolder="Builds/VisualStudio2017" smallIcon="c97aUr" bigIcon="c97aUr" <VS2017 targetFolder="Builds/VisualStudio2017" smallIcon="c97aUr" bigIcon="c97aUr"
@ -97,6 +100,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</VS2017> </VS2017>
<VS2019 targetFolder="Builds/VisualStudio2019" smallIcon="c97aUr" bigIcon="c97aUr" <VS2019 targetFolder="Builds/VisualStudio2019" smallIcon="c97aUr" bigIcon="c97aUr"
@ -120,6 +124,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</VS2019> </VS2019>
<XCODE_IPHONE targetFolder="Builds/iOS" iosScreenOrientation="portraitlandscape" <XCODE_IPHONE targetFolder="Builds/iOS" iosScreenOrientation="portraitlandscape"
@ -147,6 +152,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</XCODE_IPHONE> </XCODE_IPHONE>
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" androidInternetNeeded="1" <ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" androidInternetNeeded="1"
@ -174,6 +180,7 @@
<MODULEPATH id="juce_audio_formats" path="../../modules"/> <MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/> <MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/> <MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_dsp" path="../../modules"/>
</MODULEPATHS> </MODULEPATHS>
</ANDROIDSTUDIO> </ANDROIDSTUDIO>
</EXPORTFORMATS> </EXPORTFORMATS>
@ -207,7 +214,7 @@
</GROUP> </GROUP>
</MAINGROUP> </MAINGROUP>
<JUCEOPTIONS JUCE_WASAPI="1" JUCE_DIRECTSOUND="1" JUCE_ALSA="1" JUCE_USE_FLAC="0" <JUCEOPTIONS JUCE_WASAPI="1" JUCE_DIRECTSOUND="1" JUCE_ALSA="1" JUCE_USE_FLAC="0"
JUCE_USE_OGGVORBIS="0" JUCE_USE_CDBURNER="0" JUCE_USE_CDREADER="0" JUCE_USE_OGGVORBIS="1" JUCE_USE_CDBURNER="0" JUCE_USE_CDREADER="0"
JUCE_USE_CAMERA="0" JUCE_PLUGINHOST_AU="1" JUCE_WEB_BROWSER="0" JUCE_USE_CAMERA="0" JUCE_PLUGINHOST_AU="1" JUCE_WEB_BROWSER="0"
JUCE_PLUGINHOST_VST3="1" JUCE_PLUGINHOST_LADSPA="1"/> JUCE_PLUGINHOST_VST3="1" JUCE_PLUGINHOST_LADSPA="1"/>
<MODULES> <MODULES>
@ -219,6 +226,7 @@
<MODULE id="juce_core" showAllCode="1"/> <MODULE id="juce_core" showAllCode="1"/>
<MODULE id="juce_cryptography" showAllCode="1"/> <MODULE id="juce_cryptography" showAllCode="1"/>
<MODULE id="juce_data_structures" showAllCode="1"/> <MODULE id="juce_data_structures" showAllCode="1"/>
<MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
<MODULE id="juce_events" showAllCode="1"/> <MODULE id="juce_events" showAllCode="1"/>
<MODULE id="juce_graphics" showAllCode="1"/> <MODULE id="juce_graphics" showAllCode="1"/>
<MODULE id="juce_gui_basics" showAllCode="1"/> <MODULE id="juce_gui_basics" showAllCode="1"/>

View file

@ -20,9 +20,9 @@ include_directories( AFTER
enable_language(ASM) enable_language(ASM)
IF(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG") IF(JUCE_BUILD_CONFIGURATION MATCHES "DEBUG")
add_definitions("-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=0" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DDEBUG=1" "-D_DEBUG=1") add_definitions("-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DDEBUG=1" "-D_DEBUG=1")
ELSEIF(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE") ELSEIF(JUCE_BUILD_CONFIGURATION MATCHES "RELEASE")
add_definitions("-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=0" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DNDEBUG=1") add_definitions("-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DNDEBUG=1")
if(NOT (ANDROID_ABI STREQUAL "mips" OR ANDROID_ABI STREQUAL "mips64")) if(NOT (ANDROID_ABI STREQUAL "mips" OR ANDROID_ABI STREQUAL "mips64"))
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto") SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
@ -785,6 +785,63 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_data_structures/juce_data_structures.cpp" "../../../../../modules/juce_data_structures/juce_data_structures.cpp"
"../../../../../modules/juce_data_structures/juce_data_structures.mm" "../../../../../modules/juce_data_structures/juce_data_structures.mm"
"../../../../../modules/juce_data_structures/juce_data_structures.h" "../../../../../modules/juce_data_structures/juce_data_structures.h"
"../../../../../modules/juce_dsp/containers/juce_AudioBlock.h"
"../../../../../modules/juce_dsp/containers/juce_AudioBlock_test.cpp"
"../../../../../modules/juce_dsp/containers/juce_SIMDRegister.h"
"../../../../../modules/juce_dsp/containers/juce_SIMDRegister_Impl.h"
"../../../../../modules/juce_dsp/containers/juce_SIMDRegister_test.cpp"
"../../../../../modules/juce_dsp/filter_design/juce_FilterDesign.cpp"
"../../../../../modules/juce_dsp/filter_design/juce_FilterDesign.h"
"../../../../../modules/juce_dsp/frequency/juce_Convolution.cpp"
"../../../../../modules/juce_dsp/frequency/juce_Convolution.h"
"../../../../../modules/juce_dsp/frequency/juce_FFT.cpp"
"../../../../../modules/juce_dsp/frequency/juce_FFT.h"
"../../../../../modules/juce_dsp/frequency/juce_FFT_test.cpp"
"../../../../../modules/juce_dsp/frequency/juce_Windowing.cpp"
"../../../../../modules/juce_dsp/frequency/juce_Windowing.h"
"../../../../../modules/juce_dsp/maths/juce_FastMathApproximations.h"
"../../../../../modules/juce_dsp/maths/juce_LogRampedValue.h"
"../../../../../modules/juce_dsp/maths/juce_LogRampedValue_test.cpp"
"../../../../../modules/juce_dsp/maths/juce_LookupTable.cpp"
"../../../../../modules/juce_dsp/maths/juce_LookupTable.h"
"../../../../../modules/juce_dsp/maths/juce_Matrix.cpp"
"../../../../../modules/juce_dsp/maths/juce_Matrix.h"
"../../../../../modules/juce_dsp/maths/juce_Matrix_test.cpp"
"../../../../../modules/juce_dsp/maths/juce_Phase.h"
"../../../../../modules/juce_dsp/maths/juce_Polynomial.h"
"../../../../../modules/juce_dsp/maths/juce_SpecialFunctions.cpp"
"../../../../../modules/juce_dsp/maths/juce_SpecialFunctions.h"
"../../../../../modules/juce_dsp/native/juce_avx_SIMDNativeOps.cpp"
"../../../../../modules/juce_dsp/native/juce_avx_SIMDNativeOps.h"
"../../../../../modules/juce_dsp/native/juce_fallback_SIMDNativeOps.h"
"../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.cpp"
"../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h"
"../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp"
"../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h"
"../../../../../modules/juce_dsp/processors/juce_Bias.h"
"../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp"
"../../../../../modules/juce_dsp/processors/juce_FIRFilter.h"
"../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp"
"../../../../../modules/juce_dsp/processors/juce_Gain.h"
"../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp"
"../../../../../modules/juce_dsp/processors/juce_IIRFilter.h"
"../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h"
"../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp"
"../../../../../modules/juce_dsp/processors/juce_LadderFilter.h"
"../../../../../modules/juce_dsp/processors/juce_Oscillator.h"
"../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp"
"../../../../../modules/juce_dsp/processors/juce_Oversampling.h"
"../../../../../modules/juce_dsp/processors/juce_ProcessContext.h"
"../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h"
"../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp"
"../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h"
"../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h"
"../../../../../modules/juce_dsp/processors/juce_Reverb.h"
"../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h"
"../../../../../modules/juce_dsp/processors/juce_WaveShaper.h"
"../../../../../modules/juce_dsp/juce_dsp.cpp"
"../../../../../modules/juce_dsp/juce_dsp.mm"
"../../../../../modules/juce_dsp/juce_dsp.h"
"../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp" "../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"
"../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h" "../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"
"../../../../../modules/juce_events/broadcasters/juce_ActionListener.h" "../../../../../modules/juce_events/broadcasters/juce_ActionListener.h"
@ -1398,6 +1455,7 @@ add_library( ${BINARY_NAME}
"../../../JuceLibraryCode/include_juce_core.cpp" "../../../JuceLibraryCode/include_juce_core.cpp"
"../../../JuceLibraryCode/include_juce_cryptography.cpp" "../../../JuceLibraryCode/include_juce_cryptography.cpp"
"../../../JuceLibraryCode/include_juce_data_structures.cpp" "../../../JuceLibraryCode/include_juce_data_structures.cpp"
"../../../JuceLibraryCode/include_juce_dsp.cpp"
"../../../JuceLibraryCode/include_juce_events.cpp" "../../../JuceLibraryCode/include_juce_events.cpp"
"../../../JuceLibraryCode/include_juce_graphics.cpp" "../../../JuceLibraryCode/include_juce_graphics.cpp"
"../../../JuceLibraryCode/include_juce_gui_basics.cpp" "../../../JuceLibraryCode/include_juce_gui_basics.cpp"
@ -2150,6 +2208,63 @@ set_source_files_properties("../../../../../modules/juce_data_structures/values/
set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_data_structures/juce_data_structures.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/containers/juce_AudioBlock.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/containers/juce_AudioBlock_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/containers/juce_SIMDRegister.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/containers/juce_SIMDRegister_Impl.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/containers/juce_SIMDRegister_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/filter_design/juce_FilterDesign.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/filter_design/juce_FilterDesign.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_Convolution.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_Convolution.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_FFT.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_FFT.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_FFT_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/frequency/juce_Windowing.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_FastMathApproximations.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_LogRampedValue.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_LogRampedValue_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_LookupTable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_LookupTable.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_Matrix.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_Matrix.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_Matrix_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_Phase.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_Polynomial.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_SpecialFunctions.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/maths/juce_SpecialFunctions.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_avx_SIMDNativeOps.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_avx_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_fallback_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_neon_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/native/juce_sse_SIMDNativeOps.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Bias.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_FIRFilter_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Gain.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_IIRFilter_Impl.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_LadderFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oscillator.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Oversampling.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessContext.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorChain_test.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorDuplicator.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_ProcessorWrapper.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_Reverb.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_StateVariableFilter.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/processors/juce_WaveShaper.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_dsp/juce_dsp.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/broadcasters/juce_ActionListener.h" PROPERTIES HEADER_FILE_ONLY TRUE)

View file

@ -35,7 +35,7 @@ ifeq ($(CONFIG),Debug)
TARGET_ARCH := TARGET_ARCH :=
endif endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=0" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
JUCE_TARGET_APP := AudioPluginHost JUCE_TARGET_APP := AudioPluginHost
@ -56,7 +56,7 @@ ifeq ($(CONFIG),Release)
TARGET_ARCH := TARGET_ARCH :=
endif endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=0" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_REPORT_APP_USAGE=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60000" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_USE_CAMERA=0" "-DJUCE_STANDALONE_APPLICATION=1" $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
JUCE_TARGET_APP := AudioPluginHost JUCE_TARGET_APP := AudioPluginHost
@ -83,6 +83,7 @@ OBJECTS_APP := \
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o \ $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
$(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \ $(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \
$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \ $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \
$(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o \
$(JUCE_OBJDIR)/include_juce_events_fd7d695.o \ $(JUCE_OBJDIR)/include_juce_events_fd7d695.o \
$(JUCE_OBJDIR)/include_juce_graphics_f817e147.o \ $(JUCE_OBJDIR)/include_juce_graphics_f817e147.o \
$(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \ $(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \
@ -178,6 +179,11 @@ $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o: ../../JuceLibraryCode/in
@echo "Compiling include_juce_data_structures.cpp" @echo "Compiling include_juce_data_structures.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
$(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o: ../../JuceLibraryCode/include_juce_dsp.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling include_juce_dsp.cpp"
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
$(JUCE_OBJDIR)/include_juce_events_fd7d695.o: ../../JuceLibraryCode/include_juce_events.cpp $(JUCE_OBJDIR)/include_juce_events_fd7d695.o: ../../JuceLibraryCode/include_juce_events.cpp
-$(V_AT)mkdir -p $(JUCE_OBJDIR) -$(V_AT)mkdir -p $(JUCE_OBJDIR)
@echo "Compiling include_juce_events.cpp" @echo "Compiling include_juce_events.cpp"

View file

@ -141,6 +141,10 @@
isa = PBXBuildFile; isa = PBXBuildFile;
fileRef = 5EF1D381F42AA8764597F189; fileRef = 5EF1D381F42AA8764597F189;
}; };
A5F0B3B7175766C8AF1D6C3E = {
isa = PBXBuildFile;
fileRef = 36689CA4EFC2AF183A0848AE;
};
7DE202DC1D876F49266D9E7D = { 7DE202DC1D876F49266D9E7D = {
isa = PBXBuildFile; isa = PBXBuildFile;
fileRef = 8290D7BAC160B3A56B66891A; fileRef = 8290D7BAC160B3A56B66891A;
@ -221,6 +225,13 @@
path = System/Library/Frameworks/CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework;
sourceTree = SDKROOT; sourceTree = SDKROOT;
}; };
36689CA4EFC2AF183A0848AE = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.objcpp;
name = "include_juce_dsp.mm";
path = "../../JuceLibraryCode/include_juce_dsp.mm";
sourceTree = "SOURCE_ROOT";
};
37E4D5C341406B7072120006 = { 37E4D5C341406B7072120006 = {
isa = PBXFileReference; isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.objcpp; lastKnownFileType = sourcecode.cpp.objcpp;
@ -417,6 +428,13 @@
path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm";
sourceTree = "SOURCE_ROOT"; sourceTree = "SOURCE_ROOT";
}; };
9320A145F2A8ACD687D6608E = {
isa = PBXFileReference;
lastKnownFileType = file;
name = "juce_dsp";
path = "../../../../modules/juce_dsp";
sourceTree = "SOURCE_ROOT";
};
938AE72315C6C93949F6220E = { 938AE72315C6C93949F6220E = {
isa = PBXFileReference; isa = PBXFileReference;
lastKnownFileType = file; lastKnownFileType = file;
@ -668,6 +686,7 @@
3D57FE2A8877F12A61054726, 3D57FE2A8877F12A61054726,
FA21631C5536EA3DF55C7FA6, FA21631C5536EA3DF55C7FA6,
B86B918291E1090C6A720971, B86B918291E1090C6A720971,
9320A145F2A8ACD687D6608E,
59842A98E5EBBC54B50C04CD, 59842A98E5EBBC54B50C04CD,
94CB96C8E4B51F52776C2638, 94CB96C8E4B51F52776C2638,
938AE72315C6C93949F6220E, 938AE72315C6C93949F6220E,
@ -691,6 +710,7 @@
683CEE986A2467C850FE99E6, 683CEE986A2467C850FE99E6,
B8E24A5CEE6B7055537725CF, B8E24A5CEE6B7055537725CF,
5EF1D381F42AA8764597F189, 5EF1D381F42AA8764597F189,
36689CA4EFC2AF183A0848AE,
8290D7BAC160B3A56B66891A, 8290D7BAC160B3A56B66891A,
82800DBA287EF4BAB13B42FB, 82800DBA287EF4BAB13B42FB,
8FE7B37CDE0818DB27BDDEBD, 8FE7B37CDE0818DB27BDDEBD,
@ -794,6 +814,7 @@
"JUCE_MODULE_AVAILABLE_juce_core=1", "JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1", "JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_MODULE_AVAILABLE_juce_data_structures=1", "JUCE_MODULE_AVAILABLE_juce_data_structures=1",
"JUCE_MODULE_AVAILABLE_juce_dsp=1",
"JUCE_MODULE_AVAILABLE_juce_events=1", "JUCE_MODULE_AVAILABLE_juce_events=1",
"JUCE_MODULE_AVAILABLE_juce_graphics=1", "JUCE_MODULE_AVAILABLE_juce_graphics=1",
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1", "JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
@ -805,7 +826,7 @@
"JUCE_DIRECTSOUND=1", "JUCE_DIRECTSOUND=1",
"JUCE_ALSA=1", "JUCE_ALSA=1",
"JUCE_USE_FLAC=0", "JUCE_USE_FLAC=0",
"JUCE_USE_OGGVORBIS=0", "JUCE_USE_OGGVORBIS=1",
"JUCE_PLUGINHOST_VST3=1", "JUCE_PLUGINHOST_VST3=1",
"JUCE_PLUGINHOST_AU=1", "JUCE_PLUGINHOST_AU=1",
"JUCE_PLUGINHOST_LADSPA=1", "JUCE_PLUGINHOST_LADSPA=1",
@ -871,6 +892,7 @@
"JUCE_MODULE_AVAILABLE_juce_core=1", "JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1", "JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_MODULE_AVAILABLE_juce_data_structures=1", "JUCE_MODULE_AVAILABLE_juce_data_structures=1",
"JUCE_MODULE_AVAILABLE_juce_dsp=1",
"JUCE_MODULE_AVAILABLE_juce_events=1", "JUCE_MODULE_AVAILABLE_juce_events=1",
"JUCE_MODULE_AVAILABLE_juce_graphics=1", "JUCE_MODULE_AVAILABLE_juce_graphics=1",
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1", "JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
@ -882,7 +904,7 @@
"JUCE_DIRECTSOUND=1", "JUCE_DIRECTSOUND=1",
"JUCE_ALSA=1", "JUCE_ALSA=1",
"JUCE_USE_FLAC=0", "JUCE_USE_FLAC=0",
"JUCE_USE_OGGVORBIS=0", "JUCE_USE_OGGVORBIS=1",
"JUCE_PLUGINHOST_VST3=1", "JUCE_PLUGINHOST_VST3=1",
"JUCE_PLUGINHOST_AU=1", "JUCE_PLUGINHOST_AU=1",
"JUCE_PLUGINHOST_LADSPA=1", "JUCE_PLUGINHOST_LADSPA=1",
@ -1058,6 +1080,7 @@
76A80851698FC773D2479B4E, 76A80851698FC773D2479B4E,
E4A926EF695823F0F13268FF, E4A926EF695823F0F13268FF,
A09E93F1B354E1FF8B3E9ABE, A09E93F1B354E1FF8B3E9ABE,
A5F0B3B7175766C8AF1D6C3E,
7DE202DC1D876F49266D9E7D, 7DE202DC1D876F49266D9E7D,
075C54DDDBDEA5AAD2F60154, 075C54DDDBDEA5AAD2F60154,
2C3D221D2AA87F07B3F1044D, 2C3D221D2AA87F07B3F1044D,

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -106,7 +106,7 @@
<ClCompile> <ClCompile>
<Optimization>Full</Optimization> <Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -1025,6 +1025,72 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
@ -1919,6 +1985,7 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/>
@ -2346,6 +2413,40 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/>

View file

@ -266,6 +266,27 @@
<Filter Include="JUCE Modules\juce_data_structures"> <Filter Include="JUCE Modules\juce_data_structures">
<UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier> <UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="JUCE Modules\juce_dsp\containers">
<UniqueIdentifier>{53CF03D3-988B-CD28-9130-CE08FDCEF7E9}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\filter_design">
<UniqueIdentifier>{29C6FE02-507E-F3FE-16CD-74D84842C1EA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\frequency">
<UniqueIdentifier>{8001BD68-125B-E392-8D3B-1F9C9520A65A}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\maths">
<UniqueIdentifier>{EDC17061-CFA0-8EA0-0ADA-90F31C2FB0F2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\native">
<UniqueIdentifier>{B813BD14-6565-2525-9AC3-E3AA48EDDA85}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\processors">
<UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp">
<UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_events\broadcasters"> <Filter Include="JUCE Modules\juce_events\broadcasters">
<UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier> <UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier>
</Filter> </Filter>
@ -1381,6 +1402,75 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.mm">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClCompile> </ClCompile>
@ -2359,6 +2449,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
@ -3636,6 +3729,108 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClInclude> </ClInclude>

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -106,7 +106,7 @@
<ClCompile> <ClCompile>
<Optimization>Full</Optimization> <Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -1025,6 +1025,72 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
@ -1919,6 +1985,7 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/>
@ -2346,6 +2413,40 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/>

View file

@ -266,6 +266,27 @@
<Filter Include="JUCE Modules\juce_data_structures"> <Filter Include="JUCE Modules\juce_data_structures">
<UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier> <UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="JUCE Modules\juce_dsp\containers">
<UniqueIdentifier>{53CF03D3-988B-CD28-9130-CE08FDCEF7E9}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\filter_design">
<UniqueIdentifier>{29C6FE02-507E-F3FE-16CD-74D84842C1EA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\frequency">
<UniqueIdentifier>{8001BD68-125B-E392-8D3B-1F9C9520A65A}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\maths">
<UniqueIdentifier>{EDC17061-CFA0-8EA0-0ADA-90F31C2FB0F2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\native">
<UniqueIdentifier>{B813BD14-6565-2525-9AC3-E3AA48EDDA85}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\processors">
<UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp">
<UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_events\broadcasters"> <Filter Include="JUCE Modules\juce_events\broadcasters">
<UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier> <UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier>
</Filter> </Filter>
@ -1381,6 +1402,75 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.mm">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClCompile> </ClCompile>
@ -2359,6 +2449,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
@ -3636,6 +3729,108 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClInclude> </ClInclude>

View file

@ -64,7 +64,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -106,7 +106,7 @@
<ClCompile> <ClCompile>
<Optimization>Full</Optimization> <Optimization>Full</Optimization>
<AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=0;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_REPORT_APP_USAGE=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60000;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_USE_CAMERA=0;JUCE_STANDALONE_APPLICATION=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<RuntimeTypeInfo>true</RuntimeTypeInfo> <RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/> <PrecompiledHeader/>
@ -1025,6 +1025,72 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
@ -1919,6 +1985,7 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_graphics.cpp"/>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/> <ClCompile Include="..\..\JuceLibraryCode\include_juce_gui_basics.cpp"/>
@ -2346,6 +2413,40 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueTreeSynchroniser.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\values\juce_ValueWithDefault.h"/>
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionListener.h"/>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_AsyncUpdater.h"/>

View file

@ -266,6 +266,27 @@
<Filter Include="JUCE Modules\juce_data_structures"> <Filter Include="JUCE Modules\juce_data_structures">
<UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier> <UniqueIdentifier>{911F0159-A7A8-4A43-3FD4-154F62F4A44B}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="JUCE Modules\juce_dsp\containers">
<UniqueIdentifier>{53CF03D3-988B-CD28-9130-CE08FDCEF7E9}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\filter_design">
<UniqueIdentifier>{29C6FE02-507E-F3FE-16CD-74D84842C1EA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\frequency">
<UniqueIdentifier>{8001BD68-125B-E392-8D3B-1F9C9520A65A}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\maths">
<UniqueIdentifier>{EDC17061-CFA0-8EA0-0ADA-90F31C2FB0F2}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\native">
<UniqueIdentifier>{B813BD14-6565-2525-9AC3-E3AA48EDDA85}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp\processors">
<UniqueIdentifier>{DDF4BA73-8578-406D-21F8-06B9BC70BFEA}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_dsp">
<UniqueIdentifier>{5DD60D0E-B16A-0BED-EDC4-C56E6960CA9E}</UniqueIdentifier>
</Filter>
<Filter Include="JUCE Modules\juce_events\broadcasters"> <Filter Include="JUCE Modules\juce_events\broadcasters">
<UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier> <UniqueIdentifier>{9D5816C2-E2B2-2E3F-B095-AC8BD1100D29}</UniqueIdentifier>
</Filter> </Filter>
@ -1381,6 +1402,75 @@
<ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm"> <ClCompile Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.mm">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_test.cpp">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.cpp">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT_test.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.cpp">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix_test.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.cpp">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.cpp">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain_test.cpp">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.cpp">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_dsp\juce_dsp.mm">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp"> <ClCompile Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.cpp">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClCompile> </ClCompile>
@ -2359,6 +2449,9 @@
<ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_dsp.cpp">
<Filter>JUCE Library Code</Filter>
</ClCompile>
<ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp"> <ClCompile Include="..\..\JuceLibraryCode\include_juce_events.cpp">
<Filter>JUCE Library Code</Filter> <Filter>JUCE Library Code</Filter>
</ClCompile> </ClCompile>
@ -3636,6 +3729,108 @@
<ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h"> <ClInclude Include="..\..\..\..\modules\juce_data_structures\juce_data_structures.h">
<Filter>JUCE Modules\juce_data_structures</Filter> <Filter>JUCE Modules\juce_data_structures</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_AudioBlock.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\containers\juce_SIMDRegister_Impl.h">
<Filter>JUCE Modules\juce_dsp\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\filter_design\juce_FilterDesign.h">
<Filter>JUCE Modules\juce_dsp\filter_design</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Convolution.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_FFT.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\frequency\juce_Windowing.h">
<Filter>JUCE Modules\juce_dsp\frequency</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_FastMathApproximations.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LogRampedValue.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_LookupTable.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Matrix.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Phase.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_Polynomial.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\maths\juce_SpecialFunctions.h">
<Filter>JUCE Modules\juce_dsp\maths</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_avx_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_fallback_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_neon_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\native\juce_sse_SIMDNativeOps.h">
<Filter>JUCE Modules\juce_dsp\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Bias.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_FIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Gain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_IIRFilter_Impl.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_LadderFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oscillator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Oversampling.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessContext.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorChain.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorDuplicator.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_ProcessorWrapper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_Reverb.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_StateVariableFilter.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\processors\juce_WaveShaper.h">
<Filter>JUCE Modules\juce_dsp\processors</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_dsp\juce_dsp.h">
<Filter>JUCE Modules\juce_dsp</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h"> <ClInclude Include="..\..\..\..\modules\juce_events\broadcasters\juce_ActionBroadcaster.h">
<Filter>JUCE Modules\juce_events\broadcasters</Filter> <Filter>JUCE Modules\juce_events\broadcasters</Filter>
</ClInclude> </ClInclude>

View file

@ -145,6 +145,10 @@
isa = PBXBuildFile; isa = PBXBuildFile;
fileRef = 5EF1D381F42AA8764597F189; fileRef = 5EF1D381F42AA8764597F189;
}; };
A5F0B3B7175766C8AF1D6C3E = {
isa = PBXBuildFile;
fileRef = 36689CA4EFC2AF183A0848AE;
};
7DE202DC1D876F49266D9E7D = { 7DE202DC1D876F49266D9E7D = {
isa = PBXBuildFile; isa = PBXBuildFile;
fileRef = 8290D7BAC160B3A56B66891A; fileRef = 8290D7BAC160B3A56B66891A;
@ -246,6 +250,13 @@
path = System/Library/Frameworks/CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework;
sourceTree = SDKROOT; sourceTree = SDKROOT;
}; };
36689CA4EFC2AF183A0848AE = {
isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.objcpp;
name = "include_juce_dsp.mm";
path = "../../JuceLibraryCode/include_juce_dsp.mm";
sourceTree = "SOURCE_ROOT";
};
37E4D5C341406B7072120006 = { 37E4D5C341406B7072120006 = {
isa = PBXFileReference; isa = PBXFileReference;
lastKnownFileType = sourcecode.cpp.objcpp; lastKnownFileType = sourcecode.cpp.objcpp;
@ -428,6 +439,13 @@
path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm";
sourceTree = "SOURCE_ROOT"; sourceTree = "SOURCE_ROOT";
}; };
9320A145F2A8ACD687D6608E = {
isa = PBXFileReference;
lastKnownFileType = file;
name = "juce_dsp";
path = "../../../../modules/juce_dsp";
sourceTree = "SOURCE_ROOT";
};
938AE72315C6C93949F6220E = { 938AE72315C6C93949F6220E = {
isa = PBXFileReference; isa = PBXFileReference;
lastKnownFileType = file; lastKnownFileType = file;
@ -679,6 +697,7 @@
3D57FE2A8877F12A61054726, 3D57FE2A8877F12A61054726,
FA21631C5536EA3DF55C7FA6, FA21631C5536EA3DF55C7FA6,
B86B918291E1090C6A720971, B86B918291E1090C6A720971,
9320A145F2A8ACD687D6608E,
59842A98E5EBBC54B50C04CD, 59842A98E5EBBC54B50C04CD,
94CB96C8E4B51F52776C2638, 94CB96C8E4B51F52776C2638,
938AE72315C6C93949F6220E, 938AE72315C6C93949F6220E,
@ -702,6 +721,7 @@
683CEE986A2467C850FE99E6, 683CEE986A2467C850FE99E6,
B8E24A5CEE6B7055537725CF, B8E24A5CEE6B7055537725CF,
5EF1D381F42AA8764597F189, 5EF1D381F42AA8764597F189,
36689CA4EFC2AF183A0848AE,
8290D7BAC160B3A56B66891A, 8290D7BAC160B3A56B66891A,
82800DBA287EF4BAB13B42FB, 82800DBA287EF4BAB13B42FB,
8FE7B37CDE0818DB27BDDEBD, 8FE7B37CDE0818DB27BDDEBD,
@ -808,6 +828,7 @@
"JUCE_MODULE_AVAILABLE_juce_core=1", "JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1", "JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_MODULE_AVAILABLE_juce_data_structures=1", "JUCE_MODULE_AVAILABLE_juce_data_structures=1",
"JUCE_MODULE_AVAILABLE_juce_dsp=1",
"JUCE_MODULE_AVAILABLE_juce_events=1", "JUCE_MODULE_AVAILABLE_juce_events=1",
"JUCE_MODULE_AVAILABLE_juce_graphics=1", "JUCE_MODULE_AVAILABLE_juce_graphics=1",
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1", "JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
@ -819,7 +840,7 @@
"JUCE_DIRECTSOUND=1", "JUCE_DIRECTSOUND=1",
"JUCE_ALSA=1", "JUCE_ALSA=1",
"JUCE_USE_FLAC=0", "JUCE_USE_FLAC=0",
"JUCE_USE_OGGVORBIS=0", "JUCE_USE_OGGVORBIS=1",
"JUCE_PLUGINHOST_VST3=1", "JUCE_PLUGINHOST_VST3=1",
"JUCE_PLUGINHOST_AU=1", "JUCE_PLUGINHOST_AU=1",
"JUCE_PLUGINHOST_LADSPA=1", "JUCE_PLUGINHOST_LADSPA=1",
@ -886,6 +907,7 @@
"JUCE_MODULE_AVAILABLE_juce_core=1", "JUCE_MODULE_AVAILABLE_juce_core=1",
"JUCE_MODULE_AVAILABLE_juce_cryptography=1", "JUCE_MODULE_AVAILABLE_juce_cryptography=1",
"JUCE_MODULE_AVAILABLE_juce_data_structures=1", "JUCE_MODULE_AVAILABLE_juce_data_structures=1",
"JUCE_MODULE_AVAILABLE_juce_dsp=1",
"JUCE_MODULE_AVAILABLE_juce_events=1", "JUCE_MODULE_AVAILABLE_juce_events=1",
"JUCE_MODULE_AVAILABLE_juce_graphics=1", "JUCE_MODULE_AVAILABLE_juce_graphics=1",
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1", "JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
@ -897,7 +919,7 @@
"JUCE_DIRECTSOUND=1", "JUCE_DIRECTSOUND=1",
"JUCE_ALSA=1", "JUCE_ALSA=1",
"JUCE_USE_FLAC=0", "JUCE_USE_FLAC=0",
"JUCE_USE_OGGVORBIS=0", "JUCE_USE_OGGVORBIS=1",
"JUCE_PLUGINHOST_VST3=1", "JUCE_PLUGINHOST_VST3=1",
"JUCE_PLUGINHOST_AU=1", "JUCE_PLUGINHOST_AU=1",
"JUCE_PLUGINHOST_LADSPA=1", "JUCE_PLUGINHOST_LADSPA=1",
@ -1077,6 +1099,7 @@
76A80851698FC773D2479B4E, 76A80851698FC773D2479B4E,
E4A926EF695823F0F13268FF, E4A926EF695823F0F13268FF,
A09E93F1B354E1FF8B3E9ABE, A09E93F1B354E1FF8B3E9ABE,
A5F0B3B7175766C8AF1D6C3E,
7DE202DC1D876F49266D9E7D, 7DE202DC1D876F49266D9E7D,
075C54DDDBDEA5AAD2F60154, 075C54DDDBDEA5AAD2F60154,
2C3D221D2AA87F07B3F1044D, 2C3D221D2AA87F07B3F1044D,

View file

@ -48,5 +48,6 @@ target_compile_definitions(AudioPluginHost PRIVATE
target_link_libraries(AudioPluginHost PRIVATE target_link_libraries(AudioPluginHost PRIVATE
juce::juce_audio_utils juce::juce_audio_utils
juce::juce_cryptography juce::juce_cryptography
juce::juce_dsp
juce::juce_opengl juce::juce_opengl
juce::juce_video) juce::juce_video)

View file

@ -21,6 +21,7 @@
#include <juce_core/juce_core.h> #include <juce_core/juce_core.h>
#include <juce_cryptography/juce_cryptography.h> #include <juce_cryptography/juce_cryptography.h>
#include <juce_data_structures/juce_data_structures.h> #include <juce_data_structures/juce_data_structures.h>
#include <juce_dsp/juce_dsp.h>
#include <juce_events/juce_events.h> #include <juce_events/juce_events.h>
#include <juce_graphics/juce_graphics.h> #include <juce_graphics/juce_graphics.h>
#include <juce_gui_basics/juce_gui_basics.h> #include <juce_gui_basics/juce_gui_basics.h>

View file

@ -0,0 +1,8 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include <juce_dsp/juce_dsp.cpp>

View file

@ -0,0 +1,8 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include <juce_dsp/juce_dsp.mm>

View file

@ -20,109 +20,127 @@
#include "InternalPlugins.h" #include "InternalPlugins.h"
#include "PluginGraph.h" #include "PluginGraph.h"
#include "../../../../examples/Plugins/AUv3SynthPluginDemo.h"
#include "../../../../examples/Plugins/ArpeggiatorPluginDemo.h"
#include "../../../../examples/Plugins/AudioPluginDemo.h"
#include "../../../../examples/Plugins/DSPModulePluginDemo.h"
#include "../../../../examples/Plugins/GainPluginDemo.h"
#include "../../../../examples/Plugins/MidiLoggerPluginDemo.h" #include "../../../../examples/Plugins/MidiLoggerPluginDemo.h"
#include "../../../../examples/Plugins/MultiOutSynthPluginDemo.h"
#include "../../../../examples/Plugins/NoiseGatePluginDemo.h"
#include "../../../../examples/Plugins/SamplerPluginDemo.h"
#include "../../../../examples/Plugins/SurroundPluginDemo.h"
//============================================================================== //==============================================================================
class InternalPlugin : public AudioPluginInstance class InternalPlugin : public AudioPluginInstance
{ {
protected:
InternalPlugin (const PluginDescription& descr,
const AudioChannelSet& channelSetToUse = AudioChannelSet::stereo())
: AudioPluginInstance (getBusProperties (descr.numInputChannels == 0, channelSetToUse)),
name (descr.fileOrIdentifier.upToFirstOccurrenceOf (":", false, false)),
state (descr.fileOrIdentifier.fromFirstOccurrenceOf (":", false, false)),
isGenerator (descr.numInputChannels == 0),
hasMidi (descr.isInstrument),
channelSet (channelSetToUse)
{
jassert (channelSetToUse.size() == descr.numOutputChannels);
}
public: public:
//============================================================================== explicit InternalPlugin (std::unique_ptr<AudioProcessor> innerIn)
const String getName() const override { return name; } : inner (std::move (innerIn))
double getTailLengthSeconds() const override { return 0.0; }
bool acceptsMidi() const override { return hasMidi; }
bool producesMidi() const override { return hasMidi; }
AudioProcessorEditor* createEditor() override { return nullptr; }
bool hasEditor() const override { return false; }
int getNumPrograms() override { return 0; }
int getCurrentProgram() override { return 0; }
void setCurrentProgram (int) override {}
const String getProgramName (int) override { return {}; }
void changeProgramName (int, const String&) override {}
void getStateInformation (juce::MemoryBlock&) override {}
void setStateInformation (const void*, int) override {}
//==============================================================================
bool isBusesLayoutSupported (const BusesLayout& layout) const override
{ {
if (! isGenerator) jassert (inner != nullptr);
if (layout.getMainOutputChannelSet() != channelSet)
return false;
if (layout.getMainInputChannelSet() != channelSet) for (auto isInput : { true, false })
return false; matchChannels (isInput);
return true; setBusesLayout (inner->getBusesLayout());
} }
//==============================================================================
const String getName() const override { return inner->getName(); }
StringArray getAlternateDisplayNames() const override { return inner->getAlternateDisplayNames(); }
double getTailLengthSeconds() const override { return inner->getTailLengthSeconds(); }
bool acceptsMidi() const override { return inner->acceptsMidi(); }
bool producesMidi() const override { return inner->producesMidi(); }
AudioProcessorEditor* createEditor() override { return inner->createEditor(); }
bool hasEditor() const override { return inner->hasEditor(); }
int getNumPrograms() override { return inner->getNumPrograms(); }
int getCurrentProgram() override { return inner->getCurrentProgram(); }
void setCurrentProgram (int i) override { inner->setCurrentProgram (i); }
const String getProgramName (int i) override { return inner->getProgramName (i); }
void changeProgramName (int i, const String& n) override { inner->changeProgramName (i, n); }
void getStateInformation (juce::MemoryBlock& b) override { inner->getStateInformation (b); }
void setStateInformation (const void* d, int s) override { inner->setStateInformation (d, s); }
void getCurrentProgramStateInformation (juce::MemoryBlock& b) override { inner->getCurrentProgramStateInformation (b); }
void setCurrentProgramStateInformation (const void* d, int s) override { inner->setCurrentProgramStateInformation (d, s); }
void prepareToPlay (double sr, int bs) override { inner->setRateAndBufferSizeDetails (sr, bs); inner->prepareToPlay (sr, bs); }
void releaseResources() override { inner->releaseResources(); }
void memoryWarningReceived() override { inner->memoryWarningReceived(); }
void processBlock (AudioBuffer<float>& a, MidiBuffer& m) override { inner->processBlock (a, m); }
void processBlock (AudioBuffer<double>& a, MidiBuffer& m) override { inner->processBlock (a, m); }
void processBlockBypassed (AudioBuffer<float>& a, MidiBuffer& m) override { inner->processBlockBypassed (a, m); }
void processBlockBypassed (AudioBuffer<double>& a, MidiBuffer& m) override { inner->processBlockBypassed (a, m); }
bool supportsDoublePrecisionProcessing() const override { return inner->supportsDoublePrecisionProcessing(); }
bool supportsMPE() const override { return inner->supportsMPE(); }
bool isMidiEffect() const override { return inner->isMidiEffect(); }
void reset() override { inner->reset(); }
void setNonRealtime (bool b) noexcept override { inner->setNonRealtime (b); }
void refreshParameterList() override { inner->refreshParameterList(); }
void numChannelsChanged() override { inner->numChannelsChanged(); }
void numBusesChanged() override { inner->numBusesChanged(); }
void processorLayoutsChanged() override { inner->processorLayoutsChanged(); }
void setPlayHead (AudioPlayHead* p) override { inner->setPlayHead (p); }
void updateTrackProperties (const TrackProperties& p) override { inner->updateTrackProperties (p); }
bool isBusesLayoutSupported (const BusesLayout& layout) const override { return inner->checkBusesLayoutSupported (layout); }
bool canAddBus (bool) const override { return true; }
bool canRemoveBus (bool) const override { return true; }
//============================================================================== //==============================================================================
void fillInPluginDescription (PluginDescription& description) const override void fillInPluginDescription (PluginDescription& description) const override
{ {
description = getPluginDescription (name + ":" + state, description = getPluginDescription (*inner);
isGenerator,
hasMidi,
channelSet);
} }
static PluginDescription getPluginDescription (const String& identifier, private:
bool registerAsGenerator, static PluginDescription getPluginDescription (const AudioProcessor& proc)
bool acceptsMidi,
const AudioChannelSet& channelSetToUse
= AudioChannelSet::stereo())
{ {
PluginDescription descr; const auto ins = proc.getTotalNumInputChannels();
auto pluginName = identifier.upToFirstOccurrenceOf (":", false, false); const auto outs = proc.getTotalNumOutputChannels();
auto pluginState = identifier.fromFirstOccurrenceOf (":", false, false); const auto identifier = proc.getName();
const auto registerAsGenerator = ins == 0;
const auto acceptsMidi = proc.acceptsMidi();
descr.name = pluginName; PluginDescription descr;
descr.descriptiveName = pluginName;
descr.pluginFormatName = "Internal"; descr.name = identifier;
descr.descriptiveName = identifier;
descr.pluginFormatName = InternalPluginFormat::getIdentifier();
descr.category = (registerAsGenerator ? (acceptsMidi ? "Synth" : "Generator") : "Effect"); descr.category = (registerAsGenerator ? (acceptsMidi ? "Synth" : "Generator") : "Effect");
descr.manufacturerName = "JUCE"; descr.manufacturerName = "JUCE";
descr.version = ProjectInfo::versionString; descr.version = ProjectInfo::versionString;
descr.fileOrIdentifier = pluginName + ":" + pluginState; descr.fileOrIdentifier = identifier;
descr.uid = pluginName.hashCode(); descr.uid = identifier.hashCode();
descr.isInstrument = (acceptsMidi && registerAsGenerator); descr.isInstrument = (acceptsMidi && registerAsGenerator);
descr.numInputChannels = (registerAsGenerator ? 0 : channelSetToUse.size()); descr.numInputChannels = ins;
descr.numOutputChannels = channelSetToUse.size(); descr.numOutputChannels = outs;
return descr; return descr;
} }
private:
static BusesProperties getBusProperties (bool registerAsGenerator, void matchChannels (bool isInput)
const AudioChannelSet& channelSetToUse)
{ {
return registerAsGenerator ? BusesProperties().withOutput ("Output", channelSetToUse) const auto inBuses = inner->getBusCount (isInput);
: BusesProperties().withInput ("Input", channelSetToUse)
.withOutput ("Output", channelSetToUse); while (getBusCount (isInput) < inBuses)
addBus (isInput);
while (inBuses < getBusCount (isInput))
removeBus (isInput);
} }
//============================================================================== std::unique_ptr<AudioProcessor> inner;
String name, state;
bool isGenerator, hasMidi;
AudioChannelSet channelSet;
//============================================================================== //==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InternalPlugin) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InternalPlugin)
}; };
//============================================================================== //==============================================================================
class SineWaveSynth : public InternalPlugin class SineWaveSynth : public AudioProcessor
{ {
public: public:
SineWaveSynth (const PluginDescription& descr) : InternalPlugin (descr) SineWaveSynth()
: AudioProcessor (BusesProperties().withOutput ("Output", AudioChannelSet::stereo()))
{ {
const int numVoices = 8; const int numVoices = 8;
@ -139,11 +157,6 @@ public:
return "Sine Wave Synth"; return "Sine Wave Synth";
} }
static PluginDescription getPluginDescription()
{
return InternalPlugin::getPluginDescription (getIdentifier(), true, true);
}
//============================================================================== //==============================================================================
void prepareToPlay (double newSampleRate, int) override void prepareToPlay (double newSampleRate, int) override
{ {
@ -162,7 +175,21 @@ public:
buffer.applyGain (0.8f); buffer.applyGain (0.8f);
} }
using InternalPlugin::processBlock; using AudioProcessor::processBlock;
const String getName() const override { return getIdentifier(); }
double getTailLengthSeconds() const override { return 0.0; }
bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return true; }
AudioProcessorEditor* createEditor() override { return nullptr; }
bool hasEditor() const override { return false; }
int getNumPrograms() override { return 1; }
int getCurrentProgram() override { return 0; }
void setCurrentProgram (int) override {}
const String getProgramName (int) override { return {}; }
void changeProgramName (int, const String&) override {}
void getStateInformation (juce::MemoryBlock&) override {}
void setStateInformation (const void*, int) override {}
private: private:
//============================================================================== //==============================================================================
@ -285,10 +312,12 @@ private:
}; };
//============================================================================== //==============================================================================
class ReverbPlugin : public InternalPlugin class ReverbPlugin : public AudioProcessor
{ {
public: public:
ReverbPlugin (const PluginDescription& descr) : InternalPlugin (descr) ReverbPlugin()
: AudioProcessor (BusesProperties().withInput ("Input", AudioChannelSet::stereo())
.withOutput ("Output", AudioChannelSet::stereo()))
{} {}
static String getIdentifier() static String getIdentifier()
@ -296,11 +325,6 @@ public:
return "Reverb"; return "Reverb";
} }
static PluginDescription getPluginDescription()
{
return InternalPlugin::getPluginDescription (getIdentifier(), false, false);
}
void prepareToPlay (double newSampleRate, int) override void prepareToPlay (double newSampleRate, int) override
{ {
reverb.setSampleRate (newSampleRate); reverb.setSampleRate (newSampleRate);
@ -328,53 +352,82 @@ public:
buffer.clear (ch, 0, buffer.getNumSamples()); buffer.clear (ch, 0, buffer.getNumSamples());
} }
using InternalPlugin::processBlock; using AudioProcessor::processBlock;
const String getName() const override { return getIdentifier(); }
double getTailLengthSeconds() const override { return 0.0; }
bool acceptsMidi() const override { return false; }
bool producesMidi() const override { return false; }
AudioProcessorEditor* createEditor() override { return nullptr; }
bool hasEditor() const override { return false; }
int getNumPrograms() override { return 1; }
int getCurrentProgram() override { return 0; }
void setCurrentProgram (int) override {}
const String getProgramName (int) override { return {}; }
void changeProgramName (int, const String&) override {}
void getStateInformation (juce::MemoryBlock&) override {}
void setStateInformation (const void*, int) override {}
private: private:
Reverb reverb; Reverb reverb;
}; };
//============================================================================== //==============================================================================
InternalPluginFormat::InternalPluginFormat()
InternalPluginFormat::InternalPluginFactory::InternalPluginFactory (const std::initializer_list<Constructor>& constructorsIn)
: constructors (constructorsIn),
descriptions ([&]
{
std::vector<PluginDescription> result;
for (const auto& constructor : constructors)
result.push_back (constructor()->getPluginDescription());
return result;
}())
{}
std::unique_ptr<AudioPluginInstance> InternalPluginFormat::InternalPluginFactory::createInstance (const String& name) const
{ {
{ const auto begin = descriptions.begin();
AudioProcessorGraph::AudioGraphIOProcessor p (AudioProcessorGraph::AudioGraphIOProcessor::audioOutputNode); const auto it = std::find_if (begin,
p.fillInPluginDescription (audioOutDesc); descriptions.end(),
} [&] (const PluginDescription& desc) { return name == desc.name; });
{ if (it == descriptions.end())
AudioProcessorGraph::AudioGraphIOProcessor p (AudioProcessorGraph::AudioGraphIOProcessor::audioInputNode); return nullptr;
p.fillInPluginDescription (audioInDesc);
}
{ const auto index = (size_t) std::distance (begin, it);
AudioProcessorGraph::AudioGraphIOProcessor p (AudioProcessorGraph::AudioGraphIOProcessor::midiInputNode); return constructors[index]();
p.fillInPluginDescription (midiInDesc); }
}
{ InternalPluginFormat::InternalPluginFormat()
AudioProcessorGraph::AudioGraphIOProcessor p (AudioProcessorGraph::AudioGraphIOProcessor::midiOutputNode); : factory {
p.fillInPluginDescription (midiOutDesc); [] { return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::audioInputNode); },
} [] { return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::midiInputNode); },
[] { return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::audioOutputNode); },
[] { return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::midiOutputNode); },
{ [] { return std::make_unique<InternalPlugin> (std::make_unique<SineWaveSynth>()); },
MidiLoggerPluginDemoProcessor p; [] { return std::make_unique<InternalPlugin> (std::make_unique<ReverbPlugin>()); },
p.fillInPluginDescription (midiMonitorDesc);
[] { return std::make_unique<InternalPlugin> (std::make_unique<AUv3SynthProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<Arpeggiator>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<DspModulePluginDemoAudioProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<GainProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<JuceDemoPluginAudioProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<MidiLoggerPluginDemoProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<MultiOutSynth>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<NoiseGate>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<SamplerAudioProcessor>()); },
[] { return std::make_unique<InternalPlugin> (std::make_unique<SurroundProcessor>()); }
} }
{
} }
std::unique_ptr<AudioPluginInstance> InternalPluginFormat::createInstance (const String& name) std::unique_ptr<AudioPluginInstance> InternalPluginFormat::createInstance (const String& name)
{ {
if (name == audioOutDesc.name) return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::audioOutputNode); return factory.createInstance (name);
if (name == audioInDesc.name) return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::audioInputNode);
if (name == midiInDesc.name) return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::midiInputNode);
if (name == midiOutDesc.name) return std::make_unique<AudioProcessorGraph::AudioGraphIOProcessor> (AudioProcessorGraph::AudioGraphIOProcessor::midiOutputNode);
if (name == midiMonitorDesc.name) return std::make_unique<MidiLoggerPluginDemoProcessor>();
if (name == SineWaveSynth::getIdentifier()) return std::make_unique<SineWaveSynth> (SineWaveSynth::getPluginDescription());
if (name == ReverbPlugin::getIdentifier()) return std::make_unique<ReverbPlugin> (ReverbPlugin::getPluginDescription());
return {};
} }
void InternalPluginFormat::createPluginInstance (const PluginDescription& desc, void InternalPluginFormat::createPluginInstance (const PluginDescription& desc,
@ -392,13 +445,7 @@ bool InternalPluginFormat::requiresUnblockedMessageThreadDuringCreation (const P
return false; return false;
} }
Array<PluginDescription> InternalPluginFormat::getAllTypes() const const std::vector<PluginDescription>& InternalPluginFormat::getAllTypes() const
{ {
return { audioInDesc, return factory.getDescriptions();
audioOutDesc,
midiInDesc,
midiOutDesc,
midiMonitorDesc,
SineWaveSynth::getPluginDescription(),
ReverbPlugin::getPluginDescription() };
} }

View file

@ -32,11 +32,11 @@ public:
InternalPluginFormat(); InternalPluginFormat();
//============================================================================== //==============================================================================
PluginDescription audioInDesc, audioOutDesc, midiInDesc, midiOutDesc, midiMonitorDesc; const std::vector<PluginDescription>& getAllTypes() const;
Array<PluginDescription> getAllTypes() const;
//============================================================================== //==============================================================================
String getName() const override { return "Internal"; } static String getIdentifier() { return "Internal"; }
String getName() const override { return getIdentifier(); }
bool fileMightContainThisPluginType (const String&) override { return true; } bool fileMightContainThisPluginType (const String&) override { return true; }
FileSearchPath getDefaultLocationsToSearch() override { return {}; } FileSearchPath getDefaultLocationsToSearch() override { return {}; }
bool canScanForPlugins() const override { return false; } bool canScanForPlugins() const override { return false; }
@ -48,6 +48,22 @@ public:
StringArray searchPathsForPlugins (const FileSearchPath&, bool, bool) override { return {}; } StringArray searchPathsForPlugins (const FileSearchPath&, bool, bool) override { return {}; }
private: private:
class InternalPluginFactory
{
public:
using Constructor = std::function<std::unique_ptr<AudioPluginInstance>()>;
explicit InternalPluginFactory (const std::initializer_list<Constructor>& constructorsIn);
const std::vector<PluginDescription>& getDescriptions() const { return descriptions; }
std::unique_ptr<AudioPluginInstance> createInstance (const String& name) const;
private:
const std::vector<Constructor> constructors;
const std::vector<PluginDescription> descriptions;
};
//============================================================================== //==============================================================================
void createPluginInstance (const PluginDescription&, void createPluginInstance (const PluginDescription&,
double initialSampleRate, int initialBufferSize, double initialSampleRate, int initialBufferSize,
@ -56,4 +72,6 @@ private:
std::unique_ptr<AudioPluginInstance> createInstance (const String& name); std::unique_ptr<AudioPluginInstance> createInstance (const String& name);
bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const override; bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const override;
InternalPluginFactory factory;
}; };

View file

@ -191,10 +191,12 @@ void PluginGraph::newDocument()
InternalPluginFormat internalFormat; InternalPluginFormat internalFormat;
addPlugin (internalFormat.audioInDesc, { 0.5, 0.1 }); jassert (internalFormat.getAllTypes().size() > 3);
addPlugin (internalFormat.midiInDesc, { 0.25, 0.1 });
addPlugin (internalFormat.audioOutDesc, { 0.5, 0.9 }); addPlugin (internalFormat.getAllTypes()[0], { 0.5, 0.1 });
addPlugin (internalFormat.midiOutDesc, { 0.25, 0.9 }); addPlugin (internalFormat.getAllTypes()[1], { 0.25, 0.1 });
addPlugin (internalFormat.getAllTypes()[2], { 0.5, 0.9 });
addPlugin (internalFormat.getAllTypes()[3], { 0.25, 0.9 });
MessageManager::callAsync ([this] MessageManager::callAsync ([this]
{ {

View file

@ -363,20 +363,26 @@ void MainHostWindow::addPluginsToMenu (PopupMenu& m)
int i = 0; int i = 0;
for (auto& t : internalTypes) for (auto& t : internalTypes)
m.addItem (++i, t.name + " (" + t.pluginFormatName + ")", m.addItem (++i, t.name + " (" + t.pluginFormatName + ")");
graphHolder->graph->getNodeForName (t.name) == nullptr);
} }
m.addSeparator(); m.addSeparator();
pluginDescriptions = knownPluginList.getTypes(); auto pluginDescriptionsToShow = knownPluginList.getTypes();
KnownPluginList::addToMenu (m, pluginDescriptions, pluginSortMethod);
// This avoids showing the internal types again later on in the list
pluginDescriptionsToShow.removeIf ([] (PluginDescription& desc)
{
return desc.pluginFormatName == InternalPluginFormat::getIdentifier();
});
KnownPluginList::addToMenu (m, pluginDescriptionsToShow, pluginSortMethod);
} }
PluginDescription MainHostWindow::getChosenType (const int menuID) const PluginDescription MainHostWindow::getChosenType (const int menuID) const
{ {
if (menuID >= 1 && menuID < 1 + internalTypes.size()) if (menuID >= 1 && menuID < (int) (1 + internalTypes.size()))
return internalTypes [menuID - 1]; return internalTypes[(size_t) (menuID - 1)];
return pluginDescriptions[KnownPluginList::getIndexChosenByMenu (pluginDescriptions, menuID)]; return pluginDescriptions[KnownPluginList::getIndexChosenByMenu (pluginDescriptions, menuID)];
} }

View file

@ -91,7 +91,7 @@ private:
AudioDeviceManager deviceManager; AudioDeviceManager deviceManager;
AudioPluginFormatManager formatManager; AudioPluginFormatManager formatManager;
Array<PluginDescription> internalTypes; std::vector<PluginDescription> internalTypes;
KnownPluginList knownPluginList; KnownPluginList knownPluginList;
KnownPluginList::SortMethod pluginSortMethod; KnownPluginList::SortMethod pluginSortMethod;
Array<PluginDescription> pluginDescriptions; Array<PluginDescription> pluginDescriptions;