| @@ -28,10 +28,15 @@ extern String g_plugintitle; | |||
| PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(PaulstretchpluginAudioProcessor& p) | |||
| : AudioProcessorEditor(&p), | |||
| m_wavecomponent(p.m_afm,p.m_thumb.get()), | |||
| processor(p), m_perfmeter(&p) | |||
| processor(p), m_perfmeter(&p), | |||
| m_wavefilter_tab(TabbedButtonBar::TabsAtTop) | |||
| { | |||
| addAndMakeVisible(&m_perfmeter); | |||
| //addAndMakeVisible(&m_free_filter_component); | |||
| m_free_filter_component.set_envelope(processor.m_free_filter_envelope); | |||
| m_wavefilter_tab.setTabBarDepth(17); | |||
| addAndMakeVisible(&m_perfmeter); | |||
| addAndMakeVisible(&m_import_button); | |||
| m_import_button.setButtonText("Import file..."); | |||
| @@ -45,8 +50,11 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau | |||
| m_info_label.setJustificationType(Justification::centredRight); | |||
| m_wavecomponent.GetFileCallback = [this]() { return processor.getAudioFile(); }; | |||
| addAndMakeVisible(&m_wavecomponent); | |||
| const auto& pars = processor.getParameters(); | |||
| //addAndMakeVisible(&m_wavecomponent); | |||
| const auto& pars = processor.getParameters(); | |||
| for (int i=0;i<pars.size();++i) | |||
| { | |||
| AudioProcessorParameterWithID* parid = dynamic_cast<AudioProcessorParameterWithID*>(pars[i]); | |||
| @@ -86,7 +94,7 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau | |||
| processor.m_wave_view_range = r; | |||
| }; | |||
| m_zs.setRange(processor.m_wave_view_range, true); | |||
| setSize (1000, 30+(pars.size()/2)*25+200+15); | |||
| m_wavecomponent.TimeSelectionChangedCallback = [this](Range<double> range, int which) | |||
| { | |||
| *processor.getFloatParameter(cpi_soundstart) = range.getStart(); | |||
| @@ -118,7 +126,12 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau | |||
| { | |||
| processor.setDirty(); | |||
| }; | |||
| startTimer(1, 100); | |||
| m_wavefilter_tab.addTab("Waveform", Colours::white, &m_wavecomponent, false); | |||
| m_wavefilter_tab.addTab("Free filter", Colours::white, &m_free_filter_component, false); | |||
| addAndMakeVisible(&m_wavefilter_tab); | |||
| setSize (1000, 30+(pars.size()/2)*25+200+15); | |||
| startTimer(1, 100); | |||
| startTimer(2, 1000); | |||
| startTimer(3, 200); | |||
| m_wavecomponent.startTimer(100); | |||
| @@ -240,9 +253,10 @@ void PaulstretchpluginAudioProcessorEditor::resized() | |||
| yoffs += 25; | |||
| int remain_h = getHeight() - 1 - yoffs -15; | |||
| m_spec_order_ed.setBounds(1, yoffs, getWidth() - 2, remain_h / 5 * 1); | |||
| m_wavecomponent.setBounds(1, m_spec_order_ed.getBottom()+1, getWidth()-2, remain_h/5*4); | |||
| m_zs.setBounds(1, m_wavecomponent.getBottom(), getWidth() - 2, 16); | |||
| //m_specvis.setBounds(1, yoffs, getWidth() - 2, getHeight() - 1 - yoffs); | |||
| //m_wavecomponent.setBounds(1, m_spec_order_ed.getBottom()+1, getWidth()-2, remain_h/5*4); | |||
| m_wavefilter_tab.setBounds(1, m_spec_order_ed.getBottom()+1, getWidth()-2, remain_h/5*4); | |||
| m_zs.setBounds(1, m_wavefilter_tab.getBottom(), getWidth() - 2, 16); | |||
| } | |||
| void PaulstretchpluginAudioProcessorEditor::timerCallback(int id) | |||
| @@ -24,6 +24,7 @@ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| #include "PluginProcessor.h" | |||
| #include <memory> | |||
| #include <vector> | |||
| #include "envelope_component.h" | |||
| class zoom_scrollbar : public Component | |||
| { | |||
| @@ -229,6 +230,8 @@ private: | |||
| void showSettingsMenu(); | |||
| String m_last_err; | |||
| zoom_scrollbar m_zs; | |||
| EnvelopeComponent m_free_filter_component; | |||
| TabbedComponent m_wavefilter_tab; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PaulstretchpluginAudioProcessorEditor) | |||
| }; | |||
| @@ -80,7 +80,10 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor() | |||
| g_activeprocessors.insert(this); | |||
| m_playposinfo.timeInSeconds = 0.0; | |||
| m_recbuffer.setSize(2, 44100); | |||
| m_free_filter_envelope = std::make_shared<breakpoint_envelope>(); | |||
| m_recbuffer.setSize(2, 44100); | |||
| m_recbuffer.clear(); | |||
| if (m_afm->getNumKnownFormats()==0) | |||
| m_afm->registerBasicFormats(); | |||
| @@ -22,6 +22,7 @@ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| #include "../JuceLibraryCode/JuceHeader.h" | |||
| #include "PS_Source/PaulStretchControl.h" | |||
| #include "jcdp_envelope.h" | |||
| class MyThumbCache; | |||
| @@ -169,6 +170,7 @@ public: | |||
| bool m_show_technical_info = false; | |||
| Range<double> m_wave_view_range; | |||
| int m_prepare_count = 0; | |||
| std::shared_ptr<breakpoint_envelope> m_free_filter_envelope; | |||
| private: | |||
| @@ -1,3 +1,23 @@ | |||
| /* | |||
| Copyright (C) 2006-2011 Nasca Octavian Paul | |||
| Author: Nasca Octavian Paul | |||
| Copyright (C) 2017 Xenakios | |||
| This program is free software; you can redistribute it and/or modify | |||
| it under the terms of version 2 of the GNU General Public License | |||
| as published by the Free Software Foundation. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License (version 2) for more details. | |||
| You should have received a copy of the GNU General Public License (version 2) | |||
| along with this program; if not, write to the Free Software Foundation, | |||
| Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| */ | |||
| #include "envelope_component.h" | |||
| EnvelopeComponent::EnvelopeComponent() | |||
| @@ -1,3 +1,23 @@ | |||
| /* | |||
| Copyright (C) 2006-2011 Nasca Octavian Paul | |||
| Author: Nasca Octavian Paul | |||
| Copyright (C) 2017 Xenakios | |||
| This program is free software; you can redistribute it and/or modify | |||
| it under the terms of version 2 of the GNU General Public License | |||
| as published by the Free Software Foundation. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License (version 2) for more details. | |||
| You should have received a copy of the GNU General Public License (version 2) | |||
| along with this program; if not, write to the Free Software Foundation, | |||
| Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |||
| */ | |||
| #pragma once | |||
| #include "../JuceLibraryCode/JuceHeader.h" | |||
| @@ -19,6 +19,7 @@ | |||
| file="Source/envelope_component.cpp"/> | |||
| <FILE id="apM6W6" name="envelope_component.h" compile="0" resource="0" | |||
| file="Source/envelope_component.h"/> | |||
| <FILE id="qfCc8R" name="jcdp_envelope.h" compile="0" resource="0" file="Source/jcdp_envelope.h"/> | |||
| <FILE id="TDOHpE" name="resample.cpp" compile="1" resource="0" file="Source/WDL/resample.cpp"/> | |||
| <GROUP id="{3B6D1AF9-E53E-2F78-24A5-D12A34009E6A}" name="PS_Source"> | |||
| <FILE id="bnWZA4" name="BinauralBeats.cpp" compile="1" resource="0" | |||