/ HALion Developer Resource / HALion Script / Class Reference /
LoadProgress
The properties of the LoadProgress class can be used to monitor the progress when loading elements of VST presets.
On this page:
Classes
LoadProgress Class
Description
The functions loadPresetAsync, appendLayerAsync and insertLayerAsync return a LoadProgress object. The properties of the LoadProgress object are described by the following fields.
Available in: Controller.
Fields
Field | Description | Value Type |
---|---|---|
.progress | The load progress in the range from 0 to 1. | number |
.root | The value of .root will be the Element object of the first element (root) of the loaded VST preset. Depending on whether you load a layer, program, or multi-program VST preset, this is either an Element object of the type Layer, Program,or Instance. | Layer, Program, or Instance |
.cancel | Set this to true to cancel the loading of the preset. | boolean |
.error | Message if an error occured. | string |
.info | User definable field, for example, to manage several loading threads. | string or table |
Example
-- Start with an empty program, remove any existing layers.
layers = this.parent:findLayers()
if layers then
for i, layer in ipairs(layers) do
this.parent:removeLayer(layer)
end
end
-- Table with layer presets from Skylab.
layerPresets = {
{ name = "Ambient Pad 01", path = "vstsound://724ACB205EFF46F885735D1B216C37AD/.AppData/Steinberg/Skylab/Sub Presets/Layer Presets/Ambient Pads/Ambient Pad 01.vstpreset" },
{ name = "Ambient Pad 02", path = "vstsound://724ACB205EFF46F885735D1B216C37AD/.AppData/Steinberg/Skylab/Sub Presets/Layer Presets/Ambient Pads/Ambient Pad 02.vstpreset" },
{ name = "Ambient Pad 03", path = "vstsound://724ACB205EFF46F885735D1B216C37AD/.AppData/Steinberg/Skylab/Sub Presets/Layer Presets/Ambient Pads/Ambient Pad 03.vstpreset" },
{ name = "Ambient Pad 04", path = "vstsound://724ACB205EFF46F885735D1B216C37AD/.AppData/Steinberg/Skylab/Sub Presets/Layer Presets/Ambient Pads/Ambient Pad 04.vstpreset" },
}
-- Create a table with the preset names.
function getPresetNames()
presetNames = {}
for i, preset in ipairs(layerPresets) do
presetNames[i] = preset.name
end
end
getPresetNames()
-- Remove the old layer after the new one was added.
function removeOldLayer(progressInfo)
local newPreset = progressInfo.root
if oldPreset then
this.parent:removeLayer(oldPreset)
print(oldPreset.name.." removed.")
end
oldPreset = newPreset
end
-- Append the preset in a separate thread.
function appendNewLayer(progressInfo)
if progressInfo.root then
this.parent:appendLayerAsync(progressInfo.root, removeOldLayer)
print("Appending "..progressInfo.root.name.."...")
end
end
-- Load the preset in a separate thread.
function onSelectPresetChanged()
progress = 0
progressInf = loadPresetAsync(layerPresets[SelectPreset].path, appendNewLayer)
print("Loading "..layerPresets[SelectPreset].name.."...")
end
-- Define a parameter for selecting the preset to be loaded.
defineParameter("SelectPreset", "Select Preset", 1, presetNames, onSelectPresetChanged)
-- Monitor the load progress with onIdle.
progress = 1
function onIdle()
if progress < 1 then
progress = progressInf.progress
print("Progress: "..(progressInf.progress * 100).."%")
end
end