A Gain node now draws a small device in the graph, as the Compressor does since #380: the brushed plate in orange, 160x220 graph units, with one chrome knob between its inputs and its output. - GainPanel and GainFace join the node faces. The knob drags, resets on a double-click and keeps the wheel for the graph (#383). Each turn is one undo step, a linked Gain (dB) greys it. - The knob turns with a taper of 0.26, so 0 dB stands straight up and the range below -24 dB takes a fifth of the turn. - drawPlate, engrave and the brushed look move out of CompressorPanel so both devices share them. The Knob takes an arc colour, because the orange arc vanished on the orange plate. - No meter and no tap. Gain sits in every voice of an instrument, and a tap would add two audio nodes to each note for a display nobody asked for. Found on the way: - Knob.dialGlobal added half the dial unscaled. In a zoomed graph it pointed beside the dial. The Compressor's e2e only hit by luck. Tests: - Unit: 2 new for the Gain plate and its taper. - e2e 34 on atx: ALL PASSED, 126 checks (1 new). - Gate on atx: CHECK EXIT 0, 283 files, 4359 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
16 lines
848 B
TypeScript
16 lines
848 B
TypeScript
import type { GraphNode } from '../../core/graph';
|
|
import { SoundFxCompressor, SoundFxGain, SoundFxParametricEq } from '../../core/soundfx/nodes';
|
|
import type { NodeFace } from '../graph/nodeFace';
|
|
import type { EditorState } from '../state';
|
|
import { CompressorFace } from './CompressorFace';
|
|
import { EqFace } from './EqFace';
|
|
import { GainFace } from './GainFace';
|
|
|
|
/** The nodes drawn as a face of their own instead of rows (#380, #381, #384), by type. */
|
|
export function nodeFaceFor(state: EditorState, assetId: string, node: GraphNode): NodeFace | null {
|
|
if (node.type === SoundFxCompressor.type) return new CompressorFace(state, assetId, node.id);
|
|
if (node.type === SoundFxParametricEq.type) return new EqFace(state, assetId, node.id);
|
|
if (node.type === SoundFxGain.type) return new GainFace(state, assetId, node.id);
|
|
return null;
|
|
}
|