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
Simon Leiner
67808fd9ae
Fix typos in test names
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
Robbert van der Helm
fae7050113
Add helper to compensate smoother for oversampling
2022-09-25 17:37:25 +02:00
Robbert van der Helm
fff713d066
Fix resizing with HiDPI standalones
2022-09-22 19:36:43 +02:00
Robbert van der Helm
963d1bd14f
Fix bar start position calculation
2022-09-12 14:17:06 +02:00
Robbert van der Helm
b883a611ab
Fix resizing aux input storage on buffer size
...
This nested `resize_with()` of course wouldn't resize the inner vectors
of the outer ones were already the correct size.
2022-09-11 16:41:31 +02:00
Robbert van der Helm
4c9a2726f3
Fix s2v_bool_bypass()
2022-09-07 20:43:47 +02:00
Robbert van der Helm
cf72a796f4
Fix GUI context state loading in standalones
2022-09-07 18:38:07 +02:00
Robbert van der Helm
910a90d47a
Respect assert_process_allocs in standalones
...
This fixes #29 .
2022-09-07 18:29:58 +02:00
Robbert van der Helm
591f3710bd
Add missing reset call to standalone init
...
The plugin versions also do this, and the docs mention that this always
happens.
2022-09-07 18:23:36 +02:00
Robbert van der Helm
997249a293
Notify about unsupported aux IO in standalones
...
None of the backends support this at the moment.
2022-09-07 15:58:09 +02:00
Robbert van der Helm
9536842a15
Only show CPAL MIDI support warning if applicable
2022-09-07 15:55:36 +02:00
Robbert van der Helm
c566888fa3
💥 Use interior mutability for parameters
...
Instead of the previous technically-unsound approach. While it wouldn't
cause any issues in practice, it did break Rust's guarantees. That was a
design choice after adding support for editors in NIH-plug, but this is
probably the better long term solution.
The downside is that all uses of `param.value` now need to be changed to
`param.value()`.
2022-09-06 21:57:24 +02:00
Robbert van der Helm
5966e353da
Use only interior mutability for smoothers
...
This is needed in preparation for removing the need to have `*mut`
pointers to parameters.
2022-09-06 21:21:46 +02:00
Robbert van der Helm
7f33f172cb
Clean up optimized block smoothing
...
This is easier to follow and avoids computing and subsequently
overwriting the last smoothed value.
2022-09-05 14:00:56 +02:00
Robbert van der Helm
a21daef96b
Redesign mapped block smoothing
...
The non-mapped version is now split off and the mapped version is much
better suited for array based modulation. Check the breaking changes
document and the new docstring for more information.
2022-09-04 20:17:06 +02:00
Robbert van der Helm
99437c6011
Optimize block smoothing
2022-09-04 19:52:17 +02:00
Robbert van der Helm
3a9d56e956
Rename step_size() current parameter to start
2022-09-04 18:40:18 +02:00
Robbert van der Helm
8e17972da5
Also move num steps computation to SmoothingStyle
2022-09-04 18:26:36 +02:00
Robbert van der Helm
bb6e9c237f
Add equivalence tests for next() and next_step()
2022-09-04 18:20:51 +02:00
Robbert van der Helm
9f990cc3b9
Rename step_size() parameter for SmoothingStyle
2022-09-04 18:20:28 +02:00
Robbert van der Helm
17a928647e
Optimize single step Smoother::next()
...
By not having to take multiple steps into account.
2022-09-04 18:08:31 +02:00
Robbert van der Helm
dd320c4c1f
Add dedicated single step next() to SmoothingStyle
...
This avoids some computations for single stepping. And we can use this
for block smoothing later.
2022-09-04 18:08:19 +02:00
Robbert van der Helm
e47899d421
Move calculation in next_step() to SmoothingStyle
2022-09-04 18:04:31 +02:00
Robbert van der Helm
a6d9972924
Move the smoothing step size to a function
2022-09-04 17:57:21 +02:00
Robbert van der Helm
2f87a79d3e
Wait for the Windows event loop to shut down
...
This fixes crashes when removing the instance and immediately unloading
the module. `DestroyWindow()` is synchronous while `CloseWindow()`
merely posts a message to close the window.
2022-08-29 13:59:28 +02:00
Robbert van der Helm
3761f9f5ee
Remove unnecessary use of MaybeUninit
2022-08-22 12:41:12 +02:00
Robbert van der Helm
26e0d17833
Fix VST3 event loop leaking
...
This should have never used MaybeUninit in the first place.
2022-08-22 12:31:09 +02:00
Robbert van der Helm
5110e5b059
Log trace messages when loading and saving state
2022-08-22 12:09:25 +02:00
Robbert van der Helm
72d3b61a42
Mention standalone inputs not auto connecting
2022-08-21 17:59:44 +02:00
Robbert van der Helm
9cd440231e
Print message about MIDI IO not being implemented
2022-08-21 17:59:44 +02:00
Robbert van der Helm
1bee7f5333
Add audio input to the CPAL standalone backend
2022-08-21 17:55:09 +02:00
Robbert van der Helm
c46a044cb4
Add audio output for the CPAL backend
2022-08-21 17:07:02 +02:00
Robbert van der Helm
c47f2139a3
Use a Parker instead of a channel in JACK backend
2022-08-21 15:26:49 +02:00
Robbert van der Helm
559d835878
Print system backend init errors in auto mode
...
Since this may fail due to incompatible default sample rates or period
sizes.
2022-08-21 15:26:48 +02:00
Robbert van der Helm
1fc437068a
Compute device configs for cpal
2022-08-21 15:26:48 +02:00
Robbert van der Helm
a011eaa07c
Add most of a CPAL standalone backend
...
For ALSA, CoreAudio, and WASAPI.
2022-08-21 15:26:48 +02:00
Robbert van der Helm
ca2e318551
Clean up JACK MIDI handling #23
2022-08-20 23:56:18 +02:00
Sean Bolton
7a10d58a58
Fix program change and channel pressure receipt in standalone jack backend
2022-08-20 23:48:55 +02:00
Robbert van der Helm
5010ce5e1a
Allow parsing compression ratios without a colon
2022-08-20 15:54:09 +02:00
Robbert van der Helm
8a9c98943e
Store plugin version in the state
...
This may later be used to allow migrations between breaking plugin
versions.
2022-08-20 15:10:34 +02:00
Robbert van der Helm
ee62a45d0d
Remove now unused argument
2022-08-19 14:54:48 +02:00
Robbert van der Helm
a5c05b22fb
Use the plugin's default channels for standalones
2022-08-19 14:52:57 +02:00
Robbert van der Helm
1a706ea1c7
Rename DEFAULT_NUM_INPUTS and DEFAULT_NUM_OUTPUTS
2022-08-19 14:34:21 +02:00
Robbert van der Helm
b19e6afa6c
Remove unused import
2022-08-18 16:41:51 +02:00
Robbert van der Helm
56a12db1e6
Reuse MIDI conversion function for CLAP events
2022-08-18 16:39:07 +02:00
Robbert van der Helm
b7633730e6
Mention that VST3 plugins won't receive MIDI PC
...
There's no way to map this.
2022-08-18 16:38:44 +02:00
Robbert van der Helm
17a90cca9b
Rearrange note events
2022-08-18 16:38:44 +02:00
Sean Bolton
2447344dab
Add program change events
2022-08-18 16:26:32 +02:00
Robbert van der Helm
1bb1cde913
Add optional Zstandard compression for state
...
This can be particularly useful when using the persistent fields feature
to store JSON or other large textual documents.
2022-08-18 13:55:48 +02:00
Robbert van der Helm
7f12c9f362
Fix group->unit conversion with missing parents
...
This caused Spectral Compressor's VST3 version to not work because the
compressor group didn't contain any parameters.
2022-07-24 23:37:45 +02:00
Robbert van der Helm
6a1395e99a
Avoid printing -0.0 dB
2022-07-24 21:20:53 +02:00
Robbert van der Helm
6ee7e8f4e3
Assert correct values for gain_skew_factor
2022-07-24 21:06:26 +02:00
Robbert van der Helm
2d3b601555
Allow comparisons in nih_assert!()
2022-07-24 21:06:13 +02:00
Robbert van der Helm
44b9a4cad0
Add a way to compute skew factors for linear gain
...
Needed for #18 .
2022-07-24 20:46:18 +02:00
Robbert van der Helm
dc97fb1019
Implement Params for Arc<P: Params>
...
This is useful for partial generic UIs.
2022-07-24 15:15:47 +02:00
Robbert van der Helm
83d8c7a9f4
Add a formatter for compression ratios
2022-07-24 15:15:47 +02:00
Robbert van der Helm
12aa8544cd
Add a non-functional STFT to Spectral Compressor
2022-07-24 15:15:47 +02:00
Robbert van der Helm
9844d9c490
Change match &self to match self
...
This is equivalent when taking a reference to self, and you can't do the
same thing with &mut self.
2022-07-19 20:21:52 +02:00
Robbert van der Helm
f007945335
Add reversed ranges
2022-07-19 20:21:52 +02:00
Robbert van der Helm
ef1d56646a
Make Arc<ViziaState> persistable
...
This allows the plugin instance's size and scale to be remembered.
2022-07-13 23:16:54 +02:00
Robbert van der Helm
0395fd91b1
Only connect JACK ports after activating client
...
Otherwise JACK2 will hate us. Forever!
The AtomicRefCell now needs to be a mutex because the process call may
be called while this connection function is still running.
2022-07-13 19:19:17 +02:00
Robbert van der Helm
1f3d2f9a66
Fix typo in standalone documentation example
2022-07-13 17:06:22 +02:00
Robbert van der Helm
d828e697a3
Actually expose the CLAP render extension
...
Oops.
2022-07-11 15:00:10 +02:00
Robbert van der Helm
2bb698a8f1
Mark the smoother's style field pub
...
This is useful when using the smoother as a simple amplitude envelope.
2022-07-06 20:14:29 +02:00
Robbert van der Helm
35e584b3c8
Add a poly mod gain parameter to PolyModSynth
2022-07-06 19:18:49 +02:00
Robbert van der Helm
fb43047cbe
Document Bitwig not providing voice ID for NoteOff
2022-07-06 17:16:19 +02:00
Robbert van der Helm
16077101b2
Gate NoteEvent::VoiceTerminated behind MIDI_INPUT
2022-07-06 17:16:19 +02:00
Robbert van der Helm
4ad4f8f76d
Add more basic fields for PolyModSynth
2022-07-06 17:16:19 +02:00
Robbert van der Helm
e77eca88a5
Rename the midi_note_to_freq() argument name
...
To match the 'note' term used everywhere else.
2022-07-06 17:16:19 +02:00
Robbert van der Helm
958bea45e6
Re-export PolyModulationConfig from the prelude
2022-07-06 14:38:08 +02:00
Robbert van der Helm
4b905e28d4
Add Clone and Debug instances for Smoother
2022-07-06 14:32:18 +02:00
Robbert van der Helm
68cf0455ee
Rework and optimize block smoothing API
...
You now need to bring your own buffer instead of the smoother having a
built in vector you would need to pre-allocate. This makes the API
simpler, and also much more flexible when doing polyphonic modulation.
In addition, the new API is much more efficient when there is no
smoothing going on anymore.
2022-07-06 14:29:29 +02:00
Robbert van der Helm
ec77d3b450
Fix typo in comment
2022-07-06 13:55:26 +02:00
Robbert van der Helm
1424b98e38
Break PolyModulation into that and MonoAutomation
...
This is needed to properly support polyphonic modulation, since the
modulated value may still be automated in the meantime and the
polyphonic modulation must act as an offset for that value. This does
mean that the plugin must add the normalized value and normaliezd offset
by itself. The `PolyModulation` event now also contains a description of
how this can be used. It would have been nicer to be able to send
polyphonic automation-style events instead (like the PolyModulation was
doing before), but that's sadly not feasible without NIH-plug being
involved in the voice management.
2022-07-06 13:40:12 +02:00
Robbert van der Helm
9520234b57
Pass poly modulation events through to the plugin
2022-07-06 00:09:53 +02:00
Robbert van der Helm
0187325b60
Add (currently unused) PolyModulation events
2022-07-05 23:51:37 +02:00
Robbert van der Helm
af4314b581
Mark poly mod parameters as such
2022-07-05 23:41:35 +02:00
Robbert van der Helm
54b47ecf71
Keep track of poly mod parameter IDs
2022-07-05 23:41:08 +02:00
Robbert van der Helm
cdee721e9c
Allow the plugin to change current voice capacity
2022-07-05 23:26:23 +02:00
Robbert van der Helm
f828761677
Implement the CLAP voice info extension
2022-07-05 23:26:23 +02:00
Robbert van der Helm
1de561e4a0
Add poly mod config constant to ClapPlugin
...
Setting this will enable the 'voice-info' extension.
2022-07-05 23:26:23 +02:00
Robbert van der Helm
1466358e14
Support Plugin::HARD_REALTIME_ONLY for VST3
2022-07-05 22:24:52 +02:00
Robbert van der Helm
905925e032
Move the hard realtime constant to Plugin
...
Since we could indeed just add the `|OnlyRT` category to the VST3
plugin.
2022-07-05 22:20:07 +02:00
Robbert van der Helm
992fcfe969
Add polyphonic modulation IDs to parameters
...
In a bit we should be able to use this with a new `PolyModulation` note
event to allow polyphonic modulation.
2022-07-05 19:39:50 +02:00
Robbert van der Helm
7ea2851775
Clarify the input event timing handling in VST3
2022-07-04 22:45:52 +02:00
Robbert van der Helm
1bbb56151d
Remove duplication in CLAP note timing handling
2022-07-04 22:43:48 +02:00
Robbert van der Helm
5b264179d4
Add note choke events
2022-07-04 22:42:04 +02:00
Robbert van der Helm
d027a6319f
Add VoiceTerminated events
...
These need to be output by a plugin when using polyphonic
modulation (which is currently not yet supported by NIH-plug).
2022-07-04 19:31:40 +02:00
Robbert van der Helm
a2f8a9bebf
Add voice ID fields for all non-MIDI note events
...
This will be useful when adding polyphonic modulation.
2022-07-04 18:31:59 +02:00
Robbert van der Helm
f11b3c1a03
Fix typos in parameter value docstrings
2022-07-04 18:01:55 +02:00
Robbert van der Helm
7cd7294b22
Make CLAP descriptions and special URLs optional
...
This closes #14 .
2022-07-04 12:46:34 +02:00
Robbert van der Helm
5cbd8827e9
Update clap-sys with optional function pointers
...
None of these function pointers are allowed to be null, yet even the
official `clap-helpers` do this. This new `clap_call!()` macro asserts
that a pointer is non-null before calling it.
2022-07-04 00:07:06 +02:00
Robbert van der Helm
97baa9d55c
Remove duplicate comment
2022-07-03 17:04:33 +02:00
Robbert van der Helm
c91b74355f
Let rustfmt handle string wrapping
2022-07-03 16:52:38 +02:00
Robbert van der Helm
ed880f5297
Handle buffered CLAP stream reads and writes
...
`clap-validator` now tests this.
2022-07-03 16:51:15 +02:00
Robbert van der Helm
5e6e920418
Use BTreeMaps in the state
...
This ensures that the order is consistent when saving the same state
file multiple times.
2022-07-02 19:13:18 +02:00
Robbert van der Helm
71efe779a5
Recompute normalized values when setting params
...
This makes it so that the value is consistent after reloading the
preset.
2022-07-02 19:04:43 +02:00
Robbert van der Helm
32ad1212f1
Silence clippy::type_complexity
...
Clippy now wants us to move any usage of the Fn* traits to a typedef.
Doing so will almost certainly not help readability.
2022-07-01 15:50:23 +02:00
Robbert van der Helm
0599780030
Remove unnecessary reborrows
2022-07-01 15:50:16 +02:00
Robbert van der Helm
1d7cbe4c4d
Suppress unused_unit more locally
2022-07-01 14:58:31 +02:00
Robbert van der Helm
f309f39982
More defensively check for >0 inputs and outputs
...
Noticed this through a bug in clapval.
2022-06-29 01:32:39 +02:00
Robbert van der Helm
4247c229ec
Fix in-place pairs for output-only plugins
...
https://github.com/robbert-vdh/clapval reminded me of this.
2022-06-29 01:32:39 +02:00
Robbert van der Helm
05fd7fa075
Revert "Fix audio port in-place pair indices"
...
This reverts commit 791dc44650
.
This was actually correct, this should use stable indices instead of
list indices.
2022-06-27 18:33:13 +02:00
Robbert van der Helm
791dc44650
Fix audio port in-place pair indices
2022-06-27 18:22:40 +02:00
Robbert van der Helm
9fa305206c
Fix compilation on Windows
2022-06-26 23:25:21 +02:00
Robbert van der Helm
4b2435a791
Allow allocations during most panics
...
The panic logger is allowed to allocate now. If a panic message uses
string formatting then that may still trigger `assert_no_alloc`.
2022-06-26 23:13:35 +02:00
Robbert van der Helm
fb0c1acbed
Update documentation on PersistentField
2022-06-24 21:09:25 +02:00
Robbert van der Helm
8018af419f
Add back lost note->frequency conversion
...
This somehow got lost in db135ba34f
.
2022-06-22 19:40:25 +02:00
Robbert van der Helm
db135ba34f
Fix note note string -> MIDI ID conversion
...
This was added in a PR, but I never actually tested the conversion.
2022-06-22 19:35:10 +02:00