How to deal with arguments or NamedControl's in Ndef's that are not numbers?

Hi, I was wondering how to deal with arguments or NamedControl’s in Ndef’s that are not numbers.
Like audio inputs or buffers.
For example, NdefPreset’s (JITLibExtensions) .morp complains when there is no Spec for an audio input.
So. what kind of Spec do I need to apply?
And is there a way to remove or hide arguments or NamedControl’s ?

(
s.waitForBoot({
	Ndef(\source,{ WhiteNoise.ar; });
	Ndef(\source) <>> Ndef(\fx);
	
	Ndef(\fx,{
		var sig = \in.ar(0);
		\test.kr(1);
		DC.ar(0);
	});
	// Ndef(\fx).addSpec(\in, ControlSpec( 0, 0) );
	Ndef(\fx).addSpec(\test, ControlSpec( 0, 1, \lin) );
})
)

(
~presets = NdefPreset(Ndef(\fx));
NdefPresetGui(~presets,Ndef(\fx).controlKeys.size+1);
)

with presets:
~presets.morph(1.0.rand,~presets.getSetNames[0],~presets.getSetNames[1])

results in:

ProxyPreset:unmapSet: no spec for in!
ProxyPreset:unmapSet: no spec for in!
ERROR: Message 'map' not understood.
RECEIVER:
   nil
ARGS:
   nil
CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Object:doesNotUnderstand
		arg this = nil
		arg selector = 'map'
		arg args = [*1]
	< FunctionDef in Method ProxyPreset:mapSet >
		arg pair = [*0]
	< FunctionDef in Method Collection:collectAs >
		arg elem = [*0]
		arg i = 0
	ArrayedCollection:do
		arg this = [*2]
		arg function = <instance of Function>
		var i = 0
	Collection:collectAs
		arg this = [*2]
		arg function = <instance of Function>
		arg class = <instance of Meta_Array>
		var res = [*0]
	ProxyPreset:morph
		arg this = <instance of NdefPreset>
		arg blend = 0.53378772735596
		arg name1 = 'curr'
		arg name2 = 'set_2'
		arg mapped = true
	Interpreter:interpretPrintCmdLine
		arg this = <instance of Interpreter>
		var res = nil
		var func = <instance of Function>
		var code = "~presets.morph(1.0.rand,~pre..."
		var doc = nil
		var ideClass = <instance of Meta_ScIDE>
	Process:interpretPrintCmdLine
		arg this = <instance of Main>
^^ ERROR: Message 'map' not understood.
RECEIVER: nil

thank you

You can tell an NdefPreset which constrols of an Ndef to store,
and use that to exclude any params from preset storing:

NdefPreset(Ndef(\fx), namesToStore: [\test]);

Generally, mapped params souch as audio inputs are not handled by NdefPreset.
Anything that does not morph well between settings is probably better excluded,
or written in a way that makes morphing meaningful:
E.g. you could a continuous index to crossfade between several sources with
SelectX etc.
does that help?

1 Like

yes. i overlooked namesToStore. thank you !