Prefer using C++ DSP for noise generation in scripts
This significantly reduces the DSP load of the noise generator (avg. process time is reduced by a factor of 8 or more).
This commit is contained in:
parent
9e3efced72
commit
f18a7e3fc3
55
share/scripts/a-noise.lua
Normal file
55
share/scripts/a-noise.lua
Normal file
@ -0,0 +1,55 @@
|
||||
ardour {
|
||||
["type"] = "dsp",
|
||||
name = "a-Noise",
|
||||
category = "Utility",
|
||||
license = "MIT",
|
||||
author = "Ardour Team",
|
||||
description = [[Noise Generator]]
|
||||
}
|
||||
|
||||
function dsp_ioconfig ()
|
||||
return
|
||||
{
|
||||
-- -1, -1 = any number of channels as long as input and output count matches
|
||||
{ audio_in = -1, audio_out = -1},
|
||||
}
|
||||
end
|
||||
|
||||
function dsp_params ()
|
||||
return
|
||||
{
|
||||
{ ["type"] = "input", name = "Noise Level", min = -80, max = 0, default = -18, unit="dBFS"},
|
||||
{ ["type"] = "input", name = "Noise Type", min = 0, max = 2, default = 0, enum = true, scalepoints =
|
||||
{
|
||||
["White Noise"] = ARDOUR.DSP.NoiseType.UniformWhiteNoise,
|
||||
["Gaussian White Noise"] = ARDOUR.DSP.NoiseType.GaussianWhiteNoise,
|
||||
["Pink Noise"] = ARDOUR.DSP.NoiseType.PinkNoise,
|
||||
}
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
local cmem = nil
|
||||
local gen = nil
|
||||
local noise = 0
|
||||
|
||||
function dsp_init (rate)
|
||||
cmem = ARDOUR.DSP.DspShm (8192)
|
||||
gen = ARDOUR.DSP.Generator ()
|
||||
end
|
||||
|
||||
function dsp_run (ins, outs, n_samples)
|
||||
local ctrl = CtrlPorts:array()
|
||||
local lvl = ARDOUR.DSP.dB_to_coefficient (ctrl[1])
|
||||
if (noise ~= ctrl[2]) then
|
||||
noise = ctrl[2]
|
||||
gen:set_type (noise)
|
||||
end
|
||||
for c = 1,#ins do
|
||||
if ins[c] ~= outs[c] then
|
||||
ARDOUR.DSP.copy_vector (outs[c], ins[c], n_samples)
|
||||
end
|
||||
gen:run (cmem:to_float(0), n_samples)
|
||||
ARDOUR.DSP.mix_buffers_with_gain (outs[c], cmem:to_float(0), n_samples, lvl)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user