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// --------------------------------------------------------------
6871void 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// --------------------------------------------------------------
8287void 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// --------------------------------------------------------------
10792void 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// --------------------------------------------------------------
129113void 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// --------------------------------------------------------------
165143void 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// --------------------------------------------------------------
171195void 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
218228OBJECT_REGISTER ( pdspCombFilter, " comb filter" , OFXVP_OBJECT_CAT_SOUND)
219229
0 commit comments