Try this:
function sampleStartChanged()
local zone = this.parent:findZones(true)[1]
if zone then
zone:setParameter("SampleOsc.SampleStart", SampleStart)
end
end
function sampleEndChanged()
local zone = this.parent:findZones(true)[1]
if zone then
zone:setParameter("SampleOsc.SampleEnd", SampleEnd)
end
end
function loopStartChanged()
local zone = this.parent:findZones(true)[1]
if zone then
zone:setParameter("SampleOsc.SustainLoopStartA", LoopStart)
end
end
function loopEndChanged()
local zone = this.parent:findZones(true)[1]
if zone then
zone:setParameter("SampleOsc.SustainLoopEndA", LoopEnd)
end
end
defineParameter("SampleStart", nil, 0, 0, 0x7fffffff, sampleStartChanged)
defineParameter("SampleEnd", nil, 0, 0, 0x7fffffff, sampleEndChanged)
defineParameter("LoopStart", nil, 0, 0, 0x7fffffff, loopStartChanged)
defineParameter("LoopEnd", nil, 0, 0, 0x7fffffff, loopEndChanged)
defineParameter("zoneScope", nil, "")
function onUndo()
if undoInfo.updateDisplay then
adjustRange()
end
end
defineParameter{name = "undoInfo", default = {}, onChanged = onUndo, automatable = false}
function adjustRange()
local zone = this.parent:findZones(true)[1]
if zone then
zoneScope = "@0:"..zone.name.."/"
end
--print(zoneScope)
local sample = AudioFile.open(zone:getParameter("SampleOsc.Filename"))
if zone and sample.valid then
defineParameter("SampleStart", nil, 0, 0, sample.length, sampleStartChanged)
defineParameter("SampleEnd", nil, sample.length, 0, sample.length, sampleEndChanged)
defineParameter("LoopStart", nil, 0, 0, sample.length, loopStartChanged)
defineParameter("LoopEnd", nil, 0, 0, sample.length, loopEndChanged)
SampleStart = zone:getParameter("SampleOsc.SampleStart")
SampleEnd = zone:getParameter("SampleOsc.SampleEnd")
LoopStart = zone:getParameter("SampleOsc.SustainLoopStartA")
LoopEnd = zone:getParameter("SampleOsc.SustainLoopEndA")
end
end
function filenameChanged()
local zone = this.parent:findZones(true)[1]
local sample = AudioFile.open(Filename)
if sample.valid then
local name = string.sub(string.match(sample.fileName,"[^\\/]+$"),1,-5)
startUndoBlock("Load User Sample "..name)
undoInfo = { redo = true, updateDisplay = true }
this:setParameter("undoInfo", { redo = false }, true)
local newzone = clone(zone)
newzone:setName(name)
newzone:setParameter("SampleOsc.Filename", sample.fileName)
newzone:setParameter("SampleOsc.SampleEnd", sample.length)
local rootKey = sample.rootKey
if rootKey then
newzone:setParameter("SampleOsc.Rootkey", rootKey)
else
newzone:setParameter("SampleOsc.Rootkey", 60)
end
local loops = sample.loops
if loops[1] then
newzone:setParameter("SampleOsc.SustainLoopModeA", 1)
newzone:setParameter("SampleOsc.SustainLoopStartA", loops[1].loopStart)
newzone:setParameter("SampleOsc.SustainLoopEndA", loops[1].loopEnd)
else
newzone:setParameter("SampleOsc.SustainLoopModeA", 0)
newzone:setParameter("SampleOsc.SustainLoopStartA", 0)
newzone:setParameter("SampleOsc.SustainLoopEndA", 0)
end
zone:removeFromParent()
this.parent:appendZone(newzone)
undoInfo = { redo = true }
this:setParameter("undoInfo", { redo = false, updateDisplay = true }, true)
endUndoBlock()
end
end
defineParameter{name = "Filename", default = "", onChanged = filenameChanged, persistent = false, automatable = false}
function onLoad()
adjustRange()
end
Load Sample.zip (7.61 KB)