Summary
Currently, a NAM model represents a single fixed operating point of an amplifier:
audio_in → model → audio_out
If an amplifier has physical controls such as Gain, Bass, Middle, Treble, Presence, etc., changing one of these controls changes the behavior of the amplifier itself. A conventional NAM capture therefore represents only one specific configuration.
As a result, users who want to represent several settings of the same amplifier generally need to provide several independent .nam captures.
This proposal is to investigate a conditional NAM model that can represent multiple amplifier configurations in a single model:
audio_in + control_values → audio_out
For example:
DI + [Gain=7, Bass=4, Mid=6, Treble=8] → amplifier output
The goal would be to expose continuous control parameters in the resulting model, allowing a user to move virtual amplifier knobs rather than switching between independent captures.
Motivation
Multiple captures of the same amplifier already contain much of the information required for this concept.
For example, a user might currently provide:
JCM800_Gain5_Bass5_Mid5_Treble5.nam
JCM800_Gain6_Bass5_Mid5_Treble5.nam
JCM800_Gain7_Bass5_Mid5_Treble5.nam
JCM800_Gain7_Bass3_Mid7_Treble8.nam
...
Today these are independent models.
Instead, the proposed training process would treat them as samples of a larger function:
output = f(audio, controls)
where controls contains the normalized physical control positions.
This could potentially turn a collection of captures into a single parametric model.
Existing A2 infrastructure
This proposal is motivated by the fact that the current A2/WaveNet implementation already contains several mechanisms that appear relevant to this problem:
condition_size exists in WaveNet layer configurations.
- WaveNet supports conditional inputs.
condition_dsp is already represented as a nested WaveNet.
- A2 contains multiple FiLM conditioning points.
- The current A2 configuration infrastructure therefore appears capable of representing models whose behavior depends on an additional conditioning vector.
The proposal is not to assume that the existing conditioning implementation already solves this problem.
Instead, the question is whether the existing mechanisms can be reused with a conditioning vector representing amplifier controls.
For example:
condition = [
gain,
bass,
middle,
treble,
presence
]
with each value normalized to [0, 1].
Proposed training representation
Instead of training independent datasets:
we would train samples conceptually represented as:
input.wav
output.wav
controls.json
For example:
{
"gain": 0.70,
"bass": 0.40,
"middle": 0.60,
"treble": 0.80,
"presence": 0.50
}
The model would then learn:
f(input_audio, control_vector) = output_audio
The existing NAM input signal could initially be kept unchanged.
There is no requirement at this stage to introduce a new excitation signal or multiple types of test signals.
Using the same input signal for every amplifier configuration also has an important advantage: differences between captures are primarily attributable to the amplifier control configuration rather than to differences in the input signal.
Capture protocol
A new capture tool could orchestrate the creation of the dataset.
The user would first describe the amplifier:
Amplifier:
Manufacturer: Marshall
Model: JCM800 2203
Controls:
Gain [0..10]
Bass [0..10]
Middle [0..10]
Treble [0..10]
Presence [0..10]
Potentially, controls could also have metadata such as:
type:
gain
tone
volume
switch
and discrete controls could be represented differently from continuous controls.
The tool would then generate a capture plan.
For each capture:
- Display the required amplifier settings.
- User sets the physical controls.
- User confirms the configuration.
- Software plays the standard NAM input signal.
- Software records the amplifier output.
- Software validates the recording.
- Software associates the recording with the exact control vector.
- Continue with the next configuration.
The user should not have to manually rename files or construct metadata.
Sampling strategy
The capture tool should not simply generate a regular grid.
For N controls with M positions per control, a full factorial grid quickly becomes impractical.
For example:
5 controls × 11 positions each
11^5 = 161,051 configurations
Therefore the capture plan should select a relatively small subset of the parameter space.
A possible first implementation could use a space-filling design such as:
- Sobol sequences
- Latin Hypercube Sampling
The important point is that the exact sampling algorithm should remain experimental.
The goal is to determine which strategy gives the best reconstruction of the amplifier behavior for a given number of physical captures.
Adaptive sampling
A potentially more powerful second stage would be adaptive dataset generation.
The workflow would be:
Initial sampling
↓
Initial training
↓
Evaluate on unseen configurations
↓
Find regions with high error
↓
Generate additional capture configurations
↓
Capture those configurations
↓
Retrain
↓
Repeat
This would allow the system to concentrate captures where the model has difficulty.
For example, the model might perform extremely well for:
but poorly around:
The next physical captures could then concentrate in that region instead of wasting captures in already well-characterized regions.
This could substantially reduce the number of physical amplifier captures required.
Validation requirements
A major concern is interpolation.
A conditional model should not only reproduce the exact configurations that were captured.
For example, if the dataset contains:
the model should produce a plausible and accurate result at:
without having seen that exact configuration during training.
Therefore the dataset should be explicitly divided into:
Training configurations
Validation configurations
Test configurations
The test configurations must contain control combinations that were not used during training.
Evaluation should include at least:
- Exact reconstruction of captured configurations.
- Interpolation between captured configurations.
- Multi-dimensional interpolation.
- Behavior near control extremes.
- Smoothness when continuously varying a control.
- Interaction between controls.
Smoothness is an important requirement
A model could theoretically achieve a low average reconstruction error while still producing undesirable behavior when a control is moved continuously.
For example:
should produce a smooth evolution of the amplifier response.
The evaluation should therefore include sweeps through the parameter space.
A useful test would be:
Hold:
Bass = 5
Middle = 5
Treble = 5
Presence = 5
Sweep:
Gain = 0 → 10
and compare:
real amplifier sweep
vs.
conditional model sweep
The same should be performed for each control and for selected combinations of controls.
Important question: what should be conditioned?
Not every amplifier control necessarily affects the same part of the signal chain.
For example:
may strongly affect nonlinear preamp behavior.
Whereas:
may primarily affect filtering.
And:
may affect a different part of the amplifier depending on the circuit.
Therefore the first prototype should probably not attempt to reproduce every possible amplifier control.
A good initial experiment would use a small number of controls, for example:
and establish whether a single conditional model can successfully reproduce those four dimensions.
Potential dataset format
The exact format should be discussed, but conceptually:
capture_set/
├── metadata.json
├── input.wav
├── captures/
│ ├── capture_0001/
│ │ ├── output.wav
│ │ └── controls.json
│ ├── capture_0002/
│ │ ├── output.wav
│ │ └── controls.json
│ └── ...
└── calibration.json
metadata.json could contain:
{
"manufacturer": "Marshall",
"model": "JCM800 2203",
"controls": [
{
"name": "gain",
"type": "continuous",
"min": 0,
"max": 10
},
{
"name": "bass",
"type": "continuous",
"min": 0,
"max": 10
}
]
}
This would also extend naturally from the existing concept of capture sets and control metadata.
Backwards compatibility
Existing single-capture NAM models should remain unchanged.
A conventional model would simply have no conditioning inputs.
A conditional model would explicitly declare its conditioning inputs.
This would allow existing NAM plugins and players to continue loading conventional models while future software could support conditional models.
Runtime API
A conditional model would require an inference API capable of receiving the control vector.
Conceptually:
model.process(
input,
output,
controls
);
where:
controls = {
gain,
bass,
middle,
treble,
presence
};
For real-time use, controls would normally remain constant for a block or be updated between processing blocks.
This would allow plugin/UI implementations to expose normal amplifier-style knobs.
Compatibility with A2
The first proof-of-concept should preferably reuse the existing A2/WaveNet conditioning mechanisms rather than introducing an entirely new neural architecture.
The experiment should answer:
- Can the existing
condition_size mechanism represent a control vector?
- Can the existing FiLM mechanisms effectively condition the audio network on that vector?
- Does
condition_dsp provide any advantage over directly conditioning the main WaveNet?
- How many captures are required for acceptable interpolation?
- What sampling strategy minimizes the number of physical captures?
- Is inference performance acceptable for real-time plugin/mobile use?
If the existing architecture cannot provide sufficient quality, a new architecture can then be considered based on the results.
Proposed proof of concept
A deliberately small experiment could use a real amplifier with four continuous controls:
Suggested initial dataset:
~50–100 physical configurations
using a space-filling sampling strategy.
Reserve approximately 15–20% of configurations as unseen validation/test points.
Train:
on one selected configuration as a baseline, and:
on the entire capture set.
Then compare the conditional model against the real amplifier at:
- captured configurations;
- unseen interpolated configurations;
- random unseen combinations;
- control sweeps.
The objective is not initially to achieve production quality.
The objective is to determine whether one conditional A2 model can learn a continuous family of amplifier states from a manageable number of physical captures.
Expected outcome
If successful, this would change the capture model from:
One capture = one model = one amplifier state
to:
One capture set = one model = an amplifier operating space
For the end user, this would mean:
Gain
↓
┌─────────┐
Bass ───────►│ │
Middle ─────►│ NAM │────► Audio
Treble ─────►│ │
└─────────┘
↑
Presence
Instead of distributing:
Amp_Preset_01.nam
Amp_Preset_02.nam
Amp_Preset_03.nam
...
a capture creator could distribute one conditional model representing the amplifier and its controls.
Open research questions
Before implementation, the following should be investigated:
- How many control dimensions can be practically supported?
- How many physical captures are required per control?
- Are Sobol/LHS designs better than manually designed grids?
- Does adaptive sampling significantly reduce the number of captures?
- Should the conditioning vector be injected directly into FiLM?
- Should controls be encoded continuously or with learned embeddings?
- Should different controls be injected at different network depths?
- Does Gain require a different conditioning strategy from tone controls?
- Should discrete controls such as channel switches be represented separately?
- Can the model extrapolate safely outside the captured parameter range, or must all controls be clamped?
- How should
Master be handled when it changes the power-amp operating point?
- What inference API changes are required in NeuralAmpModelerCore?
- How should conditional models be represented in the
.nam format?
- Can existing real-time fast paths support conditional models, or should they explicitly fall back to the generic WaveNet path?
Why this is worth investigating
This proposal does not require changing the fundamental NAM capture concept.
The existing capture workflow already produces the required audio input/output relationship.
The key addition is to retain the amplifier configuration as structured data and train one model over multiple configurations.
The current A2 infrastructure already contains general-purpose conditioning mechanisms, making this a potentially incremental research direction rather than a completely new model architecture.
The main unknown is therefore not whether the concept can be expressed mathematically, but whether the combination of:
capture count
+
sampling strategy
+
conditional architecture
+
training procedure
can reproduce an amplifier’s continuous control space accurately enough for practical use.
A small proof-of-concept could answer that question without requiring changes to the existing NAM ecosystem.
Summary
Currently, a NAM model represents a single fixed operating point of an amplifier:
audio_in → model → audio_outIf an amplifier has physical controls such as Gain, Bass, Middle, Treble, Presence, etc., changing one of these controls changes the behavior of the amplifier itself. A conventional NAM capture therefore represents only one specific configuration.
As a result, users who want to represent several settings of the same amplifier generally need to provide several independent
.namcaptures.This proposal is to investigate a conditional NAM model that can represent multiple amplifier configurations in a single model:
audio_in + control_values → audio_outFor example:
DI + [Gain=7, Bass=4, Mid=6, Treble=8] → amplifier outputThe goal would be to expose continuous control parameters in the resulting model, allowing a user to move virtual amplifier knobs rather than switching between independent captures.
Motivation
Multiple captures of the same amplifier already contain much of the information required for this concept.
For example, a user might currently provide:
Today these are independent models.
Instead, the proposed training process would treat them as samples of a larger function:
where
controlscontains the normalized physical control positions.This could potentially turn a collection of captures into a single parametric model.
Existing A2 infrastructure
This proposal is motivated by the fact that the current A2/WaveNet implementation already contains several mechanisms that appear relevant to this problem:
condition_sizeexists in WaveNet layer configurations.condition_dspis already represented as a nested WaveNet.The proposal is not to assume that the existing conditioning implementation already solves this problem.
Instead, the question is whether the existing mechanisms can be reused with a conditioning vector representing amplifier controls.
For example:
with each value normalized to
[0, 1].Proposed training representation
Instead of training independent datasets:
we would train samples conceptually represented as:
For example:
{ "gain": 0.70, "bass": 0.40, "middle": 0.60, "treble": 0.80, "presence": 0.50 }The model would then learn:
The existing NAM input signal could initially be kept unchanged.
There is no requirement at this stage to introduce a new excitation signal or multiple types of test signals.
Using the same input signal for every amplifier configuration also has an important advantage: differences between captures are primarily attributable to the amplifier control configuration rather than to differences in the input signal.
Capture protocol
A new capture tool could orchestrate the creation of the dataset.
The user would first describe the amplifier:
Potentially, controls could also have metadata such as:
and discrete controls could be represented differently from continuous controls.
The tool would then generate a capture plan.
For each capture:
The user should not have to manually rename files or construct metadata.
Sampling strategy
The capture tool should not simply generate a regular grid.
For
Ncontrols withMpositions per control, a full factorial grid quickly becomes impractical.For example:
Therefore the capture plan should select a relatively small subset of the parameter space.
A possible first implementation could use a space-filling design such as:
The important point is that the exact sampling algorithm should remain experimental.
The goal is to determine which strategy gives the best reconstruction of the amplifier behavior for a given number of physical captures.
Adaptive sampling
A potentially more powerful second stage would be adaptive dataset generation.
The workflow would be:
This would allow the system to concentrate captures where the model has difficulty.
For example, the model might perform extremely well for:
but poorly around:
The next physical captures could then concentrate in that region instead of wasting captures in already well-characterized regions.
This could substantially reduce the number of physical amplifier captures required.
Validation requirements
A major concern is interpolation.
A conditional model should not only reproduce the exact configurations that were captured.
For example, if the dataset contains:
the model should produce a plausible and accurate result at:
without having seen that exact configuration during training.
Therefore the dataset should be explicitly divided into:
The test configurations must contain control combinations that were not used during training.
Evaluation should include at least:
Smoothness is an important requirement
A model could theoretically achieve a low average reconstruction error while still producing undesirable behavior when a control is moved continuously.
For example:
should produce a smooth evolution of the amplifier response.
The evaluation should therefore include sweeps through the parameter space.
A useful test would be:
and compare:
The same should be performed for each control and for selected combinations of controls.
Important question: what should be conditioned?
Not every amplifier control necessarily affects the same part of the signal chain.
For example:
may strongly affect nonlinear preamp behavior.
Whereas:
may primarily affect filtering.
And:
may affect a different part of the amplifier depending on the circuit.
Therefore the first prototype should probably not attempt to reproduce every possible amplifier control.
A good initial experiment would use a small number of controls, for example:
and establish whether a single conditional model can successfully reproduce those four dimensions.
Potential dataset format
The exact format should be discussed, but conceptually:
metadata.jsoncould contain:{ "manufacturer": "Marshall", "model": "JCM800 2203", "controls": [ { "name": "gain", "type": "continuous", "min": 0, "max": 10 }, { "name": "bass", "type": "continuous", "min": 0, "max": 10 } ] }This would also extend naturally from the existing concept of capture sets and control metadata.
Backwards compatibility
Existing single-capture NAM models should remain unchanged.
A conventional model would simply have no conditioning inputs.
A conditional model would explicitly declare its conditioning inputs.
This would allow existing NAM plugins and players to continue loading conventional models while future software could support conditional models.
Runtime API
A conditional model would require an inference API capable of receiving the control vector.
Conceptually:
model.process( input, output, controls );where:
controls = { gain, bass, middle, treble, presence };For real-time use, controls would normally remain constant for a block or be updated between processing blocks.
This would allow plugin/UI implementations to expose normal amplifier-style knobs.
Compatibility with A2
The first proof-of-concept should preferably reuse the existing A2/WaveNet conditioning mechanisms rather than introducing an entirely new neural architecture.
The experiment should answer:
condition_sizemechanism represent a control vector?condition_dspprovide any advantage over directly conditioning the main WaveNet?If the existing architecture cannot provide sufficient quality, a new architecture can then be considered based on the results.
Proposed proof of concept
A deliberately small experiment could use a real amplifier with four continuous controls:
Suggested initial dataset:
using a space-filling sampling strategy.
Reserve approximately 15–20% of configurations as unseen validation/test points.
Train:
on one selected configuration as a baseline, and:
on the entire capture set.
Then compare the conditional model against the real amplifier at:
The objective is not initially to achieve production quality.
The objective is to determine whether one conditional A2 model can learn a continuous family of amplifier states from a manageable number of physical captures.
Expected outcome
If successful, this would change the capture model from:
to:
For the end user, this would mean:
Instead of distributing:
a capture creator could distribute one conditional model representing the amplifier and its controls.
Open research questions
Before implementation, the following should be investigated:
Masterbe handled when it changes the power-amp operating point?.namformat?Why this is worth investigating
This proposal does not require changing the fundamental NAM capture concept.
The existing capture workflow already produces the required audio input/output relationship.
The key addition is to retain the amplifier configuration as structured data and train one model over multiple configurations.
The current A2 infrastructure already contains general-purpose conditioning mechanisms, making this a potentially incremental research direction rather than a completely new model architecture.
The main unknown is therefore not whether the concept can be expressed mathematically, but whether the combination of:
can reproduce an amplifier’s continuous control space accurately enough for practical use.
A small proof-of-concept could answer that question without requiring changes to the existing NAM ecosystem.