added button icons. layout fixes. increased buffering thread priority
@ -98,9 +98,19 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
m_render_button.onClick = [this]() { showRenderDialog(); };
|
||||
}
|
||||
|
||||
addAndMakeVisible(m_rewind_button);
|
||||
m_rewind_button.setButtonText("<<");
|
||||
m_rewind_button.onClick = [this]()
|
||||
// jlc
|
||||
m_rewind_button = std::make_unique<DrawableButton>("rewind", DrawableButton::ButtonStyle::ImageFitted);
|
||||
std::unique_ptr<Drawable> rewimg(Drawable::createFromImageData(BinaryData::skipback_icon_svg, BinaryData::skipback_icon_svgSize));
|
||||
m_rewind_button->setImages(rewimg.get());
|
||||
m_rewind_button->setColour(TextButton::buttonColourId, Colours::transparentBlack);
|
||||
m_rewind_button->setColour(TextButton::buttonOnColourId, Colours::transparentBlack);
|
||||
m_rewind_button->setColour(DrawableButton::backgroundColourId, Colours::transparentBlack);
|
||||
m_rewind_button->setColour(DrawableButton::backgroundOnColourId, Colours::transparentBlack);
|
||||
|
||||
addAndMakeVisible(m_rewind_button.get());
|
||||
m_rewind_button->setTitle("Return to start");
|
||||
m_rewind_button->setTooltip("Return to start");
|
||||
m_rewind_button->onClick = [this]()
|
||||
{
|
||||
*processor.getBoolParameter(cpi_rewind) = true;
|
||||
//processor.getStretchSource()->seekPercent(processor.getStretchSource()->getPlayRange().getStart());
|
||||
@ -108,6 +118,7 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
|
||||
addAndMakeVisible(&m_info_label);
|
||||
m_info_label.setJustificationType(Justification::centredRight);
|
||||
m_info_label.setFont(14.0f);
|
||||
|
||||
m_wavecomponent.GetFileCallback = [this]() { return processor.getAudioFile(); };
|
||||
|
||||
@ -120,6 +131,12 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
if (parid->paramID.startsWith("fftsize") || parid->paramID.startsWith("numoutchans")
|
||||
|| parid->paramID.startsWith("numinchans"))
|
||||
notifyonlyonrelease = true;
|
||||
|
||||
bool usedrawable = false;
|
||||
if (i == cpi_pause_enabled || i == cpi_looping_enabled || i == cpi_capture_trigger || i == cpi_freeze || i == cpi_passthrough)
|
||||
usedrawable = true;
|
||||
|
||||
|
||||
int group_id = -1;
|
||||
if (i == cpi_harmonicsbw || i == cpi_harmonicsfreq || i == cpi_harmonicsgauss || i == cpi_numharmonics)
|
||||
group_id = HarmonicsGroup;
|
||||
@ -148,7 +165,7 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
group_id = -2;
|
||||
if (group_id >= -1)
|
||||
{
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[i], notifyonlyonrelease));
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[i], notifyonlyonrelease, usedrawable));
|
||||
m_parcomps.back()->m_group_id = group_id;
|
||||
|
||||
if (group_id == -1) // only add ones that aren't in groups
|
||||
@ -166,6 +183,42 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
m_parcomps[cpi_num_outchans]->getSlider()->setSliderStyle(Slider::SliderStyle::IncDecButtons);
|
||||
m_parcomps[cpi_num_outchans]->getSlider()->setTextBoxStyle(Slider::TextEntryBoxPosition::TextBoxLeft, false, 30, 34);
|
||||
|
||||
removeChildComponent(m_parcomps[cpi_bypass_stretch].get());
|
||||
|
||||
|
||||
if (auto * pausebut = m_parcomps[cpi_pause_enabled]->getDrawableButton()) {
|
||||
std::unique_ptr<Drawable> playimg(Drawable::createFromImageData(BinaryData::play_icon_svg, BinaryData::play_icon_svgSize));
|
||||
std::unique_ptr<Drawable> pauseimg(Drawable::createFromImageData(BinaryData::pause_icon_svg, BinaryData::pause_icon_svgSize));
|
||||
pausebut->setImages(pauseimg.get(), nullptr, nullptr, nullptr, playimg.get());
|
||||
pausebut->setColour(DrawableButton::backgroundColourId, Colour::fromFloatRGBA(0.1f, 0.5f, 0.1f, 0.55f));
|
||||
}
|
||||
|
||||
if (auto * loopbut = m_parcomps[cpi_looping_enabled]->getDrawableButton()) {
|
||||
std::unique_ptr<Drawable> loopimg(Drawable::createFromImageData(BinaryData::loop_icon_svg, BinaryData::loop_icon_svgSize));
|
||||
loopbut->setImages(loopimg.get());
|
||||
loopbut->setColour(DrawableButton::backgroundOnColourId, Colour::fromFloatRGBA(0.6, 0.4, 0.6, 0.4));
|
||||
}
|
||||
|
||||
if (auto * recbut = m_parcomps[cpi_capture_trigger]->getDrawableButton()) {
|
||||
std::unique_ptr<Drawable> reconimg(Drawable::createFromImageData(BinaryData::record_active_svg, BinaryData::record_active_svgSize));
|
||||
std::unique_ptr<Drawable> recoffimg(Drawable::createFromImageData(BinaryData::record_svg, BinaryData::record_svgSize));
|
||||
recbut->setImages(recoffimg.get(), nullptr, nullptr, nullptr, reconimg.get());
|
||||
recbut->setColour(DrawableButton::backgroundOnColourId, Colour::fromFloatRGBA(0.6, 0.3, 0.3, 0.5));
|
||||
}
|
||||
|
||||
if (auto * freezebut = m_parcomps[cpi_freeze]->getDrawableButton()) {
|
||||
std::unique_ptr<Drawable> img(Drawable::createFromImageData(BinaryData::freeze_svg, BinaryData::freeze_svgSize));
|
||||
freezebut->setImages(img.get());
|
||||
freezebut->setColour(DrawableButton::backgroundOnColourId, Colour::fromFloatRGBA(0.2, 0.5, 0.7, 0.55));
|
||||
}
|
||||
|
||||
if (auto * thrubut = m_parcomps[cpi_passthrough]->getDrawableButton()) {
|
||||
std::unique_ptr<Drawable> img(Drawable::createFromImageData(BinaryData::passthru_svg, BinaryData::passthru_svgSize));
|
||||
std::unique_ptr<Drawable> imgon(Drawable::createFromImageData(BinaryData::passthru_enabled_svg, BinaryData::passthru_enabled_svgSize));
|
||||
thrubut->setImages(img.get(), nullptr, nullptr, nullptr, imgon.get());
|
||||
thrubut->setColour(DrawableButton::backgroundOnColourId, Colour::fromFloatRGBA(0.5, 0.3, 0.0, 0.55));
|
||||
}
|
||||
|
||||
|
||||
#if JUCE_IOS
|
||||
// just don't include chan counts on ios for now
|
||||
@ -180,8 +233,9 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
|
||||
addAndMakeVisible(m_groupviewport.get());
|
||||
|
||||
m_stretchgroup = std::make_unique<ParameterGroupComponent>("", -1, &processor, false);
|
||||
m_stretchgroup = std::make_unique<ParameterGroupComponent>("", -1, &processor, true);
|
||||
m_stretchgroup->setBackgroundColor(Colour(0xff332244));
|
||||
m_stretchgroup->setToggleEnabled( ! *processor.getBoolParameter(cpi_bypass_stretch));
|
||||
if (*processor.getBoolParameter(cpi_bypass_stretch)) {
|
||||
m_stretchgroup->addParameterComponent(m_parcomps[cpi_dryplayrate].get());
|
||||
removeChildComponent(m_parcomps[cpi_stretchamount].get());
|
||||
@ -190,6 +244,11 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau
|
||||
removeChildComponent(m_parcomps[cpi_dryplayrate].get());
|
||||
}
|
||||
m_stretchgroup->addParameterComponent(m_parcomps[cpi_fftsize].get());
|
||||
m_stretchgroup->EnabledChangedCallback = [this]() {
|
||||
toggleBool(processor.getBoolParameter(cpi_bypass_stretch));
|
||||
m_stretchgroup->setToggleEnabled( ! *processor.getBoolParameter(cpi_bypass_stretch));
|
||||
// jlc
|
||||
};
|
||||
|
||||
addAndMakeVisible(m_stretchgroup.get());
|
||||
|
||||
@ -451,7 +510,7 @@ void PaulstretchpluginAudioProcessorEditor::showRenderDialog()
|
||||
{
|
||||
auto contentraw = new RenderSettingsComponent(&processor);
|
||||
|
||||
int prefw = jmin(contentraw->getPreferredWidth(), getWidth() - 10);
|
||||
int prefw = jmin(contentraw->getPreferredWidth(), getWidth() - 20);
|
||||
int prefh = jmin(contentraw->getPreferredHeight(), getHeight() - 10);
|
||||
contentraw->setSize(prefw, prefh);
|
||||
std::unique_ptr<Component> content(contentraw);
|
||||
@ -577,7 +636,6 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
{
|
||||
topbox.items.add(FlexItem(buttw, buttonrowheight, m_render_button).withMargin(1).withFlex(1).withMaxWidth(130));
|
||||
}
|
||||
topbox.items.add(FlexItem(buttminw, buttonrowheight, m_rewind_button).withMargin(1));
|
||||
topbox.items.add(FlexItem(4, 4));
|
||||
topbox.items.add(FlexItem(80, buttonrowheight, m_perfmeter).withMargin(1).withFlex(1).withMaxWidth(110).withMaxHeight(24).withAlignSelf(FlexItem::AlignSelf::center));
|
||||
topbox.items.add(FlexItem(140, 26, m_info_label).withMargin(1).withFlex(2));
|
||||
@ -591,13 +649,23 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
togglesbox.flexWrap = FlexBox::Wrap::wrap;
|
||||
togglesbox.alignContent = FlexBox::AlignContent::flexStart;
|
||||
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_capture_trigger]).withMargin(margin).withFlex(1).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_passthrough]).withMargin(margin).withFlex(1.5).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight, *m_parcomps[cpi_capture_trigger]).withMargin(margin).withFlex(1).withMaxWidth(65));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight).withFlex(0.1));
|
||||
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_pause_enabled]).withMargin(margin).withFlex(1).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_freeze]).withMargin(margin).withFlex(1).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_bypass_stretch]).withMargin(margin).withFlex(1).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_looping_enabled]).withMargin(margin).withFlex(1).withMaxWidth(200));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight, *m_rewind_button).withMargin(1).withFlex(1).withMaxWidth(65));
|
||||
togglesbox.items.add(FlexItem(0, buttonrowheight).withFlex(0.1).withMaxWidth(10));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight, *m_parcomps[cpi_pause_enabled]).withMargin(margin).withFlex(1).withMaxWidth(65));
|
||||
togglesbox.items.add(FlexItem(0, buttonrowheight).withFlex(0.1).withMaxWidth(10));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight, *m_parcomps[cpi_looping_enabled]).withMargin(margin).withFlex(1).withMaxWidth(65));
|
||||
togglesbox.items.add(FlexItem(0, buttonrowheight).withFlex(0.1).withMaxWidth(10));
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight, *m_parcomps[cpi_freeze]).withMargin(margin).withFlex(1).withMaxWidth(65));
|
||||
|
||||
togglesbox.items.add(FlexItem(buttminw, buttonrowheight).withFlex(0.1));
|
||||
|
||||
//togglesbox.items.add(FlexItem(toggleminw, togglerowheight, *m_parcomps[cpi_bypass_stretch]).withMargin(margin).withFlex(1).withMaxWidth(150));
|
||||
togglesbox.items.add(FlexItem(buttminw + 15, buttonrowheight, *m_parcomps[cpi_passthrough]).withMargin(margin).withFlex(1.5).withMaxWidth(85));
|
||||
|
||||
togglesbox.items.add(FlexItem(2, buttonrowheight));
|
||||
|
||||
togglesbox.performLayout(Rectangle<int>(0,0,w - 2*margin,400)); // test run to calculate actual used height
|
||||
int toggleh = togglesbox.items.getLast().currentBounds.getBottom() + togglesbox.items.getLast().margin.bottom;
|
||||
@ -625,7 +693,7 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
volbox.performLayout(Rectangle<int>(0,0,w - 2*margin,400)); // test run to calculate actual used height
|
||||
int volh = volbox.items.getLast().currentBounds.getBottom() + volbox.items.getLast().margin.bottom;
|
||||
int stretchH = m_stretchgroup->getMinimumHeight(w - 2*margin);
|
||||
|
||||
stretchH = jmax(stretchH, (int) (minh*1.1f));
|
||||
|
||||
|
||||
FlexBox groupsbox;
|
||||
@ -719,6 +787,7 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
|
||||
mainbox.items.add(FlexItem(minw, topboxh, topbox).withMargin(margin).withFlex(0));
|
||||
|
||||
mainbox.items.add(FlexItem(minw, toggleh, togglesbox).withMargin(margin).withFlex(0));
|
||||
|
||||
|
||||
auto reparentIfNecessary = [] (Component * comp, Component *newparent) {
|
||||
@ -747,14 +816,14 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
// not enough vertical space, put the top items in the scrollable viewport
|
||||
// may have to reparent them
|
||||
reparentIfNecessary(m_stretchgroup.get(), m_groupcontainer.get());
|
||||
reparentItemsIfNecessary(togglesbox, m_groupcontainer.get());
|
||||
//reparentItemsIfNecessary(togglesbox, m_groupcontainer.get());
|
||||
reparentItemsIfNecessary(volbox, m_groupcontainer.get());
|
||||
|
||||
groupsbox.items.insert(0, FlexItem(minw, stretchH, *m_stretchgroup).withMargin(groupmargin).withFlex(0));
|
||||
groupsbox.items.insert(0, FlexItem(minw, volh, volbox).withMargin(groupmargin).withFlex(0));
|
||||
groupsbox.items.insert(0, FlexItem(minw, toggleh, togglesbox).withMargin(groupmargin).withFlex(0));
|
||||
//groupsbox.items.insert(0, FlexItem(minw, toggleh, togglesbox).withMargin(groupmargin).withFlex(0));
|
||||
|
||||
useh += toggleh + volh + stretchH + 6*groupmargin;
|
||||
useh += /*toggleh + */ volh + stretchH + 6*groupmargin;
|
||||
|
||||
if (getHeight() < shortthresh) {
|
||||
// really not much space, put group scroll in a new tab
|
||||
@ -797,11 +866,11 @@ void PaulstretchpluginAudioProcessorEditor::resized()
|
||||
reparentIfNecessary(m_groupviewport.get(), this);
|
||||
reparentIfNecessary(&m_spec_order_ed, this);
|
||||
reparentIfNecessary(m_stretchgroup.get(), this);
|
||||
reparentItemsIfNecessary(togglesbox, this);
|
||||
//reparentItemsIfNecessary(togglesbox, this);
|
||||
reparentItemsIfNecessary(volbox, this);
|
||||
|
||||
|
||||
mainbox.items.add(FlexItem(minw, toggleh, togglesbox).withMargin(margin).withFlex(0));
|
||||
//mainbox.items.add(FlexItem(minw, toggleh, togglesbox).withMargin(margin).withFlex(0));
|
||||
mainbox.items.add(FlexItem(minw, volh, volbox).withMargin(margin).withFlex(0));
|
||||
mainbox.items.add(FlexItem(minw, stretchH, *m_stretchgroup).withMargin(margin).withFlex(0));
|
||||
}
|
||||
@ -862,6 +931,13 @@ void PaulstretchpluginAudioProcessorEditor::timerCallback(int id)
|
||||
{
|
||||
if (id == 1)
|
||||
{
|
||||
if (!tooltipWindow && getParentComponent()) {
|
||||
Component* dw = this;
|
||||
if (dw) {
|
||||
tooltipWindow = std::make_unique<CustomTooltipWindow>(this, dw);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_parcomps.size(); ++i)
|
||||
{
|
||||
if (m_parcomps[i]!=nullptr)
|
||||
@ -911,7 +987,8 @@ void PaulstretchpluginAudioProcessorEditor::timerCallback(int id)
|
||||
group.second->updateParameterComponents();
|
||||
}
|
||||
|
||||
;
|
||||
m_stretchgroup->setToggleEnabled(!*processor.getBoolParameter(cpi_bypass_stretch));
|
||||
|
||||
if (AudioParameterBool* enablepar = dynamic_cast<AudioParameterBool*>(processor.getBoolParameter(cpi_pause_enabled))) {
|
||||
m_perfmeter.enabled = !enablepar->get();
|
||||
}
|
||||
@ -1060,9 +1137,10 @@ void PaulstretchpluginAudioProcessorEditor::showAbout()
|
||||
|
||||
#if !JUCE_IOS
|
||||
text += juceversiontxt + String(" used under the GPL license.\n\n");
|
||||
text += String("GPL licensed source code for this plugin at : https://bitbucket.org/xenakios/paulstretchplugin/overview\n");
|
||||
#endif
|
||||
|
||||
// text += String("GPL licensed source code for this plugin at : https://bitbucket.org/xenakios/paulstretchplugin/overview\n");
|
||||
|
||||
if (host.type != juce::PluginHostType::UnknownHost) {
|
||||
text += String("Running in : ") + host.getHostDescription()+ String("\n");
|
||||
}
|
||||
@ -1770,7 +1848,8 @@ void SpectralChainEditor::drawBox(Graphics & g, int index, int x, int y, int w,
|
||||
g.setColour(Colours::white.withAlpha(0.8f));
|
||||
}
|
||||
|
||||
ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notifyOnlyOnRelease) : m_par(par)
|
||||
ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notifyOnlyOnRelease, bool useDrawableToggle)
|
||||
: m_par(par)
|
||||
{
|
||||
addAndMakeVisible(&m_label);
|
||||
m_labeldefcolor = m_label.findColour(Label::textColourId);
|
||||
@ -1789,6 +1868,8 @@ ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notif
|
||||
m_slider->setDoubleClickReturnValue(true, floatpar->range.convertFrom0to1(par->getDefaultValue()));
|
||||
m_slider->setViewportIgnoreDragFlag(true);
|
||||
m_slider->setScrollWheelEnabled(false);
|
||||
m_slider->setTitle(floatpar->getName(50));
|
||||
|
||||
}
|
||||
AudioParameterInt* intpar = dynamic_cast<AudioParameterInt*>(par);
|
||||
if (intpar)
|
||||
@ -1800,7 +1881,9 @@ ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notif
|
||||
m_slider->setTextBoxStyle(Slider::TextBoxLeft, false, 60, 34);
|
||||
m_slider->addListener(this);
|
||||
m_slider->setViewportIgnoreDragFlag(true);
|
||||
m_slider->setScrollWheelEnabled(false);
|
||||
m_slider->setScrollWheelEnabled(false
|
||||
);
|
||||
m_slider->setTitle(intpar->getName(50));
|
||||
}
|
||||
AudioParameterChoice* choicepar = dynamic_cast<AudioParameterChoice*>(par);
|
||||
if (choicepar)
|
||||
@ -1810,6 +1893,21 @@ ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notif
|
||||
AudioParameterBool* boolpar = dynamic_cast<AudioParameterBool*>(par);
|
||||
if (boolpar)
|
||||
{
|
||||
if (useDrawableToggle) {
|
||||
m_drawtogglebut = std::make_unique<DrawableButton>("but", DrawableButton::ImageFitted);
|
||||
m_drawtogglebut->setToggleState(*boolpar, dontSendNotification);
|
||||
m_drawtogglebut->addListener(this);
|
||||
m_drawtogglebut->setTitle(par->getName(50));
|
||||
m_drawtogglebut->setTooltip(par->getName(50));
|
||||
m_drawtogglebut->setClickingTogglesState(true);
|
||||
m_drawtogglebut->setColour(TextButton::buttonColourId, Colours::transparentBlack);
|
||||
m_drawtogglebut->setColour(TextButton::buttonOnColourId, Colours::transparentBlack);
|
||||
m_drawtogglebut->setColour(DrawableButton::backgroundColourId, Colours::transparentBlack);
|
||||
m_drawtogglebut->setColour(DrawableButton::backgroundOnColourId, Colours::transparentBlack);
|
||||
|
||||
addAndMakeVisible(m_drawtogglebut.get());
|
||||
}
|
||||
else {
|
||||
m_togglebut = std::make_unique<ToggleButton>();
|
||||
m_togglebut->setToggleState(*boolpar, dontSendNotification);
|
||||
m_togglebut->addListener(this);
|
||||
@ -1817,6 +1915,7 @@ ParameterComponent::ParameterComponent(AudioProcessorParameter * par, bool notif
|
||||
addAndMakeVisible(m_togglebut.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ParameterComponent::resized()
|
||||
{
|
||||
@ -1830,9 +1929,14 @@ void ParameterComponent::resized()
|
||||
m_label.setBounds(0, 0, labw, h);
|
||||
m_slider->setBounds(m_label.getRight() + 1, 0, getWidth() - 2 - m_label.getWidth(), h);
|
||||
}
|
||||
if (m_togglebut)
|
||||
else if (m_togglebut) {
|
||||
m_togglebut->setBounds(1, 0, getWidth() - 1, h);
|
||||
}
|
||||
else if (m_drawtogglebut) {
|
||||
m_drawtogglebut->setBounds(1, 0, getWidth() - 1, h);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ParameterComponent::sliderValueChanged(Slider * slid)
|
||||
{
|
||||
@ -1872,6 +1976,11 @@ void ParameterComponent::buttonClicked(Button * but)
|
||||
if (m_togglebut->getToggleState()!=*boolpar)
|
||||
*boolpar = m_togglebut->getToggleState();
|
||||
}
|
||||
else if (m_drawtogglebut != nullptr)
|
||||
{
|
||||
if (m_drawtogglebut->getToggleState() != *boolpar)
|
||||
*boolpar = m_drawtogglebut->getToggleState();
|
||||
}
|
||||
}
|
||||
|
||||
void ParameterComponent::updateComponent()
|
||||
@ -1887,11 +1996,18 @@ void ParameterComponent::updateComponent()
|
||||
m_slider->setValue(*intpar, dontSendNotification);
|
||||
}
|
||||
AudioParameterBool* boolpar = dynamic_cast<AudioParameterBool*>(m_par);
|
||||
if (boolpar!=nullptr && m_togglebut != nullptr)
|
||||
if (boolpar!=nullptr) {
|
||||
if ( m_togglebut != nullptr)
|
||||
{
|
||||
if (m_togglebut->getToggleState() != *boolpar)
|
||||
m_togglebut->setToggleState(*boolpar, dontSendNotification);
|
||||
}
|
||||
else if ( m_drawtogglebut != nullptr)
|
||||
{
|
||||
if (m_drawtogglebut->getToggleState() != *boolpar)
|
||||
m_drawtogglebut->setToggleState(*boolpar, dontSendNotification);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ParameterComponent::setHighLighted(bool b)
|
||||
@ -1901,12 +2017,16 @@ void ParameterComponent::setHighLighted(bool b)
|
||||
m_label.setColour(Label::textColourId, m_labeldefcolor);
|
||||
if (m_togglebut)
|
||||
m_togglebut->setColour(ToggleButton::textColourId, m_labeldefcolor);
|
||||
//else if (m_drawtogglebut)
|
||||
// m_drawtogglebut->setColour(ToggleButton::textColourId, m_labeldefcolor);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_label.setColour(Label::textColourId, Colours::yellow);
|
||||
if (m_togglebut)
|
||||
m_togglebut->setColour(ToggleButton::textColourId, Colours::yellow);
|
||||
//else if (m_drawtogglebut)
|
||||
// m_drawtogglebut->setColour(ToggleButton::textColourId, Colours::yellow);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2179,22 +2299,26 @@ void RatioMixerEditor::paint(Graphics & g)
|
||||
FreeFilterComponent::FreeFilterComponent(PaulstretchpluginAudioProcessor* proc)
|
||||
: m_env(proc->getStretchSource()->getMutex()), m_cs(proc->getStretchSource()->getMutex()), m_proc(proc)
|
||||
{
|
||||
m_viewport = std::make_unique<Viewport>();
|
||||
m_viewport->setViewedComponent(&m_container, false);
|
||||
addAndMakeVisible(m_viewport.get());
|
||||
|
||||
addAndMakeVisible(m_env);
|
||||
const auto& pars = m_proc->getParameters();
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_shiftx],false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_shifty], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_scaley], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_tilty], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_randomy_numbands], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_randomy_rate], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
m_parcomps.emplace_back(std::make_unique<ParameterComponent>(pars[cpi_freefilter_randomy_amount], false));
|
||||
addAndMakeVisible(m_parcomps.back().get());
|
||||
m_container.addAndMakeVisible(m_parcomps.back().get());
|
||||
}
|
||||
|
||||
void FreeFilterComponent::resized()
|
||||
@ -2208,30 +2332,65 @@ void FreeFilterComponent::resized()
|
||||
#endif
|
||||
|
||||
FlexBox mainbox;
|
||||
mainbox.flexDirection = FlexBox::Direction::row;
|
||||
|
||||
|
||||
m_env.setBounds(m_slidwidth, 0, getWidth() - m_slidwidth, getHeight());
|
||||
|
||||
FlexBox slidbox;
|
||||
slidbox.flexDirection = FlexBox::Direction::column;
|
||||
|
||||
slidbox.items.add(FlexItem(3, 2).withMargin(0));
|
||||
|
||||
|
||||
for (int i = 0; i < m_parcomps.size(); ++i)
|
||||
{
|
||||
//m_parcomps[i]->setBounds(1, 1+25*i, m_slidwidth - 2, 24);
|
||||
slidbox.items.add(FlexItem(minslidwidth, slidh, *m_parcomps[i]).withMargin(margin).withFlex(0));
|
||||
}
|
||||
|
||||
mainbox.items.add(FlexItem(minslidwidth, 50, slidbox).withMargin(0).withFlex(1).withMaxWidth(m_slidwidth));
|
||||
int minh = 0;
|
||||
for (auto & item : slidbox.items ) {
|
||||
minh += item.minHeight + item.margin.top + item.margin.bottom;
|
||||
}
|
||||
|
||||
int vpminh = 3*slidh + 3*margin;
|
||||
|
||||
if (minslidwidth < getWidth() * 0.4) {
|
||||
|
||||
mainbox.flexDirection = FlexBox::Direction::row;
|
||||
|
||||
//m_env.setBounds(m_slidwidth, 0, getWidth() - m_slidwidth, getHeight());
|
||||
|
||||
|
||||
|
||||
mainbox.items.add(FlexItem(minslidwidth, vpminh, *m_viewport).withMargin(0).withFlex(1).withMaxWidth(m_slidwidth));
|
||||
mainbox.items.add(FlexItem(100, 50, m_env).withMargin(0).withFlex(3));
|
||||
}
|
||||
else {
|
||||
mainbox.flexDirection = FlexBox::Direction::column;
|
||||
|
||||
//m_env.setBounds(m_slidwidth, 0, getWidth() - m_slidwidth, getHeight());
|
||||
|
||||
slidbox.flexDirection = FlexBox::Direction::column;
|
||||
slidbox.flexWrap = FlexBox::Wrap::wrap;
|
||||
|
||||
|
||||
mainbox.items.add(FlexItem(minslidwidth, vpminh, *m_viewport).withMargin(0).withFlex(0));
|
||||
mainbox.items.add(FlexItem(100, 3).withMargin(0));
|
||||
mainbox.items.add(FlexItem(100, 50, m_env).withMargin(0).withFlex(3));
|
||||
}
|
||||
|
||||
mainbox.performLayout(getLocalBounds());
|
||||
|
||||
auto contw = m_viewport->getWidth() - (minh > m_viewport->getHeight() ? m_viewport->getScrollBarThickness() : 0);
|
||||
auto contbounds = Rectangle<int>(0, 0, contw, minh);
|
||||
m_container.setBounds(contbounds);
|
||||
slidbox.performLayout(contbounds);
|
||||
|
||||
}
|
||||
|
||||
void FreeFilterComponent::paint(Graphics & g)
|
||||
{
|
||||
g.setColour(Colour(0xff222222));
|
||||
|
||||
g.fillRect(0, 0, m_slidwidth, getHeight());
|
||||
g.fillRect(0, 0, getWidth(), getHeight());
|
||||
}
|
||||
|
||||
void FreeFilterComponent::updateParameterComponents()
|
||||
@ -2263,6 +2422,11 @@ ParameterGroupComponent::ParameterGroupComponent(const String & name_, int group
|
||||
m_enableButton->setColour(DrawableButton::backgroundOnColourId, Colours::transparentBlack);
|
||||
|
||||
m_enableButton->onClick = [this]() {
|
||||
if (groupId < 0) {
|
||||
if (EnabledChangedCallback)
|
||||
EnabledChangedCallback();
|
||||
}
|
||||
else {
|
||||
auto order = m_proc->getStretchSource()->getSpectrumProcessOrder();
|
||||
for (int i=0; i < order.size(); ++i) {
|
||||
if (order[i].m_index == groupId) {
|
||||
@ -2273,6 +2437,7 @@ ParameterGroupComponent::ParameterGroupComponent(const String & name_, int group
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
addAndMakeVisible(m_enableButton.get());
|
||||
}
|
||||
@ -2291,7 +2456,6 @@ int ParameterGroupComponent::getMinimumHeight(int forWidth)
|
||||
return m_minHeight;
|
||||
}
|
||||
|
||||
|
||||
void ParameterGroupComponent::addParameterComponent(ParameterComponent * pcomp)
|
||||
{
|
||||
if (pcomp) {
|
||||
@ -2381,7 +2545,7 @@ void ParameterGroupComponent::resized()
|
||||
|
||||
void ParameterGroupComponent::paint(Graphics & g)
|
||||
{
|
||||
if (m_enableButton && m_enableButton->getToggleState()) {
|
||||
if (m_enableButton && groupId >= 0 && m_enableButton->getToggleState()) {
|
||||
g.setColour(m_selbgcolor);
|
||||
} else {
|
||||
g.setColour(m_bgcolor);
|
||||
@ -2394,7 +2558,7 @@ void ParameterGroupComponent::updateParameterComponents()
|
||||
{
|
||||
bool enabled = true;
|
||||
|
||||
if (m_enableButton) {
|
||||
if (m_enableButton && groupId >= 0) {
|
||||
auto order = m_proc->getStretchSource()->getSpectrumProcessOrder();
|
||||
for (int i=0; i < order.size(); ++i) {
|
||||
if (order[i].m_index == groupId) {
|
||||
|
@ -85,7 +85,7 @@ class ParameterComponent : public Component,
|
||||
public Slider::Listener, public Button::Listener
|
||||
{
|
||||
public:
|
||||
ParameterComponent(AudioProcessorParameter* par, bool notifyOnlyOnRelease);
|
||||
ParameterComponent(AudioProcessorParameter* par, bool notifyOnlyOnRelease, bool useDrawableToggle=false);
|
||||
void resized() override;
|
||||
void sliderValueChanged(Slider* slid) override;
|
||||
void sliderDragStarted(Slider* slid) override;
|
||||
@ -94,7 +94,10 @@ public:
|
||||
void updateComponent();
|
||||
void setHighLighted(bool b);
|
||||
int m_group_id = -1;
|
||||
Slider* getSlider() { return m_slider.get(); }
|
||||
Slider* getSlider() const { return m_slider.get(); }
|
||||
|
||||
DrawableButton* getDrawableButton() const { return m_drawtogglebut.get(); }
|
||||
ToggleButton* getToggleButton() const { return m_togglebut.get(); }
|
||||
|
||||
private:
|
||||
Label m_label;
|
||||
@ -102,6 +105,7 @@ private:
|
||||
std::unique_ptr<MySlider> m_slider;
|
||||
std::unique_ptr<ComboBox> m_combobox;
|
||||
std::unique_ptr<ToggleButton> m_togglebut;
|
||||
std::unique_ptr<DrawableButton> m_drawtogglebut;
|
||||
bool m_notify_only_on_release = false;
|
||||
bool m_dragging = false;
|
||||
Colour m_labeldefcolor;
|
||||
@ -124,6 +128,9 @@ public:
|
||||
void setBackgroundColor(Colour col) { m_bgcolor = col; }
|
||||
Colour getBackgroundColor() const { return m_bgcolor; }
|
||||
|
||||
void setToggleEnabled(bool flag){ if (m_enableButton) m_enableButton->setToggleState(flag, dontSendNotification); }
|
||||
bool getToggleEnabled() const { if (m_enableButton) return m_enableButton->getToggleState(); return false; }
|
||||
|
||||
String name;
|
||||
int groupId = -1;
|
||||
|
||||
@ -305,6 +312,8 @@ public:
|
||||
private:
|
||||
EnvelopeComponent m_env;
|
||||
uptrvec<ParameterComponent> m_parcomps;
|
||||
std::unique_ptr<Viewport> m_viewport;
|
||||
Component m_container;
|
||||
CriticalSection* m_cs = nullptr;
|
||||
PaulstretchpluginAudioProcessor* m_proc = nullptr;
|
||||
int m_slidwidth = 350;
|
||||
@ -563,7 +572,7 @@ private:
|
||||
TextButton m_import_button;
|
||||
TextButton m_settings_button;
|
||||
TextButton m_render_button;
|
||||
TextButton m_rewind_button;
|
||||
std::unique_ptr<DrawableButton> m_rewind_button;
|
||||
Label m_info_label;
|
||||
SpectralChainEditor m_spec_order_ed;
|
||||
double m_lastspec_select_time = 0.0;
|
||||
@ -587,6 +596,32 @@ private:
|
||||
std::unique_ptr<FileChooser> fileChooser;
|
||||
WildcardFileFilter m_filefilter;
|
||||
|
||||
class CustomTooltipWindow : public TooltipWindow
|
||||
{
|
||||
public:
|
||||
CustomTooltipWindow(PaulstretchpluginAudioProcessorEditor * parent_, Component * viewparent) : TooltipWindow(viewparent), parent(parent_) {}
|
||||
virtual ~CustomTooltipWindow() {
|
||||
if (parent) {
|
||||
// reset our smart pointer without a delete! someone else is deleting it
|
||||
parent->tooltipWindow.release();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
String getTipFor (Component& c) override
|
||||
{
|
||||
if (parent->popTip && parent->popTip->isShowing()) {
|
||||
return {};
|
||||
}
|
||||
return TooltipWindow::getTipFor(c);
|
||||
}
|
||||
*/
|
||||
|
||||
PaulstretchpluginAudioProcessorEditor * parent;
|
||||
};
|
||||
|
||||
std::unique_ptr<CustomTooltipWindow> tooltipWindow;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PaulstretchpluginAudioProcessorEditor)
|
||||
};
|
||||
|
||||
|
@ -227,7 +227,7 @@ PaulstretchpluginAudioProcessor::~PaulstretchpluginAudioProcessor()
|
||||
if (m_thumb)
|
||||
m_thumb->removeAllChangeListeners();
|
||||
m_thumb = nullptr;
|
||||
m_bufferingthread.stopThread(1000);
|
||||
m_bufferingthread.stopThread(3000);
|
||||
}
|
||||
|
||||
void PaulstretchpluginAudioProcessor::resetParameters()
|
||||
@ -489,8 +489,10 @@ void PaulstretchpluginAudioProcessor::startplay(Range<double> playrange, int num
|
||||
m_bufferingthread, false, bufamt, numoutchans, false);
|
||||
m_recreate_buffering_source = false;
|
||||
}
|
||||
if (m_bufferingthread.isThreadRunning() == false)
|
||||
if (m_bufferingthread.isThreadRunning() == false) {
|
||||
m_bufferingthread.setPriority(8);
|
||||
m_bufferingthread.startThread();
|
||||
}
|
||||
m_stretch_source->setNumOutChannels(numoutchans);
|
||||
m_stretch_source->setFFTSize(m_fft_size_to_use);
|
||||
m_stretch_source->setProcessParameters(&m_ppar);
|
||||
|
@ -277,7 +277,7 @@ private:
|
||||
std::vector<int> m_bufamounts{ 4096,8192,16384,32768,65536,262144 };
|
||||
ProcessParameters m_ppar;
|
||||
int mPluginWindowWidth = 820;
|
||||
int mPluginWindowHeight = 700;
|
||||
int mPluginWindowHeight = 710;
|
||||
|
||||
void setFFTSize(double size);
|
||||
void startplay(Range<double> playrange, int numoutchans, int maxBlockSize, String& err);
|
||||
|
@ -25,6 +25,14 @@ EnvelopeComponent::EnvelopeComponent(CriticalSection* cs) : m_cs(cs)
|
||||
XFromNormalized = [](double x) { return x; };
|
||||
addChildComponent(&m_bubble);
|
||||
setOpaque(true);
|
||||
|
||||
//#if JUCE_IOS
|
||||
m_menubutton.setButtonText("...");
|
||||
m_menubutton.onClick = [this]() {
|
||||
showPopupMenu();
|
||||
};
|
||||
addAndMakeVisible(&m_menubutton);
|
||||
//#endif
|
||||
}
|
||||
|
||||
EnvelopeComponent::~EnvelopeComponent()
|
||||
@ -50,6 +58,16 @@ void EnvelopeComponent::show_bubble(int x, int y, const envelope_point& node)
|
||||
m_bubble.showAt({ x,y,100,20 }, temp , 5000);
|
||||
}
|
||||
|
||||
void EnvelopeComponent::resized()
|
||||
{
|
||||
//#if JUCE_IOS
|
||||
int butw = 38;
|
||||
int buth = 38;
|
||||
m_menubutton.setBounds(getWidth() - butw - 1, 1, butw, buth);
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
||||
void EnvelopeComponent::paint(Graphics& g)
|
||||
{
|
||||
float targsize = 8.0;
|
||||
@ -223,11 +241,7 @@ void EnvelopeComponent::mouseMove(const MouseEvent & ev)
|
||||
}
|
||||
}
|
||||
|
||||
void EnvelopeComponent::mouseDown(const MouseEvent & ev)
|
||||
{
|
||||
if (m_envelope == nullptr)
|
||||
return;
|
||||
if (ev.mods.isRightButtonDown() == true)
|
||||
void EnvelopeComponent::showPopupMenu()
|
||||
{
|
||||
PopupMenu menu;
|
||||
PopupMenu::Options opts;
|
||||
@ -235,7 +249,9 @@ void EnvelopeComponent::mouseDown(const MouseEvent & ev)
|
||||
menu.addItem(2, "Invert");
|
||||
menu.addItem(3, "Wrap envelope X transform", true, m_envelope->m_transform_wrap_x);
|
||||
menu.addItem(4, "Envelope Y random linear interpolation", true, m_envelope->m_transform_y_random_linear_interpolation);
|
||||
|
||||
#if JUCE_IOS
|
||||
opts = opts.withStandardItemHeight(34);
|
||||
#endif
|
||||
auto callback = [this] (int r) {
|
||||
if (r == 1)
|
||||
{
|
||||
@ -267,7 +283,15 @@ void EnvelopeComponent::mouseDown(const MouseEvent & ev)
|
||||
|
||||
|
||||
menu.showMenuAsync(opts, callback);
|
||||
}
|
||||
|
||||
void EnvelopeComponent::mouseDown(const MouseEvent & ev)
|
||||
{
|
||||
if (m_envelope == nullptr)
|
||||
return;
|
||||
if (ev.mods.isRightButtonDown() == true)
|
||||
{
|
||||
showPopupMenu();
|
||||
return;
|
||||
}
|
||||
m_node_to_drag = find_hot_envelope_point(ev.x, ev.y);
|
||||
@ -312,7 +336,9 @@ void EnvelopeComponent::mouseDown(const MouseEvent & ev)
|
||||
m_envelope->SortNodes();
|
||||
m_cs->exit();
|
||||
m_envelope->updateMinMaxValues();
|
||||
m_mouse_down = false;
|
||||
|
||||
m_node_to_drag = find_hot_envelope_point(ev.x, ev.y);
|
||||
//m_mouse_down = false;
|
||||
OnEnvelopeEdited(m_envelope.get());
|
||||
repaint();
|
||||
}
|
||||
@ -413,7 +439,7 @@ int EnvelopeComponent::find_hot_envelope_point(double xcor, double ycor)
|
||||
double ptycor = (double)getHeight() - jmap(pt.pt_y, m_view_start_value, m_view_end_value, 0.0, (double)getHeight());
|
||||
float targsize = 8.0;
|
||||
#if JUCE_IOS
|
||||
targsize = 16.0;
|
||||
targsize = 20;
|
||||
#endif
|
||||
juce::Rectangle<double> target(ptxcor - targsize*0.5f, ptycor - targsize*0.5, targsize, targsize);
|
||||
if (target.contains(xcor, ycor) == true)
|
||||
@ -428,7 +454,7 @@ int EnvelopeComponent::findHotEnvelopeSegment(double xcor, double ycor, bool det
|
||||
{
|
||||
float targsize = 8.0;
|
||||
#if JUCE_IOS
|
||||
targsize = 16.0;
|
||||
targsize = 20.0;
|
||||
#endif
|
||||
|
||||
if (m_envelope == nullptr)
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
EnvelopeComponent(CriticalSection* cs);
|
||||
~EnvelopeComponent();
|
||||
void paint(Graphics& g) override;
|
||||
void resized() override;
|
||||
void set_envelope(std::shared_ptr<breakpoint_envelope> env, String name = String());
|
||||
std::shared_ptr<breakpoint_envelope> get_envelope() { return m_envelope; }
|
||||
String get_name() { return m_name; }
|
||||
@ -53,6 +54,8 @@ public:
|
||||
void timerCallback(int id) override;
|
||||
//String getTooltip() override;
|
||||
private:
|
||||
void showPopupMenu();
|
||||
|
||||
std::shared_ptr<breakpoint_envelope> m_envelope;
|
||||
String m_name;
|
||||
Colour m_env_color{ Colours::yellow };
|
||||
@ -68,6 +71,7 @@ private:
|
||||
int m_node_that_was_dragged = -1;
|
||||
String m_last_tip;
|
||||
BubbleMessageComponent m_bubble;
|
||||
TextButton m_menubutton;
|
||||
void show_bubble(int x, int y, const envelope_point &node);
|
||||
CriticalSection* m_cs = nullptr;
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(EnvelopeComponent)
|
||||
|
119
images/freeze.svg
Normal file
@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.0"
|
||||
width="30"
|
||||
height="30"
|
||||
id="svg1437"
|
||||
sodipodi:docname="freeze.svg"
|
||||
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-ydpi="102.4"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:snap-bbox="false"
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1124"
|
||||
inkscape:window-height="686"
|
||||
id="namedview4593"
|
||||
showgrid="false"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:zoom="6.7315007"
|
||||
inkscape:cx="25.031565"
|
||||
inkscape:cy="12.92431"
|
||||
inkscape:window-x="2680"
|
||||
inkscape:window-y="314"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<inkscape:grid
|
||||
id="grid11889"
|
||||
type="xygrid" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="EmptyTriangleInS"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="EmptyTriangleInS">
|
||||
<path
|
||||
transform="scale(-0.2) translate(-3.0,0)"
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
id="path1125" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Send"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Send">
|
||||
<path
|
||||
transform="scale(0.2) rotate(180) translate(6,0)"
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path983" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2864"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="TriangleInM">
|
||||
<path
|
||||
transform="scale(-0.4)"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path2862" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="30"
|
||||
width="30"
|
||||
id="rect9748"
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 25.396273,19.723459 -1.726856,-0.997513 a 4.5472171,4.5472171 0 0 1 1.06354,-0.812638 1.1173771,1.1173771 0 0 0 -1.080808,-1.955918 6.7865425,6.7865425 0 0 0 -1.95795,1.630355 l -4.475095,-2.587744 4.47408,-2.583172 a 6.7784161,6.7784161 0 0 0 1.957949,1.630354 1.1173771,1.1173771 0 1 0 1.080809,-1.955917 4.557883,4.557883 0 0 1 -1.06354,-0.812638 l 1.726855,-0.997513 A 1.1173771,1.1173771 0 1 0 24.278896,8.346529 L 22.55204,9.343534 A 4.557883,4.557883 0 0 1 22.378339,8.015379 1.1173771,1.1173771 0 0 0 21.282294,6.873623 h -0.02082 a 1.1173771,1.1173771 0 0 0 -1.117377,1.096553 6.7860346,6.7860346 0 0 0 0.431713,2.509527 L 16.101731,13.0644 V 7.898562 A 6.7804477,6.7804477 0 0 0 18.49241,7.018374 1.117458,1.117458 0 0 0 17.338972,5.104104 4.5487408,4.5487408 0 0 1 16.101731,5.617589 V 3.9278069 a 1.1173771,1.1173771 0 0 0 -2.234754,0 V 5.617589 a 4.5487408,4.5487408 0 0 1 -1.237242,-0.513485 1.117458,1.117458 0 1 0 -1.153438,1.91427 6.7804477,6.7804477 0 0 0 2.39068,0.880188 V 13.0644 L 9.3928969,10.479703 A 6.7860346,6.7860346 0 0 0 9.8256269,7.96916 1.1173771,1.1173771 0 0 0 8.7082489,6.872607 h -0.02184 A 1.1173771,1.1173771 0 0 0 7.5898549,8.010808 4.557883,4.557883 0 0 1 7.4166619,9.340995 L 5.6898061,8.346529 a 1.1173771,1.1173771 0 1 0 -1.117377,1.935094 l 1.726856,0.997513 a 4.557883,4.557883 0 0 1 -1.06354,0.812638 1.1173771,1.1173771 0 1 0 1.080808,1.955917 6.7865425,6.7865425 0 0 0 1.9579498,-1.630354 l 4.4750951,2.582664 -4.4740791,2.583173 a 6.7865425,6.7865425 0 0 0 -1.9579498,-1.630355 1.1173771,1.1173771 0 1 0 -1.080808,1.955918 4.557883,4.557883 0 0 1 1.06354,0.812638 l -1.727872,1.002084 a 1.1173771,1.1173771 0 1 0 1.117377,1.935094 l 1.7268558,-0.997005 a 4.557883,4.557883 0 0 1 0.173701,1.328155 1.1173771,1.1173771 0 0 0 1.096046,1.136677 h 0.02082 A 1.1173771,1.1173771 0 0 0 9.8246059,22.029827 6.7860346,6.7860346 0 0 0 9.3928919,19.5203 l 4.4740801,-2.584697 v 5.165838 a 6.7804477,6.7804477 0 0 0 -2.39068,0.880188 1.117458,1.117458 0 1 0 1.153438,1.91427 4.5487408,4.5487408 0 0 1 1.237242,-0.513485 v 1.689779 a 1.1173771,1.1173771 0 0 0 2.234754,0 v -1.689779 a 4.5487408,4.5487408 0 0 1 1.237241,0.513485 1.117458,1.117458 0 0 0 1.153438,-1.91427 6.7804477,6.7804477 0 0 0 -2.390679,-0.880188 v -5.165838 l 4.474079,2.584697 a 6.7860346,6.7860346 0 0 0 -0.432729,2.510543 1.1173771,1.1173771 0 0 0 1.117377,1.096553 h 0.02184 a 1.1173771,1.1173771 0 0 0 1.096553,-1.138201 4.557883,4.557883 0 0 1 0.173193,-1.330187 l 1.726856,0.997006 a 1.1173771,1.1173771 0 1 0 1.117378,-1.932555 z"
|
||||
id="path7816"
|
||||
style="fill:#cdcdcd;fill-opacity:1;stroke-width:0.0507899" />
|
||||
</svg>
|
After Width: | Height: | Size: 6.1 KiB |
137
images/loop_icon.svg
Normal file
@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
inkscape:export-ydpi="102.4"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||
sodipodi:docname="loop_icon.svg"
|
||||
id="svg1437"
|
||||
height="30"
|
||||
width="30"
|
||||
version="1.0"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="512"
|
||||
inkscape:window-x="2446"
|
||||
inkscape:cy="17.689025"
|
||||
inkscape:cx="10.200241"
|
||||
inkscape:zoom="7.7449151"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-nodes="true"
|
||||
showgrid="false"
|
||||
id="namedview4593"
|
||||
inkscape:window-height="686"
|
||||
inkscape:window-width="1145"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#000000"
|
||||
inkscape:snap-bbox="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11889" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:stockid="EmptyTriangleInS"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="EmptyTriangleInS"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1125"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
transform="scale(-0.2) translate(-3.0,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Send"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Send"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path983"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
transform="scale(0.2) rotate(180) translate(6,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="TriangleInM"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker2864"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2862"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="scale(-0.4)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1"
|
||||
id="rect9748"
|
||||
width="30"
|
||||
height="30"
|
||||
x="0"
|
||||
y="0" />
|
||||
<g
|
||||
id="g9133">
|
||||
<polyline
|
||||
id="polyline2221"
|
||||
style="fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:37.1429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
points="320 120 368 168 320 216"
|
||||
transform="matrix(0.06730769,0,0,0.06730769,-1.585184,-4.2307686)" />
|
||||
<path
|
||||
id="path2223"
|
||||
style="fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 22.107123,7.0769233 H 8.107124 A 5.400769,5.400769 0 0 0 2.722509,12.461539 v 1.076923" />
|
||||
<polyline
|
||||
id="polyline2225"
|
||||
style="fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:37.1429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
points="192 392 144 344 192 296"
|
||||
transform="matrix(0.06730769,0,0,0.06730769,-2.747237,-0.2307686)" />
|
||||
<path
|
||||
id="path2227"
|
||||
style="fill:none;fill-opacity:1;stroke:#cccccc;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 8.021994,22.923077 h 13.999999 a 5.400769,5.400769 0 0 0 5.384616,-5.384615 v -1.076923" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
74
images/passthru.svg
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||
sodipodi:docname="passthru.svg"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 875 450"
|
||||
height="450"
|
||||
width="875"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Layer_1"
|
||||
version="1.1"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs976" /><sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="132"
|
||||
inkscape:window-x="1788"
|
||||
inkscape:cy="96.472959"
|
||||
inkscape:cx="375.5889"
|
||||
inkscape:zoom="0.53382835"
|
||||
showgrid="false"
|
||||
id="namedview974"
|
||||
inkscape:window-height="785"
|
||||
inkscape:window-width="1558"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#656565"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:pagecheckerboard="true"
|
||||
width="875px" /><rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="450"
|
||||
width="825"
|
||||
id="rect8876"
|
||||
style="fill:#000000;fill-opacity:0;stroke:none;stroke-width:26.396;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><metadata
|
||||
id="metadata971"><rdf:RDF><rdf:Description
|
||||
dc:language="en"
|
||||
dc:format="image/svg+xml"
|
||||
dc:date="2017-09-24"
|
||||
dc:publisher="Iconscout"
|
||||
dc:description="ios,arrow,thin,right"
|
||||
dc:title="ios,arrow,thin,right"
|
||||
about="https://iconscout.com/legal#licenses"><dc:creator><rdf:Bag><rdf:li>Benjamin J Sperry</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><path
|
||||
style="fill:#cccccc;fill-opacity:1;stroke-width:0.0998643"
|
||||
d="m 192.68345,331.50477 v 75.49708 c 0,5.79209 -4.69361,10.38583 -10.38584,10.38583 -5.79211,0 -10.38585,-4.6936 -10.38585,-10.38583 V 331.50477 C 140.05521,329.0082 111.39428,314.92739 90.02343,293.55651 66.35571,269.8888 51.67572,237.23332 51.67572,201.28233 c 0,-5.7921 4.6936,-10.38585 10.38583,-10.38585 5.79211,0 10.38586,4.69361 10.38586,10.38585 0,30.15887 12.3831,57.62146 32.256,77.59419 19.87291,19.87292 47.33546,32.25604 77.5942,32.25604 30.15889,0 57.62145,-12.38312 77.59421,-32.25604 19.8729,-19.87288 32.25602,-47.33542 32.25602,-77.59419 0,-5.7921 4.6936,-10.38585 10.38583,-10.38585 5.79212,0 10.38586,4.69361 10.38586,10.38585 0,35.95099 -14.68,68.60647 -38.34772,92.27418 -21.37086,21.37088 -50.03178,35.45169 -81.88836,37.94826 z M 182.99666,32.61232 c 19.97277,0 38.14798,8.18881 51.33001,21.37084 13.18205,13.18203 21.37086,31.35726 21.37086,51.33003 v 93.97186 c 0,19.97278 -8.18881,38.14802 -21.37086,51.33002 -13.18203,13.18202 -31.35724,21.37086 -51.33001,21.37086 -19.97277,0 -38.14799,-8.18884 -51.33002,-21.37086 -13.18203,-13.182 -21.37085,-31.35724 -21.37085,-51.33002 v -93.97186 c 0,-19.97277 8.18882,-38.148 21.37085,-51.33003 13.18203,-13.18203 31.35725,-21.37084 51.33002,-21.37084 z m 36.55016,36.05084 c -9.38721,-9.38721 -22.36949,-15.17932 -36.55016,-15.17932 -14.28053,0 -27.16297,5.79211 -36.55017,15.17931 -9.38719,9.3872 -15.1793,22.36949 -15.1793,36.55016 v 93.9719 c 0,14.28052 5.79211,27.16295 15.1793,36.55017 9.3872,9.38719 22.3695,15.17927 36.55017,15.17927 14.28052,0 27.16295,-5.79208 36.55016,-15.17927 9.38721,-9.38721 15.17932,-22.36952 15.17932,-36.55016 v -93.9719 c 0,-14.28051 -5.79211,-27.16297 -15.17932,-36.55016 z"
|
||||
fill-rule="nonzero"
|
||||
id="path7563" /><path
|
||||
id="path969"
|
||||
d="m 395.75001,278.70692 c -3.1,-3.1 -3,-8 0,-11.3 l 26.40003,-34.4 h -70.59998 c -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 h 70.59998 l -26.30003,-34.4 c -2.9,-3.4 -3.2,-8.1 -0.1,-11.2 3.1,-3.1 8.5,-3.3 11.4,-0.1 0,0 39.19999,47 39.99999,48 0.8,1 2.4,2.8 2.4,5.7 0,2.9 -1.6,4.9 -2.4,5.7 -0.8,0.8 -39.99999,48 -39.99999,48 -1.5,1.5 -3.6,2.3 -5.7,2.3 -2.1,0 -4.1,-0.8 -5.7,-2.3 z"
|
||||
style="fill:#a9afb8;fill-opacity:0.848083"
|
||||
sodipodi:nodetypes="cccsssccscssscsc" /><path
|
||||
id="path7431"
|
||||
fill="#e5e5e5"
|
||||
d="m 494.477,305.677 c 6.089,3.582 8.06,11.46301 4.299,17.55201 -3.583,6.087 -11.463,8.061 -17.552,4.299 -5.91,-3.582 -10.924,-8.775 -14.506,-14.86501 -3.401,-5.909 -5.372,-12.895 -5.372,-20.057 V 171.185 c 0,-11.283 4.655,-21.491 11.999,-28.833 7.342,-7.343 17.55,-11.998 28.833,-11.998 h 94.557 l 80.59,-81.12701 c 5.015,-5.016 13.074,-5.016 18.089,0 2.507,2.507 3.761,5.73 3.761,9.133 V 124.801 c 0,7.164 -5.73,12.896 -12.895,12.896 -7.162,0 -12.895,-5.731 -12.895,-12.896 V 89.342 L 611.6,151.486 c -2.328,2.686 -5.91,4.478 -9.67,4.478 h -99.932 c -4.119,0 -7.879,1.791 -10.745,4.477 -2.686,2.687 -4.478,6.626 -4.478,10.746 v 121.421 c 0,2.686 0.717,5.191 1.97,7.343 1.254,2.326 3.225,4.298 5.553,5.552 z m 8.418,86.86001 c -5.015,5.015 -13.074,5.015 -18.089,0 -5.014,-5.016 -5.014,-13.075 0,-18.088 L 749.497,109.757 c 5.015,-5.014 13.074,-5.014 18.089,0 5.015,5.015 5.015,13.074 0,18.088 z M 673.743,256.789 c 0,-7.164 5.732,-12.895 12.896,-12.895 7.164,0 12.895,5.73 12.895,12.895 v 134.85101 c 0,7.165 -5.731,12.895 -12.895,12.895 -3.402,0 -6.627,-1.432 -8.775,-3.582 l -66.801,-54.443 c -5.551,-4.476 -6.267,-12.536 -1.79,-17.906 4.478,-5.552 12.537,-6.269 17.91,-1.792 l 46.739,37.966 V 256.788 Z"
|
||||
style="fill:#cccccc;fill-opacity:1" /></svg>
|
After Width: | Height: | Size: 5.7 KiB |
75
images/passthru_enabled.svg
Normal file
@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
inkscape:version="1.1 (c4e8f9e, 2021-05-24)"
|
||||
sodipodi:docname="passthru_enabled.svg"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 875 450"
|
||||
height="450"
|
||||
width="875"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Layer_1"
|
||||
version="1.1"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs976" /><sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="787"
|
||||
inkscape:window-x="1836"
|
||||
inkscape:cy="218.45096"
|
||||
inkscape:cx="281.6623"
|
||||
inkscape:zoom="0.53787816"
|
||||
showgrid="false"
|
||||
id="namedview974"
|
||||
inkscape:window-height="785"
|
||||
inkscape:window-width="1558"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#656565"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:pagecheckerboard="true"
|
||||
width="875px" /><rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="450"
|
||||
width="875"
|
||||
id="rect8876"
|
||||
style="fill:#000000;fill-opacity:0;stroke:none;stroke-width:27.184;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><metadata
|
||||
id="metadata971"><rdf:RDF><rdf:Description
|
||||
dc:language="en"
|
||||
dc:format="image/svg+xml"
|
||||
dc:date="2017-09-24"
|
||||
dc:publisher="Iconscout"
|
||||
dc:description="ios,arrow,thin,right"
|
||||
dc:title="ios,arrow,thin,right"
|
||||
about="https://iconscout.com/legal#licenses"><dc:creator><rdf:Bag><rdf:li>Benjamin J Sperry</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.0998643"
|
||||
d="m 192.68345,331.50477 v 75.49708 c 0,5.79209 -4.69361,10.38583 -10.38584,10.38583 -5.79211,0 -10.38585,-4.6936 -10.38585,-10.38583 v -75.49708 c -31.85655,-2.49657 -60.51748,-16.57738 -81.888332,-37.94826 -23.66772,-23.66771 -38.34771,-56.32319 -38.34771,-92.27418 0,-5.7921 4.6936,-10.38585 10.38583,-10.38585 5.79211,0 10.38586,4.69361 10.38586,10.38585 0,30.15887 12.3831,57.62146 32.256002,77.59419 19.87291,19.87292 47.33546,32.25604 77.5942,32.25604 30.15889,0 57.62145,-12.38312 77.59421,-32.25604 19.8729,-19.87288 32.25602,-47.33542 32.25602,-77.59419 0,-5.7921 4.6936,-10.38585 10.38583,-10.38585 5.79212,0 10.38586,4.69361 10.38586,10.38585 0,35.95099 -14.68,68.60647 -38.34772,92.27418 -21.37086,21.37088 -50.03178,35.45169 -81.88836,37.94826 z M 182.99666,32.612321 c 19.97277,0 38.14798,8.188803 51.33001,21.370835 13.18205,13.182039 21.37086,31.357264 21.37086,51.330034 v 93.97186 c 0,19.97278 -8.18881,38.14802 -21.37086,51.33002 -13.18203,13.18202 -31.35724,21.37086 -51.33001,21.37086 -19.97277,0 -38.14799,-8.18884 -51.33002,-21.37086 -13.18203,-13.182 -21.37085,-31.35724 -21.37085,-51.33002 v -93.97186 c 0,-19.97277 8.18882,-38.147995 21.37085,-51.330034 13.18203,-13.182031 31.35725,-21.370835 51.33002,-21.370835 z m 36.55016,36.050834 c -9.38721,-9.387204 -22.36949,-15.17932 -36.55016,-15.17932 -14.28053,0 -27.16297,5.792115 -36.55017,15.179319 -9.38719,9.387195 -15.1793,22.369485 -15.1793,36.550156 v 93.9719 c 0,14.28052 5.79211,27.16295 15.1793,36.55017 9.3872,9.38719 22.3695,15.17927 36.55017,15.17927 14.28052,0 27.16295,-5.79208 36.55016,-15.17927 9.38721,-9.38721 15.17932,-22.36952 15.17932,-36.55016 v -93.9719 c 0,-14.280511 -5.79211,-27.162971 -15.17932,-36.550165 z"
|
||||
fill-rule="nonzero"
|
||||
id="path7563" /><path
|
||||
id="path969"
|
||||
d="m 727.75001,318.70692 c -3.1,-3.1 -3,-8 0,-11.3 l 66.40003,-74.4 H 363.55006 c -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 h 430.59998 l -66.30003,-74.4 c -2.9,-3.4 -3.2,-8.1 -0.1,-11.2 3.1,-3.1 8.5,-3.3 11.4,-0.1 0,0 79.19999,87 79.99999,88 0.8,1 2.4,2.8 2.4,5.7 0,2.9 -1.6,4.9 -2.4,5.7 -0.8,0.8 -79.99999,88 -79.99999,88 -1.5,1.5 -3.6,2.3 -5.7,2.3 -2.1,0 -4.1,-0.8 -5.7,-2.3 z"
|
||||
style="fill:#a5bde0;fill-opacity:1"
|
||||
sodipodi:nodetypes="cccsssccscssscsc" /><path
|
||||
id="path7296-9"
|
||||
fill-rule="nonzero"
|
||||
d="m 497.42647,130.62944 h 95.87809 l 85.25848,-82.214541 c 4.31551,-4.315516 13.31363,-4.315516 17.62915,0 2.21607,2.21607 3.26579,5.01532 3.26579,7.81457 V 392.78558 c 0,6.18168 -7.01533,12.03616 -13.08037,12.03616 -3.14916,0 -5.94841,-1.28299 -7.93121,-3.38242 l -98.55867,-75.15689 -84.49538,2 c -9.67804,0.22908 -18.54504,-3.96561 -24.95999,-10.38056 -6.41495,-6.41495 -9.28939,-17.27924 -9.28485,-26.95998 l 0.0568,-121.08854 c 0.005,-9.68075 4.73061,-22.54504 11.14556,-28.95999 6.41495,-6.41495 15.27924,-10.38056 24.95999,-10.38056 z M 601.3335,156.79018 H 499.42647 c -3.6157,0 -6.88149,1.51626 -9.33083,3.84896 -2.33271,2.33271 -3.84897,5.71514 -3.84897,9.33084 v 119.08854 c 0,3.6157 1.51626,6.88149 3.84897,9.33084 2.3327,2.33271 5.71513,3.84897 9.33083,3.84897 h 92.54351 c 2.56598,0 5.01532,0.81645 7.11476,2.56598 l 74.93712,61.35243 V 87.334029 l -64.29061,65.607181 c -1.98281,2.3327 -5.01533,3.84897 -8.39775,3.84897 z"
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.116635;stroke-opacity:1"
|
||||
sodipodi:nodetypes="cccssssccsssssccsscsscssccccs" /></svg>
|
After Width: | Height: | Size: 5.6 KiB |
224
images/paulxstretch_icon.svg
Normal file
After Width: | Height: | Size: 44 KiB |
129
images/pause_icon.svg
Normal file
@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="102.4"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
sodipodi:docname="pause_icon.svg"
|
||||
id="svg1437"
|
||||
height="30"
|
||||
width="30"
|
||||
version="1.0">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="825"
|
||||
inkscape:window-x="2586"
|
||||
inkscape:cy="36.580348"
|
||||
inkscape:cx="22.140088"
|
||||
inkscape:zoom="4.4293493"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-nodes="true"
|
||||
showgrid="false"
|
||||
id="namedview4593"
|
||||
inkscape:window-height="686"
|
||||
inkscape:window-width="1145"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#000000"
|
||||
inkscape:snap-bbox="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11889" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:stockid="EmptyTriangleInS"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="EmptyTriangleInS"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1125"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
transform="scale(-0.2) translate(-3.0,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Send"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Send"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path983"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
transform="scale(0.2) rotate(180) translate(6,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="TriangleInM"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker2864"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2862"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="scale(-0.4)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1"
|
||||
id="rect9748"
|
||||
width="30"
|
||||
height="30"
|
||||
x="0"
|
||||
y="0" />
|
||||
<g
|
||||
style="fill:#cccccc;fill-opacity:1"
|
||||
transform="matrix(0.06875,0,0,0.06875,-2.6,-2.6)"
|
||||
id="g6825">
|
||||
<path
|
||||
style="fill:#cccccc;fill-opacity:1"
|
||||
id="path4251"
|
||||
d="M 191,112 V 400 H 144 V 112 h 47 m 16,-16 h -79 v 320 h 79 z" />
|
||||
<path
|
||||
style="fill:#cccccc;fill-opacity:1"
|
||||
id="path4253"
|
||||
d="M 368,112 V 400 H 321 V 112 h 47 m 16,-16 h -79 v 320 h 79 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.9 KiB |
120
images/play_icon.svg
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="30"
|
||||
height="30"
|
||||
id="svg1437"
|
||||
sodipodi:docname="play_icon.svg"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-ydpi="102.4">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:snap-bbox="false"
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1145"
|
||||
inkscape:window-height="686"
|
||||
id="namedview4593"
|
||||
showgrid="false"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:zoom="9.6637918"
|
||||
inkscape:cx="16.163546"
|
||||
inkscape:cy="22.25382"
|
||||
inkscape:window-x="2422"
|
||||
inkscape:window-y="762"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<inkscape:grid
|
||||
id="grid11889"
|
||||
type="xygrid" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="EmptyTriangleInS"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="EmptyTriangleInS">
|
||||
<path
|
||||
transform="scale(-0.2) translate(-3.0,0)"
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
id="path1125" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Send"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Send">
|
||||
<path
|
||||
transform="scale(0.2) rotate(180) translate(6,0)"
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path983" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2864"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="TriangleInM">
|
||||
<path
|
||||
transform="scale(-0.4)"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path2862" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="30"
|
||||
width="30"
|
||||
id="rect9748"
|
||||
style="fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#cccccc;fill-opacity:1;stroke-width:0.084375"
|
||||
d="M 5.55,3.9384375 23.251875,15 5.55,26.061562 V 3.9384375 M 4.2,1.5 v 27 L 25.8,15 Z"
|
||||
id="path4930" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
122
images/record.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="30"
|
||||
height="30"
|
||||
id="svg1437"
|
||||
sodipodi:docname="record.svg"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-ydpi="102.4">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:snap-bbox="false"
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1124"
|
||||
inkscape:window-height="686"
|
||||
id="namedview4593"
|
||||
showgrid="false"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:zoom="2.9373164"
|
||||
inkscape:cx="-2.6694151"
|
||||
inkscape:cy="38.218399"
|
||||
inkscape:window-x="2571"
|
||||
inkscape:window-y="380"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<inkscape:grid
|
||||
id="grid11889"
|
||||
type="xygrid" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="EmptyTriangleInS"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="EmptyTriangleInS">
|
||||
<path
|
||||
transform="scale(-0.2) translate(-3.0,0)"
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
id="path1125" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Send"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Send">
|
||||
<path
|
||||
transform="scale(0.2) rotate(180) translate(6,0)"
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path983" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2864"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="TriangleInM">
|
||||
<path
|
||||
transform="scale(-0.4)"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path2862" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="30"
|
||||
width="30"
|
||||
id="rect9748"
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1" />
|
||||
<circle
|
||||
style="fill:#cd2828;fill-opacity:0.49596775;stroke:#cccccc;stroke-width:1.2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path886"
|
||||
cx="15"
|
||||
cy="15"
|
||||
r="10.826572" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
122
images/record_active.svg
Normal file
@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="30"
|
||||
height="30"
|
||||
id="svg1437"
|
||||
sodipodi:docname="record_active.svg"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
inkscape:export-filename="/Users/jesse/src/sonoaudio/tonalenergy/images/circleslash_icon.png"
|
||||
inkscape:export-xdpi="102.4"
|
||||
inkscape:export-ydpi="102.4">
|
||||
<metadata
|
||||
id="metadata4595">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:snap-bbox="false"
|
||||
pagecolor="#616161"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1145"
|
||||
inkscape:window-height="686"
|
||||
id="namedview4593"
|
||||
showgrid="false"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:zoom="8.0764685"
|
||||
inkscape:cx="11.072755"
|
||||
inkscape:cy="23.634281"
|
||||
inkscape:window-x="2137"
|
||||
inkscape:window-y="843"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1437"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:document-rotation="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<inkscape:grid
|
||||
id="grid11889"
|
||||
type="xygrid" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1440">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="EmptyTriangleInS"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="EmptyTriangleInS">
|
||||
<path
|
||||
transform="scale(-0.2) translate(-3.0,0)"
|
||||
style="fill-rule:evenodd;fill:#cccccc;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill-opacity:1"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
id="path1125" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Send"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Send">
|
||||
<path
|
||||
transform="scale(0.2) rotate(180) translate(6,0)"
|
||||
style="fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1;fill:#cccccc;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path983" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker2864"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="TriangleInM">
|
||||
<path
|
||||
transform="scale(-0.4)"
|
||||
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#cccccc;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path2862" />
|
||||
</marker>
|
||||
</defs>
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="30"
|
||||
width="30"
|
||||
id="rect9748"
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;stroke:none;stroke-width:0.214092;stroke-linecap:round;stroke-opacity:1" />
|
||||
<circle
|
||||
style="fill:#f74848;fill-opacity:1;stroke:#cccccc;stroke-width:1.2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path886"
|
||||
cx="15"
|
||||
cy="15"
|
||||
r="10.826573" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
71
images/skipback_icon.svg
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4f, 2020-05-01)"
|
||||
sodipodi:docname="skipback_icon.svg"
|
||||
id="svg22877"
|
||||
version="1.1"
|
||||
viewBox="0 0 512 512"
|
||||
height="512"
|
||||
width="512">
|
||||
<metadata
|
||||
id="metadata22883">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>ionicons-v5-c</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs22881" />
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="svg22877"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="554"
|
||||
inkscape:window-x="1872"
|
||||
inkscape:cy="-28.607681"
|
||||
inkscape:cx="88.588957"
|
||||
inkscape:zoom="0.21106898"
|
||||
showgrid="false"
|
||||
id="namedview22879"
|
||||
inkscape:window-height="480"
|
||||
inkscape:window-width="776"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<title
|
||||
id="title22871">ionicons-v5-c</title>
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="512"
|
||||
width="512"
|
||||
id="rect24508"
|
||||
style="fill:none;stroke:none;stroke-width:22;stroke-linecap:round;stroke-opacity:1" />
|
||||
<path
|
||||
id="path22873"
|
||||
style="fill:none;stroke:#cccccc;stroke-miterlimit:10;stroke-width:32px;stroke-opacity:1"
|
||||
d="M400,111V401c0,17.44-17,28.52-31,20.16L121.09,272.79c-12.12-7.25-12.12-26.33,0-33.58L369,90.84C383,82.48,400,93.56,400,111Z" />
|
||||
<line
|
||||
id="line22875"
|
||||
style="fill:none;stroke:#cccccc;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px;stroke-opacity:1"
|
||||
y2="432"
|
||||
x2="112"
|
||||
y1="80"
|
||||
x1="112" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
@ -2,24 +2,36 @@
|
||||
|
||||
<JUCERPROJECT id="fn1Rg8" name="PaulXStretch" displaySplashScreen="0" reportAppUsage="0"
|
||||
splashScreenColour="Dark" projectType="audioplug" version="1.5.0"
|
||||
bundleIdentifier="com.xenakios.paulxstretch" includeBinaryInAppConfig="1"
|
||||
bundleIdentifier="com.sonosaurus.paulxstretch" includeBinaryInAppConfig="1"
|
||||
cppLanguageStandard="latest" companyCopyright="" buildVST="0"
|
||||
buildVST3="1" buildAU="1" buildAUv3="0" buildRTAS="0" buildAAX="0"
|
||||
buildStandalone="1" enableIAA="0" pluginName="PaulXStretch" pluginDesc="PaulXStretch"
|
||||
pluginManufacturer="Xenakios" pluginManufacturerCode="XenS" pluginCode="Fn1r"
|
||||
pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"
|
||||
pluginManufacturer="Sonosaurus" pluginManufacturerCode="Sono"
|
||||
pluginCode="Pxst" pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"
|
||||
pluginIsMidiEffectPlugin="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="paulxstretchAU"
|
||||
aaxIdentifier="com.yourcompany.paulstretchplugin" pluginAAXCategory="2"
|
||||
aaxIdentifier="com.sonosaurus.paulxstretch" pluginAAXCategory="2"
|
||||
headerPath=" " pluginFormats="buildAU,buildStandalone,buildVST3"
|
||||
jucerFormatVersion="1" useAppConfig="0" defines="JUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP=1">
|
||||
<MAINGROUP id="nozXHl" name="PaulXStretch">
|
||||
<GROUP id="{F2FF95A8-60F3-2FB2-CE4F-933A28090D76}" name="images">
|
||||
<FILE id="TfUptN" name="freeze.svg" compile="0" resource="1" file="images/freeze.svg"/>
|
||||
<FILE id="zJaIhl" name="loop_icon.svg" compile="0" resource="1" file="images/loop_icon.svg"/>
|
||||
<FILE id="RIDaIb" name="passthru.svg" compile="0" resource="1" file="images/passthru.svg"/>
|
||||
<FILE id="PzIN7l" name="passthru_enabled.svg" compile="0" resource="1"
|
||||
file="images/passthru_enabled.svg"/>
|
||||
<FILE id="Yny1oQ" name="paulxstretch_icon_256_rounded.png" compile="0"
|
||||
resource="0" file="images/paulxstretch_icon_256_rounded.png"/>
|
||||
<FILE id="hG1CYd" name="paulxstretch_icon_1024_rounded.png" compile="0"
|
||||
resource="0" file="images/paulxstretch_icon_1024_rounded.png"/>
|
||||
<FILE id="U8ebq1" name="pause_icon.svg" compile="0" resource="1" file="images/pause_icon.svg"/>
|
||||
<FILE id="OhlmmO" name="play_icon.svg" compile="0" resource="1" file="images/play_icon.svg"/>
|
||||
<FILE id="PLvX8b" name="power.svg" compile="0" resource="1" file="images/power.svg"/>
|
||||
<FILE id="PMRzOf" name="power_sel.svg" compile="0" resource="1" file="images/power_sel.svg"/>
|
||||
<FILE id="s7ZAxz" name="record.svg" compile="0" resource="1" file="images/record.svg"/>
|
||||
<FILE id="DhBJaN" name="record_active.svg" compile="0" resource="1"
|
||||
file="images/record_active.svg"/>
|
||||
<FILE id="M5ArEf" name="skipback_icon.svg" compile="0" resource="1"
|
||||
file="images/skipback_icon.svg"/>
|
||||
</GROUP>
|
||||
<GROUP id="{03DA6B32-F666-FF60-F168-4385D0847058}" name="Source">
|
||||
<GROUP id="{3B6D1AF9-E53E-2F78-24A5-D12A34009E6A}" name="PS_Source">
|
||||
@ -76,7 +88,7 @@
|
||||
microphonePermissionsText="This application requires audio input to capture live audio for processing"
|
||||
hardenedRuntime="1" hardenedRuntimeOptions="com.apple.security.device.audio-input"
|
||||
xcodeValidArchs="arm64,x86_64" buildNumber="100" applicationCategory="public.app-category.music"
|
||||
smallIcon="Yny1oQ" bigIcon="hG1CYd">
|
||||
smallIcon="Yny1oQ" bigIcon="hG1CYd" iosDevelopmentTeamID="XCS435894D">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" enablePluginBinaryCopyStep="1" isDebug="1" optimisation="1"
|
||||
linkTimeOptimisation="0" targetName="PaulXStretch" headerPath="Source/PS_Source Source/WDL ${HOME}/devstatic/include "
|
||||
|
@ -15,12 +15,24 @@
|
||||
jucerFormatVersion="1" useAppConfig="0" defines="JUCE_USE_CUSTOM_PLUGIN_STANDALONE_APP=1">
|
||||
<MAINGROUP id="nozXHl" name="PaulXStretch">
|
||||
<GROUP id="{69E87EB6-7140-DB40-3383-82191582FEA1}" name="images">
|
||||
<FILE id="krdp8M" name="freeze.svg" compile="0" resource="1" file="images/freeze.svg"/>
|
||||
<FILE id="DHdvWm" name="loop_icon.svg" compile="0" resource="1" file="images/loop_icon.svg"/>
|
||||
<FILE id="eqafbl" name="passthru.svg" compile="0" resource="1" file="images/passthru.svg"/>
|
||||
<FILE id="JDf2c6" name="passthru_enabled.svg" compile="0" resource="1"
|
||||
file="images/passthru_enabled.svg"/>
|
||||
<FILE id="yM4pfJ" name="paulxstretch_icon_256.png" compile="0" resource="0"
|
||||
file="images/paulxstretch_icon_256.png"/>
|
||||
<FILE id="eZYcsl" name="paulxstretch_icon_1024.png" compile="0" resource="0"
|
||||
file="images/paulxstretch_icon_1024.png"/>
|
||||
<FILE id="bg7hAk" name="pause_icon.svg" compile="0" resource="1" file="images/pause_icon.svg"/>
|
||||
<FILE id="uGTN39" name="play_icon.svg" compile="0" resource="1" file="images/play_icon.svg"/>
|
||||
<FILE id="OyhaIc" name="power.svg" compile="0" resource="1" file="images/power.svg"/>
|
||||
<FILE id="uMLkyi" name="power_sel.svg" compile="0" resource="1" file="images/power_sel.svg"/>
|
||||
<FILE id="kOKR8S" name="record.svg" compile="0" resource="1" file="images/record.svg"/>
|
||||
<FILE id="aogj2H" name="record_active.svg" compile="0" resource="1"
|
||||
file="images/record_active.svg"/>
|
||||
<FILE id="MKkrTg" name="skipback_icon.svg" compile="0" resource="1"
|
||||
file="images/skipback_icon.svg"/>
|
||||
</GROUP>
|
||||
<GROUP id="{03DA6B32-F666-FF60-F168-4385D0847058}" name="Source">
|
||||
<GROUP id="{3B6D1AF9-E53E-2F78-24A5-D12A34009E6A}" name="PS_Source">
|
||||
@ -76,7 +88,7 @@
|
||||
</MAINGROUP>
|
||||
<EXPORTFORMATS>
|
||||
<XCODE_IPHONE targetFolder="Builds/iOS" iosDevelopmentTeamID="XCS435894D" microphonePermissionNeeded="1"
|
||||
iosBackgroundAudio="1" buildNumber="101" iosScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown"
|
||||
iosBackgroundAudio="1" buildNumber="103" iosScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown"
|
||||
iPadScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown"
|
||||
UIStatusBarHidden="0" UIRequiresFullScreen="0" customPList="<plist version="1.0"> <dict> <key>ITSAppUsesNonExemptEncryption</key> 	<false/> <key>UIStatusBarHidden</key> 	<false/> 	<key>UIStatusBarStyle</key> 	<string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> <key>NSLocalNetworkUsageDescription</key> 	<string>DrumJamPad uses networking to communicate with other local services</string> <key>CFBundleDocumentTypes</key> 	<array> 		<dict> 			<key>CFBundleTypeIconFiles</key> 			<array/> 			<key>CFBundleTypeName</key> 			<string>Audio File</string> 			<key>CFBundleTypeRole</key> 			<string>Viewer</string> 			<key>LSHandlerRank</key> 			<string>Owner</string> 			<key>LSItemContentTypes</key> 			<array> 				<string>com.microsoft.waveform-audio</string> 				<string>public.aiff-audio</string> 				<string>com.apple.coreaudio-format</string> 				<string>public.mpeg-4-audio</string> 				<string>public.mp3</string> 			</array> 		</dict> 		</array> </dict> </plist>"
|
||||
UIFileSharingEnabled="1" UISupportsDocumentBrowser="1" extraDefs="PS_USE_VDSP_FFT=1"
|
||||
|