Seit #311 kann ein Sound FX Parameter am Input-Node deklarieren (Name + Default), und Play sound bekommt über einen Sound FX parameters-Node Werte dafür. Die Werte gelten aber nur ab dem Start der Stimme. Ändert sich der Wert danach, hört man davon nichts.
Gewünscht: einen Parameter an einer Stimme ändern, die schon läuft, z. B. ein Motorgeräusch, dessen Pitch dem Tempo folgt, oder ein Loop, der leiser wird.
Was es dafür bräuchte:
Play sound liefert einen Griff auf die gestartete Stimme (Ausgang), oder die Stimme wird über Objekt + Sound gefunden.
Ein Node, der Parameter an diesem Griff setzt (z. B. Set sound FX parameters, Eingänge: Stimme + Parameter-Bündel).
Im Player (SoundLibrary) müssen Gain, EQ-Bänder und playbackRate dann als AudioParam live nachgeführt werden, statt beim Start fest verdrahtet. Sanft gleiten (setTargetAtTime), damit es nicht knackt.
Offen: was ein Griff auf eine schon beendete Stimme tut (still nichts, vermutlich), und ob mehrere Stimmen desselben Sounds gemeinsam angesprochen werden sollen.
Abgezweigt aus #311.
Seit #311 kann ein Sound FX Parameter am Input-Node deklarieren (Name + Default), und `Play sound` bekommt über einen `Sound FX parameters`-Node Werte dafür. **Die Werte gelten aber nur ab dem Start der Stimme.** Ändert sich der Wert danach, hört man davon nichts.
Gewünscht: einen Parameter an einer Stimme ändern, die schon läuft, z. B. ein Motorgeräusch, dessen Pitch dem Tempo folgt, oder ein Loop, der leiser wird.
Was es dafür bräuchte:
- `Play sound` liefert einen Griff auf die gestartete Stimme (Ausgang), oder die Stimme wird über Objekt + Sound gefunden.
- Ein Node, der Parameter an diesem Griff setzt (z. B. `Set sound FX parameters`, Eingänge: Stimme + Parameter-Bündel).
- Im Player (`SoundLibrary`) müssen Gain, EQ-Bänder und `playbackRate` dann als `AudioParam` live nachgeführt werden, statt beim Start fest verdrahtet. Sanft gleiten (`setTargetAtTime`), damit es nicht knackt.
Offen: was ein Griff auf eine schon beendete Stimme tut (still nichts, vermutlich), und ob mehrere Stimmen desselben Sounds gemeinsam angesprochen werden sollen.
Umgesetzt in c7e9769, Doku im Wiki (Sounds → Changing a playing sound, f4de42b).
Was jetzt geht
Play sound hat einen neuen Ausgang voice: die Nummer genau dieses einen Abspielens, 0 wenn nichts gespielt wurde.
Neuer Action-Node Set sound FX parameters (voice, fx params). Er erreicht genau diese eine Stimme, auch eine detached gestartete. Zwei Abspielvorgänge desselben Sounds sind zwei Stimmen mit zwei Nummern.
Muster: On start → Play sound → Variables (EngineVoice = voice), dann On update → Set sound FX parameters mit voice aus EngineVoice.
Die Nummer gibt es sofort, auch während der Sound noch lädt, und sie wird pro Lauf nie zweimal vergeben. Eine beendete Stimme und voice 0 erreichen nichts. Eine wartende Stimme startet gleich mit den neuen Werten.
Jeder Wert gleitet per setTargetAtTime (30 ms Zeitkonstante, rund 0,1 s) zum Ziel. Ein unveränderter Wert wird nicht noch einmal geschickt, der Aufruf jeden Frame kostet also kaum etwas. Ein Parameter, der im Bündel fehlt, behält seinen aktuellen Wert.
Im Sound-FX-Tab hört man das Verschieben eines Parameterfelds sofort.
Abweichungen und Grenzen
Pitch auf einer laufenden Stimme ändert sich über die Abspielgeschwindigkeit. Eine neue WSOLA-Kopie mitten im Sound wird nicht gerechnet, die Stimme wird dabei also kürzer oder länger. Bei einem Loop hört man das nicht.
Eine Gain-/EQ-Stufe oder ein Mix, die von einem Parameter gespeist werden, bleiben in der Kette, auch bei 0 dB bzw. 0/1. Eingetippte Nullen fallen weiter weg.
Jeder Weg einer Stimme hat eine eigene Quelle, die verschobene Kopie teilen sie sich weiter.
Stop sound stoppt weiterhin nach Sound, also alle Stimmen davon. Ein Eingang voice dort wäre eine kleine Ergänzung.
Gegenprobe: Erreicht tune alle Stimmen derselben Datei (altes Verhalten), fällt der Test fürs Erreichen.
e2e 34 (melektaus-atx): ALL PASSED – 30 checks (+1). Im echten Chrome starten zwei loopende Stimmen desselben Sounds bei depth 7. Die, deren Nummer in einer Variable liegt, gleitet auf 0,7938 (Soll 2^(−4/12) = 0,7937), die andere bleibt bei 1.
Das Gate lief nur auf dem Stand vor der Stimmen-Nummer (CHECK EXIT 0, 241 Dateien, 3658 Tests), danach nicht mehr. Der CI-Lauf zu c7e9769 ist nicht abgewartet.
Ungeprüft: Gehört habe ich nichts, der Browser im Test ist stumm.
Umgesetzt in c7e9769, Doku im Wiki (*Sounds* → *Changing a playing sound*, f4de42b).
**Was jetzt geht**
- *Play sound* hat einen neuen Ausgang `voice`: die Nummer genau dieses einen Abspielens, 0 wenn nichts gespielt wurde.
- Neuer Action-Node **Set sound FX parameters** (`voice`, `fx params`). Er erreicht genau diese eine Stimme, auch eine *detached* gestartete. Zwei Abspielvorgänge desselben Sounds sind zwei Stimmen mit zwei Nummern.
- Muster: `On start` → *Play sound* → *Variables* (`EngineVoice` = `voice`), dann `On update` → *Set sound FX parameters* mit `voice` aus `EngineVoice`.
- Die Nummer gibt es sofort, auch während der Sound noch lädt, und sie wird pro Lauf nie zweimal vergeben. Eine beendete Stimme und `voice` 0 erreichen nichts. Eine wartende Stimme startet gleich mit den neuen Werten.
- Jeder Wert gleitet per `setTargetAtTime` (30 ms Zeitkonstante, rund 0,1 s) zum Ziel. Ein unveränderter Wert wird nicht noch einmal geschickt, der Aufruf jeden Frame kostet also kaum etwas. Ein Parameter, der im Bündel fehlt, behält seinen aktuellen Wert.
- Im Sound-FX-Tab hört man das Verschieben eines Parameterfelds sofort.
**Abweichungen und Grenzen**
- Pitch auf einer laufenden Stimme ändert sich über die Abspielgeschwindigkeit. Eine neue WSOLA-Kopie mitten im Sound wird nicht gerechnet, die Stimme wird dabei also kürzer oder länger. Bei einem Loop hört man das nicht.
- Eine Gain-/EQ-Stufe oder ein Mix, die von einem Parameter gespeist werden, bleiben in der Kette, auch bei 0 dB bzw. 0/1. Eingetippte Nullen fallen weiter weg.
- Jeder Weg einer Stimme hat eine eigene Quelle, die verschobene Kopie teilen sie sich weiter.
- *Stop sound* stoppt weiterhin nach Sound, also alle Stimmen davon. Ein Eingang `voice` dort wäre eine kleine Ergänzung.
**Tests**
- `soundfx.test.ts` 29 (+2), `sound-library.test.ts` 15 (+3), `node-catalog.test.ts` 370 (+2), `sounds` + `keep-on-scene-load` 31 unverändert, alle grün.
- Gegenprobe: Erreicht `tune` alle Stimmen derselben Datei (altes Verhalten), fällt der Test fürs Erreichen.
- e2e 34 (melektaus-atx): `ALL PASSED – 30 checks` (+1). Im echten Chrome starten zwei loopende Stimmen desselben Sounds bei depth 7. Die, deren Nummer in einer Variable liegt, gleitet auf 0,7938 (Soll 2^(−4/12) = 0,7937), die andere bleibt bei 1.
- Das Gate lief nur auf dem Stand vor der Stimmen-Nummer (CHECK EXIT 0, 241 Dateien, 3658 Tests), danach nicht mehr. Der CI-Lauf zu c7e9769 ist nicht abgewartet.
**Ungeprüft:** Gehört habe ich nichts, der Browser im Test ist stumm.
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.
Abgezweigt aus #311.
Seit #311 kann ein Sound FX Parameter am Input-Node deklarieren (Name + Default), und
Play soundbekommt über einenSound FX parameters-Node Werte dafür. Die Werte gelten aber nur ab dem Start der Stimme. Ändert sich der Wert danach, hört man davon nichts.Gewünscht: einen Parameter an einer Stimme ändern, die schon läuft, z. B. ein Motorgeräusch, dessen Pitch dem Tempo folgt, oder ein Loop, der leiser wird.
Was es dafür bräuchte:
Play soundliefert einen Griff auf die gestartete Stimme (Ausgang), oder die Stimme wird über Objekt + Sound gefunden.Set sound FX parameters, Eingänge: Stimme + Parameter-Bündel).SoundLibrary) müssen Gain, EQ-Bänder undplaybackRatedann alsAudioParamlive nachgeführt werden, statt beim Start fest verdrahtet. Sanft gleiten (setTargetAtTime), damit es nicht knackt.Offen: was ein Griff auf eine schon beendete Stimme tut (still nichts, vermutlich), und ob mehrere Stimmen desselben Sounds gemeinsam angesprochen werden sollen.
Umgesetzt in
c7e9769, Doku im Wiki (Sounds → Changing a playing sound, f4de42b).Was jetzt geht
voice: die Nummer genau dieses einen Abspielens, 0 wenn nichts gespielt wurde.voice,fx params). Er erreicht genau diese eine Stimme, auch eine detached gestartete. Zwei Abspielvorgänge desselben Sounds sind zwei Stimmen mit zwei Nummern.On start→ Play sound → Variables (EngineVoice=voice), dannOn update→ Set sound FX parameters mitvoiceausEngineVoice.voice0 erreichen nichts. Eine wartende Stimme startet gleich mit den neuen Werten.setTargetAtTime(30 ms Zeitkonstante, rund 0,1 s) zum Ziel. Ein unveränderter Wert wird nicht noch einmal geschickt, der Aufruf jeden Frame kostet also kaum etwas. Ein Parameter, der im Bündel fehlt, behält seinen aktuellen Wert.Abweichungen und Grenzen
voicedort wäre eine kleine Ergänzung.Tests
soundfx.test.ts29 (+2),sound-library.test.ts15 (+3),node-catalog.test.ts370 (+2),sounds+keep-on-scene-load31 unverändert, alle grün.tunealle Stimmen derselben Datei (altes Verhalten), fällt der Test fürs Erreichen.ALL PASSED – 30 checks(+1). Im echten Chrome starten zwei loopende Stimmen desselben Sounds bei depth 7. Die, deren Nummer in einer Variable liegt, gleitet auf 0,7938 (Soll 2^(−4/12) = 0,7937), die andere bleibt bei 1.c7e9769ist nicht abgewartet.Ungeprüft: Gehört habe ich nichts, der Browser im Test ist stumm.