Robbert van der Helm
2a58b771f3
Remove old todo
2022-05-22 23:05:18 +02:00
Robbert van der Helm
d42fd41007
Buffers for zero channel plugins are always valid
2022-05-22 22:48:55 +02:00
Robbert van der Helm
783dc2245e
Store the processing mode in BufferConfig
...
Instead of having a function on ProcessContext.
2022-05-22 13:33:38 +02:00
Robbert van der Helm
ee3b0bf8e6
Store the minimum buffer size in BufferConfig
2022-05-22 13:21:39 +02:00
Robbert van der Helm
e1d4be2a03
Change NON_AUTOMATABLE semantics and add HIDDEN
...
This now lets you have parameters that cannot be automated but that are
still changeable through the generic UI.
2022-05-22 12:37:30 +02:00
Robbert van der Helm
985db44503
Allow marking CLAP plugins as hard realtime
2022-05-22 01:01:59 +02:00
Robbert van der Helm
2ac013df64
Fix warnings
2022-05-22 00:59:04 +02:00
Robbert van der Helm
665108721a
Add a way to fetch the current processing mode
2022-05-22 00:58:53 +02:00
Robbert van der Helm
9601c9c0c1
Fix modulating non-smoothed parameters
...
And also get rid of duplicate code here.
2022-05-20 16:12:48 +02:00
Robbert van der Helm
4587c1405f
Move VST3 buffer initialization
...
This was left over from the last commit.
2022-05-18 19:41:43 +02:00
Robbert van der Helm
024307872a
Move VST3 initialization to set_active()
...
Because the host may still change the channel layouts at this point.
2022-05-18 19:29:48 +02:00
Robbert van der Helm
6fc0b2e148
Call Plugin::initialize() for runtime preset load
...
It's the plugin's responsibility to not do any realtime unsafe work here
if they support runtime preset loading.
2022-05-13 14:46:25 +02:00
Robbert van der Helm
0355ed3168
Add flush-to-zero support for AArch64
2022-05-10 23:12:52 +02:00
Robbert van der Helm
c141314e30
Update for CLAP 0.25
2022-05-09 16:50:24 +02:00
Robbert van der Helm
ffe4642aa5
Implement IProcessContextRequirements
...
This is needed for VST 3.7. We claim to be a VST 3.6.14 plugin, but
implementing this anyways seems like the safe bet. I doubt many hosts
would, but under VST 3.7 hosts are allowed to not send any transport
information unless this interface is implemented.
2022-05-07 13:24:17 +02:00
Robbert van der Helm
f05e31d9e3
Sort additional VST3 interace implementations
...
The sensible order would be IComponent, IEditController,
IAudioProcessor, and then everything else.
2022-05-07 13:18:20 +02:00
Robbert van der Helm
a74d8264fb
Support CLAP transport information events
...
This will cause the buffer to be split when the transport information
changes.
2022-05-05 17:23:46 +02:00
Robbert van der Helm
7cb671319e
Properly define all predefined note expressions
...
This is apparently how you're supposed to do it in VST3. How would you
know? You'd ask Steinberg.
2022-05-05 15:35:14 +02:00
Robbert van der Helm
06c5e4b04a
Make parameter modulation stick after automation
...
This is how it's supposed to be implemented in CLAP.
2022-05-02 15:46:57 +02:00
Robbert van der Helm
10ae8e1d05
Enable modulation for CLAP parameters
...
Everything else has already been implemented, but this is kind of
important.
2022-05-02 11:51:56 +02:00
Robbert van der Helm
a4b251e5ef
Support monophonic modulation for CLAP plugins
...
This avoids the potential for state corruption caused by modulation and
modulation can be displayed differently on the GUI.
2022-05-01 19:05:51 +02:00
Robbert van der Helm
1d3ac1b2af
Move param setting functions to new ParamMut trait
...
This makes things slightly less confusing because these functions should
never be called from user code.
2022-05-01 18:45:35 +02:00
Robbert van der Helm
a17c63bf71
Add parameter getters for unmodulated values
...
This is needed to be able to support modulation events in CLAP. There an
offset gets applied to the parameter's actual current value. That way
GUIs don't have to move around when parameters are being modulated and
save states cannot get influenced by modulation.
2022-05-01 18:30:30 +02:00
Robbert van der Helm
3d454bfc9c
Don't process audio at all with invalid buffers
...
If the host does some kind of flush this way with num_samples > 0 but
without any outputs or with zero output channels then we should not try
to read from the now invalid pointers from the previous cycle.
2022-04-30 02:00:09 +02:00
Robbert van der Helm
ddc28eef5e
Clarify the VST3 output .take(num_outputs)
2022-04-30 01:52:53 +02:00
Robbert van der Helm
4fb67a720b
Add a todo for fallback DPI scale detection
2022-04-27 19:26:39 +02:00
Robbert van der Helm
6185909ddf
Also safeguard against zero channel counts in CLAP
2022-04-27 17:06:19 +02:00
Robbert van der Helm
21e28fdca2
Handle hosts providing zero output channels
2022-04-27 16:52:30 +02:00
Robbert van der Helm
afde489bbf
Add a fixme for REAPER's broken bypass handling
2022-04-27 16:45:34 +02:00
Robbert van der Helm
dedbfebb71
Add todos about potential duplicate reset calls
2022-04-26 14:15:57 +02:00
Robbert van der Helm
4779991edf
Also move reset() call to process start for CLAP
...
So the behavior is consistent for CLAP and VST3.
2022-04-26 14:14:12 +02:00
Robbert van der Helm
4ac0c40812
Reset last processing status for CLAP on start
...
Just like we're doing in the VST3 wrapper.
2022-04-26 14:10:00 +02:00
Robbert van der Helm
582ab50e58
Move VST3 Plugin::reset() call to set_processing()
...
This lets the host reset buffers the intended way.
2022-04-26 13:42:32 +02:00
Robbert van der Helm
7c5aa9069b
Simplify lifetime bounds
2022-04-24 20:03:30 +02:00
Robbert van der Helm
04c5780e4a
Implement state saving/loading for standalone
2022-04-24 19:46:51 +02:00
Robbert van der Helm
566095802c
Decouple state functions from CLAP/VST3 wrapper
...
This should also be usable with a plain `params` object, since we don't
need hashes in the standalone wrapper.
2022-04-24 19:46:07 +02:00
Robbert van der Helm
9acd312768
Parmaeters are not real, they can't hurt you
2022-04-24 19:46:07 +02:00
Robbert van der Helm
8714310468
Silence dead code warnings in standalone wrapper
...
These were kept in as a reminder, but since standalone has been merged
into master these should be silenced as there are relevant TODOs for the
missing features in place already.
2022-04-24 18:18:11 +02:00
Robbert van der Helm
084d34fe5c
Set up the logger for the standalone target
2022-04-24 15:50:17 +02:00
Robbert van der Helm
60593e7cc3
Close standalone when process returns an error
...
For this to work the resize mutex has been replaced with a channel for
sending tasks.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
5d481e59f1
Call the process function in the standalone target
...
Although there's no functional backend yet.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
ae24ed4c4d
Move standalone audio thread to a function
2022-04-24 15:48:42 +02:00
Robbert van der Helm
19d4b73039
Implement parameter changes for standalone target
...
Changing parameters from an editor now works just like in the other
targets.
2022-04-24 15:48:42 +02:00
Robbert van der Helm
9e40ec11fe
Print a message about IO being unimplemented
2022-04-24 15:48:42 +02:00
Robbert van der Helm
8cb763246b
Add an audio thread for the standalone target
2022-04-24 15:48:42 +02:00
Robbert van der Helm
81e56dd018
Abstract the IO backend for the standalone wrapper
2022-04-24 15:48:42 +02:00
Robbert van der Helm
8ba60eeab9
Implement resizing for standalone editor window
2022-04-24 15:48:42 +02:00
Robbert van der Helm
da86d1c6b1
Open a basic baseview window for standalone target
2022-04-24 15:48:41 +02:00
Robbert van der Helm
6c84fec09e
Add a (not yet functional) standalone run function
2022-04-24 15:48:05 +02:00
Robbert van der Helm
f838062d72
Don't use an Arc for the CLAP editor
2022-04-24 15:48:05 +02:00
Robbert van der Helm
e90bacffb5
Print initialization errors in standalone
2022-04-24 15:48:05 +02:00
Robbert van der Helm
261594a478
Initialize the standalone target
2022-04-24 15:48:05 +02:00
Robbert van der Helm
42548ef5d1
Update standalone target todos
2022-04-24 15:48:05 +02:00
Robbert van der Helm
96ec1da037
Export the standalone target for gain_gui_vizia
2022-04-24 15:48:05 +02:00
Robbert van der Helm
f3db4a9ed0
Add a (not yet functional) standalone exporter
2022-04-24 15:48:05 +02:00
Robbert van der Helm
f895a27136
Simplify known VST3 note expression match
2022-04-24 15:31:02 +02:00
Robbert van der Helm
3264bee810
Include locations in assertion failure messages
2022-04-24 15:27:59 +02:00
Robbert van der Helm
015c554d79
Register the loggers for VST3 and CLAP plugins
2022-04-24 15:24:35 +02:00
Robbert van der Helm
88260c55c7
Log on lower verbosity in release builds
...
This will also strip away information.
2022-04-24 15:08:55 +02:00
Robbert van der Helm
3b0291b4f5
Add function for setting up file and windbg logs
...
And also writing panics to those logs.
2022-04-24 15:08:48 +02:00
Robbert van der Helm
a79099f573
Work around Bitwig VST3 note expressions bug
...
Bitwig will only send these note expression events if the plugin claims
to support at least one custom note expression type, and if it returns
`kResultOk` on `INoteExpressionController::get_note_expression_info()`
when the expression ID is equal to the note expression type (even though
these are out of range, since this index argument is supposed to be a
linear index from `0..count`).
2022-04-23 15:00:30 +02:00
Robbert van der Helm
3361c4454b
Define constants for VST3 note expression types
2022-04-23 14:49:19 +02:00
Robbert van der Helm
b88707769a
Add a way to find out the current plugin API
2022-04-21 21:27:36 +02:00
Robbert van der Helm
2bc77ed691
Work around vst3-sys not allowing #[cfg()] fields
2022-04-20 20:44:07 +02:00
Robbert van der Helm
6ae05eb01b
Log assertion failure if a VST3 resize is denied
2022-04-20 20:35:44 +02:00
Robbert van der Helm
8966ca5280
Fix C++ interface pointer transmutes
...
These are supposed to be pointers to vtable pointers.
2022-04-20 20:25:59 +02:00
Robbert van der Helm
5d343f7873
Also perform resize requests using the run loop
2022-04-20 19:52:02 +02:00
Robbert van der Helm
98924a5728
Use the host's run loop to handle VST3 tasks
2022-04-20 19:51:26 +02:00
Robbert van der Helm
37b62e4278
Add an IRunLoop event runner on Linux
2022-04-20 19:44:03 +02:00
Robbert van der Helm
4fa54ceabe
Add an object for implementing IEventLoop
...
We can't do this directly on WrapperView because of vst3-sys
limitations.
2022-04-20 17:18:41 +02:00
Robbert van der Helm
f3bb552cfe
Get a reference to the host's IRunLoop
2022-04-20 17:03:15 +02:00
Robbert van der Helm
0fd9a68146
Move u16strlcpy to the VST3 wrapper utils module
2022-04-15 16:13:14 +02:00
Robbert van der Helm
877eeadc7f
Add a todo for implementing FTZ for AArch64
2022-04-12 02:08:41 +02:00
Robbert van der Helm
54db43f48d
Fix c_char usage on AArch64
...
Apparently char is unsigned on AArch64.
2022-04-12 02:06:29 +02:00
Robbert van der Helm
ad50852aeb
Fix CLAP event output struct sizes
2022-04-11 20:53:25 +02:00
Robbert van der Helm
5e486ab3d9
Explicitly handle 0 channel IO
...
Instead of treating it as a flush. This is needed for note effect
plugins.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
65d87f87ed
Add a way to output note events
...
This supports all note events supported by NIH-plug, and both CLAP and
VST3.
2022-04-11 20:46:51 +02:00
Robbert van der Helm
e4606918e7
Rename next_midi_event() to next_event()
2022-04-11 18:15:14 +02:00
Robbert van der Helm
84d91d8826
Update dependencies for CLAP
...
The signature for this function was incorrect.
2022-04-11 16:18:39 +02:00
Robbert van der Helm
5b5bbf19f7
Prefix all polyphonic expressions with Poly
...
Makes it much more obvious that they're polyphonic at a glance.
2022-04-11 15:57:27 +02:00
Robbert van der Helm
63ad2b2cb8
Parse redundant CLAP MIDI events just in case
2022-04-11 15:56:33 +02:00
Robbert van der Helm
476dfb9f81
Fix compilation failure from f0303fe
2022-04-09 12:12:34 +02:00
Robbert van der Helm
33c2d8288b
Don't warn on parameter hash overflow
...
But do mention overflows in the duplicate parameter warning.
2022-04-09 11:47:23 +02:00
Robbert van der Helm
f0303fed4b
Remove now unnecessary input events sort
...
This was added in anticipation of having to merge the parameter change
MIDI CC events into the events stream, but VST3 threw a curveball and
now we need to do the sorting one step earlier.
2022-04-09 11:32:20 +02:00
Robbert van der Helm
52d7b47a24
Improve block splitting transport information
...
Don't do any recomputations at the start of the buffer, and also
recompute the bar positions and numbers.
2022-04-08 23:10:38 +02:00
Robbert van der Helm
1a8f81e4c0
Support MIDI CCs, aftertouch, pitch bend for VST3
...
This required rewriting the way events and parameter changes are handled
for VST3 by putting them all in a single sorted array, because we can
now no longer read directly from the host's events list because we also
need to mix these new generated MIDI CC events in with it.
2022-04-08 20:53:32 +02:00
Robbert van der Helm
059c733b78
Handle predefined VST3 note expressions
2022-04-08 17:49:13 +02:00
Robbert van der Helm
2a4a61947f
Update reasoning for clearing last param ID bit
2022-04-08 00:02:28 +02:00
Robbert van der Helm
9740246d0a
Always sort VST3 note events in prep for CCs
...
So we won't forget to add this then. CC messages come from the parameter
change queues while regular note event messages come from another queue,
so they need to be merged into one sorted queue.
2022-04-07 23:57:56 +02:00
Robbert van der Helm
24837d1552
Implement full MIDI support for CLAP
2022-04-07 23:28:31 +02:00
Robbert van der Helm
0b3a5cd297
Support all of the CLAP expression types
...
These aren't supported for VST3 yet, we'll need to register note
expression controllers for that.
2022-04-07 21:17:31 +02:00
Robbert van der Helm
b9a10455bb
Add polyphonic aftertouch support
2022-04-07 20:55:31 +02:00
Robbert van der Helm
1141616466
Replace ACCEPTS_MIDI bool with new enum
...
So we can gate future MIDI CC support behind an additional option since
this involves more work on the VST3 side.
2022-04-07 20:27:37 +02:00
Robbert van der Helm
8f359feadb
Store velocity as a float
...
Instead of converting this to a 0-127 value. We may be throwing away
precision otherwise.
2022-04-07 20:12:30 +02:00
Robbert van der Helm
2af3f84416
Rename State to PluginState
...
Now that it is part of the public API.
2022-04-07 17:39:34 +02:00
Robbert van der Helm
84bac0a47c
Spool param rescan call to the GUI thread
...
Otherwise the CLAP example host std::terminates, and we can also reuse
the existing restart task for the VST3 wrapper.
2022-04-07 17:25:12 +02:00
Robbert van der Helm
d0064f87d6
Add state saving and restoring through GuiContext
...
While preventing any possible data races.
2022-04-07 17:19:24 +02:00
Robbert van der Helm
7ca855b3fc
Make State cloneable
...
This is needed for user preset support.
2022-04-07 16:50:02 +02:00
Robbert van der Helm
083885a40c
Rework Params trait API with Arc instead of Pin
...
This is a breaking change requiring a small change to plugin
implementations.
The reason why `Pin<&dyn Params>` was used was more as a hint to
indicate that the object must last for the plugin's lifetime, but `Pin`
doesn't enforce that. It also makes the APIs a lot more awkward.
Requiring the use of `Arc` fixes the following problems:
- When storing the params object in the wrapper, the `ParamPtr`s are
guaranteed to be stable.
- This makes it possible to access the `Params` object without acquiring
a lock on the plugin, this is very important for implementing
plugin-side preset management.
- It enforces immutability on the `Params` object.
- And of course the API is much nicer without a bunch of unsafe code to
work around Pin's limitations.
2022-04-07 15:31:46 +02:00
Robbert van der Helm
54371fb488
Expose the State object
...
So we can later allow plugins to save and restore state from their GUI
this way.
2022-04-07 14:12:53 +02:00