Robbert van der Helm
ee24e14829
Log unhandled SysEx message in debug mode
2023-01-31 21:11:01 +01:00
Robbert van der Helm
8d9ae19d38
Support receiving SysEx in JACK standalone
2023-01-31 20:39:15 +01:00
Robbert van der Helm
68d68c0bc3
Add NoteEvent conversions to and from MIDI SysEx
...
JACK already supports this because otherwise things wouldn't compile,
but support still needs to be added for CLAP and VST3.
2023-01-31 20:37:33 +01:00
Robbert van der Helm
1e8bdb9d8e
Document the expected buffer format for SysEx
2023-01-31 19:29:11 +01:00
Robbert van der Helm
611dc452ec
Add conversion functions on SysExMessage trait
2023-01-31 18:57:49 +01:00
Robbert van der Helm
d9cf78e72a
Document the MidiSysEx event's availability
2023-01-31 18:45:30 +01:00
Robbert van der Helm
b7849f9a7a
Add a NoteEvent::MidiSysEx variant
...
Right now this isn't used, and there is not yet any way to convert to
and from raw SysEx data.
2023-01-31 18:32:16 +01:00
Robbert van der Helm
c8ed795524
Add a SysExMessage type to Plugin
...
This is needed to enable sending and receiving SysEx #54 . Because
associated type defaults still are not stable, this requires every
plugin that doesn't need this to set this to the unit type:
```rust
type SysExMessage = ();
```
2023-01-31 18:18:41 +01:00
Robbert van der Helm
978d466019
Add trait bounds for the SysExMessage trait
2023-01-31 18:18:41 +01:00
Robbert van der Helm
c828dabb03
Add a default implementation for SysExMessage
2023-01-31 17:45:23 +01:00
Robbert van der Helm
d6b5342c53
Add boilerplate for a SysEx message trait
2023-01-31 17:43:52 +01:00
Robbert van der Helm
683c96bca0
Avoid duplicate parameter callbacks and smoothing
...
REAPER seems to spam value set events when an automation lane is active,
and it also always sends CLAP automation events twice.
2023-01-31 16:31:29 +01:00
Robbert van der Helm
efff43df21
Add an StftHelper::max_padding()
2023-01-30 02:16:03 +01:00
Robbert van der Helm
e3e2a2e7d0
Actually change padding in StftHelper::set_padding
2023-01-30 01:55:34 +01:00
Robbert van der Helm
161c97bb28
Add the CLAP note detector feature
2023-01-28 23:23:56 +01:00
Robbert van der Helm
98d44798ea
Allow changing StftHelper padding after creation
...
Adapted from #52 .
2023-01-25 18:40:09 +01:00
Robbert van der Helm
ead160497b
Fix excess padding handling in StftHelper
2023-01-25 18:35:55 +01:00
Robbert van der Helm
1e90f55019
Add a todo for invalid CLAP event parsing
...
Currently these values are never -1, but they can be.
2023-01-16 23:59:10 +01:00
Robbert van der Helm
92ce737000
Add a gain_to_db_fast() with a lower limit
...
These functions probably need some better organization at some point.
2023-01-15 18:15:52 +01:00
Robbert van der Helm
bb521fcb82
Upgrade Vizia for the cosmic-text changes
...
This brings some breaking changes, and vertical positioning of text may
have changed slightly.
2023-01-12 19:03:02 +01:00
Robbert van der Helm
e5a26ac199
Send individual parameter changes for VST3 plugins
2023-01-11 16:59:21 +01:00
Robbert van der Helm
adb49cb6d1
Simplify VST3 wrapper creation
2023-01-11 16:51:21 +01:00
Robbert van der Helm
d3d34b59ac
Send individual parameter changes for standalones
2023-01-11 16:51:21 +01:00
Robbert van der Helm
048cfd73b5
Add a TODO for merging hashmaps
2023-01-11 15:22:26 +01:00
Robbert van der Helm
951a0739d7
Send individual parameter changes for CLAP plugins
2023-01-11 15:22:26 +01:00
Robbert van der Helm
4e53d3a799
Significantly increase task queue capacity
...
This is needed to prevent parameter change events from being dropped.
2023-01-11 15:22:26 +01:00
Robbert van der Helm
08c6729ed1
Also add an Editor::param_modulation_changed()
2023-01-11 15:22:26 +01:00
Robbert van der Helm
922d2de603
Add an individual Editor::param_value_changed
2023-01-11 15:22:26 +01:00
Robbert van der Helm
838e1bfd2d
Fix note formatter octave conversion, again
2023-01-10 14:03:17 +01:00
Robbert van der Helm
2aa937e370
Fix note formatting for 0 Hz
...
This would result in an underflow, failing the test case.
2023-01-10 02:28:39 +01:00
Robbert van der Helm
a9d0e40447
Fix octave -1 edge case in v2s_f32_hz_then_khz_with_note_name
2023-01-10 02:11:45 +01:00
Robbert van der Helm
32903ac065
Test f32_hz_then_khz_with_note_name roundtrip
...
This was failing in clap-validator.
2023-01-10 01:46:34 +01:00
Robbert van der Helm
18b4403a3b
Fix roundtrip in f32_hz_then_khz_with_note_names
2023-01-10 01:46:14 +01:00
Robbert van der Helm
b647f24121
Fix rounding error in v2s_f32_hz_then_khz_with_note_name
2023-01-10 01:43:27 +01:00
Robbert van der Helm
26422ae8e3
Fix -inf parsing in s2v_f32_gain_to_db()
...
I noticed this thanks to a test I implemented myself in clap-validator
ha.
2023-01-10 00:40:50 +01:00
Robbert van der Helm
57e751d277
Remove todo about single message queues
...
Because we just did that.
2023-01-06 18:05:52 +01:00
Robbert van der Helm
47b75fd020
Fix missing generic arguments on BackgroundThread
2023-01-06 17:59:33 +01:00
Robbert van der Helm
6f7f2e30ed
Fix debug assertion failure in smoother
2023-01-06 17:58:13 +01:00
Robbert van der Helm
28cd25d501
Implement Linux event loop using BackgroundThread
...
This reduces duplication a lot.
2023-01-06 17:53:07 +01:00
Robbert van der Helm
5c9be077e7
Allow BackgroundThread sharing between instances
...
This removes the need for every instance to have its own background
thread.
2023-01-06 17:51:38 +01:00
Robbert van der Helm
8d242b45ad
Remove old overeager clippy lint silence
...
This is no longer enabled by default.
2023-01-06 16:13:01 +01:00
Robbert van der Helm
dfeb8164ca
Fix new Clippy lints
2023-01-06 16:13:01 +01:00
Robbert van der Helm
935bf6f7f3
Fix allocation failures in BackgroundThread
2023-01-06 16:03:48 +01:00
Robbert van der Helm
c0e9b29bf4
Remove macOS deprecation warning from event loop
2023-01-06 15:58:01 +01:00
Robbert van der Helm
d5006d109e
Code style cleanup for macOS event loop
2023-01-06 15:46:29 +01:00
Robbert van der Helm
700a15f528
Merge branch 'maxjvh/master' #48
...
native macOS event loop: https://github.com/robbert-vdh/nih-plug/pull/48
2023-01-06 15:14:29 +01:00
Robbert van der Helm
300e112ede
Rename Block::len() to Block::samples()
...
For the same reason mentioned in the last commit.
2023-01-05 16:13:58 +01:00
Robbert van der Helm
cb2824021b
Fix buffer adapter size hints for zero channels
...
And the SamplesIter one was simply not correct when yielded by the block
iterator.
2023-01-05 16:12:09 +01:00
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
11d9476a5f
Use db_to_gain_fast() in plugins
2023-01-04 17:05:13 +01:00
Robbert van der Helm
3b57ebe895
Add test for fast decibel<->gain functions
2023-01-04 17:01:25 +01:00
Robbert van der Helm
c55fb02982
Add faster decibel<->gain conversion functions
2023-01-04 16:58:28 +01:00
Robbert van der Helm
74a9e294b1
Make gain_to_db() branchless
2023-01-04 16:45:11 +01:00
max
1e83730ba9
rename variable
2023-01-02 19:30:31 +02:00
max
edca84a42c
address comments
2023-01-02 19:29:13 +02:00
max
1fbe3efb79
update comment
2023-01-01 20:22:17 +02:00
max
9fd88ffd48
initial event loop implementation for macOS
2023-01-01 20:14:55 +02: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
46752fc7f0
Make the definition of buffer length more explicit
...
This is the standard definition, but apparently it's still confusing.
Resolves #47 .
2022-12-23 20:34:57 +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
1d9e7e6256
Implement Debug for parameters
2022-11-26 12:58:32 +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
26535a099d
Seal the Params trait
...
This avoids situations like #41 where people try to implement the trait
only to find out that you simply can't.
2022-11-22 17:43:26 +01:00
Robbert van der Helm
753ca201a6
Support #[nested] prefixes/suffixes w/ #[persist]
...
This makes nested fields behave the same as nested parameters, allowing
multiple copies of a persistent field to exist.
2022-11-19 00:17:13 +01:00
Robbert van der Helm
c947d6c232
Handle shaprs in s2v_i32_note_formatter()
2022-11-18 17:26:42 +01:00
Robbert van der Helm
230ed90745
Parse XXX Hz, C4 as XXX Hz
...
This can happen if the user edits the output of
`v2s_f32_hz_then_khz_with_note_name()`.
2022-11-18 17:12:52 +01:00
Robbert van der Helm
4dbc0c1a87
Mark the utils functions as inlnie
...
So the compiler can decide what to do with them.
2022-11-18 16:09:32 +01:00
Robbert van der Helm
6d0c1eebbe
Move frequency to note number conversion to utils
2022-11-18 16:09:18 +01:00
Robbert van der Helm
6966d00dd7
Fix cents in s2v_f32_hz_then_khz()
...
The trimming was not done correctly, and cents were treated as partial
octaves.
2022-11-12 01:32:09 +01:00
Robbert van der Helm
79f5bd8659
Add a formatter for frequencies with note name
...
This is the same as the 'Hz then kHz' formatter but it also appends the
note name and optionally the number of cents.
2022-11-12 01:26:27 +01:00
Robbert van der Helm
c3cd2fb0dd
Fix v2s_i32_note_formatter() for negative numbers
...
Otherwise this would wrap around or panic in debug builds.
2022-11-12 01:25:33 +01:00
Robbert van der Helm
59456a2973
Remove 128 note MIDI limit in frequency parser
...
This is useful when the value->string function can go outside of the
standard 128 note range.
2022-11-12 01:25:33 +01:00
Robbert van der Helm
5330a7d938
Add a version of util::midi_note_to_freq for f32
2022-11-12 01:25:33 +01:00
Robbert van der Helm
761f0b0a80
Add cents support to s2v_f32_hz_then_khz()
2022-11-12 01:25:33 +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
5b3c327e29
Handle -inf dB in gain<->decibel formatters
2022-11-11 03:15:05 +01:00
Robbert van der Helm
e583b8e777
Add finer step sizes to parameters
2022-11-11 03:15:05 +01:00
Robbert van der Helm
8885713ea1
Take largest step out of 100 steps and step_size
...
For floating point ranges. This otherwise feels very janky.
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
841ec96d2d
Use Rust range notation for NoteEvent docs #42
...
Apparently `from x to y` is ambiguous, so we now use the Rust `x..y`
syntax instead.
2022-11-08 19:36:07 +01:00
Robbert van der Helm
4f16fa3998
Fix typos in NoteEvent documentation
2022-11-08 19:33:40 +01:00
Robbert van der Helm
4893479485
Clarify integer range conventions in docs
...
This resolves #42 .
2022-11-07 22:47:17 +01:00
Robbert van der Helm
69f9880fe5
Use consistent real interval syntax in docs
2022-11-07 22:45:36 +01:00
Robbert van der Helm
5851bc5a27
Add missing ranges in note enum documentation
2022-11-07 22:45:22 +01:00
Robbert van der Helm
542b3052f2
Support running status MIDI events
2022-11-05 14:19:47 +01:00
Robbert van der Helm
e8002730a0
Fix clippy lints
2022-11-05 14:19:47 +01:00
Robbert van der Helm
8f91ecf247
Silence bool_to_int_with_if clippy lint
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
f48b36f2a7
Add Persist implementations for Arc wrapped types
2022-11-05 14:19:32 +01:00
Robbert van der Helm
a0ca80297b
Add Persistent implementations for atomics
2022-11-05 14:19:32 +01:00
Robbert van der Helm
23f4fd6fc5
Rearrange persist module
2022-11-05 14:19:32 +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
6c0df7ec39
Fix typo in pos_seconds documentation
2022-11-03 03:08:28 +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
435fcd8106
Fix CLAP modulation
...
This was a regression introduced in
c566888fa3
.
2022-10-24 23:56:49 +02:00
Robbert van der Helm
ba9e9253f2
Clean up Plugin trait doc comment
2022-10-23 16:33:20 +02:00
Robbert van der Helm
f42b2d55f9
Clarify Plugin trait background task docs
2022-10-23 16:32:15 +02:00
Robbert van der Helm
3032300bcf
Clarify task scheduling doc comments
2022-10-23 16:29:30 +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
520eba71ca
Add a simple background thread task runner
...
This can be used by the Windows event loop, the future macOS event loop,
and the CLAP event loop.
2022-10-23 16:14:35 +02:00
Robbert van der Helm
dbb97f0534
Use channels for Windows event loop
...
Instead of an `ArrayQueue`. Since this doesn't need to both send and
receive on the same object.
2022-10-23 15:52:14 +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
5d84800c0c
Manually implement Clone for AsyncExecutor
2022-10-22 15:32:42 +02:00
Robbert van der Helm
63db56fa68
Make AsyncExecutor Send+Sync
...
Otherwise actually using this will be a bit difficult.
2022-10-22 15:10:34 +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
f3bb816cb5
Add an AsyncExecutor type for use with the GUI
2022-10-22 14:34:32 +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
8b53ca2ab0
Mention duplicate tasks in execute_async()
2022-10-22 02:30:13 +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
ec8e99cf44
Require AsyncExecutor tasks to be Send
2022-10-22 00:55:04 +02:00
Robbert van der Helm
6ffa23971e
Add AsyncExecutor support to InitContext
2022-10-22 00:21:08 +02:00
Robbert van der Helm
297ad2a83e
Add an AsyncExecutor associated type to Plugin
...
This will make it possible to run background tasks in a type safe way.
Sadly, this does mean that every plugin now needs to define the type
alias and constructor function since Rust does not yet support defaults
for associated types.
2022-10-21 23:52:46 +02:00
Robbert van der Helm
25d20f1950
Add an AsyncExecutor trait for background tasks
2022-10-21 23:52:29 +02:00
Robbert van der Helm
558922c9a9
Add missing doc comments in Plugin
2022-10-21 23:34:59 +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
e1269d07b1
Fix references in docs
2022-10-20 12:21:24 +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
2a0ed0c5ec
Move PersistentField and helpers to dedicated mod
...
As mentioned in the previous commit's breaking changes entry.
2022-10-20 12:11:04 +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
727d88c4d7
Add ID renaming superpowers to #[nested(...)]
...
This can now be used for most common use cases where you previously had
to do a manual `Params` implementation, like arrays of parameter objects
and duplicate parameter objects.
2022-10-13 01:28:05 +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
Robbert van der Helm
b8593b03f4
Inline the nih_plug::debug macro docstrings
...
This makes it easier to browse the module in rustdoc.
2022-09-29 16:50:13 +02:00
Robbert van der Helm
cba0bdc21d
Document the logging module
2022-09-29 16:46:33 +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