Can Manipulate controls be generated programmatically based on a (non-manipulated) variable?

I would like to do something like this:

    nSines = 3;
    Manipulate[
            fn = {f1, f2, f3};
            Plot[Evaluate@Table[Sin[fn[[ii]] x], {ii, 1, Length[fn]}], {x, -2 [Pi], 2 [Pi]}],
            {{f1, 1}, 1, 6},
            {{f2, 2}, 1, 6},
            {{f3, 3}, 1, 6}
              ]

which generates the following output plot:

enter image description here

But I don’t want to hard-code the number of Manipulate controls. So, I’d like to use just the variable nSines in the above example; it’s currently unused.

Is there a way to do that? I haven’t had any luck putting Table or Sequence as control arguments to Manipulate, but it’s definitely possible I just missed the right syntax.

Thanks in advance!!