Describe the Mix node and ways of a sound FX

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-05 20:09:39 +02:00
1 parent fd874aed6e
commit 69c18477d4
3 files changed
+15 -8

No files matched your search

+1 -1
@@ -4,7 +4,7 @@
| **Asset** | Named thing with a type (`scene`, `camera`, `clip`, `sprite`, `text`, `behavior`, `collider`, `container`, `texture`, `animation`, `statemachine`, `shader`, `shaderfunction`, `font`, `sound`, `soundfx`, `particles`, `variables`) and typed properties. Assets have **no position**. |
| **Texture** | An uploaded image. Scenes, textures, animations, state machines, shaders, fonts, sounds and Variables assets are the eight types that cannot be placed: a texture has no position, it is *worn* by a sprite through the ordinary property `texture`. See [Textures](Textures). |
| **Font** | An uploaded typeface, worn by a text through the ordinary property `font`; no font means the editor's own. Uploaded and picked exactly like a texture, and stored the same way. See [Fonts](Fonts). |
| **Sound** | An uploaded audio file. Uploaded, picked and stored exactly like a typeface — but nothing *wears* it: it is neither on screen nor in the scene, and a graph plays it with `Play sound`. Its own rows say how loud it is and whether it loops; the node scales the one and can overrule the other either way. A **sound FX** asset is a graph of effects (gain, pitch, EQ) a `Play sound` can send it through. See [Sounds](Sounds). |
| **Sound** | An uploaded audio file. Uploaded, picked and stored exactly like a typeface — but nothing *wears* it: it is neither on screen nor in the scene, and a graph plays it with `Play sound`. Its own rows say how loud it is and whether it loops; the node scales the one and can overrule the other either way. A **sound FX** asset is a graph of effects (gain, pitch, EQ, mix) a `Play sound` can send it through. See [Sounds](Sounds). |
| **State machine** | A named set of **states**, edited as nodes in its own tab. A behavior puts it into a state with `Set state`, moves it along a named transition with `State transition` and branches on it with `State branch`. Its **Scope** says where the current state lives: **Local** gives every behavior instance one of its own, **Global** keeps a single one for the whole run. See [State machines](State-machines). |
| **Shader** | A node graph that becomes the GLSL a sprite is drawn with, edited in its own tab. A sprite, a text or a particle source wears it through `shader`; the numbers the graph declares are rows below that dropdown. A **shader function** is a part of such a graph kept on its own and used as a node in other shaders. See [Shaders](Shaders). |
| **Particles** | A node graph that says what *one* particle is as a function of its age and of a random number drawn once for it — no forces, no simulation. Unlike the other graph assets it **is** placeable: the object made from it is a source, whose rows say how many go out and for how long they live. Because a particle is a formula, the same second always draws the same picture and the tab's slider can jump to any of them exactly. See [Particles](Particles). |
+1 -1
@@ -21,7 +21,7 @@ Live: <https://nockal.com/game-maker/> · Widget playground: <https://nockal.com
| [Vector art](Vector-Art) | The vector art asset, canvas and shapes, the Pen and Select tools, the shape list, how a drawing is worn |
| [Pixel art](Pixel-Art) | The pixel art asset and its palette, the tools, layers and frames, onion skin and the preview, resizing, how frames are worn and where the pixels are stored |
| [Fonts](Fonts) | Uploading a typeface, what a text wears, what the editor falls back to |
| [Sounds](Sounds) | Uploading a sound, what the asset says, `Play sound` and `Stop sound`, sound FX (gain, pitch, EQ), what a pause and a stop do to a voice |
| [Sounds](Sounds) | Uploading a sound, what the asset says, `Play sound` and `Stop sound`, sound FX (gain, pitch, EQ, mix), what a pause and a stop do to a voice |
| [Animations](Animations) | Animation assets, the Animation tab, how they run |
| [Curves](Curves) | Easings drawn by hand, the Curve tab, using one on a key or a `Lerp` |
| [Tiles](Tiles) | The tile asset, plain tiles and the two autotile kinds, the pictures as animation steps, the Tile tab |
+13 -6
@@ -98,12 +98,13 @@ Input and the Output once each; their pins carry sound and fit nothing but each
| Node | What it does |
| --- | --- |
| **Gain** | Louder or quieter, in dB (`Gain (dB)`): 0 leaves it alone, -6 is about half as loud, +6 twice. Above 0 the sound can clip. |
| **Pitch** | Higher or lower, in semitones (12 is an octave, 0.5 a quarter tone). The sound **keeps its length**, and the pitch applies to the **whole** sound wherever the node sits. |
| **Pitch** | Higher or lower, in semitones (12 is an octave, 0.5 a quarter tone). The sound **keeps its length**. The pitch is worked out on the sound as it starts, so an effect before the Pitch acts as if it came after it. |
| **5-Band-EQ** | Five bands in dB: 80 Hz and 12 kHz as shelves, 250 Hz, 1 kHz and 4 kHz as peaks. A band at 0 does nothing. |
| **Mix** | Blends the sounds at `a` and `b`: at 0 only `a` is heard, at 1 only `b`, at 0.5 half of each (0.5 is the default). |
Every number of these nodes is an **input**: typed in while nothing is connected, or fed from a
parameter of the Input. Each is held to its range (Gain -120 to +24 dB, Pitch -64 to +64, the EQ
bands -60 to +24 dB), whichever way the value arrives.
bands -60 to +24 dB, Mix 0 to 1), whichever way the value arrives.
**How Pitch keeps the length.** The sound is first read faster or slower, which sets the pitch,
and then stretched back to its length by WSOLA: short frames (40 ms) laid over each other, each
@@ -113,10 +114,16 @@ starts — about 15 ms per second of a 48 kHz channel — and kept for the next
Far from 0 it gets rough: a pitch that lands above half the sample rate folds back down, and a
very low one smears, since a frame is shorter than one period of what is left.
**It is a line, not a mixer.** An input takes one edge, so the way from Input to Output never forks;
a node hanging off the line is simply not heard. A node on the way with nothing coming in, or a
graph without an Output, does not compile: the node says why, and the tab's header says it too
(otherwise it counts the effects on the line).
**Ways and the Mix.** An input takes one edge, but an output feeds as many as you like: the Input
can start two ways with effects of their own, and a **Mix** joins them again. Only a Mix joins
ways, and a node whose sound never reaches the Output is simply not heard. A node on the way with
nothing coming in (a Mix needs both `a` and `b`), or a graph without an Output, does not compile:
the node says why, and the tab's header says it too (otherwise it counts the effects on the way).
**A Pitch on one way only** works: the voice starts one copy of the sound per pitch, all at the
same moment and all of the same length, and each runs through its own way. Two ways at the same
pitch share one copy. A Pitch behind the Mix goes to both of its sounds. A Mix that ends up at
exactly 0 or 1 leaves the silent way out, so that one is not even worked out.
**Listening in the tab.** The header picks one of the project's sounds and plays it through the
graph as it stands — the same library as a running game, so it sounds the way the game will.