1
0
Fork 0
Commit graph

499 commits

Author SHA1 Message Date
Robbert van der Helm
cb827d18dd Rename Buffer::len() to Buffer::samples()
To reduce ambiguity.
2023-01-05 16:04:38 +01:00
Robbert van der Helm
9e1a888b38 Store sample count in Buffer
This fixes the sample count not being correct for MIDI-only plugins.
2023-01-05 15:58:55 +01:00
Robbert van der Helm
19be530ba3 Rename Buffer::with_raw_vec to set_slices 2023-01-05 15:36:04 +01:00
Robbert van der Helm
069053ca50 Also defer latency change for CLAP plugins
In case a future host does the same thing Ardour does right now for VST3
plugins.
2022-12-28 01:34:42 +01:00
Robbert van der Helm
5cbef6ec03 Fix alloc failures in VST3 with many events
Or well, work around. We should use a different non-allocating sorting
implementation here. This only crept up in Ardour because they for some
reason send all parameter values after loading a VST3 plugin.
2022-12-28 01:30:26 +01:00
Robbert van der Helm
fd28a95231 Defer set_latency_samples() in VST3 plugin init
The host might otherwise restart the plugin while the `Plugin::init()`
call is still active, resulting in a deadlock because the plugin mutex
is still locked. This was causing issues when loading state in Ardour7.
The new approach also removes the need for a previous hack added for
Ardour6.
2022-12-28 01:28:33 +01:00
Robbert van der Helm
2747714640 Silence warning for standalone config on macOS 2022-12-02 19:42:51 +01:00
Robbert van der Helm
ec34e54bfe Update dependencies, allow resizing on Win/macOS
This was implemented for Linux in March, but it should now also work on
Windows and macOS.
2022-12-01 20:21:56 +01:00
Robbert van der Helm
50fa1008c0 Allow assert_process_allocs+mingw-w64 in release
This causes the application to halt in debug builds, but it shouldn't be
an issue in release builds.
2022-12-01 20:18:30 +01:00
Robbert van der Helm
9a77bd2918 Remove old comment 2022-11-22 21:29:06 +01:00
Robbert van der Helm
d9284ef0b7 Add debug assertion for custom feature namespaces 2022-11-22 21:19:17 +01:00
Robbert van der Helm
7c732e594c Document that custom features must be namespaced 2022-11-22 21:09:35 +01:00
Robbert van der Helm
b93cd08dfa Default cpal backend to 48 kHz sample rate
This is probably a safer default for most regular computers.
2022-11-11 03:15:05 +01:00
Robbert van der Helm
b2da26ecd7 Add prefix to plain_value() and normalized_value()
To make it clearer that these functions include monophonic modulation.
When creating GUI widgets, you should be using the unmodulated variants.
2022-11-11 03:15:05 +01:00
Robbert van der Helm
e8002730a0 Fix clippy lints 2022-11-05 14:19:47 +01:00
Robbert van der Helm
6eccabb701 Allow basic CLAP MIDI msgs with MidiConfig::Basic
This is needed for Qtractor compatibility. Even though it always sends
notes as CLAP events, it requires the plugin to support both the CLAP
and the MIDI note event dialects. Otherwise it won't send any notes at
all. Feature, not a bug.
2022-11-05 14:19:47 +01:00
Robbert van der Helm
fc9e521a85 Fix potential VST3 parking_lot allocation failure
This can happen when the process function is called from a new thread or
when a new thread has been spawned.
2022-11-04 15:00:45 +01:00
Robbert van der Helm
456655b269 Use the clap_plugin::plugin_data field
Instead of relying on the struct layout and doing raw pointer casts. We
still need to do this for the CLAP plugin factory though.
2022-10-30 14:18:18 +01:00
Robbert van der Helm
36bf46f569 Fix setProcessing() in Ardour when setting latency 2022-10-25 17:47:36 +02:00
Robbert van der Helm
8b47f90dd7 Fix setActive() in Ardour when setting latency 2022-10-25 17:38:51 +02:00
Robbert van der Helm
0dd3bfe4e7 Allow running tasks on a dedicated thread
Independent of the GUI thread, which is also still an option. This is
useful for long running IO jobs that might otherwise block the GUI for
long enough to be noticeable.
2022-10-23 16:23:20 +02:00
Robbert van der Helm
028aeed18e Add a schedule_background() EventLoop method 2022-10-23 16:19:49 +02:00
Robbert van der Helm
31cda78201 Rename do_maybe_async() to schedule_gui() 2022-10-23 15:48:27 +02:00
Robbert van der Helm
4524719128 Add an is_gui_thread flag to MainThreadExecutor
We'll also use the EventLoop for running background tasks completely
decoupled from the GUI.
2022-10-23 15:48:27 +02:00
Robbert van der Helm
967426453a Clean up EventLoop API
By taking an `Arc<T>` instead of a `Weak<T>`. The `Weak` is only needed
for the background threads.
2022-10-23 15:48:27 +02:00
Robbert van der Helm
21bfb57023 Rename execute_async() to execute_gui()
We'll have another function that uses a dedicated background thread.
2022-10-23 13:58:33 +02:00
Robbert van der Helm
c980576102 Add an AsyncExecutor for editor GUIs
This is decoupled form `GuiContext` as that would require invasive
changes all over the place.
2022-10-22 15:05:39 +02:00
Robbert van der Helm
b676353589 Split the nih_plug::context module
So that structs are more logically grouped with their traits.
2022-10-22 14:19:10 +02:00
Robbert van der Helm
faa9742eee Rearrange the wrapper context modules
This matches the order in `src/context.rs`.
2022-10-22 14:15:49 +02:00
Robbert van der Helm
b1f24bfad9 Reorder Context methods 2022-10-22 13:13:08 +02:00
Robbert van der Helm
5a974219b8 Remove Sync bound from TaskExecutor 2022-10-22 12:31:54 +02:00
Robbert van der Helm
5ea2377c18 Replace AsyncExecutor with simple closure
This makes everything much simpler. The task type is now defined
directly on `Plugin`.
2022-10-22 02:01:03 +02:00
Robbert van der Helm
84f834abb6 Add AsyncExecutor support to ProcessContext 2022-10-22 02:01:03 +02:00
Robbert van der Helm
6ffa23971e Add AsyncExecutor support to InitContext 2022-10-22 00:21:08 +02:00
Robbert van der Helm
6ee3aafa91 Move Editor and ParentWindowHandle to a new module 2022-10-21 23:12:05 +02:00
Robbert van der Helm
46094e5249 Explicitly drop Arc::from_raw 2022-10-20 16:28:58 +02:00
Robbert van der Helm
f9bdaffc62 Don't require Sync for Plugin
In hindsight there's really no reason to, because process() requires
exclusive access and the other functions won't be called during
processing.
2022-10-20 16:12:50 +02:00
Robbert van der Helm
375262aaa3 Also drop Sync requirement for editor handles 2022-10-20 14:41:53 +02:00
Robbert van der Helm
a2a52e0ff1 Drop Sync requirement for Editor 2022-10-20 14:31:48 +02:00
Robbert van der Helm
a9b1dd61fd Add state filter method for performing migrations
This allows plugins to migrate old state, for instance when parameter
meanings change, new parameters are introduced, or parameter IDs have
been changed.
2022-10-20 12:45:53 +02:00
Robbert van der Helm
bd295b7380 Move nih_plug::param to nih_plug::params 2022-10-20 12:26:12 +02:00
Robbert van der Helm
ee38566d74 Remove unused DPI scale function in standalone 2022-10-20 12:14:26 +02:00
Robbert van der Helm
fb71d0fcce Move the Params trait out of params::internals
This makes much more sense, since this trait is a cornerstone of
NIH-plug.
2022-10-20 12:10:35 +02:00
Robbert van der Helm
71c7e00f2b Prevent assert_process_allocs on x86_64-pc-windows-gnu
This will result in plugins that hang during their first allocation.
2022-10-05 17:22:29 +02:00
Robbert van der Helm
417a810936 Always use a hyphen in realtime-safe 2022-09-29 16:50:53 +02:00
Simon Leiner
0bb5662770 Remove dead code 2022-09-29 15:13:43 +02:00
Simon Leiner
2402eada05 Fix typos in productive cod 2022-09-29 15:13:43 +02:00
Simon Leiner
0caef90b1a Fix typos in comments 2022-09-29 15:13:43 +02:00
Simon Leiner
f4995abf88 Fix typos in documentation 2022-09-29 15:13:43 +02:00
Simon Leiner
958767acf2 Fix off-by-1 error in VST3 parameter range
Running the VST3 SDK Validator [1] for the midi_inverter plugin shows
one failing test:

    [Scan Parameters]
    Info:  ===Scan Parameters ====================================
    Info:  This component exports 2080 parameter(s)
    Info:     Parameter 000 (id=2147481569): [title="MIDI Ch. 1 CC 0"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 001 (id=2147481570): [title="MIDI Ch. 1 CC 1"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 002 (id=2147481571): [title="MIDI Ch. 1 CC 2"] [unit=""] [type = F, default = 0.000000, unit = 0]

[...]

    Info:     Parameter 2077 (id=2147483646): [title="MIDI Ch. 16 CC 127"] [unit=""] [type = F, default = 0.000000, unit = 0]
    Info:     Parameter 2078 (id=2147483647): [title="MIDI Ch. 16 Channel Pressure"] [unit=""] [type = F, default = 0.000000, unit = 0]
    ERROR: =>Parameter 2079 (id=-2147483648): Invalid Id!!!
    [XXXXXXX Failed]

The relevant part of the test code [2] looks like this:

    int32 paramId = paramInfo.id;
    if (paramId < 0)
    {
        // Error
    }

This shows that the parameter ID must be INT32_MAX = (1 << 31) - 1 at
most. As far as I see, even Steinberg's own documentation [3] gets
this wrong.

[1]: 55d7ed3c6a/samples/vst-hosting/validator
[2]: 55d7ed3c6a/source/vst/testsuite/general/scanparameters.cpp (L100)
[3]: https://steinbergmedia.github.io/vst3_dev_portal/pages/Technical+Documentation/Parameters+Automation/Index.html
2022-09-29 00:24:41 +02:00