Bring the sound pages and Architecture up to date (#85, round 10)
Refactoring round 10 checked the wiki against the code since round 9. Most of what had gone stale is about sound. - Architecture: src/core/soundfx, src/core/instrument, src/editor/sound, src/editor/soundfx, src/editor/instrument and src/editor/routing had no row. src/core/music named five of its fifteen modules. The worklet was still called pitchWorklet. New are fxNodes, PreviewParams, nodes/shared, addLink and drawFloatingBox. - Home: "Sound has no mixer, no fade" is not so since the buses, the Master routing and the fades of songs. The rows of Sounds and Songs name what the pages cover now. - Songs: a new song snaps to 1/16 since #365, the intro still said the bar. "Not yet" named the Reverb (#328) and a bus without sound FX, both there by now. - Instruments: "Not yet" named the Phaser (#341), which is there. - Patterns, Songs, Instruments: swing points to #372, the end of a song to #373. Lines that ran past the width are wrapped. - Every path the wiki and the README name exists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent
6b8d3e07fa
commit
1395c56efd
5 files changed
+73
-34
No files matched your search
+49
-10
@@ -141,7 +141,9 @@ src/core/graph/ graph model, NodeRegistry/NodeContext/values (a travellin
|
||||
savedValues (#166: the SaveArea a run reads persistent Variables assets from and writes them to, and restoring a save through today's declaration),
|
||||
stateMachine (the State node, a machine's states, the ports they become), variablePorts, propertyPorts,
|
||||
typedValues (#271: what fits a struct type, and a written variable held to its declaration),
|
||||
lookup (what a node may look up: behaviors, state machines, struct types, what a variable declares), keyRepeat; nodes/{events,flow,data,action,variable}/<Name>.ts
|
||||
lookup (what a node may look up: behaviors, state machines, struct types, what a variable declares), keyRepeat; nodes/{events,flow,data,action,variable}/<Name>.ts,
|
||||
nodes/shared (the ports several nodes share: `checkPort`, the sound pickers, `detachedPort`,
|
||||
`fxParamsPort`, `playedBusPort`, `letRingPort`)
|
||||
src/core/particles/ nodes (the catalogue), compile (a graph → one function per output),
|
||||
emission (which particles are alive at a second — a pure rule, no state)
|
||||
src/core/store/ serialize (untrusted JSON → Project), projectPlugins (which plugins a project switches on, read off the raw
|
||||
@@ -160,7 +162,26 @@ src/core/music/ time (ticks, 480 to the quarter, tempo and meter, a posit
|
||||
of the test's own; a song's sound items as clips, taken up mid-way where the playhead
|
||||
lands, #334), pattern (#333: a pattern's notes, grid, meter, tempo and loop, held to
|
||||
their rules, and the sequence it plays), song (#334: tracks and items held to their rules,
|
||||
the sequence a song plays, the level of a track's bus, an item cut at a tick)
|
||||
the sequence a song plays, the level of a track's bus, an item cut at a tick),
|
||||
routing + routingNodes (#350: a song's routing graph, a node per track and the output;
|
||||
`addLink` is the one rule for a link both routings keep), projectRouting (#351: the
|
||||
Master routing, a node per sound, instrument, pattern, song and bus and the master; a
|
||||
new asset takes the links most others of its type have), songBuses (the buses a song
|
||||
plays on, mute and solo as gates), mixer (the master bus and `mix:<id>`), needs (a
|
||||
sound FX with its parameters, or none), playbacks (what a sequence loads before it
|
||||
plays), embedded (#355: what a song keeps to itself), ghosts (#339: the notes around a
|
||||
pattern item), take (#342: a recorded take as 16-bit WAV, cut to where the song started)
|
||||
src/core/soundfx/ the sound FX graph (#311): nodes (every effect and what it adds to a plan), compile (the
|
||||
graph walked back from the Output to a plan; a parameter stays open until a voice
|
||||
starts), parametricEq (#367: the bands, and the curve Web Audio plays of them); the
|
||||
effects the FX worklet runs, plain classes tested in Node: pitchPlayer (#317/#346, a
|
||||
phase vocoder), chip (#329), crusher (#322), phaser (#341: Phaser and Flanger),
|
||||
dynamics (#326), lfo (#320: Tremolo and Vibrato); reverb (#328) and saturation (#323)
|
||||
for the Web Audio nodes that do theirs
|
||||
src/core/instrument/ the instrument graph (#331): nodes (Notes, Sample, Parameters, Sound FX, Envelope),
|
||||
compile (one note walked back from the Output, its triggers and sources), notes (MIDI
|
||||
numbers and names), envelope (#335), chipPresets (#329: Preset, Randomize and Mutate the
|
||||
way sfxr makes its sounds)
|
||||
src/runtime/ GameRun (one run: start, tick, `Load scene` — shared by Play and a released game, #266),
|
||||
World, Entity, System interface, Input tracker, CollisionSystem (the editor run's detection),
|
||||
solids (what `Move` collides with and how it slides — one-way solids let it through unless
|
||||
@@ -214,14 +235,21 @@ src/viewport/ WorldViewport (the drawing of a world or a holder, the ba
|
||||
PixelCels (the pixels of pixel art in memory: a painted cel is named at once, the ones the
|
||||
server lacks are uploaded before a save, #130) + pixelArtPicture (every frame composed on the
|
||||
CPU and laid side by side onto one canvas, so a frame is cut out like a texture frame),
|
||||
SoundLibrary + pitchWorklet (the AudioWorklet that plays a way with a Pitch through
|
||||
core/soundfx/pitchPlayer, a phase vocoder, #317; a note of an instrument is one voice
|
||||
of what reaches its Output, each way with its own file, #331; a voice can start and be released
|
||||
at a second of the audio clock, #332; a clip of a song from a second into its sound until
|
||||
its end, a bus per track of a song with its level and pan, #334), music (the scheduler on
|
||||
SoundLibrary + fxNodes (what each stage of a sound FX becomes as Web Audio nodes, and
|
||||
how the knobs of a playing voice move) + fxWorklet (the AudioWorklet of the effects Web Audio has no node for: a
|
||||
`Source` plays a sound of its own, a way with a Pitch, #317, or a Chip, #329; an `Effect`
|
||||
sits between two stages, the pitch of a bus, #346, a Bitcrusher, a Phaser, a Flanger, a
|
||||
Limiter, a Tremolo or a Vibrato; `Start` keeps either silent until its voice starts,
|
||||
#332; what each of them works out is in core/soundfx; a note of an instrument is one
|
||||
voice of what reaches its Output, each way with its own file, #331; a voice can start and
|
||||
be released at a second of the audio clock, #332; a clip of a song from a second into its
|
||||
sound until its end, a bus per track of a song with its level and pan, #334; the buses of
|
||||
the mix and the Master routing, #325/#351), music (the scheduler on
|
||||
the library's clock, its notes played by the project's instruments and its clips by
|
||||
the library: the player of the Pattern and Song tabs, #333/#334, and `__gm.music`) + musicTimer
|
||||
(the Web Worker whose interval is the scheduler's beat, #332), ShaderLibrary, ParticleLibrary,
|
||||
(the Web Worker whose interval is the scheduler's beat, #332), takeRecorder + takeWorklet
|
||||
(#342: the microphone on the library's clock, its samples with the frame they were taken
|
||||
at), ShaderLibrary, ParticleLibrary,
|
||||
particles (one ParticleContainer per source), tilemap (one container per layer),
|
||||
shaderPicture (the picture a shader is laid over when it shades a camera's frame, #299, or
|
||||
a particle field, #170: drawn anew each time into a render texture kept while its size
|
||||
@@ -269,7 +297,7 @@ src/editor/ App → Editor (layout + ticker), PlaySession (the run),
|
||||
TabButton (how a tab is drawn: the card of the one showing, plain weight, no pressed fill, #176),
|
||||
DocumentTab (a document's tab: kind, name, close cross, a right-click menu), documents (#171: where a new document's tab goes, which one shows
|
||||
after a close, a tab going on to another document — pure, so checkable without a browser),
|
||||
FloatWindow + floating (#371: a document's pane lent to a window above the editor and given back on Dock; where a window opens and how it stays on the screen).
|
||||
FloatWindow + floating (#371: a document's pane lent to a window above the editor and given back on Dock; where a window opens and how it stays on the screen; drawn by `drawFloatingBox` like a popup).
|
||||
One editor per kind serves every open document of that kind: `Editor` points it at the one on
|
||||
screen (`AssetTabEditor.showAsset`), and it keeps each document's view through `saveView`/`restoreView`
|
||||
src/editor/plugins/ startPlugins (list, import, host; runs before the first project) → loader (PluginManager: syncTo makes the
|
||||
@@ -362,7 +390,18 @@ src/editor/song/ SongEditor (header: Play, Grid; plays through the schedul
|
||||
follows edits, #334), SongTimeline (heads, ruler and lanes in one widget, dropping assets
|
||||
in, the gestures and keys) + songView (its geometry: tracks, items and their ends, the
|
||||
parts of a head) + songEdit (what a gesture does to the items) + songActions (deleting
|
||||
tracks and items, shared with the inspector and Delete)
|
||||
tracks and items, shared with the inspector and Delete), meterView + meterDraw (#359:
|
||||
the level meters of the heads), TakeMeter (#342: the input's level while recording),
|
||||
ownFx (#355: a sound FX the song keeps for a song, a track or an item)
|
||||
src/editor/sound/ SoundEditor (#343: header with Play, the clip's direction and fades), WaveCanvas (the
|
||||
waveform, the clips as bands, the cut) + waveView (its time axis), SoundPreview (play
|
||||
and length in the inspector), SoundPicker (the "+ → Sound" rows with their play mark)
|
||||
src/editor/soundfx/ SoundFxEditor (#311: the graph, a sound to try it on, Play and Stop), PreviewParams (the
|
||||
header's fields for the parameters a tab plays with, shared with the Instrument tab),
|
||||
EqEditor + eqView (#367/#370: the Parametric EQ in a tab of its own, its curve on a picture)
|
||||
src/editor/instrument/ InstrumentEditor (#331: the graph over the keys, Preset, Randomize, Mutate, Audition),
|
||||
PianoKeyboard + keys (the keys drawn, played by the pointer and the computer keyboard)
|
||||
src/editor/routing/ RoutingEditor (#351: the Master routing tab, one per project)
|
||||
src/editor/tile/ TileEditor (header + kind), TileCanvas (every tile of the block and a sample map, animated),
|
||||
PictureStrip (the pictures as animation steps; its reorder maths is `dropIndex` in ui/sortable),
|
||||
TilePalette (the tiles as a grid of pictures in the tilemap panel, #139)
|
||||
|
||||
+9
-8
@@ -21,10 +21,10 @@ 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, its tab and the cut, `Play sound` and `Stop sound`, sound FX (gain, pitch, EQ, mix, delay) and how long a voice rings on, what a pause and a stop do to a voice |
|
||||
| [Sounds](Sounds) | Uploading a sound, what the asset says, its tab, the cut and clips, `Play sound` and `Stop sound`, buses, the master and the Master routing, sound FX and their nodes (filters, EQs, delay, reverb, dynamics, modulation, Bitcrusher) and how long a voice rings on, what a pause and a stop do to a voice |
|
||||
| [Instruments](Instruments) | The instrument asset: Notes, Sample, Parameters, Sound FX, Envelope and Output, triggers, zones and layers, the keys of the Instrument tab, `Play note` |
|
||||
| [Patterns](Patterns) | The pattern asset and its piano roll: drawing, moving and sizing notes, the grid, the ruler with start and loop, velocities, playing it in a loop |
|
||||
| [Songs](Songs) | The song asset: tracks with volume, pan, mute and solo, pattern and sound items laid out, moved, cut and split, playing it in a loop |
|
||||
| [Songs](Songs) | The song asset: tracks with volume, pan, mute and solo, pattern and sound items laid out, moved, cut and split, its routing, recording a take, embedded assets, playing it in a loop and from a game |
|
||||
| [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 |
|
||||
@@ -52,9 +52,10 @@ into issues #1-#50, closed ones included, each carrying the commits it was filed
|
||||
|
||||
## Not yet
|
||||
|
||||
A touch-optimised layout. Sound has no mixer, no fade and no
|
||||
`Set volume` on a playing voice (see [Sounds](Sounds)). Animations have no events on the
|
||||
timeline and no preview in the Scene tab. Slicing cuts a regular grid only — no detection of where the sprites actually
|
||||
sit on the sheet. Unreferenced image files are never collected by themselves — deliberately, since the image
|
||||
picker offers them again; a file goes only when its owner (or an administrator) presses
|
||||
**Delete** in the picker and no project uses it.
|
||||
A touch-optimised layout. A voice that is already playing has no volume of its own to change:
|
||||
`Set bus volume` turns a whole bus up or down (see [Sounds](Sounds#buses-and-the-master)).
|
||||
Animations have no events on the timeline and no preview in the Scene tab. Slicing cuts a regular
|
||||
grid only — no detection of where the sprites actually sit on the sheet. Unreferenced image files
|
||||
are never collected by themselves — deliberately, since the image picker offers them again; a file
|
||||
goes only when its owner (or an administrator) presses **Delete** in the picker and no project
|
||||
uses it.
|
||||
+6
-7
@@ -1,9 +1,9 @@
|
||||
An **instrument** (**+ → Instrument**, #331) makes a note a sound. It is a node graph like a
|
||||
[sound FX](Sounds#sound-fx): **Notes** nodes bring the note in, a **Sample** plays a sound for it
|
||||
or a **Chip** makes one the way old game consoles did (#329), the effects of a sound FX shape it
|
||||
and the **Output** is what is heard. It is the first piece of
|
||||
the music tools planned in #330: a [pattern](Patterns) (#333) plays one, and a [song](Songs) (#334) lays patterns out.
|
||||
A behavior plays one with **Play note**, and the tab plays it from its keys.
|
||||
and the **Output** is what is heard. It is the first piece of the music tools planned in #330: a
|
||||
[pattern](Patterns) (#333) plays one, and a [song](Songs) (#334) lays patterns out. A behavior
|
||||
plays one with **Play note**, and the tab plays it from its keys.
|
||||
|
||||
Instruments are listed under **Instruments** in the asset panel, patterns under **Patterns**.
|
||||
A new one starts as *Notes* → *Sample* → *Output*: every note from C4 to B4 plays the Sample,
|
||||
@@ -352,7 +352,6 @@ the game's, so a slow frame or a busy page never moves a note. The Pattern tab p
|
||||
|
||||
## Not yet
|
||||
|
||||
No swing. No view of the waveform a Chip makes, no import of sfxr or jsfxr codes, no WAV export
|
||||
(#340), no phaser (#341). An Envelope
|
||||
shapes notes of an instrument only, not a sound played through a sound FX. Notes can not be played from an `.mid` file or a MIDI
|
||||
keyboard.
|
||||
No swing (#372). No view of the waveform a Chip makes, no import of sfxr or jsfxr codes, no WAV
|
||||
export (#340). An Envelope shapes notes of an instrument only, not a sound played through a sound
|
||||
FX. Notes can not be played from an `.mid` file or a MIDI keyboard.
|
||||
+3
-3
@@ -183,6 +183,6 @@ once it was gone by itself after its bar.
|
||||
|
||||
## Not yet
|
||||
|
||||
No ghost notes from another pattern without a song, no lanes for
|
||||
pitch bend or an instrument's parameters (automation, #337), no swing. The computer keyboard does
|
||||
not play notes in this tab as it does in the Instrument tab, and there is no step input.
|
||||
No ghost notes from another pattern without a song, no lanes for pitch bend or an instrument's
|
||||
parameters (automation, #337), no swing (#372). The computer keyboard does not play notes in this
|
||||
tab as it does in the Instrument tab, and there is no step input.
|
||||
+6
-6
@@ -4,7 +4,7 @@ pattern (#333). Several songs and tracks can use the same pattern: an edit to it
|
||||
it lies.
|
||||
|
||||
Songs are listed under **Songs** in the asset panel. A new song has one empty track, 120 BPM in
|
||||
4/4, and items snap to the bar.
|
||||
4/4, and items snap to 1/16.
|
||||
|
||||
## What a song says
|
||||
|
||||
@@ -381,8 +381,8 @@ bus. Stop let it go. An item's *Sound FX* offered *From the asset*, *None* and t
|
||||
|
||||
## Not yet
|
||||
|
||||
A link sends at one volume; it cannot be moved over time, and there is no reverb to send to yet
|
||||
(#328). Nothing tells a graph that a song played once has ended, and there is no node that changes the
|
||||
volume of a playing song. No start at a marker (#338), no automation (#337), no song inside a song, no held note (drone) as an item. A variation of a pattern for one item is *Embed a copy* in the
|
||||
item's menu (see [Embedded assets](#embedded-assets)). A bus cannot have a sound FX of its own,
|
||||
and a song cannot keep an instrument to itself.
|
||||
A link sends at one volume; it cannot be moved over time. Nothing tells a graph that a song played
|
||||
once has ended (#373), and there is no node that changes the volume of a playing song. No start at a
|
||||
marker (#338), no automation (#337), no swing (#372), no song inside a song, no held note (drone) as
|
||||
an item. A variation of a pattern for one item is *Embed a copy* in the item's menu (see
|
||||
[Embedded assets](#embedded-assets)). A song cannot keep an instrument to itself.
|
||||
Reference in new issue
Block a user