You may not have the biggest Channel, but you've managed to make a person like me that has no clue about c++ able to program a basic plugin with nice graphics, this really is very high quality stuff and I'm very grateful for you putting this out for free. And yes, it's a terrible idea to try and program with a framework without knowing the base language but i have to create a goodlooking customized simple plugin in one month as a birthday present for a friend :D
Thank you so much for the video! Followed along and successfully added this feature to one of my plugins on the first try. Will definitely be watching more of your tutorials.
Thanks for the great tutorial! I've just tried to follow this recently and it seems like some of the function calls have been depricated in Juce and I can't even get it to work following the online juice tutorial for adding user automatable parameters.
i was hoping that you also go over the question on how to smoothen out the automation in case of sudden changes by the user. however great tutorial :) i already learned value tree state but it was nice to hear another explanation about it since it's still confusing to me
Hey, first of all thanks for this series its awesome. I had a problem in this tutorial, when I close the plugin window or just delete the plugin ableton crashes, I dont know why, but if I comment out this line " sliderAttach = new AudioProcessorValueTreeState::SliderAttachment (processor.treeState,GAIN_ID,gainSlider)" it stops crashing. I reused the code from the previous tutorials. any ideas whats going on?? Thanks ;)
I figured it out thanks to Black Lodges comment. All you have to do is go to your AudioProcessorEditor destructor and add this : " wetSlider.removeListener(this); sliderAttach.~ScopedPointer(); " wetSlider is the name of my slider, in the example of the tutorial was gainSlider I think.
Hey, I don't quite understand your reasoning at 14:40 as to why the slider attachment needs to be a pointer. How would a normal object behave differently in this case?
I did some more testing and found out why it has to be a Pointer. The Slider Attachment has no default Constructor, so the Constructor needs to be called either with new (as a Pointer) or with the Editors Constructor. When it's not a Pointer, it has to be called with the Editors Constructor, which leads to a problem: due to the the Slider being defined after the Slider Attachment, it is also initialized after the Slider Attachment, but the Slider Attachment needs the Slider as an argument. When the Slider is uninitialized, it will crash the Slider Attachments Constructor. It is possible to not use a Pointer for the Slider Attachment, but it needs to be defined after the Slider, and this is quite risky, as the order might change in the future and lead to the crash.
Hey, thank you so much for the tutorials, they are great for getting into audio programming and creating VSTs! I tested this plugin in Cubase and Ableton and wrote some automation. I realized that the gain values are only applied if the window of the plugin in open. As soon as I close the window, it's like the automation gets ignored. Also if I close and reopen the window, the slider jumps back to its default value. Is this normal because we actually have to actively prevent this from happening or am I the only one with this issue? Thank you! :)
Hi, I have the same issue, but I don't seem to be able to solve it... Unless I have the GUI open, the automations won't play. Also, in the meantime Juce 5.3.2 has been release, but that doesn't seem to solve this problem for me. Could you please tell me which commit number you checked out? Or how did you manage to fix the issue? Thanks!
If I delete the plugin from the track in Ableton Live or Reaper then the DAW crashes. Also crashes when trying to load the plugin in Wavelab. Can anyone confirm this is stable outside of the use in this tutorial? I combed through the files and I don't think I missed anything but this tutorial was different in that we didn't start by creating a new project.
Hello, I got this error "'createAndAddParameter' is deprecated: This function is deprecated and will be removed in a future version of JUCE! See the method docs for a code example of the replacement methods." what other func should i use
I noticed that when I compile as an AU and load it in Logic, the Gain knob in the "Smart Controls" panel does not move in parallel with value changes from automation (although it reacts to and can send manual changes to the slider). Is there some extra code I need to add to make this work with Logic? Thanks again for doing these videos!
Thanks for uploading the awesome tutorial!! I'm learning how to code C++ and how to using JUCE watching your tutorial. In 2020, JUCE is upgraded to version 6, and some classes were deprecated including createAndAddParameter and ScopedPointer. By searching the web, I figured out how to replace or make it work using other classes or methods. But some problems are happening in my build. For example, when I close and reopen the plugin after tuning the slider, value that I tuned is reset. Is this happened to plugin that was built in version 5? I used std::unique_ptr instead using deprecated ScopedPointer. Plugin was working well but the DAW was crashed when I close the plugin window.(also ScopedPointer made it crash.) I was in struggle with it and finally I resolved this problem by adding resetting code to destructor blabla... (I don't know how to say it but yes that was destructor!) Is this making the value reset?
Nice vid, when I run as a standalone plugin, this assertion in juce_ValueTree.cpp fails: jassert (object != nullptr); // Trying to add a property to a null ValueTree will fail! It works though, and automation works in Logic, it's just not ideal that this assertion fails and execution halts, do you have any ideas?
You may not have the biggest Channel, but you've managed to make a person like me that has no clue about c++ able to program a basic plugin with nice graphics, this really is very high quality stuff and I'm very grateful for you putting this out for free.
And yes, it's a terrible idea to try and program with a framework without knowing the base language but i have to create a goodlooking customized simple plugin in one month as a birthday present for a friend :D
Thank you so much for the video! Followed along and successfully added this feature to one of my plugins on the first try. Will definitely be watching more of your tutorials.
Thanks for the great tutorial! I've just tried to follow this recently and it seems like some of the function calls have been depricated in Juce and I can't even get it to work following the online juice tutorial for adding user automatable parameters.
Oooo - "Johnny Lopez Hi Johnny...yes this is updated! See the new changes here th-cam.com/video/NE8d91yYBJ8/w-d-xo.html"
is there a way in visual studio to show all the arguments like you have at 10:55 ?
i was hoping that you also go over the question on how to smoothen out the automation in case of sudden changes by the user. however great tutorial :) i already learned value tree state but it was nice to hear another explanation about it since it's still confusing to me
Hey, first of all thanks for this series its awesome.
I had a problem in this tutorial, when I close the plugin window or just delete the plugin ableton crashes, I dont know why, but if I comment out this line " sliderAttach = new AudioProcessorValueTreeState::SliderAttachment (processor.treeState,GAIN_ID,gainSlider)" it stops crashing.
I reused the code from the previous tutorials.
any ideas whats going on??
Thanks ;)
I figured it out thanks to Black Lodges comment. All you have to do is go to your AudioProcessorEditor destructor and add this : " wetSlider.removeListener(this);
sliderAttach.~ScopedPointer(); " wetSlider is the name of my slider, in the example of the tutorial was gainSlider I think.
you save me. thank you.
Hey, I don't quite understand your reasoning at 14:40 as to why the slider attachment needs to be a pointer. How would a normal object behave differently in this case?
I did some more testing and found out why it has to be a Pointer. The Slider Attachment has no default Constructor, so the Constructor needs to be called either with new (as a Pointer) or with the Editors Constructor.
When it's not a Pointer, it has to be called with the Editors Constructor, which leads to a problem: due to the the Slider being defined after the Slider Attachment, it is also initialized after the Slider Attachment, but the Slider Attachment needs the Slider as an argument. When the Slider is uninitialized, it will crash the Slider Attachments Constructor.
It is possible to not use a Pointer for the Slider Attachment, but it needs to be defined after the Slider, and this is quite risky, as the order might change in the future and lead to the crash.
These are amazing! Keep 'em coming :D
great tuts - why did you put the pow() in the processBlock() and not in the silderValueChanged()?
where should I place the pow()?
Hey, thank you so much for the tutorials, they are great for getting into audio programming and creating VSTs!
I tested this plugin in Cubase and Ableton and wrote some automation. I realized that the gain values are only applied if the window of the plugin in open. As soon as I close the window, it's like the automation gets ignored. Also if I close and reopen the window, the slider jumps back to its default value. Is this normal because we actually have to actively prevent this from happening or am I the only one with this issue?
Thank you! :)
Nice, that fixed the issue. Thank you so much, really looking forward to more tutorials! :D
Hi, I have the same issue, but I don't seem to be able to solve it... Unless I have the GUI open, the automations won't play. Also, in the meantime Juce 5.3.2 has been release, but that doesn't seem to solve this problem for me. Could you please tell me which commit number you checked out? Or how did you manage to fix the issue? Thanks!
@@danieleghisi Were you able to fix this? I'm having the same issue in Reaper even though I just downloaded JUCE like a month ago.
@@ste_e_p Unfortunately I don't think so, but that was so long ago, I don't really remember
If I delete the plugin from the track in Ableton Live or Reaper then the DAW crashes. Also crashes when trying to load the plugin in Wavelab. Can anyone confirm this is stable outside of the use in this tutorial? I combed through the files and I don't think I missed anything but this tutorial was different in that we didn't start by creating a new project.
Someone helped me figure this out. It's necessary to remove the listener, release and delete the slider attachment when shutting down the UI.
@@darrenblondin When I do this, the automation doesn't happen while the plugin gui is closed.
Hey!
Your videos are excellent ;) Thank you very much for sharing these tips.
Hello, I got this error
"'createAndAddParameter' is deprecated: This function is deprecated and will be removed in a future version of JUCE! See the method docs for a code example of the replacement methods."
what other func should i use
I noticed that when I compile as an AU and load it in Logic, the Gain knob in the "Smart Controls" panel does not move in parallel with value changes from automation (although it reacts to and can send manual changes to the slider). Is there some extra code I need to add to make this work with Logic?
Thanks again for doing these videos!
createAndAddParameter is not working and seems like it might be deprecated in the way you used it?
I see, thank you so much.@@TheAudioProgrammer
These videos are always great! I was wondering, does it need to be a reference to processor, or can it be a pointer?
sorry, AudioProcessorValueTreeState::SliderAttachment(getProcessor()->treeState, HIFREQ_ID, rotaryHi);
can the tree state be called like this?
by getProcessor(), this is calling the processor through a pointer in a thread
Unfortunately, because of the project, I cannot do this. Thank you for your time and responses though
Thanks for uploading the awesome tutorial!! I'm learning how to code C++ and how to using JUCE watching your tutorial. In 2020, JUCE is upgraded to version 6, and some classes were deprecated including createAndAddParameter and ScopedPointer. By searching the web, I figured out how to replace or make it work using other classes or methods.
But some problems are happening in my build. For example, when I close and reopen the plugin after tuning the slider, value that I tuned is reset. Is this happened to plugin that was built in version 5?
I used std::unique_ptr instead using deprecated ScopedPointer. Plugin was working well but the DAW was crashed when I close the plugin window.(also ScopedPointer made it crash.) I was in struggle with it and finally I resolved this problem by adding resetting code to destructor blabla... (I don't know how to say it but yes that was destructor!) Is this making the value reset?
oops, I was idiot... there were many solutions already in comments in here, and your further tutorials... .thanks.!!!!
한국인 ㅎㅇ 화이팅요
@@윤돼지-i4r 프로그래머도 아닌것이 뭣좀해보겠다고 설쳐본건데 부끄럽네요,,,,;;;ㅎㅎ
@@이항민-v5z 저도에요 취미로라도 꾸준히 해봐요 ㅋㅋㅋ
Nice vid, when I run as a standalone plugin, this assertion in juce_ValueTree.cpp fails:
jassert (object != nullptr); // Trying to add a property to a null ValueTree will fail!
It works though, and automation works in Logic, it's just not ideal that this assertion fails and execution halts, do you have any ideas?
This can be fixed by typing: treeState.state = ValueTree(GAIN_NAME); after the createAndAddParameter step
WARNING: This video is outdated and non-functional. Check the description for updated version.