|
- /*
-
- Copyright (C) 2017 Xenakios
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 3 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 3) for more details.
-
- www.gnu.org/licenses
-
- */
-
-
- #include "PluginProcessor.h"
- //extern std::unique_ptr<PropertiesFile> g_propsfile;
- #include "RenderSettingsComponent.h"
-
- RenderSettingsComponent::RenderSettingsComponent (PaulstretchpluginAudioProcessor* mc)
- {
- m_proc = mc;
- addAndMakeVisible(&m_labelMaxOutDuration);
- m_labelMaxOutDuration.setText("Max output duration (hours) :", dontSendNotification);
- addAndMakeVisible(&m_editorMaxOutDuration);
- m_editorMaxOutDuration.setText("1.0", dontSendNotification);
- addAndMakeVisible(&m_toggleFloatClip);
- m_toggleFloatClip.setButtonText("Clip floating point output");
- m_toggleFloatClip.setToggleState(false, dontSendNotification);
- addAndMakeVisible(&labelSamplerate);
- labelSamplerate.setText("Sample rate :", dontSendNotification);
- addAndMakeVisible(&comboBoxSamplerate);
- comboBoxSamplerate.addItem("Source sample rate", 1);
- comboBoxSamplerate.addItem("44100", 44100);
- comboBoxSamplerate.addItem("48000", 48000);
- comboBoxSamplerate.addItem("88200", 88200);
- comboBoxSamplerate.addItem("96000", 96000);
-
- comboBoxSamplerate.addListener (this);
-
- addAndMakeVisible(&labelBitDepth);
- labelBitDepth.setText("Format :", dontSendNotification);
- addAndMakeVisible(&comboBoxBitDepth);
- comboBoxBitDepth.addItem (TRANS("16 bit PCM"), 1);
- comboBoxBitDepth.addItem (TRANS("24 bit PCM"), 2);
- comboBoxBitDepth.addItem (TRANS("32 bit floating point"), 3);
- comboBoxBitDepth.addListener (this);
-
- addAndMakeVisible(&buttonRender);
- buttonRender.setButtonText (TRANS("Render"));
- buttonRender.addListener (this);
-
- addAndMakeVisible(&label3);
- label3.setText("Number of loops\n(approximate) :", dontSendNotification);
- addAndMakeVisible(&numLoopsEditor);
- numLoopsEditor.setMultiLine (false);
- numLoopsEditor.setReturnKeyStartsNewLine (false);
- numLoopsEditor.setReadOnly (false);
- numLoopsEditor.setCaretVisible (true);
- numLoopsEditor.setText (TRANS("1"));
-
- addAndMakeVisible(&label4);
- label4.setText("Output file :\n", dontSendNotification);
-
-
- addAndMakeVisible(&outfileNameEditor);
- outfileNameEditor.setMultiLine (false);
- outfileNameEditor.setReturnKeyStartsNewLine (false);
- outfileNameEditor.setReadOnly (false);
- outfileNameEditor.setScrollbarsShown (true);
- outfileNameEditor.setCaretVisible (true);
- outfileNameEditor.addListener(this);
-
- addAndMakeVisible(&buttonSelectFile);
- buttonSelectFile.setTooltip("Open dialog to choose file to render to");
- buttonSelectFile.setButtonText (TRANS("..."));
- buttonSelectFile.addListener (this);
- setSize (600, 400);
- comboBoxSamplerate.setSelectedId(1);
- comboBoxBitDepth.setSelectedId(3);
- String lastexportfile = m_proc->m_propsfile->m_props_file->getValue(ID_lastrenderpath);
- auto sep = File::getSeparatorChar();
- File temp(lastexportfile);
- if (temp.getParentDirectory().exists())
- outfileNameEditor.setText(lastexportfile, dontSendNotification);
- else
- outfileNameEditor.setText(File::getSpecialLocation(File::userDocumentsDirectory).getFullPathName()+sep+"pxsrender.wav",
- dontSendNotification);
- numLoopsEditor.setVisible(m_proc->getStretchSource()->isLoopingEnabled());
- label3.setVisible(m_proc->getStretchSource()->isLoopingEnabled());
- }
-
- RenderSettingsComponent::~RenderSettingsComponent()
- {
- //g_propsfile->setValue("last_export_file",outfileNameEditor.getText());
- }
-
- //==============================================================================
- void RenderSettingsComponent::paint (Graphics& g)
- {
- g.fillAll (Colour (0xff323e44));
- }
-
- void RenderSettingsComponent::resized()
- {
- int xoffs = 8;
- int yoffs = 1;
- int labelw = 160;
- int labelh = 24;
-
- label4.setBounds(xoffs, yoffs, labelw, 24);
- outfileNameEditor.setBounds(label4.getRight()+1, yoffs, getWidth() - labelw - 34 - xoffs, 24);
- buttonSelectFile.setBounds(outfileNameEditor.getRight() + 1, yoffs, 31, 24);
- yoffs += 25;
- labelSamplerate.setBounds (xoffs, yoffs, labelw, labelh);
- comboBoxSamplerate.setBounds (labelSamplerate.getRight()+1, yoffs, 150, 24);
- yoffs += 25;
- labelBitDepth.setBounds (xoffs, yoffs, labelw, 24);
- comboBoxBitDepth.setBounds (labelBitDepth.getRight()+1, yoffs, 150, 24);
- m_toggleFloatClip.setBounds(comboBoxBitDepth.getRight() + 1, yoffs, 10, 24);
- m_toggleFloatClip.changeWidthToFitText();
- yoffs += 25;
- if (m_proc->getStretchSource()->isLoopingEnabled())
- {
- label3.setBounds(xoffs, yoffs, labelw, 48);
- numLoopsEditor.setBounds(label3.getRight() + 1, yoffs, 150, 24);
- yoffs += 50;
- }
-
-
- m_labelMaxOutDuration.setBounds(xoffs, yoffs, 220, 24);
- m_editorMaxOutDuration.setBounds(m_labelMaxOutDuration.getRight() + 1, yoffs, 50, 24);
- yoffs += 25;
- buttonRender.setBounds(getWidth() - 152, getHeight()-25, 150, 24);
- }
-
- void RenderSettingsComponent::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
- {
- if (comboBoxThatHasChanged == &comboBoxBitDepth)
- {
- if (comboBoxBitDepth.getSelectedId() == 3)
- m_toggleFloatClip.setEnabled(true);
- else m_toggleFloatClip.setEnabled(false);
- }
-
- }
-
- void RenderSettingsComponent::buttonClicked (Button* buttonThatWasClicked)
- {
- if (buttonThatWasClicked == &buttonRender)
- {
- File outfile(outfileNameEditor.getText());
- if (outfile.getParentDirectory().exists()==false)
- buttonClicked(&buttonSelectFile);
- outfile = File(outfileNameEditor.getText());
- if (outfile.getParentDirectory().exists()==false)
- return;
- int numLoops = 0;
- if (numLoopsEditor.isVisible())
- numLoops = numLoopsEditor.getText().getLargeIntValue();
- numLoops = jlimit<int>(0, 1000000, numLoops);
- int sampleRate = comboBoxSamplerate.getSelectedId();
- if (sampleRate == 1)
- sampleRate = 0;
- double maxrenderlen = m_editorMaxOutDuration.getText().getDoubleValue()*3600.0;
- maxrenderlen = jlimit(1.0, 1000000.0, maxrenderlen);
- int oformat = comboBoxBitDepth.getSelectedId() - 1;
- if (oformat == 2 && m_toggleFloatClip.getToggleState())
- oformat = 3;
- OfflineRenderParams renderpars{ File(outfileNameEditor.getText()),(double)comboBoxSamplerate.getSelectedId(),
- oformat,maxrenderlen,numLoops };
- m_proc->m_propsfile->m_props_file->setValue(ID_lastrenderpath, outfileNameEditor.getText());
- m_proc->offlineRender(renderpars);
- if (auto pardlg = dynamic_cast<CallOutBox*>(getParentComponent()); pardlg!=nullptr)
- {
- pardlg->exitModalState(1);
- }
- return;
- }
- else if (buttonThatWasClicked == &buttonSelectFile)
- {
- File lastexportfolder; // File(g_propsfile->getValue("last_export_file")).getParentDirectory();
- FileChooser myChooser("Please select audio file to render...",
- lastexportfolder,
- "*.wav");
- if (myChooser.browseForFileToSave(true))
- {
- outfileNameEditor.setText(myChooser.getResult().getFullPathName(), dontSendNotification);
- }
- }
- }
-
- int RenderSettingsComponent::getPreferredHeight()
- {
- if (m_proc->getStretchSource()->isLoopingEnabled())
- return 180;
- return 150;
- }
-
- void RenderSettingsComponent::textEditorTextChanged(TextEditor & ed)
- {
- return;
- if (&ed == &outfileNameEditor)
- {
- File temp(outfileNameEditor.getText());
- if (temp.getParentDirectory().exists() == false)
- {
- Logger::writeToLog("directory does not exist");
- }
- if (temp.exists() == true)
- {
- File temp2 = temp.getNonexistentSibling();
- Logger::writeToLog(temp.getFullPathName() + " exists, will instead use " + temp2.getFullPathName());
- }
- }
- }
|