momentan funktioniert sound fx nur bei sounds, sprich beim Play sound node als input.
ist es möglich einen sound fx anzuwenden bei:
behavior auch bei Play song, Play instrument und Play pattern?
song editor beim track bzw. bei einzelnen pattern items?
momentan funktioniert sound fx nur bei sounds, sprich beim `Play sound` node als input.
ist es möglich einen sound fx anzuwenden bei:
- behavior auch bei `Play song`, `Play instrument` und `Play pattern`?
- song editor beim track bzw. bei einzelnen pattern items?
admin
added this to the Development project 2026-10-07 11:15:22 +02:00
admin
moved this to Next in Development on 2026-10-07 11:15:28 +02:00
Plan (decisions from the chat: 1a, 2a, 3a, Pitch on a bus: c)
1a: one chain for the whole, like an insert in a DAW. A track, a pattern item and a Play pattern / Play song each send everything they play through one chain of the sound FX. A Phaser's LFO runs on across the notes, a Delay echoes the sum. (A sound FX graph has no Envelope node, so nothing there starts per note.)
2a: everywhere.
Track: a Sound FX per track, picked in the track's head (an FX box next to M and S) and in its inspector. Order: items → track FX → volume → pan.
Pattern item:Sound FX in its inspector, as for a sound item. The whole item goes through one chain, before the track FX.
Play pattern / Play song: inputs fx and fx params, on the master of the playing, after the tracks and before its volume and fade.
Play note: inputs fx and fx params. One note gets its own chain, as through a Sound FX node of the instrument, so a Pitch there moves the source itself with no latency. params stays for the instrument's parameters, the two do not mix.
3a:Set sound FX parameters also takes the number Play pattern, Play song and Play note hand out. On a note a name both the instrument and the FX have changes both. Track and item FX run at their defaults.
Pitch on a bus (c): a pitch shifter of its own for a running sound.
The Pitch of the file player (#317) reads the file and can look ahead. A bus has only what is playing now, so the new shifter buffers one frame first (the same phase vocoder with phase locking, 2048 samples, about 43 ms at 48 kHz) and is that much late. The latency is fixed, also at 0 semitones, so it can be made up exactly.
Inside a chain: a way of a Mix without a Pitch is delayed by the same amount, so an octave doubling (Pitch on one side only) stays together.
Across a song: every note and clip is started earlier by the latency of the buses it is heard through (item + track + master). Everything is then heard exactly where it was planned, tracks with and without a shifter in step with each other and with the playhead. The scheduler plans that much further ahead, and the first note waits that much longer after Play.
Sound items keep their own Sound FX per clip, as now.
## Plan (decisions from the chat: 1a, 2a, 3a, Pitch on a bus: c)
**1a: one chain for the whole, like an insert in a DAW.** A track, a pattern item and a `Play pattern` / `Play song` each send everything they play through **one** chain of the sound FX. A Phaser's LFO runs on across the notes, a Delay echoes the sum. (A sound FX graph has no Envelope node, so nothing there starts per note.)
**2a: everywhere.**
- **Track:** a *Sound FX* per track, picked in the track's head (an `FX` box next to `M` and `S`) and in its inspector. Order: items → track FX → volume → pan.
- **Pattern item:** *Sound FX* in its inspector, as for a sound item. The whole item goes through one chain, before the track FX.
- **`Play pattern` / `Play song`:** inputs `fx` and `fx params`, on the master of the playing, after the tracks and before its volume and fade.
- **`Play note`:** inputs `fx` and `fx params`. One note gets its own chain, as through a *Sound FX* node of the instrument, so a *Pitch* there moves the source itself with no latency. `params` stays for the instrument's parameters, the two do not mix.
**3a:** `Set sound FX parameters` also takes the number `Play pattern`, `Play song` and `Play note` hand out. On a note a name both the instrument and the FX have changes both. Track and item FX run at their defaults.
**Pitch on a bus (c): a pitch shifter of its own for a running sound.**
- The *Pitch* of the file player (#317) reads the file and can look ahead. A bus has only what is playing now, so the new shifter buffers one frame first (the same phase vocoder with phase locking, 2048 samples, about 43 ms at 48 kHz) and is that much late. The latency is fixed, also at 0 semitones, so it can be made up exactly.
- **Inside a chain:** a way of a Mix without a Pitch is delayed by the same amount, so an octave doubling (Pitch on one side only) stays together.
- **Across a song:** every note and clip is started earlier by the latency of the buses it is heard through (item + track + master). Everything is then heard exactly where it was planned, tracks with and without a shifter in step with each other and with the playhead. The scheduler plans that much further ahead, and the first note waits that much longer after Play.
Sound items keep their own *Sound FX* per clip, as now.
Track: Kästchen FX im Track-Kopf neben M und S, öffnet ein Menü mit den Sound FX des Projekts (blau, wenn gesetzt). Die gleiche Zeile steht im Inspector des Tracks. Reihenfolge: Items → Track-FX → Volume → Pan.
Pattern-Item:Sound FX im Inspector. Alle Noten des Items laufen über einen eigenen Bus in den Bus des Tracks.
Play pattern / Play song: Eingänge fx und fx params. Die Kette sitzt am Master des Playings, nach den Tracks und vor Volume und Fades.
Play note:fx und fx params neben params. Die FX-Parameter laufen intern unter fx:<name>, gleichnamige Parameter von Instrument und FX kommen sich nicht in die Quere. Ein Pitch darin verschiebt die Quelle selbst, ohne Latenz.
Set sound FX parameters nimmt auch die playback-Nummer von Pattern und Song.
Pitch-Shifter für Busse
Derselbe Phase-Vocoder wie beim Datei-Pitch, laufend gefüttert. Er ist bei jeder Tonhöhe genau 2048 Samples spät.
Ausgleich: In einem Mix wird der andere Weg um genau diese Zeit verzögert. Jede Note und jeder Clip startet um die Summe der Latenzen seiner Busse (Item + Track + Master) früher und ist damit genau an der geplanten Stelle zu hören. Der Scheduler plant entsprechend weiter voraus, nach Play kommt die erste Note um diese Latenz später.
Eigene Entscheidungen
FX-Auswahl im Track-Kopf als Menü, nicht als Dropdown (kein Platz für ein Feld).
Ändert Set sound FX parameters an einer Note einen Namen, den Instrument und FX beide haben, ändert sich beides.
Ein Pattern-Item, dessen FX nicht kompiliert, behält seinen Bus und reicht den Klang unverändert durch.
Korrektur zur Frage-Runde: Ein Sound-FX-Graph hat keinen Envelope-Node, der Punkt „Envelope startet einmal pro Playing“ war gegenstandslos.
Tests
Unit pitch-shifter (neu) → 11 grün; bei 0 Halbtönen Abweichung max. 1,2e-7
Unit sound-library → 84 grün (8 neu); 4 Gegenproben rot
Unit bus-fx (neu) → 6 grün; 4 Gegenproben rot
Unit Scheduler-Vorlauf → 1 neu; Gegenprobe rot
e2e 65 (melektaus-atx) → ALL PASSED – 35 Checks (4 neu)
Gate (melektaus-atx) → CHECK EXIT 0, 259 Dateien, 4021 Tests
e2e 65 (Chrome 44,1 kHz): Bus-Latenz 0,046440 s (= 2048/44100), die Note startete genau um diese Zeit früher, der Clip auf dem anderen Track pünktlich. Offline: 1 kHz → 2000 Hz, Klick bei 0 Halbtönen genau 2048 Samples später.
Nicht geprüft
Wie es klingt, und was der Shifter an CPU kostet.
Play song/Play pattern/Play note mit fx im echten Browser (nur Unit-Tests).
Für die e2e-Checks gab es keine Gegenprobe.
Erledigt in b519cd1 (Wiki: 39224a1).
## Was dazukommt
- **Track:** Kästchen `FX` im Track-Kopf neben `M` und `S`, öffnet ein Menü mit den Sound FX des Projekts (blau, wenn gesetzt). Die gleiche Zeile steht im Inspector des Tracks. Reihenfolge: Items → Track-FX → Volume → Pan.
- **Pattern-Item:** *Sound FX* im Inspector. Alle Noten des Items laufen über einen eigenen Bus in den Bus des Tracks.
- **`Play pattern` / `Play song`:** Eingänge `fx` und `fx params`. Die Kette sitzt am Master des Playings, nach den Tracks und vor Volume und Fades.
- **`Play note`:** `fx` und `fx params` neben `params`. Die FX-Parameter laufen intern unter `fx:<name>`, gleichnamige Parameter von Instrument und FX kommen sich nicht in die Quere. Ein *Pitch* darin verschiebt die Quelle selbst, ohne Latenz.
- **`Set sound FX parameters`** nimmt auch die `playback`-Nummer von Pattern und Song.
## Pitch-Shifter für Busse
- Derselbe Phase-Vocoder wie beim Datei-Pitch, laufend gefüttert. Er ist bei jeder Tonhöhe genau **2048 Samples** spät.
- **Ausgleich:** In einem Mix wird der andere Weg um genau diese Zeit verzögert. Jede Note und jeder Clip startet um die Summe der Latenzen seiner Busse (Item + Track + Master) früher und ist damit genau an der geplanten Stelle zu hören. Der Scheduler plant entsprechend weiter voraus, nach *Play* kommt die erste Note um diese Latenz später.
## Eigene Entscheidungen
- FX-Auswahl im Track-Kopf als Menü, nicht als Dropdown (kein Platz für ein Feld).
- Ändert `Set sound FX parameters` an einer Note einen Namen, den Instrument und FX beide haben, ändert sich beides.
- Ein Pattern-Item, dessen FX nicht kompiliert, behält seinen Bus und reicht den Klang unverändert durch.
- Korrektur zur Frage-Runde: Ein Sound-FX-Graph hat keinen Envelope-Node, der Punkt „Envelope startet einmal pro Playing“ war gegenstandslos.
## Tests
```
Unit pitch-shifter (neu) → 11 grün; bei 0 Halbtönen Abweichung max. 1,2e-7
Unit sound-library → 84 grün (8 neu); 4 Gegenproben rot
Unit bus-fx (neu) → 6 grün; 4 Gegenproben rot
Unit Scheduler-Vorlauf → 1 neu; Gegenprobe rot
e2e 65 (melektaus-atx) → ALL PASSED – 35 Checks (4 neu)
Gate (melektaus-atx) → CHECK EXIT 0, 259 Dateien, 4021 Tests
```
- e2e 65 (Chrome 44,1 kHz): Bus-Latenz 0,046440 s (= 2048/44100), die Note startete genau um diese Zeit früher, der Clip auf dem anderen Track pünktlich. Offline: 1 kHz → 2000 Hz, Klick bei 0 Halbtönen genau 2048 Samples später.
## Nicht geprüft
- Wie es klingt, und was der Shifter an CPU kostet.
- `Play song`/`Play pattern`/`Play note` mit `fx` im echten Browser (nur Unit-Tests).
- Für die e2e-Checks gab es keine Gegenprobe.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
momentan funktioniert sound fx nur bei sounds, sprich beim
Play soundnode als input.ist es möglich einen sound fx anzuwenden bei:
Play song,Play instrumentundPlay pattern?Plan (decisions from the chat: 1a, 2a, 3a, Pitch on a bus: c)
1a: one chain for the whole, like an insert in a DAW. A track, a pattern item and a
Play pattern/Play songeach send everything they play through one chain of the sound FX. A Phaser's LFO runs on across the notes, a Delay echoes the sum. (A sound FX graph has no Envelope node, so nothing there starts per note.)2a: everywhere.
FXbox next toMandS) and in its inspector. Order: items → track FX → volume → pan.Play pattern/Play song: inputsfxandfx params, on the master of the playing, after the tracks and before its volume and fade.Play note: inputsfxandfx params. One note gets its own chain, as through a Sound FX node of the instrument, so a Pitch there moves the source itself with no latency.paramsstays for the instrument's parameters, the two do not mix.3a:
Set sound FX parametersalso takes the numberPlay pattern,Play songandPlay notehand out. On a note a name both the instrument and the FX have changes both. Track and item FX run at their defaults.Pitch on a bus (c): a pitch shifter of its own for a running sound.
Sound items keep their own Sound FX per clip, as now.
Erledigt in
b519cd1(Wiki: 39224a1).Was dazukommt
FXim Track-Kopf nebenMundS, öffnet ein Menü mit den Sound FX des Projekts (blau, wenn gesetzt). Die gleiche Zeile steht im Inspector des Tracks. Reihenfolge: Items → Track-FX → Volume → Pan.Play pattern/Play song: Eingängefxundfx params. Die Kette sitzt am Master des Playings, nach den Tracks und vor Volume und Fades.Play note:fxundfx paramsnebenparams. Die FX-Parameter laufen intern unterfx:<name>, gleichnamige Parameter von Instrument und FX kommen sich nicht in die Quere. Ein Pitch darin verschiebt die Quelle selbst, ohne Latenz.Set sound FX parametersnimmt auch dieplayback-Nummer von Pattern und Song.Pitch-Shifter für Busse
Eigene Entscheidungen
Set sound FX parametersan einer Note einen Namen, den Instrument und FX beide haben, ändert sich beides.Tests
Nicht geprüft
Play song/Play pattern/Play notemitfxim echten Browser (nur Unit-Tests).