adjustable portamento, fixed adsr

This commit is contained in:
michalcourson
2025-10-30 20:00:55 -04:00
parent 098bd49cb5
commit 3645e38dd5
4 changed files with 25 additions and 5 deletions

View File

@ -420,6 +420,7 @@ function App() {
<Container> <Container>
<JuceSlider identifier="formantSlider" title="Formant" /> <JuceSlider identifier="formantSlider" title="Formant" />
<JuceSlider identifier="autoTuneSpeedSlider" title="Auto Tune Speed" /> <JuceSlider identifier="autoTuneSpeedSlider" title="Auto Tune Speed" />
<JuceSlider identifier="portTimeSlider" title="Portamento Speed" />
</Container> </Container>
<CardActions style={{ justifyContent: "center" }}> <CardActions style={{ justifyContent: "center" }}>
<Button <Button

View File

@ -84,6 +84,11 @@ public:
void RemoveMidiNote(int note); void RemoveMidiNote(int note);
void SetFormantPreserve(float val) { formant_preserve = val; } void SetFormantPreserve(float val) { formant_preserve = val; }
void SetAutoTuneSpeed(float val); void SetAutoTuneSpeed(float val);
void SetPortamentoTime(float time) {
for (int i = 0; i < MAX_VOICES; ++i) {
voices[i].SetPortamentoTime(time);
}
}
float out_midi = 40; float out_midi = 40;

View File

@ -64,6 +64,7 @@ namespace ID
PARAMETER_ID(formantPreserve) PARAMETER_ID(formantPreserve)
PARAMETER_ID(autoTuneSpeed) PARAMETER_ID(autoTuneSpeed)
PARAMETER_ID(portTime)
PARAMETER_ID(mute) PARAMETER_ID(mute)
PARAMETER_ID(filterType) PARAMETER_ID(filterType)
@ -213,8 +214,13 @@ public:
autoTuneSpeed(addToLayout<AudioParameterFloat>(layout, autoTuneSpeed(addToLayout<AudioParameterFloat>(layout,
ID::autoTuneSpeed, ID::autoTuneSpeed,
"AutoTune Speed", "AutoTune Speed",
NormalisableRange<float> {0.001f, 0.4f, .01f}, NormalisableRange<float> {0.001f, 0.4f, .001f},
.5f)), .5f)),
portTime(addToLayout<AudioParameterFloat>(layout,
ID::portTime,
"Portamento Speed",
NormalisableRange<float> {0.001f, 0.2f, .001f},
.001f)),
mute(addToLayout<AudioParameterBool>(layout, ID::mute, "Mute", false)), mute(addToLayout<AudioParameterBool>(layout, ID::mute, "Mute", false)),
filterType(addToLayout<AudioParameterChoice>(layout, filterType(addToLayout<AudioParameterChoice>(layout,
ID::filterType, ID::filterType,
@ -226,6 +232,7 @@ public:
AudioParameterFloat& formantPreserve; AudioParameterFloat& formantPreserve;
AudioParameterFloat& autoTuneSpeed; AudioParameterFloat& autoTuneSpeed;
AudioParameterFloat& portTime;
AudioParameterBool& mute; AudioParameterBool& mute;
AudioParameterChoice& filterType; AudioParameterChoice& filterType;
@ -320,6 +327,7 @@ void WebViewPluginAudioProcessor::processBlock(juce::AudioBuffer<float>& buffer,
buffer.clear(i, 0, buffer.getNumSamples()); buffer.clear(i, 0, buffer.getNumSamples());
shifter.SetFormantPreserve(parameters.formantPreserve.get()); shifter.SetFormantPreserve(parameters.formantPreserve.get());
shifter.SetAutoTuneSpeed(parameters.autoTuneSpeed.get()); shifter.SetAutoTuneSpeed(parameters.autoTuneSpeed.get());
shifter.SetPortamentoTime(parameters.portTime.get());
juce::AudioBuffer<float> const_buff; juce::AudioBuffer<float> const_buff;
const_buff.makeCopyOf(buffer); const_buff.makeCopyOf(buffer);
shifter.Process(const_buff.getArrayOfReadPointers(), (float**)buffer.getArrayOfWritePointers(), buffer.getNumSamples()); shifter.Process(const_buff.getArrayOfReadPointers(), (float**)buffer.getArrayOfWritePointers(), buffer.getNumSamples());
@ -466,6 +474,7 @@ private:
WebSliderRelay formantSliderRelay{ "formantSlider" }; WebSliderRelay formantSliderRelay{ "formantSlider" };
WebSliderRelay autoTuneSpeedSliderRelay{ "autoTuneSpeedSlider" }; WebSliderRelay autoTuneSpeedSliderRelay{ "autoTuneSpeedSlider" };
WebSliderRelay portTimeSliderRelay{ "portTimeSlider" };
WebToggleButtonRelay muteToggleRelay{ "muteToggle" }; WebToggleButtonRelay muteToggleRelay{ "muteToggle" };
WebComboBoxRelay filterTypeComboRelay{ "filterTypeCombo" }; WebComboBoxRelay filterTypeComboRelay{ "filterTypeCombo" };
@ -478,6 +487,7 @@ private:
.withNativeIntegrationEnabled() .withNativeIntegrationEnabled()
.withOptionsFrom(formantSliderRelay) .withOptionsFrom(formantSliderRelay)
.withOptionsFrom(autoTuneSpeedSliderRelay) .withOptionsFrom(autoTuneSpeedSliderRelay)
.withOptionsFrom(portTimeSliderRelay)
.withOptionsFrom(muteToggleRelay) .withOptionsFrom(muteToggleRelay)
.withOptionsFrom(filterTypeComboRelay) .withOptionsFrom(filterTypeComboRelay)
.withOptionsFrom(controlParameterIndexReceiver) .withOptionsFrom(controlParameterIndexReceiver)
@ -493,6 +503,7 @@ private:
WebSliderParameterAttachment formantAttachment; WebSliderParameterAttachment formantAttachment;
WebSliderParameterAttachment autoTuneSpeedAttachment; WebSliderParameterAttachment autoTuneSpeedAttachment;
WebSliderParameterAttachment portTimeAttachment;
WebToggleButtonParameterAttachment muteAttachment; WebToggleButtonParameterAttachment muteAttachment;
WebComboBoxParameterAttachment filterTypeAttachment; WebComboBoxParameterAttachment filterTypeAttachment;
@ -624,6 +635,9 @@ WebViewPluginAudioProcessorEditor::WebViewPluginAudioProcessorEditor(WebViewPlug
autoTuneSpeedAttachment(*processorRef.state.getParameter(ID::autoTuneSpeed.getParamID()), autoTuneSpeedAttachment(*processorRef.state.getParameter(ID::autoTuneSpeed.getParamID()),
autoTuneSpeedSliderRelay, autoTuneSpeedSliderRelay,
processorRef.state.undoManager), processorRef.state.undoManager),
portTimeAttachment(*processorRef.state.getParameter(ID::portTime.getParamID()),
portTimeSliderRelay,
processorRef.state.undoManager),
muteAttachment(*processorRef.state.getParameter(ID::mute.getParamID()), muteAttachment(*processorRef.state.getParameter(ID::mute.getParamID()),
muteToggleRelay, muteToggleRelay,
processorRef.state.undoManager), processorRef.state.undoManager),
@ -633,8 +647,8 @@ WebViewPluginAudioProcessorEditor::WebViewPluginAudioProcessorEditor(WebViewPlug
{ {
addAndMakeVisible(webComponent); addAndMakeVisible(webComponent);
//webComponent.goToURL(localDevServerAddress); webComponent.goToURL(localDevServerAddress);
webComponent.goToURL (WebBrowserComponent::getResourceProviderRoot()); //webComponent.goToURL (WebBrowserComponent::getResourceProviderRoot());
setSize(500, 500); setSize(500, 500);

View File

@ -21,8 +21,8 @@ void ShifterVoice::Init(float sample_rate) {
portamento_.Init(sample_rate, 0.05f); //default portamento time portamento_.Init(sample_rate, 0.05f); //default portamento time
amplitude_envelope_.Init(sample_rate); amplitude_envelope_.Init(sample_rate);
amplitude_envelope_.SetAttackTime(0.2f); amplitude_envelope_.SetAttackTime(0.2f);
amplitude_envelope_.SetDecayTime(0.2f); amplitude_envelope_.SetDecayTime(0.1f);
amplitude_envelope_.SetReleaseTime(1.0f); amplitude_envelope_.SetReleaseTime(.1f);
onoff_ = false; onoff_ = false;
overflow_ = false; overflow_ = false;
current_midi = 60; current_midi = 60;