From 3f3aaf4fc27fc03dd2694e63ae4f4b5ace8eeeb4 Mon Sep 17 00:00:00 2001 From: hellerve Date: Wed, 14 Jun 2017 00:29:05 -0400 Subject: [PATCH] noise_slider: added noise_slider --- noise_slider/Source/Main.cpp | 102 ++++++++++++++++++++++++++ noise_slider/Source/MainComponent.cpp | 53 +++++++++++++ noise_slider/noise_slider.jucer | 55 ++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 noise_slider/Source/Main.cpp create mode 100644 noise_slider/Source/MainComponent.cpp create mode 100644 noise_slider/noise_slider.jucer diff --git a/noise_slider/Source/Main.cpp b/noise_slider/Source/Main.cpp new file mode 100644 index 0000000..1c26345 --- /dev/null +++ b/noise_slider/Source/Main.cpp @@ -0,0 +1,102 @@ +/* + ============================================================================== + + This file was auto-generated! + + It contains the basic startup code for a Juce application. + + ============================================================================== +*/ + +#include "../JuceLibraryCode/JuceHeader.h" + +Component* createMainContentComponent(); + +//============================================================================== +class noise_sliderApplication : public JUCEApplication +{ +public: + //============================================================================== + noise_sliderApplication() {} + + const String getApplicationName() override { return ProjectInfo::projectName; } + const String getApplicationVersion() override { return ProjectInfo::versionString; } + bool moreThanOneInstanceAllowed() override { return true; } + + //============================================================================== + void initialise (const String& commandLine) override + { + // This method is where you should put your application's initialisation code.. + + mainWindow = new MainWindow (getApplicationName()); + } + + void shutdown() override + { + // Add your application's shutdown code here.. + + mainWindow = nullptr; // (deletes our window) + } + + //============================================================================== + void systemRequestedQuit() override + { + // This is called when the app is being asked to quit: you can ignore this + // request and let the app carry on running, or call quit() to allow the app to close. + quit(); + } + + void anotherInstanceStarted (const String& commandLine) override + { + // When another instance of the app is launched while this one is running, + // this method is invoked, and the commandLine parameter tells you what + // the other instance's command-line arguments were. + } + + //============================================================================== + /* + This class implements the desktop window that contains an instance of + our MainContentComponent class. + */ + class MainWindow : public DocumentWindow + { + public: + MainWindow (String name) : DocumentWindow (name, + Desktop::getInstance().getDefaultLookAndFeel() + .findColour (ResizableWindow::backgroundColourId), + DocumentWindow::allButtons) + { + setUsingNativeTitleBar (true); + setContentOwned (createMainContentComponent(), true); + setResizable (true, true); + + centreWithSize (getWidth(), getHeight()); + setVisible (true); + } + + void closeButtonPressed() override + { + // This is called when the user tries to close this window. Here, we'll just + // ask the app to quit when this happens, but you can change this to do + // whatever you need. + JUCEApplication::getInstance()->systemRequestedQuit(); + } + + /* Note: Be careful if you override any DocumentWindow methods - the base + class uses a lot of them, so by overriding you might break its functionality. + It's best to do all your work in your content component instead, but if + you really have to override any DocumentWindow methods, make sure your + subclass also calls the superclass's method. + */ + + private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) + }; + +private: + ScopedPointer mainWindow; +}; + +//============================================================================== +// This macro generates the main() routine that launches the app. +START_JUCE_APPLICATION (noise_sliderApplication) diff --git a/noise_slider/Source/MainComponent.cpp b/noise_slider/Source/MainComponent.cpp new file mode 100644 index 0000000..a18bf12 --- /dev/null +++ b/noise_slider/Source/MainComponent.cpp @@ -0,0 +1,53 @@ +#include "../JuceLibraryCode/JuceHeader.h" + +class MainContentComponent : public AudioAppComponent { +public: + MainContentComponent() { + setSize(800, 600); + setAudioChannels(2, 2); + random = Random(); + levelSlider.setRange (0.0, 0.25); + levelSlider.setTextBoxStyle (Slider::TextBoxRight, false, 100, 20); + levelLabel.setText ("Level", dontSendNotification); + + addAndMakeVisible (levelSlider); + addAndMakeVisible (levelLabel); + } + + ~MainContentComponent() { + shutdownAudio(); + } + + void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override {} + + void getNextAudioBlock (const AudioSourceChannelInfo& buf) override { + const float l = levelSlider.getValue(); + const float ls = l * 2.0f; + + for (int c = 0; c < buf.buffer->getNumChannels(); ++c) { + float* const b = buf.buffer->getWritePointer(c, buf.startSample); + + for (int s = 0; s < buf.numSamples; ++s) b[s] = random.nextFloat() * ls * l; + } + } + + void releaseResources() override{} + + void paint (Graphics& g) override { + g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId)); + } + + void resized() override { + levelLabel.setBounds (10, 10, 90, 20); + levelSlider.setBounds (100, 10, getWidth() - 110, 20); + } + + +private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainContentComponent) + Random random; + Slider levelSlider; + Label levelLabel; +}; + +Component* createMainContentComponent() { return new MainContentComponent(); } diff --git a/noise_slider/noise_slider.jucer b/noise_slider/noise_slider.jucer new file mode 100644 index 0000000..c1c95ad --- /dev/null +++ b/noise_slider/noise_slider.jucer @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +