Song: eingebettete Sounds, Patterns und Sound FX #355

Closed
opened 2026-10-08 09:55:36 +02:00 by meleki · 1 comment
Owner

Wunsch: Im Song soll man eingebettet arbeiten können. Ein Sound, ein Pattern oder ein Sound FX entsteht direkt im Song, gehört nur ihm und taucht nicht im Asset-Browser auf. Geöffnet und bearbeitet wird es trotzdem wie ein Asset.

  • Aufnahme: Ein Take wird ein eingebetteter Sound statt ein Asset. Ein Doppelklick auf das Item öffnet ihn im Sound-Tab, dort gehen Reverse, Schnitt, Fade-in und Fade-out wie gewohnt.
  • Create pattern: Rechtsklick auf eine Stelle in einer Spur legt dort ein eingebettetes Pattern an.
  • Eigenes Sound FX: Song, Spur und Item können ein eigenes Sound FX bekommen, das nur für dieses eine Objekt gilt.

Festlegungen (mit dem User abgestimmt)

Speicherung: Ein eingebettetes Asset bleibt ein normales Asset in project.assets und bekommt ein Feld owner mit der Id des Songs.

  • Alles, was ein Asset über die Id findet, geht damit ohne Umbau: Wiedergabe im Song, Play song im Spiel, Vorhören, Cache, die Tabs, Release-Dateien.
  • Ausgeblendet wird es dort, wo Assets aufgelistet werden: Asset-Browser, alle Picker (auch die der Play-Nodes), „Used by“ und die Namensvergabe.
  • Die Alternative (alles im Song selbst speichern) hätte jede Stelle umgebaut, die ein Asset über findAsset sucht. Verworfen.

