Variable number of controls in manipulate

i want to add a variable amount of variables to manipulate, but i got stuck at one point and can't figure out a solution (even after reading here for hours...).

I have a function (e.g. here a gaussian):

f[x_, a_,μ_,σ_] := a Exp[-(x - μ)^2/(2 σ^2)]/(Sqrt[2 Pi] σ)


and define now a sum of these function, which i would like to plot using manipulate:

n=3;
test = {A[#], μ[#], σ[#], m[#]} & /@ Range[n];
func = f[x, ##] & @@@ test;


Setting initial values like this:

initialvalues = {50, 5, 20, 50, 50, 40, 100, 80, 20};
values = Partition[initialvalues, n];
rangelow = values*0.7;
rangehigh = values*1.3;


Now i want to plot this, after setting initial values with manipulate, e.g. like this:

With[{func = func},
Manipulate[
Show[Plot[func, {x, 0, 100}, PlotRange -> All]],
'List of manipulate arguments'
]
]


With a list like this:

testlist =
Flatten[{{{A[#], values[[#, 1]]}, rangelow[[#, 1]],
rangehigh[[#, 1]]}, {{μ[#], values[[#, 2]]},
rangelow[[#, 2]],
rangehigh[[#, 2]]}, {{σ[#], values[[#, 3]]},
rangelow[[#, 3]], rangehigh[[#, 3]]}} & /@ Range[n], 1]


But I can't figure out how to remove the outer bracketsand there should be a better solution.

One can slightly rewrite your code and obtain a nice Manipulate

f[x_, a_, μ_, σ_] := a Exp[-(x - μ)^2/(2 σ^2)]/(Sqrt[2 π] σ)

n = 3;
vars = Through@{a, μ, σ}@# & /@ Range[n];
func = f[x, ##] & @@@ vars;

values = {{50, 5, 20}, {50, 50, 40}, {100, 80, 20}};
rangelow = 0.7 values;
rangehigh = 1.3 values;

With[{func = func},
Manipulate[Plot[func, {x, 0, 100}, PlotRange -> All], ##] & @@ ({{#, #2}, ##3} & @@@
Flatten[{vars, values, rangelow, rangehigh}, {{2, 3}}])] There is two basic techniques to inject a list of variables:

• function[..., ##] & @@ variables
• With[{vars = Sequence @@ variables}, function[..., vars]]