1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-18 00:54:19 +00:00
Commit graph

1293 commits

Author SHA1 Message Date
Tom Poole
7296b8e3f7 Bump version number to 7.0.2 2022-08-15 17:26:35 +01:00
attila
997ed696c2 ARA Client: Fix GCC warnings 2022-08-15 12:07:40 +02:00
attila
9d73008dc2 ARA: Fix ARA debug configuration
The ARA SDK's debug functionality is included in the audio_processors
module, hence the configuration had to be moved there from
juce_plugin_client.
2022-08-15 12:07:40 +02:00
chroma
ea84e14be0 VST Host: Avoid sending unnecessary window size messages to non-DPI-aware plugins
Fixes an issue on Windows that caused superfluous HWND messages on DPI aware plugins that resulted in dismissing focused components.
2022-08-11 18:13:27 +01:00
reuk
9712775e5b
macOS: Remove macOS 10.12 preprocessor checks
The current minimum-supported Xcode (10.1) includes the macOS 10.14.1
SDK, so APIs from macOS 10.12 will always be available.
2022-08-04 22:51:17 +01:00
attila
82a31c9ccc Linux: Enable ARA compilation 2022-08-03 13:06:55 +00:00
attila
07b96bc86d ARA Host: Fix memory leak in ARAHostDocumentController 2022-07-19 14:30:14 +02:00
Tom Poole
cf8a2d93c0 Android/iOS: Avoid building LV2 2022-07-07 09:15:30 +01:00
Tom Poole
fd8607302d Bump version number to 7.0.1 2022-07-04 15:07:43 +01:00
attila
c2ec851c2c VST3 Client: Avoid AudioBuffer assertion when plugin has no audio channels 2022-06-30 15:10:15 +00:00
reuk
e86b886038
UnitTestsDemo: Enable LV2 hosting, so that the Projucer correctly sets up include paths 2022-06-27 12:10:38 +01:00
luz paz
0e66bb5203 ARAModelObjects: Fix docstring typos 2022-06-24 18:37:27 +01:00
reuk
0da6c3b434 VST3 Host: Tidy up plugin creation code 2022-06-24 18:37:26 +01:00
reuk
0e33d4509d VST3 Host: Avoid calling getBusInfo from the processing thread 2022-06-24 18:37:26 +01:00
attila
966c8c4c11 ARA Client: Make model object creation functions virtual 2022-06-24 11:21:34 +02:00
Tom Poole
8b399998b4 Bump version number to 7.0.0 2022-06-21 08:38:55 +01:00
Tom Poole
784f82ffec
Fix some Doxygen issues 2022-06-16 16:19:10 +01:00
reuk
1b88df3c55
ExtensionsVisitor: Add missing defaulted special member functions 2022-06-16 16:19:10 +01:00
reuk
752c913cd2
AudioPlayHead: Move HostTimeNs out of AudioProcessor, to consolidate timing information 2022-06-16 16:19:09 +01:00
reuk
8fbd99c424
AudioPlayHead: Improve granularity of position info 2022-06-16 16:18:20 +01:00
reuk
891daf1332
Optional: Update implementation to improve debugging experience
This patch also makes Optional public to end users.
2022-06-16 16:17:53 +01:00
reuk
1b88362048
LV2 Host: Allow sending transport information to ports without "control" designation
The X42 stepseq.lv2 has an input atom port without the "control"
designation, but that still supports time:Position events. In order to
support this plugin, JUCE hosts will now send position info to any input
atom port that is marked as supporting this event type.

The host sync feature in stepseq.lv2 also requires the bar count to be
included in the position information.
2022-06-16 16:17:52 +01:00
attila
2738ed6fa3 ARA Host: Add missing documentation 2022-06-16 14:41:41 +02:00
reuk
964a1aa870
VST3 Client: Allow host to enable/disable buses at will
Previously, activateBus would fail if the new BusesLayout wasn't
supported, as reported by isBusesLayoutSupported. However, according to
the VST3 docs, a host is allowed to enable and disable buses in any
combination, and the plugin should be able to handle this gracefully.

