The Edit
constructor can now throw exceptions in rare cases. E.g. if it's being constructed on the message thread which is blocked.
You may need to catch this exception.
It's generally safer to use Edit::createEdit as this will catch the exception and just return a nullptr.
Previously if the above scenario happened, the Edit would just be left in an invalid (likely to crash) state. Ths stops that happening.
The APIs around InputDevice
and InputDeviceInstance
have been simplified to work more with EditItemID
s.
Some existing code might not compile.
Update to new APIs in InputDeviceInstance
: prepareToRecord
, startRecording
and stopRecording
along with other property setters/getters.
There are also some non-member functions at the bottom of tracktion_InputDevice.h
which may replicate the old APIs (but with non-member arguments).
This change was required to implement ClipSlot
recording and async-record-stopping.
InputDevice::setEndToEnd
has been replaced by MonitorMode
.
Code won't compile.
Use the more explicit an clear get/setMonitorMode
.
MonitorMode
provides a way to only enable audible input whilst record is enabled.
An Edit
constructor has been removed.
Code using that constructor will fail to compile.
Use the new constructor that takes an Edit::Options
or an EditRole
.
The behaviour old constructor was ambiguous and this cleans up the API.
Removed the float newValue
parameter to AutomatableParameter::currentValueChanged (AutomatableParameter&)
.
Existing code overriding the function will no longer compile.
Remove the float newValue
argument and use AutomatoableParameter::getCurrentValue()
instead.
This simplifies the API a bit as with Modifiers, the current value gets remapped a lot. Always getting the value via getCurrentValue, getCurrentExplicitValue, getCurrentBaseValue, getCurrentModifierValue
avoids ambiguity about what newValue
means.
Removed DeviceManager::CPUUsageListener
Existing code using it will no longer compile.
Use getCPUStatistics()/restCPUStatistics()
instead.
The old listener code wasn't thread safe. The new funtion returns more information and is wait-free from the audio side.
CurveEditor::getCurrentLineColour()
is no longer const
Code implementing CurveEditor::getCurrentLineColour()
will fail to compile.
Remove const
qualifier in sub classes.
Better API design.
Removed the TRACKTION_ENABLE_REALTIME_TIMESTRETCHING option.
Most code should be unaffected as it was enabled by default anyway. Along with this are the setUsesTimestretchedPreview
/usesTimestretchedPreview
AudioClipBase
functions. Use setUsesProxy
instead now for the same effect.
None.
This was always a temporary flag used to transition to this new feature.
Added a new ContainerClip type. To facilitate this, a new ClipOwner class has been created.
You may need to fix code which passes Track
s to functions, passing in a ClipOwner subclass like a ClipTrack instead.
None.
The changes required should be small but enable this new feature.
Removed the fixed buffer size requirement in HostedAudioDeviceInterface for using the Engine inside a plugin.
You may need to fix code which set the value of this member.
None.
With the audio playback rewite it's no longer required to have a fixed block size so we don't need to add a block of latency when using the Engine inside a plugin.
Removed the TracktionThumbnail class.
If you were using the default thumbnails of Tracktion Engine, these will now be juce::AudioThumbnails and so won't be anti-aliased and appear more jagged.
Take a copy of the TracktionThumbnail class from the history and add it to your own project.
Override the new UIBehaviour::createAudioThumbnail
function to return instances of it to get back the old behaviour.
TracktionThumbnail never really should have been included in the Engine. We needed a way to support multiple thumbnail types in Waveform and in doing so broke all the dependancies on TracktionThumbnail so it seemed cleaner to remove it completely. It's simple to get back the old behaviour but also means it's now a lot easier to use your own thumbnail classes if desired.
Changed the minimum version of JUCE supported to 7 on commit of October 22.
If your project uses an eariler version of JUCE it may fail to compile.
Use the commit of JUCE pointed at in the modules/juce Git submodule. This is guaranteed to work.
There have been many breaking changes in JUCE recently and it is no longer feasible to support multiple versions. We aim to always be compatible with the tip of juce/develop in order to take advantage of the latest fixes and features.
Removed EngineBehaviour::getMaxNumMasterPlugins and static Edit constants.
Code relying on the Edit members or implementing the EngineBehaviour method will no longer compile.
Update to implement EngineBehaviour::getEditLimits() and call this instead of the static methods.
This enables a single customisation point for these properties and avoids them having static values.
The old AudioNode based engine has been replaced by a new tracktion_graph based engine.
Some classes will no longer be publicly available such as PlayHead, AudioNode nodes etc.
You'll have to update your code to use the new APIs. In most cases this shouldn't be a problem as this is a move to remove the public nature of the engine, the higher level APIs that you are using should stay the same. Some arguments to classes such as Plugin have changed to remove dependancy on playback specific classed. If you really need to use the old engine, see the archive/old_engine branch.
The move to the new engine greatly improves CPU performance, especially with multiple threads and fixes PDC in a lot of obscure cases such as track to track routing and bussing.
The PluginWindowConnection class has been removed to simplify the process of creating plugin windows and connecting them to a PluginWindowState.
PluginWindowState now takes an Edit in its constructor rather than an Engine. The UIBehaviour method createPluginWindowConnection has been changed to createPluginWindow which now simply needs to create and return a Component which will be used to show your plugin UI.
You'll have to update your code to use the new APIs.
The old PluginWindowConnection class was an attempt at communicating via IPC for sandboxed plugins. However, this is no longer necessary as it's possible to encapsulate a sandboxed plugin completely within the juice::AudioProcessor classes. The new API is much simpler for the standard use cases.