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