From eddfd07f5c5fb82e14bea5b7b1dbddbf6b4bf0a5 Mon Sep 17 00:00:00 2001 From: MelekTaus Date: Tue, 6 Oct 2026 21:42:37 +0200 Subject: [PATCH] Describe the Sound tab and cutting a sound (#343) - Sounds: new section The Sound tab, and Start, End and Edge fade in the property table. - Concepts, Home and Instruments: a sound plays the stretch it is cut to. - Development: 1840 checks. Co-Authored-By: Claude Opus 5.5 --- Concepts.md | 4 ++-- Development.md | 2 +- Home.md | 2 +- Instruments.md | 2 +- Sounds.md | 45 +++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/Concepts.md b/Concepts.md index d5cc36a..f879de3 100644 --- a/Concepts.md +++ b/Concepts.md @@ -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`, `instrument`, `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, mix) a `Play sound` can send it through. See [Sounds](Sounds). An **instrument** plays sounds as notes, see [Instruments](Instruments), and a **pattern** is notes for one, drawn in a piano roll, see [Patterns](Patterns). | +| **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. Its tab shows the wave and cuts the sound to a stretch of its file, which is then what plays everywhere. A **sound FX** asset is a graph of effects (gain, pitch, EQ, mix) a `Play sound` can send it through. See [Sounds](Sounds). An **instrument** plays sounds as notes, see [Instruments](Instruments), and a **pattern** is notes for one, drawn in a piano roll, see [Patterns](Patterns). | | **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). | @@ -234,7 +234,7 @@ group; folding the group the selected asset sits in lets go of the selection. A click on a row only selects (the inspector shows it, no tab moves); a **double-click** opens the asset as a document in a tab of its own (see **The tab row**) — a behavior, state machine, shader, particles, -texture, animation, tile or container — and on a scene switches to the Scene tab and makes it the +sound, texture, animation, tile or container — and on a scene switches to the Scene tab and makes it the active one. `Enter` does the same once the list has keyboard focus (`Tab`). A sprite, camera, text or collider has no tab of its own, so a double-click on one does nothing. Right-clicking a row offers *Set as active scene*, *Set as start scene* / *Clear start scene*, diff --git a/Development.md b/Development.md index b20adc5..c5dba75 100644 --- a/Development.md +++ b/Development.md @@ -18,7 +18,7 @@ php tests/php/accounts.test.php # the API's accoun # has and the web server's container has not (SKIP there) 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 -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1833 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1840 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 diff --git a/Home.md b/Home.md index dd99816..cd5d830 100644 --- a/Home.md +++ b/Home.md @@ -21,7 +21,7 @@ Live: · Widget playground: #~~`. The +library fetches and decodes the file once and makes the stretch from it the first time that name +plays: a copy of those samples with the ramps worked in. Length and waveform of a cut are read +from the file itself, without a copy. Copies are made again whenever they are needed, so the +library lets the oldest go once they hold more than 64 Mi samples together — a cut dragged about +in its tab leaves no pile of copies behind. A sound over the whole file is no cut at all and plays +the file as it always did; assets saved before the tab existed are such sounds. + +**Song items** keep their place and their length when their sound is cut anew: they play from the +new start, and one longer than the new stretch plays it round and round. ## Playing it