summaryrefslogtreecommitdiff
path: root/share/scripts/a-noise.lua
blob: dccded19c6f98e4ac0d63f718e423d3d47290709 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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