Skip to content

Commit d5d6433

Browse files
committed
finished porting nodes+canvas gui to imgui
1 parent c158db8 commit d5d6433

File tree

12 files changed

+486
-389
lines changed

12 files changed

+486
-389
lines changed

src/objects/sound/Oscillator.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@ void Oscillator::drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ){
359359

360360
//--------------------------------------------------------------
361361
void Oscillator::drawObjectNodeConfig(){
362+
363+
ImGui::Spacing();
364+
ImGui::Text("%.2f Hz", pdsp::PitchToFreq::eval(pitch_float+detune_float+fine_float));
365+
ImGui::Spacing();
366+
362367
ImGuiEx::ObjectInfo(
363368
"Oscillator with antialiased waveforms",
364369
"https://mosaic.d3cod3.org/reference.php?r=oscillator", scaleFactor);

src/objects/sound/pdspCombFilter.cpp

Lines changed: 73 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include "pdspCombFilter.h"
3636

3737
//--------------------------------------------------------------
38-
pdspCombFilter::pdspCombFilter() : PatchObject(){
38+
pdspCombFilter::pdspCombFilter() : PatchObject("comb filter"){
3939

4040
this->numInlets = 4;
4141
this->numOutlets = 1;
@@ -53,120 +53,144 @@ pdspCombFilter::pdspCombFilter() : PatchObject(){
5353

5454
this->initInletsState();
5555

56-
isGUIObject = true;
57-
this->isOverGUI = true;
58-
5956
isAudioINObject = true;
6057
isAudioOUTObject = true;
6158
isPDSPPatchableObject = true;
6259

60+
pitch = 12.0f;
61+
damping = 0.0f;
62+
feedback = 0.0f;
63+
6364
loaded = false;
6465

66+
this->width *= 2.0f;
67+
6568
}
6669

6770
//--------------------------------------------------------------
6871
void pdspCombFilter::newObject(){
6972
PatchObject::setName( this->objectName );
73+
7074
this->addInlet(VP_LINK_AUDIO,"signal");
7175
this->addInlet(VP_LINK_NUMERIC,"pitch");
7276
this->addInlet(VP_LINK_NUMERIC,"damping");
7377
this->addInlet(VP_LINK_NUMERIC,"feedback");
78+
7479
this->addOutlet(VP_LINK_AUDIO,"filteredSignal");
7580

76-
this->setCustomVar(static_cast<float>(0.1),"PITCH");
77-
this->setCustomVar(static_cast<float>(0),"DAMPING");
78-
this->setCustomVar(static_cast<float>(0),"FEEDBACK");
81+
this->setCustomVar(static_cast<float>(pitch),"PITCH");
82+
this->setCustomVar(static_cast<float>(damping),"DAMPING");
83+
this->setCustomVar(static_cast<float>(feedback),"FEEDBACK");
7984
}
8085

8186
//--------------------------------------------------------------
8287
void pdspCombFilter::setupObjectContent(shared_ptr<ofAppGLFWWindow> &mainWindow){
8388
loadAudioSettings();
84-
85-
gui = new ofxDatGui( ofxDatGuiAnchor::TOP_RIGHT );
86-
gui->setAutoDraw(false);
87-
gui->setUseCustomMouse(true);
88-
gui->setWidth(this->width);
89-
gui->onSliderEvent(this, &pdspCombFilter::onSliderEvent);
90-
91-
header = gui->addHeader("CONFIG",false);
92-
header->setUseCustomMouse(true);
93-
header->setCollapsable(true);
94-
pitch = gui->addSlider("Pitch", 0,1,0.1);
95-
pitch->setUseCustomMouse(true);
96-
damping = gui->addSlider("Damping", 0,1,0);
97-
damping->setUseCustomMouse(true);
98-
feedback = gui->addSlider("Feedback", 0,1,0);
99-
feedback->setUseCustomMouse(true);
100-
101-
gui->setPosition(0,this->height - header->getHeight());
102-
gui->collapse();
103-
header->setIsCollapsed(true);
10489
}
10590

10691
//--------------------------------------------------------------
10792
void pdspCombFilter::setupAudioOutObjectContent(pdsp::Engine &engine){
10893

10994
pitch_ctrl >> filter.in_pitch();
110-
pitch_ctrl.set(12);
95+
pitch_ctrl.set(pitch);
11196
pitch_ctrl.enableSmoothing(50.0f);
11297

11398
damping_ctrl >> filter.in_damping();
114-
damping_ctrl.set(0.0f);
99+
damping_ctrl.set(damping);
115100
damping_ctrl.enableSmoothing(50.0f);
116101

117102
feedback_ctrl >> filter.in_feedback();
118-
feedback_ctrl.set(0.0f);
103+
feedback_ctrl.set(feedback);
119104
feedback_ctrl.enableSmoothing(50.0f);
120105

121106
this->pdspIn[0] >> filter.in_signal();
122107

123108
filter.out_signal() >> this->pdspOut[0];
124-
125109
filter.out_signal() >> scope >> engine.blackhole();
126110
}
127111

128112
//--------------------------------------------------------------
129113
void pdspCombFilter::updateObjectContent(map<int,shared_ptr<PatchObject>> &patchObjects){
130114

131-
gui->update();
132-
header->update();
133-
pitch->update();
134-
damping->update();
135-
feedback->update();
136-
137115
if(this->inletsConnected[1]){
138-
pitch_ctrl.set(ofClamp(*(float *)&_inletParams[1],0.0f,127.0f));
139-
pitch->setValue(pitch_ctrl.get()/127.0f);
116+
pitch = ofClamp(*(float *)&_inletParams[1],0.0f,127.0f);
117+
pitch_ctrl.set(pitch);
140118
}
141119

142120
if(this->inletsConnected[2]){
143-
damping_ctrl.set(ofClamp(*(float *)&_inletParams[2],0.0f,1.0f));
144-
damping->setValue(damping_ctrl.get());
121+
damping = ofClamp(*(float *)&_inletParams[2],0.0f,1.0f);
122+
damping_ctrl.set(damping);
145123
}
146124

147125
if(this->inletsConnected[3]){
148-
feedback_ctrl.set(ofClamp(*(float *)&_inletParams[3],0.0f,1.0f));
149-
feedback->setValue(feedback_ctrl.get());
126+
feedback = ofClamp(*(float *)&_inletParams[3],0.0f,1.0f);
127+
feedback_ctrl.set(feedback);
150128
}
151129

152130
if(!loaded){
153131
loaded = true;
154-
pitch->setValue(this->getCustomVar("PITCH"));
155-
pitch_ctrl.set(ofClamp(pitch->getValue()*127.0f,0.0f,127.0f));
156-
damping->setValue(this->getCustomVar("DAMPING"));
157-
damping_ctrl.set(ofClamp(damping->getValue(),0.0f,1.0f));
158-
feedback->setValue(this->getCustomVar("FEEDBACK"));
159-
feedback_ctrl.set(ofClamp(feedback->getValue(),0.0f,1.0f));
132+
pitch = ofClamp(this->getCustomVar("PITCH"),0.0f,127.0f);
133+
pitch_ctrl.set(pitch);
134+
damping = ofClamp(this->getCustomVar("DAMPING"),0.0f,1.0f);
135+
damping_ctrl.set(damping);
136+
feedback = ofClamp(this->getCustomVar("FEEDBACK"),0.0f,1.0f);
137+
feedback_ctrl.set(feedback);
160138
}
161139

162140
}
163141

164142
//--------------------------------------------------------------
165143
void pdspCombFilter::drawObjectContent(ofxFontStash *font, shared_ptr<ofBaseGLRenderer>& glRenderer){
166144
ofSetColor(255);
145+
}
146+
147+
//--------------------------------------------------------------
148+
void pdspCombFilter::drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ){
149+
150+
if(_nodeCanvas.BeginNodeMenu()){
151+
ImGui::Separator();
152+
ImGui::Separator();
153+
ImGui::Separator();
154+
155+
if (ImGui::BeginMenu("CONFIG"))
156+
{
157+
158+
drawObjectNodeConfig();
159+
160+
ImGui::EndMenu();
161+
}
162+
_nodeCanvas.EndNodeMenu();
163+
}
164+
165+
// Visualize (Object main view)
166+
if( _nodeCanvas.BeginNodeContent(ImGuiExNodeView_Visualise) ){
167+
168+
if(ImGuiEx::KnobFloat(_nodeCanvas.getNodeDrawList(), (ImGui::GetWindowSize().x-(46*scaleFactor))/11, IM_COL32(255,255,120,255), "pitch", &pitch, 0.0f, 127.0f, 1270.0f)){
169+
pitch_ctrl.set(pitch);
170+
this->setCustomVar(static_cast<float>(pitch),"PITCH");
171+
}
172+
ImGui::SameLine();ImGui::Dummy(ImVec2(40*scaleFactor,-1));ImGui::SameLine();
173+
if(ImGuiEx::KnobFloat(_nodeCanvas.getNodeDrawList(), (ImGui::GetWindowSize().x-(46*scaleFactor))/11, IM_COL32(255,255,120,255), "damping", &damping, 0.0f, 1.0f, 100.0f)){
174+
damping_ctrl.set(damping);
175+
this->setCustomVar(static_cast<float>(damping),"DAMPING");
176+
}
177+
ImGui::SameLine();ImGui::Dummy(ImVec2(40*scaleFactor,-1));ImGui::SameLine();
178+
if(ImGuiEx::KnobFloat(_nodeCanvas.getNodeDrawList(), (ImGui::GetWindowSize().x-(46*scaleFactor))/11, IM_COL32(255,255,120,255), "feedback", &feedback, 0.0f, 1.0f, 100.0f)){
179+
feedback_ctrl.set(feedback);
180+
this->setCustomVar(static_cast<float>(feedback),"FEEDBACK");
181+
}
182+
183+
}
167184

168185
}
169186

187+
//--------------------------------------------------------------
188+
void pdspCombFilter::drawObjectNodeConfig(){
189+
ImGuiEx::ObjectInfo(
190+
"A comb filter is a delay tuned to a specific pitch frequency (mix it with the dry signal)",
191+
"https://mosaic.d3cod3.org/reference.php?r=comb-filter", scaleFactor);
192+
}
193+
170194
//--------------------------------------------------------------
171195
void pdspCombFilter::removeObjectContent(bool removeFileFromData){
172196
for(map<int,pdsp::PatchNode>::iterator it = this->pdspIn.begin(); it != this->pdspIn.end(); it++ ){
@@ -200,20 +224,6 @@ void pdspCombFilter::audioOutObject(ofSoundBuffer &outputBuffer){
200224
static_cast<ofSoundBuffer *>(_outletParams[0])->copyFrom(scope.getBuffer().data(), bufferSize, 1, sampleRate);
201225
}
202226

203-
//--------------------------------------------------------------
204-
void pdspCombFilter::onSliderEvent(ofxDatGuiSliderEvent e){
205-
if(e.target == pitch){
206-
this->setCustomVar(static_cast<float>(e.value),"PITCH");
207-
pitch_ctrl.set(static_cast<float>(e.value)*127.0f);
208-
}else if(e.target == damping){
209-
this->setCustomVar(static_cast<float>(e.value),"DAMPING");
210-
damping_ctrl.set(ofClamp(static_cast<float>(e.value),0.0f,1.0f));
211-
}else if(e.target == feedback){
212-
this->setCustomVar(static_cast<float>(e.value),"FEEDBACK");
213-
feedback_ctrl.set(ofClamp(static_cast<float>(e.value),0.0f,1.0f));
214-
}
215-
216-
}
217227

218228
OBJECT_REGISTER( pdspCombFilter, "comb filter", OFXVP_OBJECT_CAT_SOUND)
219229

src/objects/sound/pdspCombFilter.h

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,30 @@
3535
#pragma once
3636

3737
#include "PatchObject.h"
38+
#include "imgui_controls.h"
3839

3940
class pdspCombFilter : public PatchObject{
4041

4142
public:
4243

4344
pdspCombFilter();
4445

45-
void newObject();
46-
void setupObjectContent(shared_ptr<ofAppGLFWWindow> &mainWindow);
47-
void setupAudioOutObjectContent(pdsp::Engine &engine);
48-
void updateObjectContent(map<int,shared_ptr<PatchObject>> &patchObjects);
49-
void drawObjectContent(ofxFontStash *font, shared_ptr<ofBaseGLRenderer>& glRenderer);
50-
void removeObjectContent(bool removeFileFromData=false);
46+
void newObject() override;
47+
void setupObjectContent(shared_ptr<ofAppGLFWWindow> &mainWindow) override;
48+
void setupAudioOutObjectContent(pdsp::Engine &engine) override;
49+
void updateObjectContent(map<int,shared_ptr<PatchObject>> &patchObjects) override;
5150

52-
void loadAudioSettings();
51+
void drawObjectContent(ofxFontStash *font, shared_ptr<ofBaseGLRenderer>& glRenderer) override;
52+
void drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ) override;
53+
void drawObjectNodeConfig() override;
54+
55+
void removeObjectContent(bool removeFileFromData=false) override;
5356

54-
void audioInObject(ofSoundBuffer &inputBuffer);
55-
void audioOutObject(ofSoundBuffer &outputBuffer);
57+
void audioInObject(ofSoundBuffer &inputBuffer) override;
58+
void audioOutObject(ofSoundBuffer &outputBuffer) override;
5659

57-
58-
60+
void loadAudioSettings();
5961

60-
void onSliderEvent(ofxDatGuiSliderEvent e);
6162

6263

6364
pdsp::CombFilter filter;
@@ -66,18 +67,19 @@ class pdspCombFilter : public PatchObject{
6667
pdsp::ValueControl damping_ctrl;
6768
pdsp::ValueControl feedback_ctrl;
6869

69-
ofxDatGui* gui;
70-
ofxDatGuiHeader* header;
71-
ofxDatGuiSlider* pitch;
72-
ofxDatGuiSlider* damping;
73-
ofxDatGuiSlider* feedback;
70+
float pitch;
71+
float damping;
72+
float feedback;
7473

7574
int bufferSize;
7675
int sampleRate;
7776

7877
bool loaded;
7978

79+
private:
80+
8081
OBJECT_FACTORY_PROPS
82+
8183
};
8284

8385
#endif

0 commit comments

Comments
 (0)