Does it override the modules as well? For example, if I set JUCE_ENABLE_AUDIO_GUARD=1 in the preprocessor definitions, does it override the setting in the juce_core module?
Posts made by aaronventure
-
Is Extra Preprocessor Definitions in Projucer the Great Override?
-
RE: Broadcaster Wizard Discussion Thread
@Christoph-Hart I love it, the docs page for the broadcaster should now experience a considerable tank in visit numbers.
-
Broadcaster.addListener() Should Automatically Set Up the Function Prototype
When adding the addListener() method from autocomplete, it should automatically set up the function prototype according to the broadcaster arguments, like the paint routine, LAF etc.
-
Broadcaster Wizard Discussion Thread
I didn't find one so here it is.
Great feature overall.
One cool thing that could be added: starting a broadcaster wizard while a broadcaster reference is highlighted takes us to the step for attaching to functionality or adding a function, enabling the wizard usage for existing broadcasters.
-
RE: Transpose/Detune Incoming Audio
@trillbilly faust (has a library with pitch shifter effect I think), rnbo could also do it maybe, snex too.
-
RE: How do I get started with Scriptnode and building synthesisers/samplers?
@Orvillain said in How do I get started with Scriptnode and building synthesisers/samplers?:
Soooooooo... it isn't immediately clear to me how I should be building amp envelopes. Use the modulation source in the main module listing... or attempt to replace it in the ScriptNode??
I guess you can do both? They offer different things. If you want, you can do it entirely in scriptnode.
You can use the module envelope as a "Global AHDSR" and do your per-sample envelopes in scriptnode. I think that should scale as intended i.e. the module will act as a multiplier on top of any signal coming out of scriptnode.
-
RE: How do I get started with Scriptnode and building synthesisers/samplers?
@Orvillain You need an envelope node (or a table node with a ramp + midi node as trigger to create your own envelope).
Things to keep in mind:
- modulation node separates out the processing, it's like a little sandbox within your network
- always set block size for your network. wrap things in blockx nodes or if you need per-sample processing, the framex node
- some node react to MIDI. if you don't want that, wrap them into the No Midi node
- If you need math operations, use the Math.expr or Cable_expr nodes. These support the Math class from the API, and all numbers must be float/double, so no integers (just add a dot for whole numbers).
- there's no storage. you can have flow using tables which are manipulated with ramps or externally (the parameters you create can be manipulated from outside the network, either in the modulator code or from elsewhere by getting the modulator reference and calling .setAttribute()) but for anything more advanced where you need to remember data from within the network that was used in a previous block, use the SNEX node and do it in SNEX
No other way other than to play with it. Pull up every node, try it out, see what happens.
-
RE: Return the old Content.setKeyPressCallback functionality (that we had for a few days)
@Christoph-Hart Btw, what is it checking against? For special keys like Backspace, it works if you type in
backspace
no matter the case, but BS, which is the character code in ASCII for backspace, does not work. -
RE: How to Export Plugin as AU format
@ATWAW To distribute yes, but its's as easy as sending Steinberg an email and signing a document. It's free.
-
RE: Return the old Content.setKeyPressCallback functionality (that we had for a few days)
@Christoph-Hart Ah I get it.
The use case it defining navigation behavior for keys like ESC, backspace etc. based on flags (e.g. isSettings = true) without worrying about focus which is necessary to catch keypresses with the (currently bugged) component keypress callback.
In my case it's navigation but it can honestly be anything else. I'll try to implement a functionality where Right Click > Learn takes you to a separate screen where you can see all the mappings, and if you attempt to type here it'll start typing the controller number to assign to.
By manually gating functionality of key presses with flags, I don't have to worry about juggling focus and keeping track of the focus logic if/when I add new components, and no matter what changes I make, I just have to make sure a flag is set to enable desired keyboard functionality.
-
RE: How to Export Plugin as AU format
@ATWAW You need macOS to build AU, because that's Apple's format.
Either get a Mac or install macOS into a virtual machine. Maybe you can even do it with Github Builds but I never tried.
-
Return the old Content.setKeyPressCallback functionality (that we had for a few days)
There were a few days earlier this year where the global Content.setKeyPressCallback behaved like the key press callbacks for components: it always fired and you wrote your logic by filtering through the obj. object.
Then a few days later it was changed to what it is today: it asks for keyPress and lets you define different callbacks for each keypress.
Could a functionality be added where we pass some string instead of a keypress string that lets it always go off on any keypress or focus change, like it did before? This would not break existing functionality.
There are a couple of issues with the current method. Repetitive logic needs to be defined separately. If any of these keys then does something else additionally, you have to manually define it all and can't just pass a single function like you can to all other keys. If you wish to iteratively add functionality, the creating and passing a broadcaster then adding functions to that broadcaster is the way to do it. Except now you need to call the method for every single character you wish to use and pass that broadcaster, effectively recreating the entire ascii table!
-
RE: MIDI Learn 2024
@d-healey Global mappings and project backwards compatibility unfortunately aren't part of the same universe.
-
RE: MIDI Learn 2024
@Christoph-Hart How does this work with persistence? Do I have to keep a copy of the object that I'm then updating, sending to the handler and storing in my own persistent storage solution? Any gotchas?
-
RE: What is a sensible number of samplers in a single plugin?
Keep in mind that HISE has something like 256 internal MIDI channels.
If you then add a script envelope modulator (this is completely undocumented other than what you find on the forum here), you're now in the world of polyphonic modulation.
Then, use the MIDI node (with the default MPE set to on) to do any kind of modulation you want. Trigger it using CC. You'll have to call Synth.sendController in your UI controls, intercept it down the line in another MIDI processor and adjust its channel. This sounds like it'll be tricky.
But then you can use the channel-split controllers to communicate with your modulators. Controllers on each channel will only affect notes that were played on that channel. This sounds like it'll be quite the fun to set up and get working.
You can still use multiple samplers if you want like 8 engines, these can be separate samplers if for whatever reason something doesn't work. Already 40 is a bit crazy, will eat up memory and be a PAIN to manage.
@Christoph-Hart can you please give this a read and see if I hallucinated anything,,,, And do you think that there is an easier way to send a virtual polyphonic value (channel-based cc# value) to a polyphonic modulator than the current method of calling Synth.sendController() and intercepting it down the line because Synth.sendController() doesn't take MIDI channel as parameter?
-
RE: Do you use the MarkdownPanel for your Help systems
@asoujon I don't think you'll break user "immersion" if your help button takes them to your docs website. Start there.
Then post launch, you can experiment with things like pulling docs from your repo on launch and using that in the plugin, etc.
Having docs online on your website also gives you good SEO leads as users will more easily find answers if/when they try and look it up on a search engine.
-
RE: Right Click Context Menu 2024
@Christoph-Hart Ah looking at it right now.
Found a sizeable example in the docs, too! What a day!
https://docs.hise.audio/scripting/scripting-api/broadcaster/index.html#attachtocontextmenu
-
MIDI Learn 2024
I would like to roll my own MIDI Learn UX.
Right clicking will offer "Learn MIDI..." which will then pop up a separate window where the user can enter the number or it will enter itself on controller, and will also display all currently mapped controllers.
Can I somehow plug into the built in MIDI learn functionality? I'm aware of the floating tile that shows the mappings, but since I'd like to change the UX of mapping a control, I'd need a method to link a control and a controller #.
If not, what's the next best thing, just calling setAttribute on UI controls from down the line? What if the UI script is deferred, are the control callbacks executions still synchronous?
My noteOn, noteOff and Controller functions in the UI script trigger repaints of certain panels, so I figured it's a good idea to defer the UI script. This means I have to call setAttribute on controller from my logic script down the line.
In this case it looks like this:
- create global object to store CC mappings
- in Performance script, check on controller for array index, if not undefined, set value of that control using setAttribute (which should trigger the callback of the control as well, if I'm not wrong). I'll need to manually calculate the value based on min, max and midpoint
Anyone have any better solutions or have worked on their own CC mapping implementations?
-
Right Click Context Menu 2024
What's the current best way to implement right click context menu?
I can get the component under mouse on click, get context items for that component from wherever. Functiality is then... where?
I mean this can probably be a panel that pops up on right click, gets painted based on whatever object I feed it, and has a sizeable mouse function where each item's functionality is described. But am I missing a simpler way to do this?