mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-19 01:04:20 +00:00
Added the JUCE DSP module
This commit is contained in:
parent
281c2fe2af
commit
244a944857
212 changed files with 37051 additions and 1301 deletions
249
examples/DSPDemo/Source/MainComponent.cpp
Normal file
249
examples/DSPDemo/Source/MainComponent.cpp
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2017 - ROLI Ltd.
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 5 End-User License
|
||||
Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
|
||||
27th April 2017).
|
||||
|
||||
End User License Agreement: www.juce.com/juce-5-licence
|
||||
Privacy Policy: www.juce.com/juce-5-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "Main.h"
|
||||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
AudioPlayerHeader::AudioPlayerHeader()
|
||||
: thumbnailComp (DSPSamplesApplication::getApp().getDeviceManager(),
|
||||
DSPSamplesApplication::getApp().getFormatManager())
|
||||
{
|
||||
setOpaque (true);
|
||||
|
||||
addAndMakeVisible (loadButton);
|
||||
addAndMakeVisible (playButton);
|
||||
addAndMakeVisible (loopButton);
|
||||
|
||||
loadButton.addListener (this);
|
||||
playButton.addListener (this);
|
||||
|
||||
addAndMakeVisible (thumbnailComp);
|
||||
thumbnailComp.addChangeListener (this);
|
||||
|
||||
DSPSamplesApplication::getApp().getPlayState().addListener (this);
|
||||
loopButton.getToggleStateValue().referTo (DSPSamplesApplication::getApp().getLoopState());
|
||||
}
|
||||
|
||||
AudioPlayerHeader::~AudioPlayerHeader()
|
||||
{
|
||||
playButton.removeListener (this);
|
||||
loadButton.removeListener (this);
|
||||
loopButton.removeListener (this);
|
||||
|
||||
DSPSamplesApplication::getApp().getPlayState().removeListener (this);
|
||||
}
|
||||
|
||||
void AudioPlayerHeader::paint (Graphics& g)
|
||||
{
|
||||
g.setColour (getLookAndFeel().findColour (ResizableWindow::backgroundColourId).darker());
|
||||
g.fillRect (getLocalBounds());
|
||||
}
|
||||
|
||||
void AudioPlayerHeader::resized()
|
||||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
auto buttonBounds = bounds.removeFromLeft (jmin (250, bounds.getWidth() / 4));
|
||||
auto top = buttonBounds.removeFromTop (40);
|
||||
|
||||
loadButton.setBounds (top.removeFromLeft (buttonBounds.getWidth() / 2).reduced (10, 10));
|
||||
playButton.setBounds (top.reduced (10, 10));
|
||||
|
||||
loopButton.setSize (0, 25);
|
||||
loopButton.changeWidthToFitText();
|
||||
loopButton.setCentrePosition (buttonBounds.getCentre());
|
||||
|
||||
thumbnailComp.setBounds (bounds);
|
||||
}
|
||||
|
||||
void AudioPlayerHeader::buttonClicked (Button* button)
|
||||
{
|
||||
auto& app = DSPSamplesApplication::getApp();
|
||||
|
||||
if (button == &loadButton)
|
||||
{
|
||||
app.stop();
|
||||
|
||||
FileChooser fc ("Select an audio file...", File(), "*.wav;*.mp3;*.aif;");
|
||||
|
||||
if (fc.browseForFileToOpen())
|
||||
{
|
||||
auto f = fc.getResult();
|
||||
|
||||
if (! app.loadFile (f))
|
||||
NativeMessageBox::showOkCancelBox (AlertWindow::WarningIcon, "Error loading file", "Unable to load audio file", nullptr, nullptr);
|
||||
else
|
||||
thumbnailComp.setCurrentFile (f);
|
||||
}
|
||||
}
|
||||
else if (button == &playButton)
|
||||
{
|
||||
app.togglePlay();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayerHeader::changeListenerCallback (ChangeBroadcaster*)
|
||||
{
|
||||
auto& app = DSPSamplesApplication::getApp();
|
||||
|
||||
if (app.getPlayState().getValue())
|
||||
app.stop();
|
||||
|
||||
app.loadFile (thumbnailComp.getCurrentFile());
|
||||
}
|
||||
|
||||
void AudioPlayerHeader::valueChanged (Value& v)
|
||||
{
|
||||
playButton.setButtonText (v.getValue() ? "Stop" : "Play");
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
MainContentComponent::MainContentComponent()
|
||||
{
|
||||
setSize (1000, 800);
|
||||
setOpaque (true);
|
||||
|
||||
codeEditor.setEnabled (false);
|
||||
|
||||
auto currentDemoIndex = DSPSamplesApplication::getApp().getCurrentDemoIndex();
|
||||
demoList.setModel (this);
|
||||
demoList.updateContent();
|
||||
demoList.selectRow (currentDemoIndex);
|
||||
|
||||
addAndMakeVisible (header);
|
||||
addAndMakeVisible (demoList);
|
||||
addAndMakeVisible (codeEditor);
|
||||
|
||||
setupDemoColours();
|
||||
}
|
||||
|
||||
void MainContentComponent::paint (Graphics& g)
|
||||
{
|
||||
g.setColour (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));
|
||||
g.fillRect (getLocalBounds());
|
||||
}
|
||||
|
||||
void MainContentComponent::resized()
|
||||
{
|
||||
auto r = getLocalBounds();
|
||||
auto listWidth = jmin (250, r.getWidth() / 4);
|
||||
|
||||
header.setBounds (r.removeFromTop (80));
|
||||
|
||||
demoList.setBounds (r.removeFromLeft (listWidth));
|
||||
|
||||
r.removeFromTop (5);
|
||||
|
||||
if (parametersComponent != nullptr)
|
||||
parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0));
|
||||
|
||||
r.removeFromBottom (10);
|
||||
|
||||
codeEditor.setBounds (r);
|
||||
}
|
||||
|
||||
void MainContentComponent::paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool rowIsSelected)
|
||||
{
|
||||
Rectangle<int> r { 0, 0, width, height };
|
||||
auto& lf = getLookAndFeel();
|
||||
|
||||
g.setColour (lf.findColour (rowIsSelected ? static_cast<int> (TextEditor::highlightColourId) : static_cast<int> (ListBox::backgroundColourId)));
|
||||
g.fillRect (r);
|
||||
|
||||
if (auto demo = Demo::getList()[rowNumber])
|
||||
{
|
||||
g.setColour (lf.findColour (rowIsSelected ? static_cast<int> (TextEditor::highlightedTextColourId) : static_cast<int> (ListBox::textColourId)));
|
||||
g.drawFittedText (demo->name, r.reduced (10, 2), Justification::centredLeft, 1);
|
||||
}
|
||||
}
|
||||
|
||||
int MainContentComponent::getNumRows()
|
||||
{
|
||||
return Demo::getList().size();
|
||||
}
|
||||
|
||||
void MainContentComponent::selectedRowsChanged (int lastRowSelected)
|
||||
{
|
||||
if (lastRowSelected >= 0)
|
||||
{
|
||||
DSPSamplesApplication::getApp().setCurrentDemo (lastRowSelected);
|
||||
|
||||
if (auto demo = Demo::getList()[DSPSamplesApplication::getApp().getCurrentDemoIndex()])
|
||||
{
|
||||
if (demo->code.isNotEmpty())
|
||||
codeDocument.replaceAllContent (demo->code);
|
||||
|
||||
codeEditor.scrollToLine (0);
|
||||
initParameters();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainContentComponent::setupDemoColours()
|
||||
{
|
||||
auto& lf = getLookAndFeel();
|
||||
|
||||
lf.setColour (CodeEditorComponent::backgroundColourId, Colour (0xff263238));
|
||||
lf.setColour (CodeEditorComponent::lineNumberTextId, Colour (0xffaaaaaa));
|
||||
lf.setColour (CodeEditorComponent::lineNumberBackgroundId, Colour (0xff323e44));
|
||||
lf.setColour (CodeEditorComponent::highlightColourId, Colour (0xffe0ec65).withAlpha (0.5f));
|
||||
lf.setColour (ScrollBar::ColourIds::thumbColourId, Colour (0xffd0d8e0));
|
||||
|
||||
lf.setColour (TextEditor::highlightColourId, Colour (0xffe0ec65).withAlpha (0.75f));
|
||||
lf.setColour (TextEditor::highlightedTextColourId, Colours::black);
|
||||
|
||||
ScopedPointer<XmlElement> xml (XmlDocument::parse (BinaryData::EditorColourScheme_xml));
|
||||
|
||||
if (xml != nullptr)
|
||||
{
|
||||
auto colourSchemeTree = ValueTree::fromXml (*xml);
|
||||
auto& scheme = codeEditor.getColourScheme();
|
||||
|
||||
for (auto& type : scheme.types)
|
||||
{
|
||||
auto colour = colourSchemeTree.getChildWithProperty ("name", type.name);
|
||||
|
||||
if (colour.isValid())
|
||||
type.colour = Colour::fromString (colour ["colour"].toString());
|
||||
}
|
||||
}
|
||||
|
||||
codeEditor.setScrollbarThickness (6);
|
||||
}
|
||||
|
||||
void MainContentComponent::initParameters()
|
||||
{
|
||||
auto& parameters = DSPSamplesApplication::getApp().getCurrentDemoParameters();
|
||||
|
||||
if (parametersComponent != nullptr)
|
||||
parametersComponent = nullptr;
|
||||
|
||||
if (parameters.size() > 0)
|
||||
addAndMakeVisible (parametersComponent = new DemoParametersComponent (parameters));
|
||||
|
||||
resized();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue