1
0
Fork 0
Commit graph

1107 commits

Author SHA1 Message Date
Robbert van der Helm 98b8571dc9 Bundle CPAL device data into a struct 2023-02-25 17:11:59 +01:00
Robbert van der Helm 1feeb6e961 Add log messages about enabling MIDI IO with CPAL 2023-02-25 16:15:33 +01:00
Robbert van der Helm e44d91c016 Add standalone CLI options for MIDI IO with CPAL 2023-02-25 16:11:17 +01:00
Robbert van der Helm 7c92167d85 Reorder standalone options order
Backend agnostic audio options should come before backend specific ones.
2023-02-25 14:48:52 +01:00
Robbert van der Helm 045598aa09 Rename CPAL standalone backend to CpalMidir
To make it a bit more obvious what it ends up using for IO.
2023-02-25 14:43:59 +01:00
Robbert van der Helm d777b02d33 Use snake case for JACK client names
Like we're doing with the ports now.
2023-02-23 23:00:19 +01:00
Robbert van der Helm d7e766ca00 Support auxiliary IO for JACK standalones 2023-02-23 22:58:11 +01:00
Robbert van der Helm 3ca24bdc8c Fix dangling references with CPAL aux buffers 2023-02-23 22:30:32 +01:00
Robbert van der Helm c6e0be341f Actually use the standalone backend aux buffers 2023-02-23 22:20:21 +01:00
Robbert van der Helm 5d497f2de4 Add debug assertions for Arc strong counts
To make issues like the event loop thing more visible.
2023-02-23 21:49:24 +01:00
Robbert van der Helm 42a7bb37b4 Revert event loop APIs to use Weak instead of Arc
Previously the plugin wouldn't get dropped because the event loops kept
them alive. These APIs used Weak instead of Arc in the past precisely to
prevent this issue. Not sure why I changed that.
2023-02-23 21:45:09 +01:00
Robbert van der Helm 4564bf9027 Fix reference counts for background worker threads
We would decrement this on drop, but never increment it on clone. Oops.
2023-02-23 21:30:09 +01:00
Robbert van der Helm 5d9affad17 Provide dummy aux IO buffers with CPAL backend 2023-02-23 19:43:29 +01:00
Robbert van der Helm 3a6efe49ec Move the unsupported aux warning to CPAL backend
We'll support this with JACK, and in the dummy backend there is no audio
IO anyways.
2023-02-23 19:39:51 +01:00
Robbert van der Helm 9e2c2b776b Add auxiliary buffers in dummy standalone backwend 2023-02-23 19:35:49 +01:00
Jussi Viiri debb2662af s2v_f32_panning() now strips C and R, not just L 2023-02-23 14:46:39 +01:00
Robbert van der Helm 52b6c26cc4 Use the custom port names for JACK standalones 2023-02-20 17:02:38 +01:00
Robbert van der Helm e8fd18ab80 Completely reword the audio IO layout system
Instead of a VST3-style polling function to test if a plugin supports a
certain layout, the plugin now explicitly enumerates the supported
layouts. This aligns better with non-VST3 plugin formats.
2023-02-20 16:57:32 +01:00
Robbert van der Helm 36c48157db Add a nih_warn!() macro 2023-02-19 22:56:35 +01:00
Robbert van der Helm 401bb95187 Add a todo for standalone exit codes 2023-02-19 22:09:03 +01:00
Robbert van der Helm 6fd22b3ba9 Move audio setup related structs to a new module 2023-02-19 15:43:40 +01:00
Robbert van der Helm 090b4b529f Fix unused/dead code warnings with VST3 disabled 2023-02-19 13:19:02 +01:00
Robbert van der Helm 5ddcc3bc7d Silence unused event loop warning without VST3 2023-02-19 13:15:09 +01:00
Viktor Lazarerv 5a08c27437 Add missing conditions related to the "vst3" feature 2023-02-12 16:30:52 +01:00
Robbert van der Helm 3e4aec4dfe Document missing missing values in NoteEvent 2023-02-08 03:07:13 +01:00
Robbert van der Helm d2b25f8682 Add missing debug assertions for VST3 callback 2023-02-06 18:00:33 +01:00
Robbert van der Helm bea1a6028b Remove unnecessary cast 2023-02-02 20:03:43 +01:00
Robbert van der Helm 9c48e7f59b Fix assertion failures when reactivating plugins
`.set_slices()` makes sure all slices' lengths are equal to the first
argument, so in these functions we'll need to manually overwrite any
existing element with empty slices.
2023-02-02 16:15:43 +01:00
Robbert van der Helm 62f7f38a9e Loosen generic bounds on NoteEvent
The `S: SysExMessage` isn't strictly needed. I thought it might make the
usage clearer, but it does introduce more boilerplate than strictly
necessary when working with note events.
2023-02-01 18:07:45 +01:00
Robbert van der Helm 15128edde4 Fix assertions in clamping functions
This was previously comparing against the buffer's length, so the `<`
made sense. But this approach always allows events at time 0 even if the
buffer is empty.
2023-02-01 17:39:08 +01:00
Robbert van der Helm d735d23ffa Document the use of .saturating_sub(1) 2023-02-01 17:36:25 +01:00
Robbert van der Helm 55c3701d2e Move event timing clamping to functions
So this doesn't need to be repeated everywhere.
2023-02-01 17:33:14 +01:00
Robbert van der Helm d5a8eb42ec Clamp event timings for VST3 plugins 2023-02-01 17:24:22 +01:00
Robbert van der Helm eac88c4477 Clamp event times for JACK standalones 2023-02-01 17:18:06 +01:00
Robbert van der Helm 8d2d293b49 Clamp event timings for CLAP plugins 2023-02-01 17:17:50 +01:00
Robbert van der Helm 5cb826725d Fix typo in docstring 2023-02-01 17:02:34 +01:00
Robbert van der Helm 7874e1796f Add a debug assert for the subcategory length
Since this will be truncated otherwise.
2023-02-01 16:50:48 +01:00
Robbert van der Helm d6184ea06e Replace VST3 category string with enum slice
I've been putting this off for a while, but now is finally the day. We
already did this for CLAP a while back. This is both simpler and less
error prone.
2023-02-01 16:09:03 +01:00
Robbert van der Helm 7fe339987a Define an enum for VST3 subcategories
Because looking these up and inputting them by hand every time is both
cumbersome and error prone.
2023-02-01 15:46:28 +01:00
Robbert van der Helm 5db07090ca Replace match with if-let
Clippy didn't like this.
2023-02-01 14:52:45 +01:00
Robbert van der Helm fb29322b81 Document which CLAP features are main categories 2023-02-01 14:36:54 +01:00
Robbert van der Helm 3790a05891 Avoid sending zero velocity note ons with MIDI 2023-02-01 12:48:51 +01:00
Robbert van der Helm 69b87b7a26 Print unhandled SysEx as hexadecimal 2023-01-31 22:25:23 +01:00
Robbert van der Helm 89b81b38c3 Remove debug assertions for SysEx parse failures 2023-01-31 22:22:42 +01:00
Robbert van der Helm 6e6f327dc4 Always accept MIDI events in CLAP
Otherwise we may not receive SysEx events.
2023-01-31 22:20:48 +01:00
Robbert van der Helm 5dbc76ef69 Simplify conversion from SysExMessage to buffers
There's no need to provide this as an argument anymore.
2023-01-31 22:03:40 +01:00
Robbert van der Helm 0deb8ab1cd Simplify VST3 ProcessEvent::NoteEvent 2023-01-31 21:55:26 +01:00
Robbert van der Helm b35914bbbd Add SysEx support for VST3 2023-01-31 21:52:21 +01:00
Robbert van der Helm e7be5ef178 Simplify CLAP SysEx output 2023-01-31 21:50:49 +01:00
Robbert van der Helm 701590f1cd Support SysEx for CLAP plugins 2023-01-31 21:35:52 +01:00
Robbert van der Helm 868228f7b7 Add tests for SysEx parsing 2023-01-31 21:18:55 +01:00
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