diff --git a/loris_test/Source/MainComponent.cpp b/loris_test/Source/MainComponent.cpp index 20d91a6..04d4c58 100644 --- a/loris_test/Source/MainComponent.cpp +++ b/loris_test/Source/MainComponent.cpp @@ -2,6 +2,8 @@ using namespace juce; + + //============================================================================== MainComponent::MainComponent(): fc("File", File(), true, false, false, "*", "", "Select audio file to analyse"), @@ -160,7 +162,16 @@ MainComponent::MainComponent(): repaint(); }; - setSize (600, 400); + File audioFile("/Users/christophhart/Development/loris-tools/Loris Toolbox/AudioFiles/sound_examples/piano 2.wav"); + + for(int i = 0; i < 8; i++) + { + pathColours[i] = Colours::red.withSaturation(0.7f).withBrightness(0.4f).withAlpha(0.3f).withHue(Random::getSystemRandom().nextFloat()); + } + + setSize (900, 600); + + fc.setCurrentFile(audioFile, true); } MainComponent::~MainComponent() @@ -170,13 +181,17 @@ MainComponent::~MainComponent() //============================================================================== void MainComponent::paint (juce::Graphics& g) { - // (Our component is opaque, so we must completely fill the background with a solid colour) - g.fillAll(Colour(0xff222222)); + +} - g.setFont (GLOBAL_FONT()); - g.setColour (juce::Colours::white); +void MainComponent::paintOverChildren(juce::Graphics& g) +{ + for(int i = 0; i < harmonics.size(); i++) + { + g.setColour(Colour(pathColours[i]).withAlpha(0.15f)); + g.fillPath(harmonics[i]); + } - g.drawText (error, errorArea, juce::Justification::centred, true); } void MainComponent::resized() @@ -203,8 +218,13 @@ void MainComponent::resized() thumbnail.setBounds(b.reduced(3)); - - + if(!harmonics.isEmpty()) + { + auto t = thumbnail.getBounds().toFloat(); + + for(auto& e: harmonics) + e.scaleToFit(t.getX(), t.getY(), t.getWidth(), t.getHeight(), false); + } // This is called when th MainComponent is resized. diff --git a/loris_test/Source/MainComponent.h b/loris_test/Source/MainComponent.h index e651fdd..bc404ff 100644 --- a/loris_test/Source/MainComponent.h +++ b/loris_test/Source/MainComponent.h @@ -21,27 +21,61 @@ class MainComponent : public juce::Component, //============================================================================== void paint (juce::Graphics&) override; + + void paintOverChildren(juce::Graphics& g) override; void resized() override; + + virtual void filenameComponentChanged (FilenameComponent* fileComponentThatHasChanged) override { - lorisManager->analyse({{fc.getCurrentFile(), 440.0}}, nullptr); + lorisManager->set("freqdrift", "50.0"); + //auto freq = 146.8323839587038; // cello + auto freq = 329.6275569128699; // (piano 2); - auto bl = lorisManager->synthesise(fc.getCurrentFile()); + lorisManager->analyse({{fc.getCurrentFile(), freq}}, nullptr); + + auto gainList = lorisManager->getSnapshot(fc.getCurrentFile(), 0.5, "bandwidth")[0]; + + DBG(JSON::toString(gainList)); + + //auto pitchEnv = lorisManager->createEnvelope(fc.getCurrentFile(), Identifier("rootFrequency"), 0); + Identifier id("gain"); + var pitchEnv; + for(int i = 0; i < 8; i++) + { + if(!pitchEnv.isBuffer()) + pitchEnv = lorisManager->createEnvelope(fc.getCurrentFile(), id, i)[0]; + else + *pitchEnv.getBuffer() += *lorisManager->createEnvelope(fc.getCurrentFile(), id, i)[0].getBuffer(); + + auto e = lorisManager->setEnvelope(pitchEnv, id); + + harmonics.add(e); + } + + + auto bl = lorisManager->synthesise(fc.getCurrentFile()); + thumbnail.setBuffer(bl[0], bl[1]); - repaint(); + resized(); } private: + + Array harmonics; + + Colour pathColours[8]; + //============================================================================== // Your private member variables go here...