The ability to enable/disable individual buses without failure is
particularly important because there's no VST3 API to set a complete bus
layout in one go. That is, the only way to set all buses active or all
buses inactive is to set the appropriate state on each bus individually,
which in turn means that at some point, some buses will be active and
some will be inactive. Disallowing such 'intermediate' states may
prevent the host from putting the plugin into other (valid) states.

To ensure that the VST3 wrapper always accepts activateBus calls, it now
keeps track of the activation state of each bus as requested by the
host. When the host tries to change the activation state, the wrapper
will try to set the host's "ideal" bus layout on the AudioProcessor. If
this fails, the AudioProcessor will retain its previous bus layout.

The buffer remapping inside the process callback has been made more
robust, to handle cases where the host and the AudioProcessor disagree
about the activation state of each bus:

For input buses:
- If the host has activated the bus, but the AudioProcessor decided to
  keep the bus inactive, the host's input will be ignored.
- If the host deactivated the bus, but the AudioProcessor wanted to keep
  the bus active, the AudioProcessor will be provided with silence on
  that bus.

For output buses:
- If the host has activated the bus, but the AudioProcessor decided to
  keep the bus inactive, the wrapper will clear the host's output
  bus buffers.
- If the host deactivated the bus, but the AudioProcessor wanted to keep
  the bus active, the AudioProcessor's output on that bus will be
  ignored.

The AudioBuffer passed to the wrapped AudioProcessor will no longer
contain any pointers from the host's ProcessData. Instead, the host's
inputs will be copied (in JUCE channel order) to a temporary buffer,
and this temporary buffer will be passed to
AudioProcessor::processBlock. After processBlock, the buffer contents
will be copied to the host's output buffers.

This change is intended to avoid a potential issue when reordering
channels into JUCE order, which may necessitate copying a host input
channel to a different host output channel. In the case that the host is
using the same buffers for both inputs and outputs, copying an input to
an output channel may end up overwriting another input channel, breaking
the plugin's inputs.
2022-06-13 15:29:58 +01:00
reuk
a5b55ab902
VST(3) Host: Use standard (non-flipped) coordinate space for plugin editors
This change fixes an issue where UAD VST2 plugins would incorrectly draw
a menu at the top, rather than at the bottom, of the editor view.
2022-06-13 15:29:57 +01:00
reuk
edddca5ac3
VST3 Host: Fix UB in VST3Parameter implementation 2022-06-13 15:29:57 +01:00
reuk
61b26e4e35
VST3 Client: Handle null channels provided by host 2022-06-13 15:29:56 +01:00
reuk
b41beb3767
LV2 Host: Properly map non-ASCII IRIs to URIDs 2022-06-06 21:20:40 +01:00
Tom Poole
2ec861d99e Update licensing banners to JUCE 7 2022-05-16 17:55:48 +01:00
attila
5f4da905d7 ARA Client: Add ARA interface extensions to AU and VST3 wrappers 2022-05-12 12:31:30 +02:00
attila
9ae96e98ca ARA Client: Add ARA plugin model classes for writing plugins 2022-05-12 12:31:30 +02:00
attila
f36949c1b2 ARA Host: Add support for scanning and hosting ARA plugins 2022-05-12 12:31:30 +02:00
attila
d99fbccb66 Add PreSonus VST3 extensions 2022-05-12 12:31:19 +02:00
attila
0ff5cea68c AU Host: Call AudioUnitReset() before AudioUnitUninitialize() instead of after
This change ensures that it is possible to put a plugin in an unprepared state
by calling releaseResources().
2022-05-11 16:06:18 +02:00
attila
db17713aad AudioProcessor: Add isRealtime() 2022-05-11 16:06:18 +02:00
reuk
4805b86ca4
LV2 Client: Update Atom parsing to use Optional 2022-05-04 20:48:11 +01:00
reuk
e68a62af7f
LV2 Host: Ensure default parameter value lies between min and max when not explicitly provided 2022-05-04 20:48:11 +01:00
reuk
e85a6b595e
LV2 Host: Always notify the UI about parameter changes, even if they originate from the UI
This fixes an issue where Harrison XT-series plugin editors did not
update on mouse interaction in the AudioPluginHost.
2022-05-04 20:48:10 +01:00
reuk
e8431891a0
LV2 Host: Remove unused function 2022-05-04 20:48:10 +01:00
reuk
165b9a6c9b
LV2 Host: Fix bug where atom ports would not be correctly resized 2022-05-04 20:48:10 +01:00
reuk
ce061675a5
VST3 Host: Send parameter changes triggered by MIDI CCs to the IEditController
This change reshuffles the way that parameter updates and notifications
work for hosted VST3 plugins.

