Teil von #330. Ein Pattern ist ein Stück Noten für ein Instrument (#331), bearbeitet in einer Piano Roll. Patterns sind eigene Assets. Mehrere Songs und Spuren können dasselbe Pattern verwenden.
Datenmodell
Noten: Start und Länge in Ticks (#332), Nummer 0–127 (#331), Velocity 0 bis 1.
Länge des Patterns in Takten und ein Raster (zum Beispiel 1/16) als Voreinstellung zum Zeichnen.
Instrument, mit dem das Pattern gespielt und vorgehört wird.
Piano Roll (Tab)
Links eine senkrechte Tastatur. Ein Klick spielt die Note. Zeilen, für die das Instrument nichts spielt, sind ausgegraut. Benannte Noten (Drum-Map, #331) zeigen ihren Namen.
Oben ein Lineal mit Takten und Schlägen, darin Playhead und Loop.
Im Raster:
Ein Klick zeichnet eine Note in Rasterlänge. Ziehen am rechten Rand ändert die Länge, Ziehen der Note verschiebt sie.
Rechteck-Auswahl, Shift-Klick zum Erweitern, Kopieren, Einfügen, Duplizieren, Löschen.
Pfeiltasten verschieben die Auswahl um einen Halbton oder einen Rasterschritt, mit Shift um eine Oktave oder einen Takt.
Alles rastet am Raster ein, mit Alt frei.
Velocity-Spur unten: ein Balken je Note, mit der Maus zu ziehen.
Zoom und Scrollen, waagrecht und senkrecht.
Abspielen: Die Leertaste startet und stoppt das Pattern im Loop über den Scheduler (#332). Eine neue Note ist zu hören, sobald der Playhead darüber läuft.
Undo und Redo über die bestehende Historie.
Haken
Die Piano Roll ist ein neues Widget im eigenen Canvas-Toolkit. Die Timeline der Animationen (src/editor/animation/TimelineCanvas.ts) kann Vorlage sein für Lineal, Zoom und Ziehen. Eine fertige Grundlage ist sie nicht.
Lineal, Zoom und Ziehen sollte sich die Piano Roll mit dem Song-Tab (#334) teilen.
Viele Noten: Ein langes Pattern in Sechzehnteln hat schnell einige hundert Noten. Gezeichnet wird nur, was sichtbar ist.
Spielt ein Song das Pattern gerade, während es bearbeitet wird, übernimmt der Song die Änderung über den Scheduler, ohne neu zu starten.
Rückfragen
Ein Instrument pro Pattern, oder darf jede Note ihr eigenes Instrument haben? Mein Vorschlag: eines pro Pattern. Ein Schlagzeug ist ein Instrument mit Drum-Kit (#331), und ein Song-Item kann ein anderes Instrument wählen (#334).
Tempo beim Vorhören im Pattern-Tab: ein eigenes Tempo am Pattern, oder eines für das ganze Projekt?
Welche Raster: 1/4 bis 1/32, dazu Triolen?
Dürfen Noten kürzer als das Raster sein, oder hält sich alles ans Raster?
Spuren unter den Noten für Werte pro Note, zum Beispiel Pitch-Bend oder ein Parameter des Instruments? Das wäre Automation (#337) im Pattern.
Sollen Noten anderer Patterns an derselben Stelle des Songs blass im Hintergrund erscheinen (Ghost-Noten)?
Teil von #330. Ein Pattern ist ein Stück Noten für ein Instrument (#331), bearbeitet in einer Piano Roll. Patterns sind eigene Assets. Mehrere Songs und Spuren können dasselbe Pattern verwenden.
## Datenmodell
- **Noten:** Start und Länge in Ticks (#332), Nummer 0–127 (#331), Velocity 0 bis 1.
- **Länge** des Patterns in Takten und ein **Raster** (zum Beispiel 1/16) als Voreinstellung zum Zeichnen.
- **Instrument**, mit dem das Pattern gespielt und vorgehört wird.
## Piano Roll (Tab)
- **Links eine senkrechte Tastatur.** Ein Klick spielt die Note. Zeilen, für die das Instrument nichts spielt, sind ausgegraut. Benannte Noten (Drum-Map, #331) zeigen ihren Namen.
- **Oben ein Lineal** mit Takten und Schlägen, darin Playhead und Loop.
- **Im Raster:**
- Ein Klick zeichnet eine Note in Rasterlänge. Ziehen am rechten Rand ändert die Länge, Ziehen der Note verschiebt sie.
- Rechteck-Auswahl, Shift-Klick zum Erweitern, Kopieren, Einfügen, Duplizieren, Löschen.
- Pfeiltasten verschieben die Auswahl um einen Halbton oder einen Rasterschritt, mit Shift um eine Oktave oder einen Takt.
- Alles rastet am Raster ein, mit Alt frei.
- **Velocity-Spur unten:** ein Balken je Note, mit der Maus zu ziehen.
- **Zoom und Scrollen**, waagrecht und senkrecht.
- **Abspielen:** Die Leertaste startet und stoppt das Pattern im Loop über den Scheduler (#332). Eine neue Note ist zu hören, sobald der Playhead darüber läuft.
- Undo und Redo über die bestehende Historie.
## Haken
- Die Piano Roll ist ein neues Widget im eigenen Canvas-Toolkit. Die Timeline der Animationen (`src/editor/animation/TimelineCanvas.ts`) kann Vorlage sein für Lineal, Zoom und Ziehen. Eine fertige Grundlage ist sie nicht.
- Lineal, Zoom und Ziehen sollte sich die Piano Roll mit dem Song-Tab (#334) teilen.
- **Viele Noten:** Ein langes Pattern in Sechzehnteln hat schnell einige hundert Noten. Gezeichnet wird nur, was sichtbar ist.
- Spielt ein Song das Pattern gerade, während es bearbeitet wird, übernimmt der Song die Änderung über den Scheduler, ohne neu zu starten.
## Rückfragen
- **Ein Instrument pro Pattern**, oder darf jede Note ihr eigenes Instrument haben? Mein Vorschlag: eines pro Pattern. Ein Schlagzeug ist ein Instrument mit Drum-Kit (#331), und ein Song-Item kann ein anderes Instrument wählen (#334).
- **Tempo beim Vorhören** im Pattern-Tab: ein eigenes Tempo am Pattern, oder eines für das ganze Projekt?
- Welche Raster: 1/4 bis 1/32, dazu Triolen?
- Dürfen Noten kürzer als das Raster sein, oder hält sich alles ans Raster?
- Spuren unter den Noten für Werte pro Note, zum Beispiel Pitch-Bend oder ein Parameter des Instruments? Das wäre Automation (#337) im Pattern.
- Sollen Noten anderer Patterns an derselben Stelle des Songs blass im Hintergrund erscheinen (Ghost-Noten)?
meleki
added the new label 2026-10-06 07:02:12 +02:00
Kein Tracker-Spiel. Vorhören per Klick auf die Tastatur links und beim Zeichnen oder Verschieben.
Was es gibt
Asset Pattern über + → Pattern. Im Inspector: Instrument, Length (bars), Grid, Beats per bar, Beat, Tempo (BPM). Noten liegen in Ticks (480 pro Viertel), die Taktart verschiebt nur die Taktstriche.
Der Tab: links die Tastatur (stumme Tasten grau, Drum-Namen auf ihren Tasten), oben das Lineal mit Takten, Loop und Startpunkt, in der Mitte das Notenraster, unten die Velocity-Spur. Im Kopf Play/Stop, Grid und Fit.
Bearbeiten: Klick zeichnet, Zug über leere Fläche wählt per Rechteck (Shift ergänzt). Körper ziehen verschiebt, rechtes Ende ändert die Länge, Alt geht frei vom Raster. Rechtsklick löscht.
Tasten: Space spielt, Entf, Strg+C/V/D/A, Pfeile um einen Halbton bzw. einen Rasterschritt, mit Shift um eine Oktave bzw. einen Takt. Einfügen landet am Startpunkt, die Zwischenablage gilt über Patterns hinweg. Jede Geste ist ein Undo-Schritt.
Lineal: Klick setzt den Startpunkt, Ziehen setzt den Loop oder verschiebt eines seiner Enden. Das Menü loopt einen Takt oder das ganze Pattern.
Abspielen über den Scheduler aus #332. Änderungen wirken ab dem nächsten Fenster, ohne Neustart. Wird die Länge kürzer, bleiben die Noten dahinter blass erhalten und klingen nicht.
Zeitachse und Lineal sind eigene Bausteine (src/editor/music/), der Song-Tab (#334) nutzt sie wieder.
Abweichungen
Asset-Panel: Statt einer Gruppe Music gibt es die Gruppen Instruments und Patterns, weil eine Gruppe je Asset-Typ vorgesehen ist.
Mausrad: Strg+Rad bleibt beim Browser (Pixi hört das Rad nur passiv ab). Das Rad scrollt senkrecht, mit Shift waagrecht. Über dem Lineal oder mit Alt zoomt es die Zeit, mit Alt über der Tastatur die Zeilenhöhe.
Das Abspielen läuft beim Tab-Wechsel weiter, damit man am Instrument drehen und gleich hören kann. Es stoppt, wenn ein anderes Pattern gezeigt oder ein Projekt geöffnet wird.
Velocity-Spur: Zieht man den Balken einer ausgewählten Note, ändern sich die anderen ausgewählten um denselben Betrag.
Funde unterwegs
Music.play konnte nach einem Stop noch starten, wenn der Stop kam, während die Dateien luden. Behoben mit einem Zähler.
Ein Klick auf ein Loop-Ende hätte den Loop neu gesetzt. Jetzt verschiebt sich das Ende erst beim Ziehen.
Bei 120 BPM wurden die Noten auf den Ticks 720/960/1440/1680 auf der Audio-Uhr genau 0 / 0,25 / 0,75 / 1 s auseinander eingeplant. Eine Note, die während des Spielens gezeichnet wurde, kam in der nächsten Runde.
Gegenproben: drei Unit-Stellen einzeln verbogen, je 1 Test fällt. Ohne Weitergabe der Änderungen an den Scheduler fällt in e2e 64 genau der Check zur Note, die während des Spielens gezeichnet wird.
Nicht geprüft: gehört hat niemand etwas, Firefox lief nicht. Nicht angeklickt: der Grid-Wähler im Kopf, Verschieben mit der mittleren Maustaste, Alt+Rad über der Tastatur, Shift-Klick, Rechteck mit Shift, Strg+V ohne Fokus in der Piano Roll. Den CI-Lauf zu 4ea752f habe ich nicht abgewartet.
Umgesetzt in 4ea752f, Doku im Wiki unter [Patterns](https://git.nockal.com/meleki/game-maker/wiki/Patterns) (Wiki-Commit 0610d7a).
## Entscheidungen aus der Fragerunde
| # | Frage | Antwort |
|---|---|---|
| 1 | Instrument | Eines pro Pattern |
| 2 | Tempo und Taktart | Eigene Felder am Pattern, nur zum Bearbeiten und Vorhören. Im Song zählt später dessen Tempo. |
| 3 | Raster | 1/1 bis 1/32 plus Triolen 1/4T bis 1/32T |
| 4 | Neben dem Raster | Ohne Taste rastet es ein, mit Alt frei auf den Tick. Eine Note ist mindestens 1 Tick lang. |
| 5 | Länge einer neuen Note | Die zuletzt benutzte, zu Beginn eine Rasterlänge. Velocity genauso, zu Beginn 0,8. |
| 6 | Spuren pro Note | Später mit #337, jetzt nur die Velocity-Spur |
| 7 | Ghost-Noten | Später mit #334 |
| 8 | Computer-Tastatur | Kein Tracker-Spiel. Vorhören per Klick auf die Tastatur links und beim Zeichnen oder Verschieben. |
## Was es gibt
- **Asset *Pattern*** über **+ → Pattern**. Im Inspector: *Instrument*, *Length (bars)*, *Grid*, *Beats per bar*, *Beat*, *Tempo (BPM)*. Noten liegen in Ticks (480 pro Viertel), die Taktart verschiebt nur die Taktstriche.
- **Der Tab:** links die Tastatur (stumme Tasten grau, Drum-Namen auf ihren Tasten), oben das Lineal mit Takten, Loop und Startpunkt, in der Mitte das Notenraster, unten die Velocity-Spur. Im Kopf *Play/Stop*, *Grid* und *Fit*.
- **Bearbeiten:** Klick zeichnet, Zug über leere Fläche wählt per Rechteck (Shift ergänzt). Körper ziehen verschiebt, rechtes Ende ändert die Länge, Alt geht frei vom Raster. Rechtsklick löscht.
- **Tasten:** Space spielt, Entf, Strg+C/V/D/A, Pfeile um einen Halbton bzw. einen Rasterschritt, mit Shift um eine Oktave bzw. einen Takt. Einfügen landet am Startpunkt, die Zwischenablage gilt über Patterns hinweg. Jede Geste ist ein Undo-Schritt.
- **Lineal:** Klick setzt den Startpunkt, Ziehen setzt den Loop oder verschiebt eines seiner Enden. Das Menü loopt einen Takt oder das ganze Pattern.
- **Abspielen** über den Scheduler aus #332. Änderungen wirken ab dem nächsten Fenster, ohne Neustart. Wird die Länge kürzer, bleiben die Noten dahinter blass erhalten und klingen nicht.
- Zeitachse und Lineal sind eigene Bausteine (`src/editor/music/`), der Song-Tab (#334) nutzt sie wieder.
## Abweichungen
- **Asset-Panel:** Statt einer Gruppe *Music* gibt es die Gruppen **Instruments** und **Patterns**, weil eine Gruppe je Asset-Typ vorgesehen ist.
- **Mausrad:** Strg+Rad bleibt beim Browser (Pixi hört das Rad nur passiv ab). Das Rad scrollt senkrecht, mit Shift waagrecht. Über dem Lineal oder mit Alt zoomt es die Zeit, mit Alt über der Tastatur die Zeilenhöhe.
- **Das Abspielen läuft beim Tab-Wechsel weiter**, damit man am Instrument drehen und gleich hören kann. Es stoppt, wenn ein anderes Pattern gezeigt oder ein Projekt geöffnet wird.
- **Velocity-Spur:** Zieht man den Balken einer ausgewählten Note, ändern sich die anderen ausgewählten um denselben Betrag.
## Funde unterwegs
- `Music.play` konnte nach einem Stop noch starten, wenn der Stop kam, während die Dateien luden. Behoben mit einem Zähler.
- Ein Klick auf ein Loop-Ende hätte den Loop neu gesetzt. Jetzt verschiebt sich das Ende erst beim Ziehen.
## Tests
```
pattern.test.ts (neu, 9) + piano-roll.test.ts (neu, 16) → grün
e2e 64 (neu, melektaus-atx) → ALL PASSED, 20 Checks
e2e 4 (29 Asset-Typen) → ALL PASSED, 62 Checks
Gate (melektaus-atx) → CHECK EXIT 0, 247 Dateien, 3839 Tests
```
- Bei 120 BPM wurden die Noten auf den Ticks 720/960/1440/1680 auf der Audio-Uhr genau 0 / 0,25 / 0,75 / 1 s auseinander eingeplant. Eine Note, die während des Spielens gezeichnet wurde, kam in der nächsten Runde.
- Gegenproben: drei Unit-Stellen einzeln verbogen, je 1 Test fällt. Ohne Weitergabe der Änderungen an den Scheduler fällt in e2e 64 genau der Check zur Note, die während des Spielens gezeichnet wird.
- **Nicht geprüft:** gehört hat niemand etwas, Firefox lief nicht. Nicht angeklickt: der *Grid*-Wähler im Kopf, Verschieben mit der mittleren Maustaste, Alt+Rad über der Tastatur, Shift-Klick, Rechteck mit Shift, Strg+V ohne Fokus in der Piano Roll. Den CI-Lauf zu 4ea752f habe ich nicht abgewartet.
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 Pattern ist ein Stück Noten für ein Instrument (#331), bearbeitet in einer Piano Roll. Patterns sind eigene Assets. Mehrere Songs und Spuren können dasselbe Pattern verwenden.
Datenmodell
Piano Roll (Tab)
Haken
src/editor/animation/TimelineCanvas.ts) kann Vorlage sein für Lineal, Zoom und Ziehen. Eine fertige Grundlage ist sie nicht.Rückfragen
Umgesetzt in
4ea752f, Doku im Wiki unter Patterns (Wiki-Commit 0610d7a).Entscheidungen aus der Fragerunde
Was es gibt
src/editor/music/), der Song-Tab (#334) nutzt sie wieder.Abweichungen
Funde unterwegs
Music.playkonnte nach einem Stop noch starten, wenn der Stop kam, während die Dateien luden. Behoben mit einem Zähler.Tests
4ea752fhabe ich nicht abgewartet.