NAM model integration: rewrite nam_host.py with full inference pipeline

- NAMHost: process(), warm_up(), avg_inference_ms, model cache, crossfade
- ModelSwitchMode enum (INSTANT/CROSSFADE/PAUSE) with pipeline wiring
- list_available_models(), available_models(), process_with_model()
- Fixed pipeline.py type typo (NAMIHost -> NAMHost)
- Crossfade support wired through pipeline NAM_AMP route
- 25/25 NAM tests + 41/41 integration tests pass
- download_models.sh generates 10 verified Linear .nam models
This commit is contained in:
2026-06-07 23:53:33 -04:00
parent 0ae2ca6e8e
commit 1c611646be
2 changed files with 399 additions and 158 deletions
+5 -2
View File
@@ -21,7 +21,7 @@ from typing import Optional
import numpy as np
from scipy.signal import lfilter
from .nam_host import NAMHost, NAMModel
from .nam_host import NAMHost, NAMModel, ModelSwitchMode
from .ir_loader import IRLoader, IRFile
from ..presets.types import FXBlock, FXType, Preset
@@ -230,7 +230,7 @@ class AudioPipeline:
def __init__(
self,
nam_host: Optional[NAMIHost] = None,
nam_host: Optional[NAMHost] = None,
ir_loader: Optional[IRLoader] = None,
):
self.nam = nam_host or NAMHost()
@@ -336,6 +336,9 @@ class AudioPipeline:
case FXType.NAM_AMP:
if self.nam.is_loaded:
buf = self.nam.process(buf)
# Apply crossfade if a model switch is in progress
if self.nam._crossfade_buf is not None:
buf = self.nam.apply_crossfade(buf)
case FXType.IR_CAB:
if self.ir.is_loaded:
buf = self._apply_ir_cab(buf, params, fx_state)