Aus #156, Durchgang 5. In #336 als „nicht dabei“ vermerkt.
Herkunft
#336, Kommentar 3431 (Play pattern): „Kein tempo-Eingang und kein Ereignis ‚Pattern ist fertig‘. Beides lässt sich nachrüsten.“
#336, Abschluss 3489, Nicht dabei: „Ereignis ‚Song ist fertig‘ …“
Problem
Ein Behavior erfährt nicht, wann ein Pattern oder Song zu Ende gespielt hat. Es gibt dafür weder ein Ereignis noch einen Node zum Fragen.
Die Abspielungen wissen es selbst: Playbacks.has(id) (src/core/music/playbacks.ts:131) sagt, ob eines noch zu hören ist. current() (Z. 150) räumt fertige (scheduler.done) still weg.
Gebraucht wird das zum Beispiel, um nach einem Song ohne Loop den nächsten zu starten oder nach einem Jingle („Level geschafft“) erst weiterzumachen, wenn er durch ist.
Heute geht das nur über eine selbst gerechnete Länge mit Timer, und die stimmt nicht mehr, sobald sich Tempo oder Länge ändern.
Vorschlag
Ereignis On music finished mit den Feldern Song und Pattern (leer = jedes) und dem Eingang playback (verbunden = genau dieses). Ausgänge playback und stopped (wahr, wenn es per Stop song/Stop pattern oder Szenenende endete statt von selbst).
Node Music playing (playback → Bool) zum Fragen statt Warten.
Vorbild ist On animation finished (src/core/graph/nodes/events/OnAnimationFinished.ts).
Gezählt wird wie bei has: Fertig ist es, wenn nichts mehr zu hören ist, also nach dem Nachklang und nach einem Fade-out.
Offen (mit Vorschlag)
Ein Ereignis für Song und Pattern, oder je eines? Vorschlag: eines, die Felder filtern.
Auch für Play sound? Eine Stimme hat ihr voice. Vorschlag: nicht hier. Bei Sounds reicht heute length/tail an Play sound.
Zeit: Das Ereignis läuft in Spielzeit und kommt bis zu einem Frame nach dem letzten Ton, wie in #338 unter Haken beschrieben. Vorschlag: so lassen. Wer genau im Takt anschließen will, nimmt dann Quantize aus #338.
Teil von #338 (Game-Sync)? Vorschlag: eigenes Issue, weil es ohne Marker und Takt-Events auskommt und vorher fertig sein kann.
Fertig, wenn
Unit-Test: Ein Song ohne Loop löst das Ereignis genau einmal aus, mit stopped falsch. Nach Stop song kommt es mit stopped wahr, ein Song mit Loop löst es nie von selbst aus. Dazu eine Gegenprobe.
e2e 65: Ein Behavior startet nach dem Ende eines kurzen Songs einen zweiten, gemessen an der Liste der Abspielungen.
Aus #156, Durchgang 5. In #336 als „nicht dabei“ vermerkt.
## Herkunft
- #336, Kommentar 3431 (*Play pattern*): „Kein `tempo`-Eingang und kein Ereignis ‚Pattern ist fertig‘. Beides lässt sich nachrüsten.“
- #336, Abschluss 3489, *Nicht dabei*: „Ereignis ‚Song ist fertig‘ …“
## Problem
Ein Behavior erfährt nicht, wann ein Pattern oder Song zu Ende gespielt hat. Es gibt dafür weder ein Ereignis noch einen Node zum Fragen.
- Die Abspielungen wissen es selbst: `Playbacks.has(id)` (`src/core/music/playbacks.ts:131`) sagt, ob eines noch zu hören ist. `current()` (Z. 150) räumt fertige (`scheduler.done`) still weg.
- Gebraucht wird das zum Beispiel, um nach einem Song ohne Loop den nächsten zu starten oder nach einem Jingle („Level geschafft“) erst weiterzumachen, wenn er durch ist.
- Heute geht das nur über eine selbst gerechnete Länge mit Timer, und die stimmt nicht mehr, sobald sich Tempo oder Länge ändern.
## Vorschlag
- **Ereignis *On music finished*** mit den Feldern *Song* und *Pattern* (leer = jedes) und dem Eingang `playback` (verbunden = genau dieses). Ausgänge `playback` und `stopped` (wahr, wenn es per *Stop song*/*Stop pattern* oder Szenenende endete statt von selbst).
- **Node *Music playing*** (`playback` → Bool) zum Fragen statt Warten.
- Vorbild ist `On animation finished` (`src/core/graph/nodes/events/OnAnimationFinished.ts`).
- Gezählt wird wie bei `has`: Fertig ist es, wenn nichts mehr zu hören ist, also nach dem Nachklang und nach einem Fade-out.
## Offen (mit Vorschlag)
1. **Ein Ereignis für Song und Pattern, oder je eines?** Vorschlag: **eines**, die Felder filtern.
2. **Auch für *Play sound*?** Eine Stimme hat ihr `voice`. Vorschlag: **nicht hier**. Bei Sounds reicht heute `length`/`tail` an *Play sound*.
3. **Zeit:** Das Ereignis läuft in Spielzeit und kommt bis zu einem Frame nach dem letzten Ton, wie in #338 unter *Haken* beschrieben. Vorschlag: so lassen. Wer genau im Takt anschließen will, nimmt dann *Quantize* aus #338.
4. **Teil von #338 (Game-Sync)?** Vorschlag: **eigenes Issue**, weil es ohne Marker und Takt-Events auskommt und vorher fertig sein kann.
## Fertig, wenn
- Unit-Test: Ein Song ohne Loop löst das Ereignis genau einmal aus, mit `stopped` falsch. Nach *Stop song* kommt es mit `stopped` wahr, ein Song mit Loop löst es nie von selbst aus. Dazu eine Gegenprobe.
- e2e 65: Ein Behavior startet nach dem Ende eines kurzen Songs einen zweiten, gemessen an der Liste der Abspielungen.
meleki
added the new label 2026-10-09 14:42:27 +02:00
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.
Aus #156, Durchgang 5. In #336 als „nicht dabei“ vermerkt.
Herkunft
tempo-Eingang und kein Ereignis ‚Pattern ist fertig‘. Beides lässt sich nachrüsten.“Problem
Ein Behavior erfährt nicht, wann ein Pattern oder Song zu Ende gespielt hat. Es gibt dafür weder ein Ereignis noch einen Node zum Fragen.
Playbacks.has(id)(src/core/music/playbacks.ts:131) sagt, ob eines noch zu hören ist.current()(Z. 150) räumt fertige (scheduler.done) still weg.Vorschlag
playback(verbunden = genau dieses). Ausgängeplaybackundstopped(wahr, wenn es per Stop song/Stop pattern oder Szenenende endete statt von selbst).playback→ Bool) zum Fragen statt Warten.On animation finished(src/core/graph/nodes/events/OnAnimationFinished.ts).has: Fertig ist es, wenn nichts mehr zu hören ist, also nach dem Nachklang und nach einem Fade-out.Offen (mit Vorschlag)
voice. Vorschlag: nicht hier. Bei Sounds reicht heutelength/tailan Play sound.Fertig, wenn
stoppedfalsch. Nach Stop song kommt es mitstoppedwahr, ein Song mit Loop löst es nie von selbst aus. Dazu eine Gegenprobe.vorschläge passen fast. 2. auch mitmachen, also auch ein event für sound finished