Teil von #330. Ein Song ordnet Sounds und Patterns auf einer Zeitachse an, auf mehreren Spuren.
Datenmodell
Tempo (BPM), Taktart und Loop-Bereich.
Spuren, jede mit Name, Lautstärke (dB), Pan, Mute und Solo.
Items auf einer Spur, jedes mit Start und Länge in Ticks (#332):
Sound: ein Sound-Asset als Clip, optional mit einem Sound FX und einem Versatz in den Sound hinein. Ein Clip hat eine feste Länge in Sekunden und wird bei einem anderen Tempo nicht gestreckt.
Pattern: ein Pattern-Asset (#333). Ist das Item länger als das Pattern, wiederholt es sich. Dazu kommen Transponieren in Halbtönen und optional ein anderes Instrument.
Weitere Arten später, siehe Rückfragen.
Eine Spur nimmt jede Art von Item, auch gemischt.
Song-Tab
Spuren als Zeilen. Links der Kopf mit Name, Mute, Solo, Lautstärke und Pan, rechts die Zeitachse.
Items als Blöcke mit ihrem Namen. Ein Pattern zeigt seine Noten klein, ein Sound seine Wellenform.
Ziehen aus dem Projektbaum auf eine Spur legt ein Item an. Verschieben, Länge ändern, Duplizieren, Teilen und Löschen rasten am Takt oder Schlag ein, mit Alt frei.
Ein Doppelklick auf ein Pattern-Item öffnet das Pattern in der Piano Roll.
Ein Lineal mit Loop-Bereich und Playhead. Die Leertaste spielt ab dem Playhead.
Zoom und Scrollen.
Haken
Der Song-Tab ist neben der Piano Roll (#333) das zweite große Widget. Lineal, Zoom und Ziehen sollten die beiden teilen.
Mixer: Lautstärke und Pan pro Spur gehen ohne Bus. Ein Sound FX oder ein Hall pro Spur braucht den Bus aus #325.
Rückfragen
Weitere Item-Arten: ein Song im Song, oder ein Instrument mit einer gehaltenen Note (Drone)? Mein Vorschlag: zuerst nur Sound und Pattern.
Sound-Clips am Loop-Ende: Ein Clip läuft über das Loop-Ende hinaus. Wird er beim Sprung zum Loop-Start schnell ausgeblendet, oder klingt er aus?
Soll eine Spur ein festes Instrument haben, wie in vielen DAWs, oder entscheidet jedes Pattern-Item selbst?
Lautstärke und Pan zusätzlich pro Item, nicht nur pro Spur?
Marker im Lineal (Intro, Loop A, Boss)? Die würden später dem Game-Sync (#338) helfen.
Teil von #330. Ein Song ordnet Sounds und Patterns auf einer Zeitachse an, auf mehreren Spuren.
## Datenmodell
- **Tempo** (BPM), **Taktart** und **Loop-Bereich**.
- **Spuren**, jede mit Name, Lautstärke (dB), Pan, Mute und Solo.
- **Items** auf einer Spur, jedes mit Start und Länge in Ticks (#332):
- **Sound:** ein Sound-Asset als Clip, optional mit einem Sound FX und einem Versatz in den Sound hinein. Ein Clip hat eine feste Länge in Sekunden und wird bei einem anderen Tempo nicht gestreckt.
- **Pattern:** ein Pattern-Asset (#333). Ist das Item länger als das Pattern, wiederholt es sich. Dazu kommen Transponieren in Halbtönen und optional ein anderes Instrument.
- Weitere Arten später, siehe Rückfragen.
- Eine Spur nimmt jede Art von Item, auch gemischt.
## Song-Tab
- **Spuren als Zeilen.** Links der Kopf mit Name, Mute, Solo, Lautstärke und Pan, rechts die Zeitachse.
- **Items als Blöcke** mit ihrem Namen. Ein Pattern zeigt seine Noten klein, ein Sound seine Wellenform.
- Ziehen aus dem Projektbaum auf eine Spur legt ein Item an. Verschieben, Länge ändern, Duplizieren, Teilen und Löschen rasten am Takt oder Schlag ein, mit Alt frei.
- **Ein Doppelklick auf ein Pattern-Item** öffnet das Pattern in der Piano Roll.
- Ein Lineal mit Loop-Bereich und Playhead. Die Leertaste spielt ab dem Playhead.
- Zoom und Scrollen.
## Haken
- Der Song-Tab ist neben der Piano Roll (#333) das zweite große Widget. Lineal, Zoom und Ziehen sollten die beiden teilen.
- **Mixer:** Lautstärke und Pan pro Spur gehen ohne Bus. Ein Sound FX oder ein Hall pro Spur braucht den Bus aus #325.
## Rückfragen
- **Weitere Item-Arten:** ein Song im Song, oder ein Instrument mit einer gehaltenen Note (Drone)? Mein Vorschlag: zuerst nur Sound und Pattern.
- **Sound-Clips am Loop-Ende:** Ein Clip läuft über das Loop-Ende hinaus. Wird er beim Sprung zum Loop-Start schnell ausgeblendet, oder klingt er aus?
- Soll eine Spur ein festes Instrument haben, wie in vielen DAWs, oder entscheidet jedes Pattern-Item selbst?
- Lautstärke und Pan zusätzlich pro Item, nicht nur pro Spur?
- Marker im Lineal (*Intro*, *Loop A*, *Boss*)? Die würden später dem Game-Sync (#338) helfen.
meleki
added the new label 2026-10-06 07:02:13 +02:00
Asset Song über + → Song, im Panel unter Songs. Ein neuer Song hat 4 leere Spuren, 120 BPM, 4/4 und rastet am Takt ein. Im Inspector: Tempo, Beats per bar, Beat, Grid.
Spurköpfe: Name, M, S, Volume (-60 bis +6 dB) und Pan. Jede Spur hat einen eigenen Bus, Änderungen wirken sofort, auch auf Töne, die schon klingen. Mehrere Solo = alle hörbar. + Track unter der letzten Spur, Rechtsklick auf einen Kopf: Spur darüber/darunter, nach oben/unten, löschen.
Items: Patterns und Sounds zieht man aus dem Asset-Panel auf eine Spur, ein Rahmen zeigt vorher die Landestelle. Ein Pattern-Item zeigt Mini-Noten und wiederholt sein Pattern, ein Sound-Item zeigt die Wellenform und wiederholt den Sound in dessen eigener Geschwindigkeit. Ein fehlendes Asset bleibt rot als missing stehen und schweigt.
Bearbeiten: Körper verschiebt (auch auf andere Spuren), rechtes Ende verlängert, linkes Ende schneidet vorne ab (Versatz in Ticks bzw. Sekunden). Alt geht frei vom Raster. Strg+C/V/D/A, Strg+E teilt am Startpunkt, Entf, Rechtsklick, Pfeile. Doppelklick öffnet ein Pattern-Item in der Piano Roll. Jede Geste ist ein Undo-Schritt.
Inspector: Ein Item zeigt Asset und Volume, dazu Transpose und Instrument bzw. Sound FX. Eine Spur zeigt Name, Volume, Pan, Mute und Solo. Beides mit Knopf zum Löschen.
Abspielen: Space ab dem Startpunkt über den Scheduler aus #332, im Tempo des Songs, Pattern-Items ohne den Loop ihres Patterns. Startet man mitten in einem Sound-Clip, spielt er ab dieser Stelle, nach jedem Loop-Sprung genauso. Es spielt immer nur Song oder Pattern: Das eine stoppt das andere.
Lineal, Zoom und Scrollen kommen aus #333. Die Regeln sind reine Funktionen in src/core/music/song.ts, src/editor/song/songView.ts und songEdit.ts.
Abweichungen
Item-Volume geht nur bis 0 dB, weil der Player die Lautstärke einer Stimme auf 1 begrenzt. Lauter wird es über die Spur.
Assets ziehen: Das Asset-Panel hat bisher nur Assets gezogen, die eine Szene aufnehmen kann. Jetzt auch Patterns und Sounds. Über der Szene losgelassen steht dort „A pattern cannot be placed into a scene“, vorher hieß es bei jedem Asset fälschlich „A scene …“.
Funde unterwegs
Die Suites zu 4ea752f und 2a3b90b waren rot an e2e 54:Pattern hat Struct im +-Menü unter den sichtbaren Rand geschoben, das Modul ließ das Menü danach offen, dadurch fiel auch e2e 55. e2e 54 scrollt jetzt zu Struct, wie e2e 47 zu Vector art. Der Fix ist in 8f9c250.
Das M auf einem gemuteten Knopf war im Screenshot kaum lesbar. Behoben.
Im echten Chrome: Clip und Pattern bei Takt 3 lagen genau 4 s auseinander, die Noten des Patterns 1 s. Eine Spur auf -6 dB stand auf ihrem Bus bei 0,501. Mute während des Abspielens setzte den Bus auf 0.
Gegenproben: Aufnehmen mitten im Clip, Pattern-Versatz und Clip-Ende einzeln verbogen, es fallen 3, 1 und 1 Tests.
Nicht geprüft: gehört hat niemand etwas, Firefox lief nicht. Nicht im Browser angeklickt: das Spurmenü, Pan per Ziehen, Strg+C/V, die Pfeile, das Bearbeiten im Inspector. Ein Clip mit Sound FX bzw. Pitch lief nur im Unit-Test. Den CI-Lauf zu 8f9c250 habe ich nicht abgewartet.
Nicht dabei
Play song (#336), Automation (#337), Marker (#338), Make unique, FX pro Spur (#325), Ghost-Noten in der Piano Roll.
Umgesetzt in 8f9c250, Doku im Wiki unter [Songs](https://git.nockal.com/meleki/game-maker/wiki/Songs) (Wiki-Commit dd4bdc1).
## Entscheidungen aus der Fragerunde
| # | Frage | Antwort |
|---|---|---|
| 1 | Item-Arten | Nur Sound und Pattern. Song im Song und Drone später, falls gebraucht. |
| 2 | Instrument eines Pattern-Items | Das Item bestimmt. Standard ist das Instrument des Patterns. |
| 3 | Lautstärke und Pan pro Item | Lautstärke pro Item, Pan nur pro Spur |
| 4 | Sound-Item länger als sein Sound | Der Sound wiederholt sich bis zum Ende des Items |
| 5 | Sound-Clip über das Loop-Ende | Wird am Loop-Ende in 10 ms ausgeblendet |
| 6 | Marker im Lineal | Später mit #338 |
| 7 | Tempo- und Taktartwechsel | Nein, ein Tempo und eine Taktart pro Song |
| 8 | Item vom Pattern lösen (Make unique) | Später |
## Was es gibt
- **Asset *Song*** über **+ → Song**, im Panel unter *Songs*. Ein neuer Song hat 4 leere Spuren, 120 BPM, 4/4 und rastet am Takt ein. Im Inspector: *Tempo*, *Beats per bar*, *Beat*, *Grid*.
- **Spurköpfe:** Name, **M**, **S**, Volume (-60 bis +6 dB) und Pan. Jede Spur hat einen eigenen Bus, Änderungen wirken sofort, auch auf Töne, die schon klingen. Mehrere Solo = alle hörbar. **+ Track** unter der letzten Spur, Rechtsklick auf einen Kopf: Spur darüber/darunter, nach oben/unten, löschen.
- **Items:** Patterns und Sounds zieht man aus dem Asset-Panel auf eine Spur, ein Rahmen zeigt vorher die Landestelle. Ein Pattern-Item zeigt Mini-Noten und wiederholt sein Pattern, ein Sound-Item zeigt die Wellenform und wiederholt den Sound in dessen eigener Geschwindigkeit. Ein fehlendes Asset bleibt rot als *missing* stehen und schweigt.
- **Bearbeiten:** Körper verschiebt (auch auf andere Spuren), rechtes Ende verlängert, linkes Ende schneidet vorne ab (Versatz in Ticks bzw. Sekunden). Alt geht frei vom Raster. Strg+C/V/D/A, Strg+E teilt am Startpunkt, Entf, Rechtsklick, Pfeile. Doppelklick öffnet ein Pattern-Item in der Piano Roll. Jede Geste ist ein Undo-Schritt.
- **Inspector:** Ein Item zeigt Asset und Volume, dazu *Transpose* und *Instrument* bzw. *Sound FX*. Eine Spur zeigt Name, Volume, Pan, Mute und Solo. Beides mit Knopf zum Löschen.
- **Abspielen:** Space ab dem Startpunkt über den Scheduler aus #332, im Tempo des Songs, Pattern-Items ohne den Loop ihres Patterns. Startet man mitten in einem Sound-Clip, spielt er ab dieser Stelle, nach jedem Loop-Sprung genauso. Es spielt immer nur Song oder Pattern: Das eine stoppt das andere.
- Lineal, Zoom und Scrollen kommen aus #333. Die Regeln sind reine Funktionen in `src/core/music/song.ts`, `src/editor/song/songView.ts` und `songEdit.ts`.
## Abweichungen
- **Item-Volume geht nur bis 0 dB**, weil der Player die Lautstärke einer Stimme auf 1 begrenzt. Lauter wird es über die Spur.
- **Assets ziehen:** Das Asset-Panel hat bisher nur Assets gezogen, die eine Szene aufnehmen kann. Jetzt auch Patterns und Sounds. Über der Szene losgelassen steht dort „A pattern cannot be placed into a scene“, vorher hieß es bei jedem Asset fälschlich „A scene …“.
## Funde unterwegs
- **Die Suites zu 4ea752f und 2a3b90b waren rot an e2e 54:** *Pattern* hat *Struct* im **+**-Menü unter den sichtbaren Rand geschoben, das Modul ließ das Menü danach offen, dadurch fiel auch e2e 55. e2e 54 scrollt jetzt zu *Struct*, wie e2e 47 zu *Vector art*. Der Fix ist in 8f9c250.
- Das *M* auf einem gemuteten Knopf war im Screenshot kaum lesbar. Behoben.
## Tests
```
song.test.ts (neu, 14) + song-edit.test.ts (neu, 9) → grün
sound-library.test.ts (+5) → 62 grün
e2e 65 (neu, melektaus-atx) → ALL PASSED, 18 Checks
e2e 54+55 / e2e 4 (30 Asset-Typen) → ALL PASSED, 33 / 62 Checks
Gate (melektaus-atx) → CHECK EXIT 0, 250 Dateien, 3884 Tests
```
- Im echten Chrome: Clip und Pattern bei Takt 3 lagen genau 4 s auseinander, die Noten des Patterns 1 s. Eine Spur auf -6 dB stand auf ihrem Bus bei 0,501. Mute während des Abspielens setzte den Bus auf 0.
- Gegenproben: Aufnehmen mitten im Clip, Pattern-Versatz und Clip-Ende einzeln verbogen, es fallen 3, 1 und 1 Tests.
- **Nicht geprüft:** gehört hat niemand etwas, Firefox lief nicht. Nicht im Browser angeklickt: das Spurmenü, Pan per Ziehen, Strg+C/V, die Pfeile, das Bearbeiten im Inspector. Ein Clip mit Sound FX bzw. Pitch lief nur im Unit-Test. Den CI-Lauf zu 8f9c250 habe ich nicht abgewartet.
## Nicht dabei
*Play song* (#336), Automation (#337), Marker (#338), Make unique, FX pro Spur (#325), Ghost-Noten in der Piano Roll.
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.
Teil von #330. Ein Song ordnet Sounds und Patterns auf einer Zeitachse an, auf mehreren Spuren.
Datenmodell
Song-Tab
Haken
Rückfragen
Umgesetzt in
8f9c250, Doku im Wiki unter Songs (Wiki-Commit dd4bdc1).Entscheidungen aus der Fragerunde
Was es gibt
src/core/music/song.ts,src/editor/song/songView.tsundsongEdit.ts.Abweichungen
Funde unterwegs
4ea752fund2a3b90bwaren rot an e2e 54: Pattern hat Struct im +-Menü unter den sichtbaren Rand geschoben, das Modul ließ das Menü danach offen, dadurch fiel auch e2e 55. e2e 54 scrollt jetzt zu Struct, wie e2e 47 zu Vector art. Der Fix ist in8f9c250.Tests
8f9c250habe ich nicht abgewartet.Nicht dabei
Play song (#336), Automation (#337), Marker (#338), Make unique, FX pro Spur (#325), Ghost-Noten in der Piano Roll.