@@ -52,8 +52,9 @@ PaulstretchpluginAudioProcessorEditor::PaulstretchpluginAudioProcessorEditor(Pau | |||||
AudioProcessorParameterWithID* parid = dynamic_cast<AudioProcessorParameterWithID*>(pars[i]); | AudioProcessorParameterWithID* parid = dynamic_cast<AudioProcessorParameterWithID*>(pars[i]); | ||||
jassert(parid); | jassert(parid); | ||||
bool notifyonlyonrelease = false; | bool notifyonlyonrelease = false; | ||||
if (parid->paramID.startsWith("fftsize") || parid->paramID.startsWith("numoutchans")) | |||||
notifyonlyonrelease = true; | |||||
if (parid->paramID.startsWith("fftsize") || parid->paramID.startsWith("numoutchans") | |||||
|| parid->paramID.startsWith("numinchans")) | |||||
notifyonlyonrelease = true; | |||||
m_parcomps.push_back(std::make_shared<ParameterComponent>(pars[i],notifyonlyonrelease)); | m_parcomps.push_back(std::make_shared<ParameterComponent>(pars[i],notifyonlyonrelease)); | ||||
int group_id = -1; | int group_id = -1; | ||||
if (i == cpi_harmonicsbw || i == cpi_harmonicsfreq || i == cpi_harmonicsgauss || i == cpi_numharmonics) | if (i == cpi_harmonicsbw || i == cpi_harmonicsfreq || i == cpi_harmonicsgauss || i == cpi_numharmonics) | ||||
@@ -149,10 +150,13 @@ void PaulstretchpluginAudioProcessorEditor::resized() | |||||
m_parcomps[cpi_freeze]->setBounds(xoffs, yoffs, div - 1, 24); | m_parcomps[cpi_freeze]->setBounds(xoffs, yoffs, div - 1, 24); | ||||
xoffs = 1; | xoffs = 1; | ||||
yoffs += 25; | yoffs += 25; | ||||
div = w / 2; | |||||
div = w / 3; | |||||
m_parcomps[cpi_main_volume]->setBounds(xoffs, yoffs, div-1, 24); | m_parcomps[cpi_main_volume]->setBounds(xoffs, yoffs, div-1, 24); | ||||
xoffs += div; | xoffs += div; | ||||
m_parcomps[cpi_num_inchans]->setBounds(xoffs, yoffs, div - 1, 24); | |||||
xoffs += div; | |||||
m_parcomps[cpi_num_outchans]->setBounds(xoffs, yoffs, div-1, 24); | m_parcomps[cpi_num_outchans]->setBounds(xoffs, yoffs, div-1, 24); | ||||
div = w / 2; | |||||
xoffs = 1; | xoffs = 1; | ||||
yoffs += 25; | yoffs += 25; | ||||
m_parcomps[cpi_fftsize]->setBounds(xoffs, yoffs, div - 1, 24); | m_parcomps[cpi_fftsize]->setBounds(xoffs, yoffs, div - 1, 24); | ||||
@@ -140,6 +140,8 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor() | |||||
addParameter(new AudioParameterFloat("maxcapturelen_0", "Max capture length", 1.0f, 120.0f, 10.0f)); // 29 | addParameter(new AudioParameterFloat("maxcapturelen_0", "Max capture length", 1.0f, 120.0f, 10.0f)); // 29 | ||||
addParameter(new AudioParameterBool("passthrough0", "Pass input through", false)); // 30 | addParameter(new AudioParameterBool("passthrough0", "Pass input through", false)); // 30 | ||||
addParameter(new AudioParameterBool("markdirty0", "Internal (don't use)", false)); // 31 | addParameter(new AudioParameterBool("markdirty0", "Internal (don't use)", false)); // 31 | ||||
m_inchansparam = new AudioParameterInt("numinchans0", "Num input channels", 2, 8, 2); // 32 | |||||
addParameter(m_inchansparam); // 32 | |||||
auto& pars = getParameters(); | auto& pars = getParameters(); | ||||
for (const auto& p : pars) | for (const auto& p : pars) | ||||
m_reset_pars.push_back(p->getValue()); | m_reset_pars.push_back(p->getValue()); | ||||
@@ -394,7 +396,7 @@ void PaulstretchpluginAudioProcessor::prepareToPlay(double sampleRate, int sampl | |||||
ScopedLock locker(m_cs); | ScopedLock locker(m_cs); | ||||
m_cur_sr = sampleRate; | m_cur_sr = sampleRate; | ||||
m_curmaxblocksize = samplesPerBlock; | m_curmaxblocksize = samplesPerBlock; | ||||
m_input_buffer.setSize(2, samplesPerBlock); | |||||
m_input_buffer.setSize(getMainBusNumInputChannels(), samplesPerBlock); | |||||
int numoutchans = *m_outchansparam; | int numoutchans = *m_outchansparam; | ||||
if (numoutchans != m_cur_num_out_chans) | if (numoutchans != m_cur_num_out_chans) | ||||
m_prebuffering_inited = false; | m_prebuffering_inited = false; | ||||
@@ -623,7 +625,7 @@ void PaulstretchpluginAudioProcessor::setRecordingEnabled(bool b) | |||||
{ | { | ||||
m_using_memory_buffer = true; | m_using_memory_buffer = true; | ||||
m_current_file = File(); | m_current_file = File(); | ||||
m_recbuffer.setSize(2, m_max_reclen*getSampleRateChecked()+4096,false,false,true); | |||||
m_recbuffer.setSize(getMainBusNumInputChannels(), m_max_reclen*getSampleRateChecked()+4096,false,false,true); | |||||
m_recbuffer.clear(); | m_recbuffer.clear(); | ||||
m_rec_pos = 0; | m_rec_pos = 0; | ||||
m_thumb->reset(m_recbuffer.getNumChannels(), getSampleRateChecked(), lenbufframes); | m_thumb->reset(m_recbuffer.getNumChannels(), getSampleRateChecked(), lenbufframes); | ||||
@@ -57,6 +57,7 @@ const int cpi_pause_enabled = 28; | |||||
const int cpi_max_capture_len = 29; | const int cpi_max_capture_len = 29; | ||||
const int cpi_passthrough = 30; | const int cpi_passthrough = 30; | ||||
const int cpi_markdirty = 31; | const int cpi_markdirty = 31; | ||||
const int cpi_num_inchans = 32; | |||||
class MyPropertiesFile | class MyPropertiesFile | ||||
{ | { | ||||
@@ -192,6 +193,7 @@ private: | |||||
void startplay(Range<double> playrange, int numoutchans, int maxBlockSize, String& err); | void startplay(Range<double> playrange, int numoutchans, int maxBlockSize, String& err); | ||||
SharedResourcePointer<MyThumbCache> m_thumbcache; | SharedResourcePointer<MyThumbCache> m_thumbcache; | ||||
AudioParameterInt* m_outchansparam = nullptr; | AudioParameterInt* m_outchansparam = nullptr; | ||||
AudioParameterInt* m_inchansparam = nullptr; | |||||
int m_curmaxblocksize = 0; | int m_curmaxblocksize = 0; | ||||
double m_cur_sr = 0.0; | double m_cur_sr = 0.0; | ||||
bool m_last_host_playing = false; | bool m_last_host_playing = false; | ||||
@@ -7,10 +7,11 @@ | |||||
buildVST3="0" buildAU="1" buildAUv3="0" buildRTAS="0" buildAAX="0" | buildVST3="0" buildAU="1" buildAUv3="0" buildRTAS="0" buildAAX="0" | ||||
buildStandalone="1" enableIAA="0" pluginName="PaulXStretch" pluginDesc="PaulXStretch" | buildStandalone="1" enableIAA="0" pluginName="PaulXStretch" pluginDesc="PaulXStretch" | ||||
pluginManufacturer="Xenakios" pluginManufacturerCode="XenS" pluginCode="Fn1r" | pluginManufacturer="Xenakios" pluginManufacturerCode="XenS" pluginCode="Fn1r" | ||||
pluginChannelConfigs="{2,2},{2,4}, {2,8}" pluginIsSynth="0" pluginWantsMidiIn="0" | |||||
pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0" pluginEditorRequiresKeys="0" | |||||
pluginAUExportPrefix="paulxstretchAU" pluginRTASCategory="" aaxIdentifier="com.yourcompany.paulstretchplugin" | |||||
pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="5.2.0" | |||||
pluginChannelConfigs="{2,2},{2,4}, {2,8}, {8,8}" pluginIsSynth="0" | |||||
pluginWantsMidiIn="0" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0" | |||||
pluginEditorRequiresKeys="0" pluginAUExportPrefix="paulxstretchAU" | |||||
pluginRTASCategory="" aaxIdentifier="com.yourcompany.paulstretchplugin" | |||||
pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="5.2.1" | |||||
headerPath=" "> | headerPath=" "> | ||||
<MAINGROUP id="nozXHl" name="PaulXStretch"> | <MAINGROUP id="nozXHl" name="PaulXStretch"> | ||||
<GROUP id="{03DA6B32-F666-FF60-F168-4385D0847058}" name="Source"> | <GROUP id="{03DA6B32-F666-FF60-F168-4385D0847058}" name="Source"> | ||||
@@ -8,6 +8,8 @@ Released under GNU General Public License v.2 license. | |||||
History : | History : | ||||
02-12-2018 1.0.1 | |||||
-Increased maximum number of input channels to 8 | |||||
02-09-2018 1.0.0 | 02-09-2018 1.0.0 | ||||
-Control/Command click on waveform seeks (if click within active play range) | -Control/Command click on waveform seeks (if click within active play range) | ||||
-Moved prebuffering amount menu to prebuffering meter (click to show) | -Moved prebuffering amount menu to prebuffering meter (click to show) | ||||