local Class = require "Class"
local Unit = require "Unit"
local Fader = require "UnitControls.Fader"
local GainBias = require "UnitControls.GainBias"
local ply = app.SECTION_PLY
local VariableDelayUnit = Class{}
VariableDelayUnit:include(Unit)
function VariableDelayUnit:init(name,depth)
Unit.init(self,name or "Variable Delay","VD",depth)
end
function VariableDelayUnit:loadGraph(pUnit,channelCount)
Unit.loadGraph(self, pUnit, channelCount)
if channelCount==2 then
self:loadStereoGraph(pUnit)
else
self:loadMonoGraph(pUnit)
end
end
function VariableDelayUnit:loadMonoGraph(pUnit)
-- create objects
local delay = self:createObject("VariableDelay","delay",1.0)
local secs = self:createObject("GainBias","secs")
local secsRange = self:createObject("MinMax","secsRange")
local xfade = self:createObject("CrossFade","xfade")
local fader = self:createObject("GainBias","fader")
local faderRange = self:createObject("MinMax","faderRange")
local feedback = self:createObject("ConstantOffset","feedback")
feedback:setClampInDecibels(-35.9)
-- connect objects
connect(delay,"Out",xfade,"A")
connect(secs,"Out",delay,"Delay")
connect(secs,"Out",secsRange,"In")
connect(fader,"Out",xfade,"Fade")
connect(fader,"Out",faderRange,"In")
connect(feedback,"Out",delay,"Feedback")
connect(pUnit,"In1",xfade,"B")
connect(pUnit,"In1",delay,"In")
connect(xfade,"Out",pUnit,"Out1")
self:addBranch("Delay",secs,"In")
self:addBranch("Wet/Dry",fader,"In")
end
function VariableDelayUnit:loadStereoGraph(pUnit)
-- create objects
local delayL = self:createObject("VariableDelay","delayL",1.0)
local secsL = self:createObject("GainBias","secsL")
local secsLRange = self:createObject("MinMax","secsLRange")
local delayR = self:createObject("VariableDelay","delayR",1.0)
local secsR = self:createObject("GainBias","secsR")
local secsRRange = self:createObject("MinMax","secsRRange")
local xfade = self:createObject("StereoCrossFade","xfade")
local fader = self:createObject("GainBias","fader")
local faderRange = self:createObject("MinMax","faderRange")
local feedback = self:createObject("ConstantOffset","feedback")
feedback:setClampInDecibels(-35.9)
-- connect objects
connect(delayL,"Out",xfade,"Left A")
connect(secsL,"Out",delayL,"Delay")
connect(secsL,"Out",secsLRange,"In")
connect(delayR,"Out",xfade,"Right A")
connect(secsR,"Out",delayR,"Delay")
connect(secsR,"Out",secsRRange,"In")
connect(fader,"Out",xfade,"Fade")
connect(fader,"Out",faderRange,"In")
connect(feedback,"Out",delayL,"Feedback")
connect(feedback,"Out",delayR,"Feedback")
connect(pUnit,"In1",xfade,"Left B")
connect(pUnit,"In1",delayL,"In")
connect(pUnit,"In2",xfade,"Right B")
connect(pUnit,"In2",delayR,"In")
connect(xfade,"Left Out",pUnit,"Out1")
connect(xfade,"Right Out",pUnit,"Out2")
-- specify branches
self:addBranch("Left Delay",secsL,"In")
self:addBranch("Right Delay",secsR,"In")
self:addBranch("Wet/Dry",fader,"In")
end
function VariableDelayUnit:loadInterface(pDisplay,hSection)
Unit.loadInterface(self,pDisplay,hSection)
self:defineViews()
end
function VariableDelayUnit:defineViews()
local control
local objects = self.objects
local view = self:createView("controls")
if self.channelCount==2 then
control = GainBias("Left Delay", "left", objects.secsL, objects.secsLRange)
control:setBiasMap(app.unitSecs,"unit")
self:addControl(view,control)
control = GainBias("Right Delay", "right", objects.secsR, objects.secsRRange)
control:setBiasMap(app.unitSecs,"unit")
self:addControl(view,control)
else
control = GainBias("Delay", "delay", objects.secs, objects.secsRange)
control:setBiasMap(app.unitSecs,"unit")
self:addControl(view,control)
end
control = Fader("Feedback", "fdbk", objects.feedback,"Offset")
control:setMap(app.unitDecibels,"feedback")
control:setTextBelow(-35.9,"-inf dB")
self:addControl(view,control)
control = GainBias("Wet/Dry", "wet", objects.fader,objects.faderRange)
control:setBiasMap(app.unitNone,"unit")
self:addControl(view,control)
end
return VariableDelayUnit