BarisAMP: un amplificador de guitarra, pedales y plugin NAM gratuito escrito en Rust
Un circuito de tono JCM800 calculado desde el esquema, inferencia NAM que coincide muestra a muestra con NeuralAmpModelerCore, convolución de cabina sin latencia y un supresor de ruido de 12 bandas que aprende.

BarisAMP es un equipo de guitarra completo en una sola aplicación: amplificador, pedales, cabinas y capturas neuronales de amplificadores. Funciona en macOS y Windows como aplicación independiente o como plugin VST3, CLAP o (en macOS) Audio Unit. Es gratuito; las descargas están en barisamp.baltavista.com.
En este artículo miro por dentro: cómo se calcula el modelo de amplificador a partir del circuito, cómo se ejecutan las capturas NAM, la convolución de cabina sin latencia, el supresor de ruido que aprende tu equipo y cómo se empaqueta el plugin para los DAW. Está escrito en Rust, con nih-plug para el plugin y egui para la interfaz.

Cadena de señal
Denoise → Gate → Comp → Wah → Pitch → Swell → Drive → Amp / NAM
→ Cabinet → EQ → Mod → Delay → Reverb → Looper → Limiter
Todo hasta la cabina es mono: se suman todos los canales de entrada de la interfaz, así que la guitarra funciona en cualquier entrada. La modulación, el delay ping-pong y las reverberaciones hacen la señal estéreo. La modulación también puede ir antes del amplificador, como un pedal.
El modelo de amplificador
El amplificador integrado sigue la estructura de un JCM800: dos etapas de preamplificador a triodo, un circuito de tono pasivo y una etapa de potencia. Cada etapa de triodo es un recortador suave asimétrico:
fn triode(x: f32, bias: f32) -> f32 {
(x + bias).tanh() - bias.tanh()
}
bias desplaza el punto de trabajo como lo hace la polarización de rejilla de una válvula. Como la curva no es simétrica respecto a cero, produce armónicos pares; el - bias.tanh() final elimina la componente continua que se genera. Entre las etapas hay filtros paso alto de 30 Hz en lugar de los condensadores de acoplo del amplificador real, y filtros paso bajo que suavizan los agudos.
Las entradas HIGH y LOW funcionan como en un JCM800: LOW se salta la primera etapa de triodo y pone en su lugar una ganancia lineal fija, para un sonido más limpio y más bajo.
El recorte es no lineal y añade armónicos por encima de Nyquist, que se repliegan (aliasing) y suenan como un chisporroteo metálico. Por eso el amplificador y los pedales de drive funcionan a 4 veces la frecuencia de muestreo, con filtros Butterworth de octavo orden a la subida y a la bajada.
Un circuito de tono calculado desde el esquema
Muchos simuladores tratan BASS, MIDDLE y TREBLE como tres bandas de EQ separadas. Un amplificador real no: en el circuito de tono pasivo "FMV" de Fender, Marshall y Vox los tres potenciómetros interactúan, y aun con todos al centro hay un valle en los medios.
BarisAMP modela este circuito como en el artículo de D. Yeh y J. O. Smith "Discretization of the '59 Fender Bassman Tone Stack". La función de transferencia analógica de tercer orden se calcula directamente a partir de los valores de los componentes y de las posiciones de los potenciómetros, y se discretiza con la transformada bilineal. Los valores son los del JCM800: potenciómetros de 220k (agudos), 1M (graves) y 22k (medios), una resistencia de 33k, 470 pF y dos de 22 nF.
Un circuito de tono pasivo pierde mucho nivel; en el amplificador real la etapa siguiente lo recupera. Aquí también se mide la pérdida a 1 kHz con todo al centro y se compensa.
Neural Amp Modeler
Además del amplificador integrado, con AMP en NAM se cargan capturas de Neural Amp Modeler: redes neuronales entrenadas con grabaciones de entrada y salida de un amplificador real. La comunidad comparte miles de archivos .nam.
El código de inferencia se portó a Rust desde NeuralAmpModelerCore (MIT): WaveNet (standard, lite, feather, nano), LSTM y el formato contenedor A2. Las pruebas comprueban que la salida coincide muestra a muestra con la de NeuralAmpModelerCore.
- Nivel. Si el archivo incluye metadatos de
loudness, el modelo se normaliza a -18 dB; si no, se mide reproduciendo la señal de entrada estándar del entrenador de NAM. - Frecuencia de muestreo. Si el modelo se entrenó a 48 kHz y el DAW trabaja a 44.1 kHz, la señal se remuestrea a la frecuencia del modelo y de vuelta.
- Velocidad. En Apple Silicon las convoluciones dilatadas de WaveNet se calculan en bloques de 4 salidas × 16 muestras con las sumas en registros NEON, cerca del pico FMA del núcleo. Eso hizo WaveNet unas 2.3 veces más rápido. En un Apple M4 un WaveNet estándar usa alrededor del 2 % de un núcleo, y el amplificador integrado menos del 1 %.
Diez pedales de drive
| Pedal | Inspirado en | Carácter |
|---|---|---|
| Screamer | Ibanez TS808 | solo los medios, recorte suave en la realimentación del op-amp |
| Transparent | Klon Centaur | mezcla de una ruta limpia y otra recortada con germanio |
| Blues | Boss BD-2 | dos etapas discretas, recorte suave asimétrico |
| Rodent | ProCo RAT | op-amp cuyo ancho de banda se reduce con la ganancia, diodos duros a masa |
| Dist One | Boss DS-1 | boost a transistor, recorte duro de silicio, tono con medios recortados |
| Fuzz | Big Muff | dos etapas de recorte en cascada |
| Yellow 250 | DOD 250 | un 741 cuya ganancia sube por encima de ~720 Hz |
| Fuzz Face | Dallas Arbiter | par de germanio realimentado, recorte redondo y desigual |
| Treble Booster | Rangemaster | un transistor de germanio que realza los medios altos |
| Clean Boost | MXR Micro Amp | ganancia plana de 0 a +20 dB |
Cada pedal tiene un ajuste de salida para que, a medio DRIVE, todos suenen cerca de la ganancia unitaria.
Una cabina sin latencia
La cabina es una convolución con respuesta al impulso (IR). Hay 21 IR integradas y también se pueden cargar archivos WAV propios. Las primeras 64 muestras de la IR se calculan como un FIR directo, así que la salida nunca espera. El resto se divide en particiones de 64 muestras con convolución FFT overlap-save; cada partición de la cola solo necesita bloques de entrada ya completos, así que tampoco añade latencia.
Un supresor de ruido que aprende
Un noise gate clásico se abre al tocar y deja pasar todo el soplido. DENOISE divide la señal en 12 bandas (de 150 Hz a 10 kHz) con filtros Linkwitz-Riley sin latencia cuya suma tiene magnitud plana. Al pulsar LEARN mide durante 2 segundos el ruido de cada banda con las cuerdas en silencio. Al tocar, cada banda se atenúa suavemente, a 3:1, cuando se acerca a su nivel de ruido aprendido. Así, mientras una nota se sostiene, el soplido de las bandas altas que la nota no alcanza sigue suprimido.
El resto
Wah de pedal, automático y por LFO; octavas, Octavia, armonizador y whammy; swell de volumen; chorus, flanger, phaser, trémolo, Uni-Vibe y altavoz rotatorio; delays analógico, de cinta, digital, ping-pong, multicabezal y inverso con tap tempo y sincronía con el DAW; reverbs room, hall, plate, spring y shimmer con freeze. Además, afinador cromático, looper de 60 segundos con overdub, EQ de 8 bandas con espectro, compresor y limitador.
El hilo de audio nunca reserva memoria; las IR y los modelos NAM se cargan en otro hilo y solo se intercambian, así que cargar un modelo mientras tocas no corta el sonido.
VST3, CLAP y Audio Unit
El plugin es el CLAP que genera nih-plug. Desactivé la exportación VST3 de nih-plug porque sus bindings son GPLv3; en su lugar clap-wrapper, con el SDK VST3 de Steinberg y el AudioUnitSDK de Apple, envuelve el CLAP como VST3 y AUv2. Los identificadores del plugin no cambian entre versiones para que los DAW lo encuentren en proyectos guardados, y las versiones se validan con auval -strict y el validador de Steinberg.
Los paquetes de macOS son para Apple Silicon (macOS 11 o posterior) y los de Windows para Windows 10 y 11 de 64 bits.
Pruébalo
Puedes descargar BarisAMP en barisamp.baltavista.com. Cargar una captura NAM y ponerle detrás una IR de cabina que te guste es una buena forma de empezar.