From f369bf7d8a86a22b3fa4250818f42ae95a37db7b Mon Sep 17 00:00:00 2001 From: Caleb Kemere <ckemere@gmail.com> Date: Sat, 30 Nov 2013 13:18:33 -0600 Subject: [PATCH] Noise gate implemented next to volume on top of screen. Works but levels are too abrupt. --- Source/Processors/AudioNode.cpp | 24 ++++++++++++++++++++--- Source/Processors/AudioNode.h | 1 + Source/Processors/Editors/AudioEditor.cpp | 18 ++++++++++++++--- Source/Processors/Editors/AudioEditor.h | 3 ++- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Source/Processors/AudioNode.cpp b/Source/Processors/AudioNode.cpp index 988381f32..cf5b9ae43 100755 --- a/Source/Processors/AudioNode.cpp +++ b/Source/Processors/AudioNode.cpp @@ -26,7 +26,7 @@ #include "Channel.h" AudioNode::AudioNode() - : GenericProcessor("Audio Node"), audioEditor(0), volume(0.00001f), + : GenericProcessor("Audio Node"), audioEditor(0), volume(0.00001f), noiseGateLevel(0.0f), bufferA(2,10000), bufferB(2,10000) { @@ -136,6 +136,13 @@ void AudioNode::setParameter(int parameterIndex, float newValue) // volume level volume = newValue*0.1f; + } + else if (parameterIndex == 2) + { + // noiseGateLevel level + noiseGateLevel = newValue*0.01f; // not sure about this scaling??? + std::cout << "Changed noiseGateLevel: " << noiseGateLevel << std::endl; + } else if (parameterIndex == 100) { @@ -316,6 +323,7 @@ void AudioNode::process(AudioSampleBuffer& buffer, remainingSamples, // number of samples gain // gain to apply ); + } orphanedSamples = nSamples - samplesToCopy2; @@ -334,7 +342,7 @@ void AudioNode::process(AudioSampleBuffer& buffer, gain // gain to apply ); - backupBuffer->addFrom(0, // destination channel + backupBuffer->addFrom(0, // destination channel samplesInBackupBuffer, // destination start sample buffer, // source i, // source channel @@ -344,7 +352,17 @@ void AudioNode::process(AudioSampleBuffer& buffer, ); } - + + // HERE IS WHERE WE NEED TO NOISE GATE + float *leftChannelData = buffer.getSampleData(0); + float *rightChannelData = buffer.getSampleData(1); + float gateLevel = noiseGateLevel/(float(0x7fff)); + for (int i=0; i < buffer.getNumSamples(); i++) { + if (abs(leftChannelData[i]) < gateLevel) + leftChannelData[i] = 0; + if (abs(rightChannelData[i]) < gateLevel) + rightChannelData[i] = 0; + } } } diff --git a/Source/Processors/AudioNode.h b/Source/Processors/AudioNode.h index e0f6a901a..8a7d20b2c 100755 --- a/Source/Processors/AudioNode.h +++ b/Source/Processors/AudioNode.h @@ -103,6 +103,7 @@ private: Array<int> leftChan; Array<int> rightChan; float volume; + float noiseGateLevel; /** An array of pointers to the channels that feed into the AudioNode. */ Array<Channel*> channelPointers; diff --git a/Source/Processors/Editors/AudioEditor.cpp b/Source/Processors/Editors/AudioEditor.cpp index 054ddbcb5..c66463b34 100755 --- a/Source/Processors/Editors/AudioEditor.cpp +++ b/Source/Processors/Editors/AudioEditor.cpp @@ -98,13 +98,21 @@ AudioEditor::AudioEditor(AudioNode* owner) // addAndMakeVisible(audioWindowButton); - volumeSlider = new Slider("High-Cut Slider"); + volumeSlider = new Slider("Volume Slider"); volumeSlider->setRange(0,100,1); volumeSlider->addListener(this); volumeSlider->setTextBoxStyle(Slider::NoTextBox, false, 0, 0); addAndMakeVisible(volumeSlider); + noiseGateSlider = new Slider("Noise Gate Slider"); + noiseGateSlider->setRange(0,100,1); + noiseGateSlider->addListener(this); + noiseGateSlider->setTextBoxStyle(Slider::NoTextBox, + false, 0, 0); + addAndMakeVisible(noiseGateSlider); + + //acw = new AudioConfigurationWindow(getAudioComponent()->deviceManager, (Button*) audioWindowButton); } @@ -119,7 +127,8 @@ void AudioEditor::resized() { muteButton->setBounds(0,0,30,25); volumeSlider->setBounds(35,0,50,getHeight()); - audioWindowButton->setBounds(90,0,200,getHeight()); + noiseGateSlider->setBounds(85,0,50,getHeight()); + audioWindowButton->setBounds(140,0,200,getHeight()); } bool AudioEditor::keyPressed(const KeyPress& key) @@ -208,7 +217,10 @@ void AudioEditor::buttonClicked(Button* button) void AudioEditor::sliderValueChanged(Slider* slider) { - getAudioProcessor()->setParameter(1,slider->getValue()); + if (slider == volumeSlider) + getAudioProcessor()->setParameter(1,slider->getValue()); + else if (slider == noiseGateSlider) + getAudioProcessor()->setParameter(2,slider->getValue()); } void AudioEditor::paint(Graphics& g) diff --git a/Source/Processors/Editors/AudioEditor.h b/Source/Processors/Editors/AudioEditor.h index 7120d4b25..6891cce8f 100755 --- a/Source/Processors/Editors/AudioEditor.h +++ b/Source/Processors/Editors/AudioEditor.h @@ -131,7 +131,8 @@ private: AudioConfigurationWindow* acw; Slider* volumeSlider; - + Slider* noiseGateSlider; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(AudioEditor); }; -- GitLab