Previously:
- Parameter::setValue would update the processor and editor, but not the
  host
- Parameter::setValueFromEditor would update the processor and host, but
  not the editor
- MIDI CC events would be converted to events and added to the
  processor's input event list, but were not forwarded to the
  IEditController.

Now:
- Parameter::setValue updates the host's cachedParamValues, which is the
  host's source of truth for parameter values. On each process callback,
  changes will be added to the input parameter list. Then, for each item
  in the parameter list, an update will be dispatched back to the
  editor.
- Parameter::setValueFromEditor is removed. All parameter changes will
  be sent back to the editor, even if they originated from the editor.
  setValueNotifyingHost can be used to notify listeners that one of the
  host's JUCE parameters has changed, e.g. in the host context's
  performEdit.
- MIDI CC events trigger calls to setValueNotifyingHost on any mapped
  parameters. The flow is very similar to a parameter change from the
  editor: the cachedParamValues are updated immediately, and host
  parameter listeners are notified. Then, for each changed
  cachedParamValue an entry is added to the inputParameterChanges
  (updating the processor), then for each item in the
  inputParameterChanges an update is sent to the editor.
2022-05-04 20:48:10 +01:00
Tom Poole
c2ecde591b macOS: Remove 32 bit specific functionality
This includes Carbon support
2022-05-03 08:16:37 +01:00
Tom Poole
b48dddcf4e RTAS: Remove RTAS functionality 2022-05-03 08:16:37 +01:00
reuk
c0d02fc75a
LV2 Host: Add missing path separator to UI bundle path 2022-04-28 16:08:47 +01:00
reuk
7ea93ce5d2
LV2 Host: Avoid potential deadlock in AudioProcessorGraph
Previously, preparing an AudioProcessorGraph containing hosted LV2
plugins would recreate the plugins and then set their state. For plugins
without threadsafe restore, setting the state would take the
callbackLock to avoid races with processBlock. This meant that

- During prepare, the graph would take the processorLock, then the
  processor would take its own callbackLock.
- During playback, the graph would take the processor's callbackLock,
  and then would take the node's processorLock.

This is probably benign (prepare shouldn't be called concurrently with
processBlock at all), but to be on the safe side we now avoid taking the
callbackLock when setting new plugin state during prepareToPlay.
2022-04-28 11:05:40 +01:00
reuk
b88b8f13c7
LV2 Host: Supply correct bundle path during instantiation 2022-04-28 11:05:40 +01:00
Tom Poole
db3c6e6216 macOS/iOS: Fix unguarded availability warnings 2022-04-26 15:37:03 +01:00
Tom Poole
e984395b1d GCC: Fix some compiler warnings in GCC 11 2022-04-26 15:30:54 +01:00
Tom Poole
a77936ecda VST3: Fix a compiler warning in the VST3 SDK 2022-04-26 11:38:19 +01:00
reuk
1182024fc4
LV2: Add initial hosting support 2022-04-22 14:18:51 +01:00