Přeskočit na obsah

Event Player ve Spectoda Studiu

Tvorba řídkých per-ID Cue a upload jednoho globálního mixed-ID player.show v3 pro firmware 0.12.11.

Event Player vytváří diskrétní změny eventových hodnot na společné timeline Projektu. Studio ukládá editovatelný model do Projektu, zachycuje hodnoty z autoritativního WASM EventStore a kompiluje jeden globální mixed-ID stream pro přehrávání z NetworkStorage.

  • Jeden Track je editační lane pro právě jedno Spectoda ID. Nemá jeden společný Event label.
  • Track ukládá definice Eventů: label, valueType, priority, playback enabled a členství v Capture.
  • Cue je jeden čas timeline a pouze Event hodnoty výslovně přítomné v tomto čase. Záměrně může být řídké.
  • Jedno Cue může obsahovat jen toggl = 0%, jiné může být celá scéna.
  • Studio spojí Cue ze všech enabled Tracků ve stejném čase do jedné atomické Cue Group s nejvýše 340 Event hodnotami. Cue Group se nikdy nerozdělí.

Tracky zůstávají per-ID, protože je to přehledný editační model. Kompilace je globální: každý Controller landuje všechna ID ze stejného streamu, takže distribuované EventStore zůstávají zarovnané.

Editovatelným zdrojem je Event Player Project schema v2 uvnitř Studio Projektu. player.show a player.NNN jsou generované deployment artefakty, ne editovatelná záloha. SEB obsahuje záznamy Event values, nikoli EventStates.

  1. Připojte správný Network a nastavte společný playhead.
  2. V levém EventStore panelu zaškrtněte přesná Capture IDs.
  3. Zaškrtněte přesné Capture Events, které chcete zachytit.
  4. Klikněte na Capture Cue.
  5. Označená Cue upravte nebo přesuňte a Projekt uložte.

Capture zapíše přesně zaškrtnuté hodnoty. Výběr je součástí Projektu, takže přežije reload i další Capture. Nově objevené Eventy začínají nezaškrtnuté. Odškrtnutí Eventu nesmaže historické Cue hodnoty.

Pozice timeline se odečte jednou a nativní WASM EventStore se přečte jednou pro každé vybrané přesné ID. Capture nic nezapisuje do Controlleru a nemá fallback na React/JS EventState mirror. Nedostupné nativní čtení, chybějící vybraný Event nebo změna typu zastaví Capture před změnou Cue.

Chyby kompilace jsou sbalovací a nebrání editaci ani Capture. Kompilace a upload zůstávají nedostupné, dokud Projekt není platný.

Event Player používá stejnou timeline a transport jako Workspace. Nemá druhé hodiny.

  • Kliknutí na pravítko udělá seek; Rewind, Play, Pause a Space ovládají společný transport.
  • Dvojklik do lane přidá Cue.
  • Diamanty lze táhnout v čase i mezi Tracky; tažením přes prázdný prostor vyberete více Cue.
  • Delete i Backspace smažou vybraná Cue.
  • Checkbox v Cue Inspectoru určuje, zda hodnota Eventu v daném Cue je.
  • Rozbalený Track ukazuje držené skokové hodnoty a inline editor podle typu.

Použijte player.be z příkladu Global sparse-Cue Event Player. Stejný source-locked příklad obsahuje Spectoda Creator Kit.

  1. Vložte celý player.be do projektového bloku BERRY SCRIPT.
  2. Projekt uložte a nahrajte běžnou cestou Studia.

Script se při injekci zaregistruje sám. Nepřidávejte volání Player().

Nekonfiguruje se file base ani seznam lokálních ID. Stejný plugin přidejte do každého zapojeného Controlleru; všechny landují celý mixed-ID stream.

Celý TNGL payload se musí vejít do 4 KiB. Size test příkladu měří celý přímo injektovatelný script.

Studio vytváří pevná deterministická jména:

  • player.show — malý SPM v3 manifest;
  • player.000, player.001, … — seřazené SEB segmenty.

Každá položka manifestu drží přesnou 48bitovou NetworkStorage verzi segmentu a absolutní startMs. Název vyplývá z indexu a do manifestu se neukládá. Každé SEB obsahuje celé Cue Groups, nejvýše 340 záznamů a relativní offsety od 0 do 65535 ms. Delší show pokračuje v dalším pevném slotu.

Klikněte na Upload. Studio nejprve zkontroluje kapacitu a aktuální metadata, publikuje novější player.show, potom nahraje pouze změněné segmenty a ověří přesné přečtení zpět. Nezměněný segment si smí ponechat stávající verzi. Upload timeline nepozastavuje, neposouvá, nepřevíjí ani znovu nespouští.

Manifest se záměrně publikuje jako první, takže neúplné Controllery zůstanou neaktivní. Běžná NetworkStorage union distribuuje přesné požadované verze segmentů; Berry plugin aktivuje show až po jejich přijetí a validaci. Pevná jména přepisují data staré show a nehromadí donekonečna content-addressed soubory.

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

  • Každý Controller před aktivací ověří player.show, přesnou verzi každého segmentu a jeho SEB header i EOF.
  • Dopředné přehrávání landne jen splatné Cue Groups a žádnou budoucí hodnotu.
  • Každý Controller landuje každé ID ve streamu.
  • Seek, rewind, loop a 24hodinový wrap vyberou Cue Group přesně v cíli, nebo bezprostředně před ním. Tato jedna řídká Group landne jednou v kauzálním čase seeku i při pauze; resume pokračuje až za ní.
  • Seek nikdy nevybere budoucí Cue, nemaže EventStore ani nepřehrává starší historii. Eventy, které ve vybraném řídkém Cue nejsou, si ponechají existující EventStates; tam, kde má libovolný seek obnovit celý vizuální stav, použijte kompletní Cue.
  • Chybějící nebo jiná verze segmentu nechá Controller neaktivní, dokud běžná NetworkStorage synchronizace nepřinese přesný soubor.

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