Přeskočit na obsah

Event Player ve Spectoda Studiu

Tvorba úplných per-ID Cue a upload jednoho statického player.show s deterministickými SEB řetězci pro firmware 0.12.11.

Event Player vytváří diskrétní změny eventových hodnot na společné timeline Projektu. Hodnoty lze editovat přímo nebo zachytit z nativního WASM EventStore. Studio ukládá editovatelný model do Projektu a kompiluje jej do NetworkStorage souborů pro přehrávání.

Editovatelným zdrojem je Event Player Project schema v2 uvnitř Studio Projektu. Obsahuje file base, délku, Tracky, persistované definice eventů, volby Capture, Cue a jejich hodnoty. Uložení a znovunačtení, duplikace, řešení konfliktů i export/import zachovávají authoring data.

Zkompilované <base>.show a .seb jsou deployment artefakty. Nejsou editovatelnou zálohou a nemají se měnit ručně. SEB obsahuje zakódované eventové hodnoty/záznamy; jejich landing vyvolá běžné zpracování EventStateUpdate přes EventStore.

  • Jeden Track patří právě jednomu unikátnímu Spectoda ID. Volitelný název Tracku je authoring metadata, ne event label.
  • Track ukládá definice eventů: label, valueType, priority, enabled a členství v Capture.
  • Cue je jeden čas timeline a úplná hodnota každého enabled eventu Tracku.
  • Na jednom Tracku smí být v jednom čase právě jedno Cue.
  • Každý enabled Track potřebuje úplné Cue v 0 ms.
  • Jedno úplné Cue smí obsahovat 1–340 eventových hodnot. Studio jej nikdy nerozdělí.

ID255 je globální Track a každý zapojený Controller jej vybírá automaticky. ID 0–254 jsou lokální Tracky; v Berry volání nastavte jen ID vlastněná daným Controllerem.

Event Player používá stejnou timeline a stejný transport jako Workspace. Nemá druhé hodiny ani vlastní Player start, pause, seek nebo loop příkaz.

  • Kliknutím na pravítko uděláte seek; při focusu fungují šipky, Home a End.
  • Rewind, Play, Pause a Space ovládají společnou timeline.
  • Dvojklikem do lane přidáte Cue.
  • Diamant Cue lze přetáhnout; tažením přes lanes vyberete skupinu.
  • Delete i Backspace smažou výběr. Hromadné smazání se nejdřív potvrdí.
  • Po rozbalení Tracku lze v připnutých řádcích editovat labely a hodnoty ovládacím prvkem podle jejich typu.

Když do již vyplněného Tracku přidáte event, potřebuje hodnotu ve všech existujících Cue. Neúplné Cue zastaví kompilaci s přesnou cestou k chybě.

  1. Připojte správný Network a nastavte společný playhead.
  2. V živém panelu EventStore vyberte přesná Capture IDs.
  3. Na každém Tracku vyberte potřebné Capture events.
  4. Klikněte na Capture Cue.
  5. Zkontrolujte označenou svislou skupinu Cue, případně ji posuňte a uložte.

Výběr je součástí Projektu: zůstane při opětovném otevření Capture, reloadu i dalším Capture. Nově objevené eventy začínají nezaškrtnuté a dočasně chybějící zvolený event se sám neodškrtne.

Capture použije pro každé přesné ID jedno konzistentní nativní WASM EventStore čtení a pozici společné timeline odečte jednou za operaci. Nic nezapisuje do Controllerů. Neexistuje fallback na JS mirror EventState: nedostupné nativní čtení, chybějící požadovaná hodnota nebo změna typu zastaví Capture před jakoukoliv změnou Cue.

Použijte copy-ready player.be z příkladu statického Complete-Cue Event Playeru. Stejný source-locked příklad obsahuje Spectoda Creator Kit; jediným editovatelným zdrojem zůstává Examples.

  1. Vložte player.be do projektového bloku BERRY SCRIPT.
  2. Zavolejte Player se stejným file base jako v Event Playeru a s lokálními ID tohoto Controlleru.
  3. Projekt uložte a nahrajte běžnou Studio Project cestou.
Player({"base": "show01", "ids": [1, 7], "debug": false})

Používejte jen unikátní lokální ID 0–254. ID255 nepřidávejte; plugin jej vybere automaticky, pokud je v show01.show. Plugin potřebuje každý zapojený Controller, ale seznam ids se může lišit.

File base má 1–11 ASCII znaků [A-Za-z0-9_-]. Pro show01 Studio vytvoří:

  • jeden statický Show Index show01.show;
  • deterministické per-ID segmenty, například show01.001.000.seb a show01.255.000.seb.

Generované názvy mají nejvýše 23 bajtů. Show Index má nejvýše 4 096 bajtů; jedno SEB nejvýše 4 092 bajtů a 340 záznamů. Track dostane další segment před tím, než by Cue překročilo počet záznamů nebo offsetové rozpětí 65 535 ms.

Při každé změně dodržte tento postup:

  1. Pozastavte společnou timeline. Za běhu Studio upload nepovolí.
  2. Klikněte na Upload. Studio zapíše změněné deterministické soubory a ověří jejich přesné bytes na připojeném App Controlleru.
  3. Počkejte na běžnou NetworkStorage propagaci v instalaci.
  4. Klikněte na Rewind Player.
  5. Spusťte společnou timeline.

Všechny Player soubory se stále synchronizují na všechny Controllery přes existující globální NetworkStorage union. Per-ID soubory zmenšují rozsah změny; Berry otevírá jen ID255 a nakonfigurovaná lokální ID. Staré deterministické soubory, na které <base>.show už neodkazuje, Player ignoruje a do odstranění stávající NetworkStorage cestou dál zabírají kapacitu.

Projektový plugin polluje timeline.getState() a volá SEB.land(filename,{"source":"networkStorage",...}). EventStore zůstává jedinou autoritou stavu.

  • Dopředné přehrávání landne jen splatná Cue a žádnou budoucí hodnotu.
  • Pauza nevolá SEB. Externí EventStateUpdate zůstane rozhodující do dalšího Cue nebo explicitní diskontinuity timeline.
  • Resume odvodí novou časovou projekci a znovu nelandne už spotřebované Cue.
  • Seek, rewind, loop a 24hodinový wrap vyberou poslední úplné Cue v čase menším nebo rovném cíli, landnou jej v kauzálním čase seeku a pokračují dalším Cue.
  • Jeden turn pluginu udělá nejvýše jeden SEB příspěvek. Chybějící relevantní soubor se zkouší znovu bez posunu Tracku.

Scéna je obecné mixed-ID SEB s nulovými offsety. Landne se přímo z NetworkStorage v kauzálním lokálním millis času trigger eventu a nezávisí na stavu Player timeline. Viz SEB scény a Event Player ve FW 0.12.11.