Regeln:

  1. Ein eingebettetes Asset hat genau einen Benutzer: den Song, eine Spur oder ein Item.
  2. Duplizieren, Kopieren/Einfügen und Teilen eines Items kopieren das eingebettete Asset mit. Stellt man die eine Hälfte einer geteilten Aufnahme auf Reverse, bleibt die andere, wie sie war. Die Audiodatei wird dabei nicht verdoppelt, die Dateien liegen nach Inhalt ab.
  3. Lebensdauer: Das Asset verschwindet mit seinem Benutzer, im selben Undo-Schritt. Das gilt fürs Löschen eines Items oder einer Spur, für die Wahl eines anderen Sound FX und fürs Löschen des Songs. Duplicate am Song kopiert alles Eingebettete mit.
  4. Kennzeichnung: Eingebettete Items bekommen ein kleines Zeichen im Label der Timeline. Der Tab-Titel nennt den Song mit. Der Ping (#353) zeigt bei einem eingebetteten Asset auf den Song.
  5. Make project asset im Kontextmenü macht aus einem eingebetteten ein normales Asset.
  6. Umgekehrt kann man ein Projekt-Asset an einem Item einbetten (eigene Kopie zum Verbiegen), mit derselben Mechanik.
  7. Die bestehenden Takes in cbbf160bb7e8 bleiben Assets. Mit Punkt 6 kann der User sie selbst einbetten.

Die drei Teile:

Teil Was passiert
Aufnahme Ein Take wird eingebettet. Name „Take 1“, 2, … gezählt pro Song. Doppelklick öffnet den Sound-Tab.
Create pattern Rechtsklick auf eine leere Stelle in einer Spur. Das Item beginnt am Raster bei der Klickstelle und ist 1 Takt lang, das Pattern auch. Instrument: das des letzten Pattern-Items auf dieser Spur, sonst leer. Der Pattern-Tab geht gleich auf. Tempo und Taktart kommen vom Song.
Eigenes Sound FX Im Sound-FX-Menü von Song, Spur und Item gibt es Create sound FX. Es entsteht ein leeres FX (Input → Output), das gleich im Sound-FX-Tab aufgeht. Im Menü steht es dann als eigener Eintrag mit Edit.

In den Tabs eingebetteter Sounds und Patterns werden Zeilen ausgeblendet, die im Song nichts bewirken (beim Pattern sicher Tempo und Taktart). Welche es beim Sound genau sind, wird beim Bauen geprüft.

Bewusst nicht drin: eingebettete FX an Bus-Assets, Instrumente im Song, eine Audiodatei per Drag & Drop direkt in die Spur. Das kann jeweils ein eigenes Issue werden.

Zuschnitt: ein Issue, drei Commits.

  1. Unterbau (owner, Ausblenden, Lebensdauer, Kopieren, Make project asset/Embed) mit der Aufnahme
  2. Create pattern
  3. Eigene Sound FX an Song, Spur und Item
Wunsch: Im Song soll man **eingebettet** arbeiten können. Ein Sound, ein Pattern oder ein Sound FX entsteht direkt im Song, gehört nur ihm und taucht nicht im Asset-Browser auf. Geöffnet und bearbeitet wird es trotzdem wie ein Asset. - **Aufnahme:** Ein Take wird ein eingebetteter Sound statt ein Asset. Ein Doppelklick auf das Item öffnet ihn im Sound-Tab, dort gehen *Reverse*, Schnitt, Fade-in und Fade-out wie gewohnt. - **Create pattern:** Rechtsklick auf eine Stelle in einer Spur legt dort ein eingebettetes Pattern an. - **Eigenes Sound FX:** Song, Spur und Item können ein eigenes Sound FX bekommen, das nur für dieses eine Objekt gilt. ## Festlegungen (mit dem User abgestimmt) **Speicherung:** Ein eingebettetes Asset bleibt ein normales Asset in `project.assets` und bekommt ein Feld `owner` mit der Id des Songs. - Alles, was ein Asset über die Id findet, geht damit ohne Umbau: Wiedergabe im Song, *Play song* im Spiel, Vorhören, Cache, die Tabs, Release-Dateien. - Ausgeblendet wird es dort, wo Assets **aufgelistet** werden: Asset-Browser, alle Picker (auch die der Play-Nodes), „Used by“ und die Namensvergabe. - Die Alternative (alles im Song selbst speichern) hätte jede Stelle umgebaut, die ein Asset über `findAsset` sucht. Verworfen. **Regeln:** 1. Ein eingebettetes Asset hat **genau einen Benutzer**: den Song, eine Spur oder ein Item. 2. **Duplizieren, Kopieren/Einfügen und Teilen** eines Items kopieren das eingebettete Asset mit. Stellt man die eine Hälfte einer geteilten Aufnahme auf *Reverse*, bleibt die andere, wie sie war. Die Audiodatei wird dabei nicht verdoppelt, die Dateien liegen nach Inhalt ab. 3. **Lebensdauer:** Das Asset verschwindet mit seinem Benutzer, im selben Undo-Schritt. Das gilt fürs Löschen eines Items oder einer Spur, für die Wahl eines anderen Sound FX und fürs Löschen des Songs. *Duplicate* am Song kopiert alles Eingebettete mit. 4. **Kennzeichnung:** Eingebettete Items bekommen ein kleines Zeichen im Label der Timeline. Der Tab-Titel nennt den Song mit. Der Ping (#353) zeigt bei einem eingebetteten Asset auf den Song. 5. **Make project asset** im Kontextmenü macht aus einem eingebetteten ein normales Asset. 6. Umgekehrt kann man ein Projekt-Asset an einem Item **einbetten** (eigene Kopie zum Verbiegen), mit derselben Mechanik. 7. Die bestehenden Takes in `cbbf160bb7e8` bleiben Assets. Mit Punkt 6 kann der User sie selbst einbetten. **Die drei Teile:** | Teil | Was passiert | |---|---| | Aufnahme | Ein Take wird eingebettet. Name „Take 1“, 2, … gezählt pro Song. Doppelklick öffnet den Sound-Tab. | | Create pattern | Rechtsklick auf eine leere Stelle in einer Spur. Das Item beginnt am Raster bei der Klickstelle und ist 1 Takt lang, das Pattern auch. Instrument: das des letzten Pattern-Items auf dieser Spur, sonst leer. Der Pattern-Tab geht gleich auf. Tempo und Taktart kommen vom Song. | | Eigenes Sound FX | Im Sound-FX-Menü von Song, Spur und Item gibt es *Create sound FX*. Es entsteht ein leeres FX (Input → Output), das gleich im Sound-FX-Tab aufgeht. Im Menü steht es dann als eigener Eintrag mit *Edit*. | In den Tabs eingebetteter Sounds und Patterns werden Zeilen ausgeblendet, die im Song nichts bewirken (beim Pattern sicher *Tempo* und *Taktart*). Welche es beim Sound genau sind, wird beim Bauen geprüft. **Bewusst nicht drin:** eingebettete FX an Bus-Assets, Instrumente im Song, eine Audiodatei per Drag & Drop direkt in die Spur. Das kann jeweils ein eigenes Issue werden. **Zuschnitt:** ein Issue, drei Commits. 1. Unterbau (`owner`, Ausblenden, Lebensdauer, Kopieren, *Make project asset*/*Embed*) mit der Aufnahme 2. *Create pattern* 3. Eigene Sound FX an Song, Spur und Item
Author
Owner

Erledigt in drei Commits, alle gepusht.

Commits

Teil Repo Wiki
1 Unterbau + Aufnahme 23cb34f Keep a recorded take inside its song b2528a4
2 Create pattern 4966901 Make a pattern right in a song with a right-click 24c9362
3 Eigene Sound FX 668682c Give a song, a track or an item a sound FX of its own aa61d1f

Wie es gebaut ist

  • Eingebettet = normales Asset mit owner (Id des Songs), erlaubt für Sound, Pattern und Sound FX. Wiedergabe, Tabs und Spiel finden es über die Id wie bisher.
  • Genau ein Benutzer: Nach jeder Änderung am Song prüft SetSongCommand die eingebetteten Assets. Teilen, Ctrl+D und Einfügen geben dem zweiten Benutzer eine Kopie, was nichts mehr benutzt, verschwindet im selben Undo-Schritt.
  • Song löschen nimmt alles Eingebettete mit, Song duplizieren kopiert es.
  • Ausgeblendet in Asset-Browser, allen Pickern, FX-Menü der Spur, Testklang im Sound-FX-Tab und bei der Namensvergabe. Der Ping zeigt auf den Song.
  • Kennzeichnung: Tab-Titel „Song › Take 1“, Item-Label und Auswahlfelder mit • davor.
  • Menü des Items: Open, Make project asset bzw. Embed a copy, Delete.

Teil 1: Aufnahme

  • Der Take heißt „Take 1“, 2, …, gezählt pro Song. Doppelklick öffnet den Sound-Tab.
  • Am eingebetteten Sound fehlen Loop und Bus, im Song bestimmen Item und Spur beides.

Teil 2: Create pattern

  • Rechtsklick auf eine leere Stelle einer Spur → Create pattern: Item am Raster vor der Klickstelle, 1 Takt lang, Pattern „Pattern 1“, 2, … Der Pattern-Tab geht gleich auf, alles ein Undo-Schritt.
  • Instrument: das des letzten Pattern-Items davor auf der Spur, sonst das des ersten danach.
  • Tempo und Taktart kommen vom Song und ziehen bei Änderungen am Song mit. Ausgeblendet: Tempo, Beats per bar, Beat, Bus.

Teil 3: Eigene Sound FX

  • Create sound FX am Ende jeder Sound-FX-Auswahl im Song (Zeile von Song, Spur, Item und das Menü des FX-Knopfs am Spurkopf). Neues FX „Sound FX 1“, 2, … mit Input → Output, gleich gewählt und geöffnet.
  • Embed a copy gibt der Stelle eine Kopie eines Projekt-FX. Ist das eigene gewählt: Edit sound FX und Make project asset.
  • Etwas anderes wählen entfernt das eigene FX im selben Undo-Schritt, Ctrl+Z holt es zurück.

Abweichungen vom Plan

  • Beim eingebetteten Pattern ist auch Bus ausgeblendet, weil der Song den Bus eines Patterns nicht benutzt.
  • Das Zeichen ist • statt ◆: Die UI-Schrift hat kein Glyph für ◆ (Font-Test im Gate).

Tests

  • Unit embedded 18 grün, Unit own-fx 6 grün, je 6 Gegenproben rot
  • e2e 65 (melektaus-atx): ALL PASSED, 51 Checks (5 neu über die drei Teile)
  • Gate (melektaus-atx): CHECK EXIT 0, 270 Dateien, 4178 Tests

Nicht geprüft

  • wie es klingt
  • im Browser: Make project asset und Embed a copy, Teilen/Duplizieren/Einfügen, Song duplizieren/löschen, die ausgeblendeten Zeilen, das Mitziehen von Tempo und Taktart, die Sound-FX-Zeilen von Song und Item im Inspector. Das decken die Unit-Tests ab.
  • Den CI-Lauf zu 668682c habe ich nicht abgewartet.
Erledigt in drei Commits, alle gepusht. ## Commits | Teil | Repo | Wiki | |---|---|---| | 1 Unterbau + Aufnahme | `23cb34f` Keep a recorded take inside its song | `b2528a4` | | 2 Create pattern | `4966901` Make a pattern right in a song with a right-click | `24c9362` | | 3 Eigene Sound FX | `668682c` Give a song, a track or an item a sound FX of its own | `aa61d1f` | ## Wie es gebaut ist - **Eingebettet = normales Asset mit `owner`** (Id des Songs), erlaubt für Sound, Pattern und Sound FX. Wiedergabe, Tabs und Spiel finden es über die Id wie bisher. - **Genau ein Benutzer:** Nach jeder Änderung am Song prüft `SetSongCommand` die eingebetteten Assets. Teilen, `Ctrl+D` und Einfügen geben dem zweiten Benutzer eine Kopie, was nichts mehr benutzt, verschwindet im selben Undo-Schritt. - **Song löschen** nimmt alles Eingebettete mit, **Song duplizieren** kopiert es. - **Ausgeblendet** in Asset-Browser, allen Pickern, FX-Menü der Spur, Testklang im Sound-FX-Tab und bei der Namensvergabe. Der Ping zeigt auf den Song. - **Kennzeichnung:** Tab-Titel „Song › Take 1“, Item-Label und Auswahlfelder mit `•` davor. - **Menü des Items:** *Open*, *Make project asset* bzw. *Embed a copy*, *Delete*. ### Teil 1: Aufnahme - Der Take heißt „Take 1“, 2, …, gezählt pro Song. Doppelklick öffnet den Sound-Tab. - Am eingebetteten Sound fehlen *Loop* und *Bus*, im Song bestimmen Item und Spur beides. ### Teil 2: Create pattern - Rechtsklick auf eine leere Stelle einer Spur → *Create pattern*: Item am Raster vor der Klickstelle, 1 Takt lang, Pattern „Pattern 1“, 2, … Der Pattern-Tab geht gleich auf, alles ein Undo-Schritt. - Instrument: das des letzten Pattern-Items davor auf der Spur, sonst das des ersten danach. - Tempo und Taktart kommen vom Song und ziehen bei Änderungen am Song mit. Ausgeblendet: *Tempo*, *Beats per bar*, *Beat*, *Bus*. ### Teil 3: Eigene Sound FX - *Create sound FX* am Ende jeder Sound-FX-Auswahl im Song (Zeile von Song, Spur, Item und das Menü des **FX**-Knopfs am Spurkopf). Neues FX „Sound FX 1“, 2, … mit Input → Output, gleich gewählt und geöffnet. - *Embed a copy* gibt der Stelle eine Kopie eines Projekt-FX. Ist das eigene gewählt: *Edit sound FX* und *Make project asset*. - Etwas anderes wählen entfernt das eigene FX im selben Undo-Schritt, `Ctrl+Z` holt es zurück. ## Abweichungen vom Plan - Beim eingebetteten Pattern ist auch *Bus* ausgeblendet, weil der Song den Bus eines Patterns nicht benutzt. - Das Zeichen ist `•` statt `◆`: Die UI-Schrift hat kein Glyph für `◆` (Font-Test im Gate). ## Tests - Unit `embedded` 18 grün, Unit `own-fx` 6 grün, je 6 Gegenproben rot - e2e 65 (melektaus-atx): ALL PASSED, 51 Checks (5 neu über die drei Teile) - Gate (melektaus-atx): CHECK EXIT 0, 270 Dateien, 4178 Tests ## Nicht geprüft - wie es klingt - im Browser: *Make project asset* und *Embed a copy*, Teilen/Duplizieren/Einfügen, Song duplizieren/löschen, die ausgeblendeten Zeilen, das Mitziehen von Tempo und Taktart, die Sound-FX-Zeilen von Song und Item im Inspector. Das decken die Unit-Tests ab. - Den CI-Lauf zu `668682c` habe ich nicht abgewartet.
admin added this to the Development project 2026-10-08 11:53:35 +02:00
admin moved this to Next in Development on 2026-10-08 11:53:49 +02:00
admin moved this to Done in Development on 2026-10-08 11:53:54 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#355