Describe the Master routing graph instead of Bus and Into (#351)
The rows Bus and Into are gone. Sounds, instruments, patterns, songs and buses are routed in one graph per project now. - Sounds: the section Master routing replaces Buses and the master. - Songs, Patterns and Instruments point there instead of a Bus row. - Development counts 1909 checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent
e8b1dd9d9f
commit
59142d270e
5 files changed
+69
-32
No files matched your search
+1
-1
@@ -19,7 +19,7 @@ php tests/php/accounts.test.php # the API's accoun
|
||||
php tests/php/snapshots.test.php # the snapshot store (#231), the same way
|
||||
php tests/php/releases.test.php # the release store (#266), the same way
|
||||
php tests/php/files.test.php # uploaded files in a folder per account (#344), the same way
|
||||
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1908 editor checks, screenshots in /tmp/gm-e2e-*.png
|
||||
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1909 editor checks, screenshots in /tmp/gm-e2e-*.png
|
||||
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
|
||||
./e2e.sh start [GM_STEPS] # the same run detached, see below
|
||||
./e2e.sh status # live progress, or the last run's result
|
||||
|
||||
+1
-1
@@ -302,7 +302,7 @@ low-pass.
|
||||
| `tempo` | BPM, what a [Delay synced to beats](Sounds#delay-and-the-tail-of-a-voice) in the instrument counts by. Default 120. |
|
||||
| `fx` | A [sound FX](Sounds#sound-fx) the note goes through on top of what the instrument does (#346), as through a *Sound FX* node at its Output. *From the asset* (the default) is the row **Sound FX** of the instrument, *None* none (#352). Its Pitch moves the note's sound itself, with no latency. |
|
||||
| `fx params` | Values for that FX's parameters, from a **Sound FX parameters** node. They stay apart from `params`: an FX parameter and an instrument parameter of the same name are two numbers. |
|
||||
| `bus` | The [bus](Sounds#buses-and-the-master) the note is heard on. *From the asset* (the default) takes the row **Bus** of the instrument, which is also what its tab plays on (#325). |
|
||||
| `bus` | The [bus](Sounds#buses-and-the-master) the note is heard on. *From the asset* (the default) goes along the links of the instrument in the [Master routing](Sounds#master-routing), as its tab plays (#351). |
|
||||
|
||||
Its output `voice` is the number of the note, like `Play sound`'s: `Set sound FX parameters` moves
|
||||
its parameters while it plays (the bundle of an Instrument parameters node goes into its
|
||||
|
||||
+3
-1
@@ -17,7 +17,9 @@ The notes and the loop are the pattern's own data; everything else is a row in t
|
||||
| **Sign** | The time signature, from the same list as a [song's](Songs) (#364): 1/2, 2/2, 3/2, 1/4 to 6/4, or 5/8 to 9/8, 4/4 by default. It only says where the bars and beats of the ruler are; the notes are kept in ticks, so a pattern changed from 4/4 to 6/8 keeps every note where it was. |
|
||||
| **Tempo (BPM)** | 20 to 400, quarter notes a minute, for hearing the pattern in its tab. A song plays it at its own tempo. |
|
||||
| **Sound FX** | A [sound FX](Sounds#the-sound-fx-of-an-asset) all its notes go through together, as one chain (#352): `Play pattern`, the tab, and a pattern item of a song that picks none. |
|
||||
| **Bus** | The [bus](Sounds#buses-and-the-master) a `Play pattern` and the tab play it on, *Master* while none is picked (#325). In a song the song's bus counts. |
|
||||
|
||||
Where a `Play pattern` and the tab are heard is said by the links of its node in the
|
||||
[Master routing](Sounds#master-routing) (#351). In a song the song's links count.
|
||||
|
||||
A note is a start and a length in ticks (480 to the quarter note, see
|
||||
[Playing in time](Instruments#playing-in-time)), a note number (60 is C4) and a velocity from 0 to 1.
|
||||
|
||||
+12
-8
@@ -16,8 +16,10 @@ inspector.
|
||||
| **Tempo (BPM)** | 20 to 400, quarter notes a minute. The song plays every pattern at this tempo; the tempo set on a pattern is only for its own tab. |
|
||||
| **Sign** | The time signature of the ruler (#363): 1/2, 2/2, 3/2, 1/4 to 6/4, or 5/8 to 9/8, 4/4 by default. Items are kept in ticks, so a change only moves the bar lines. |
|
||||
| **Grid** | What items snap to: **Bar** (the default), or one of the grids of a pattern, 1/1 to 1/32 and the triplets. The tab's header has the same choice. |
|
||||
| **Sound FX** | A [sound FX](Sounds#the-sound-fx-of-an-asset) the whole song goes through, after its tracks and the routing, before its bus (#352). `Play song` and the tab play through it. |
|
||||
| **Bus** | The [bus](Sounds#buses-and-the-master) a `Play song` and the tab play it on, *Master* while none is picked (#325). |
|
||||
| **Sound FX** | A [sound FX](Sounds#the-sound-fx-of-an-asset) the whole song goes through, after its tracks and the routing, before its links in the Master routing (#352). `Play song` and the tab play through it. |
|
||||
|
||||
Where a `Play song` and the tab are heard is said by the links of the song's node in the
|
||||
[Master routing](Sounds#master-routing) (#351). The *Output* of the song's own routing goes there.
|
||||
|
||||
One tempo and one meter hold for the whole song. A change of tempo within a song would come with
|
||||
automation (#337).
|
||||
@@ -133,7 +135,7 @@ below them.
|
||||
|
||||
**Routing** in the header shows the song as a graph instead of the timeline (#350): a node for
|
||||
every track, named after it, and one node **Output**. The output is what the song sounds like; from
|
||||
there it goes on to the [bus](Sounds#buses-and-the-master) of the song. It is the same graph editor
|
||||
there it goes on along the links of the song in the [Master routing](Sounds#master-routing). It is the same graph editor
|
||||
as for a sound FX, with zoom, undo, groups and comments. The magnet next to **Routing** snaps the
|
||||
nodes to the grid while it is lit. It is off at first and greyed out on the timeline, just as
|
||||
**Grid** is greyed out in the routing. **Timeline** goes back.
|
||||
@@ -204,7 +206,7 @@ above the heads shows the whole song (#359).
|
||||
-48 to +6 dBFS. Green, yellow from -6 dB, red past 0 dB. A line marks the loudest peak, it holds
|
||||
for 1.5 s and then falls.
|
||||
- **Where they measure:** a track after its sound FX, volume and pan, before its links. Out after
|
||||
the song's own sound FX, before the bus of the song and the master. Both measure before the
|
||||
the song's own sound FX, before the links of the song and the master. Both measure before the
|
||||
[limiter at the output](Sounds#buses-and-the-master), so they show what the mix would be without
|
||||
it.
|
||||
- **Clip lamp:** once a sample was past 0 dBFS, the far end of the meter stays red, through Stop
|
||||
@@ -272,8 +274,9 @@ sounds and their clips, the *Pattern* row its patterns, every sound FX pick its
|
||||
asset is deleted in the same undo step. A copied item keeps it in the clipboard, so a paste after
|
||||
the delete brings it back. *Duplicate* on the song copies everything it keeps to itself.
|
||||
- A click on its name in the inspector lights up its song in the Assets panel.
|
||||
- In the Sound tab of an embedded sound the rows *Loop* and *Bus* are left out: in a song an item
|
||||
repeats its sound as long as it is, and the track decides where it goes.
|
||||
- In the Sound tab of an embedded sound the row *Loop* is left out: in a song an item repeats its
|
||||
sound as long as it is. Where it goes the track decides, so it has no node in the
|
||||
[Master routing](Sounds#master-routing).
|
||||
- **Make project asset** (the item's menu) turns an embedded asset into an ordinary one; a name the
|
||||
project has already gets a number. **Embed a copy** goes the other way: the item plays a copy of
|
||||
its project asset that only the song has, to bend without touching the rest.
|
||||
@@ -289,7 +292,8 @@ song) and an item for it, one undo step, and opens it in the Pattern tab.
|
||||
else of the first one after it; on a track without one it has none yet.
|
||||
- It starts with the tempo and the sign of the song. From then on they are its own, as with a
|
||||
project pattern (#363): a change of the song's sign leaves its length alone, so its item is not
|
||||
cut or stretched. Its inspector leaves out only *Bus*, which the song decides.
|
||||
cut or stretched. Its inspector leaves out nothing. Where it goes the song decides, so it has no
|
||||
node in the [Master routing](Sounds#master-routing).
|
||||
- A project pattern embedded as a copy, or one pasted from another song, keeps its tempo and sign.
|
||||
|
||||
### A sound FX of its own
|
||||
@@ -358,7 +362,7 @@ Bitcrusher crushes the chord, and it costs one chain however many notes sound.
|
||||
per clip, then goes on through its track's.
|
||||
- **Which FX:** an item's FX and the song's are those of the [assets](Sounds#the-sound-fx-of-an-asset)
|
||||
(the pattern, the sound, the song) unless the item or the `Play song` picks another one or *None*
|
||||
(#352). In the tab the song's FX sits on a bus of the tab between the output and the song's bus.
|
||||
(#352). In the tab the song's FX sits on a bus of the tab between the output and the song's links.
|
||||
- A sound FX that is gone or does not compile passes everything on as it is.
|
||||
- Track and item FX play at the defaults of their parameters. Those of a `Play pattern` / `Play
|
||||
song` take `fx params`, and `Set sound FX parameters` moves them by the `playback`.
|
||||
|
||||
+52
-21
@@ -31,7 +31,6 @@ signature, so nothing a request claims can decide what is written.
|
||||
| **Volume** | How loud this sound is by itself, 0-1. |
|
||||
| **Loop** | Whether it is music: it repeats until something stops it. |
|
||||
| **Sound FX** | The [sound FX](#sound-fx) it goes through wherever it plays, none while none is picked (#352). See [The sound FX of an asset](#the-sound-fx-of-an-asset). |
|
||||
| **Bus** | The [bus](#buses-and-the-master) it is heard on, *Master* while none is picked (#325). |
|
||||
|
||||
The preview plays through the very same library a running game uses — same decode, same device —
|
||||
so what the inspector plays is what the graph will play.
|
||||
@@ -241,13 +240,15 @@ Every sound ends in the **master** (#325). Between a sound and the master there
|
||||
turns all of it up or down together, and its sound FX works on the sum: one compressor, one echo
|
||||
for everything on it.
|
||||
|
||||
**A bus is an asset** (`+` → *Audio* → *Bus*). Its inspector has three rows:
|
||||
**A bus is an asset** (`+` → *Audio* → *Bus*). Its inspector has two rows:
|
||||
|
||||
| Row | Meaning |
|
||||
| --- | --- |
|
||||
| **Volume** | How loud everything on it is, 0-1. |
|
||||
| **Sound FX** | A [sound FX](#sound-fx) all of it goes through as one chain, before the volume. Its [parameters](#parameters) start at their defaults. |
|
||||
| **Into** | The bus it goes on into, *Master* while none is picked. A bus can go into another one: *Drums* into *Music*, *Music* into the master. |
|
||||
|
||||
Where a bus goes on, and where a sound, an instrument, a pattern or a song is heard, is said in
|
||||
one place: the [Master routing](#master-routing).
|
||||
|
||||
**The master** is no asset. Its *Volume* and *Sound FX* are in **Project settings** under
|
||||
*Master*, so every project has exactly one. A new project has only the master; buses are made as
|
||||
@@ -261,20 +262,51 @@ so everything is heard 5 ms later. Playing a song or pattern, the playhead and a
|
||||
count that in. It needs the FX worklet. Until that is loaded, a moment after the first sound, the
|
||||
master goes straight out.
|
||||
|
||||
**No loops.** *Into* never offers the bus itself, nor a bus that already goes into it. Should a
|
||||
project still hold a loop (written by hand, say), the buses on it go into the master instead.
|
||||
### Master routing
|
||||
|
||||
**Menu → Master routing** opens a tab with one graph per project (#351). It works like the
|
||||
[routing of a song](Songs#routing), one level up:
|
||||
|
||||
- **A node per asset.** Every sound, instrument, pattern, song and bus of the project has one,
|
||||
named after it, and there is one **Master**. The nodes come and go with the assets: a new asset
|
||||
gets its node in a column for its type, linked to the master, and a deleted one takes its node
|
||||
and its links along. They cannot be added or deleted by hand. What a song keeps to itself
|
||||
(an embedded sound or pattern) has no node: its song routes it.
|
||||
- **Links are sends.** A drag from the out of a node into the in of a bus or of the master links
|
||||
them. A node may have several links, the same sound then goes everywhere it is linked at once:
|
||||
a step sound into *SFX* and, quieter, into a *Reverb* bus. Only a bus and the master take links
|
||||
in.
|
||||
- **Volume and Mode of a link** are in the inspector when it is picked: its level from -60 to
|
||||
+12 dB, 0 by default. A link out of a bus or a song also has a **Mode**, as on a track: after the
|
||||
volume (the default), after the sound FX but before the volume, or before the sound FX. A link
|
||||
out of a sound, an instrument or a pattern always takes it after the volume and the sound FX.
|
||||
- **No loops.** A link that would lead round to where it started is refused.
|
||||
- **A node without a link is never heard.** It says *Goes nowhere*, and the header counts how many
|
||||
do. A deleted bus leaves what went only into it on the master, so deleting a bus silences
|
||||
nothing.
|
||||
- **A click on a node** shows its asset in the inspector, as the asset panel would; on the master,
|
||||
its volume and sound FX, the same as in Project settings. **A double click** opens the asset's
|
||||
tab. `Fit` and the magnet in the header work as in every graph tab.
|
||||
|
||||
A project from before there was a routing has every asset linked to the master, which is how it
|
||||
always sounded.
|
||||
|
||||
**Which bus a sound is heard on.**
|
||||
|
||||
- Sounds, instruments, patterns and songs have a row **Bus**. Empty means the master. So a step
|
||||
sound is *SFX* everywhere it is played, and no node has to say so.
|
||||
- Where its node in the routing is linked. So a step sound is *SFX* everywhere it is played, and
|
||||
no node has to say so.
|
||||
- `Play sound`, `Play note`, `Play pattern` and `Play song` have an input `bus`. Left at
|
||||
*From the asset* it takes the bus the asset names. *Master* or a bus picked there overrules it.
|
||||
- What lies **inside** a song or a pattern is heard the way the song or pattern is: the bus of a
|
||||
sound placed on a track, or of the instrument of a pattern, does not count there. The order is
|
||||
the song's own (see [Songs](Songs#sound-fx-on-tracks-items-and-whole-songs)), then the bus of the
|
||||
song, then the buses it goes into, then the master.
|
||||
- A bus that was deleted leaves what named it on the master.
|
||||
*From the asset* it goes along the links of the asset. *Master* or a bus picked there overrules
|
||||
it: then it goes into that bus alone.
|
||||
- What lies **inside** a song or a pattern is heard the way the song or pattern is: the links of a
|
||||
sound placed on a track, or of the instrument of a pattern, do not count there. The order is
|
||||
the song's own (see [Songs](Songs#sound-fx-on-tracks-items-and-whole-songs)), then the links of
|
||||
the song, then the buses they go into, then the master.
|
||||
|
||||
**What it costs.** An asset with one link at 0 dB goes straight into its bus, as with no routing
|
||||
at all. Only one with more than one link, or another level, gets a bus of its own that all its
|
||||
voices go through, with the sends on it. Each send is held back as far as the latest way of the
|
||||
asset, so a bus with a Pitch on it does not make one way come later than the other.
|
||||
|
||||
**In the game.** `Set bus volume` changes a bus while the game runs, `Bus volume` reads it. The
|
||||
volume set holds for the rest of the run, the next scene included, over the volume of the asset.
|
||||
@@ -285,11 +317,11 @@ sound FX of the bus picked in its `bus` input instead, the master among them.
|
||||
**Pausing** with `Pause game` does nothing to the buses: sounds play on. A game that wants quiet
|
||||
in its pause menu sets a bus volume itself, for instance *SFX* to 0 while *Music* plays on.
|
||||
|
||||
**In the editor** the tabs play as the game does: the Sound tab through the sound FX and the bus of
|
||||
the sound, the Instrument tab through those of the instrument, the Pattern and Song tab through
|
||||
those of the pattern or song, all of it on through the master. So a compressor on the master is
|
||||
heard while editing, too. The Sound FX tab plays the sound it tries out on that sound's bus,
|
||||
through the FX in the tab instead of the sound's own.
|
||||
**In the editor** the tabs play as the game does: the Sound tab through the sound FX and along the
|
||||
links of the sound, the Instrument tab through those of the instrument, the Pattern and Song tab
|
||||
through those of the pattern or song, all of it on through the master. So a compressor on the
|
||||
master is heard while editing, too. The Sound FX tab plays the sound it tries out along that
|
||||
sound's links, through the FX in the tab instead of the sound's own.
|
||||
|
||||
**A Pitch on a bus or on the master** is allowed. It is late by one frame like every
|
||||
[Pitch on a bus](#a-pitch-on-a-bus), and notes of a song are started that much earlier.
|
||||
@@ -303,15 +335,14 @@ Input and the Output once each; their pins carry sound and fit nothing but each
|
||||
|
||||
### The sound FX of an asset
|
||||
|
||||
Sounds, instruments, patterns and songs have a row **Sound FX**, right above *Bus* (#352). Empty
|
||||
is none. What it does depends on the asset:
|
||||
Sounds, instruments, patterns and songs have a row **Sound FX** (#352). Empty is none. What it does depends on the asset:
|
||||
|
||||
| Asset | Goes through its Sound FX |
|
||||
| --- | --- |
|
||||
| **Sound** | every voice of it: `Play sound`, an item of a [song](Songs#items), the Sound tab. |
|
||||
| **Instrument** | every note, after what the [instrument](Instruments) graph does, as through a *Sound FX* node at its Output: `Play note`, every note of a pattern or song, the keys of its tab and of the Pattern tab. |
|
||||
| **Pattern** | all its notes **together**, as one chain: `Play pattern`, the Pattern tab, a pattern item of a song. |
|
||||
| **Song** | the whole song, after its tracks and the [routing](Songs#routing), before its bus: `Play song`, the Song tab. |
|
||||
| **Song** | the whole song, after its tracks and the [routing](Songs#routing), before its links in the [Master routing](#master-routing): `Play song`, the Song tab. |
|
||||
|
||||
`Play sound`, `Play note`, `Play pattern` and `Play song` have an input `fx`, and an item of a song
|
||||
a row *Sound FX*, with the same choice: **From the asset** (empty, the default) takes the row of the
|
||||
|
||||
Reference in new issue
Block a user