@kieransimkin/dancemoves 3.1.23 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export * from './rudiments';
2
2
  export type Remove = () => void;
3
3
  export type PlaybackMedia = HTMLMediaElement | PlaybackSource;
4
4
  export interface PlaybackMapping {offset?:number;duration?:number;playerStart?:number}
5
- export type MasterReference = HTMLMediaElement | Readonly<{id:string;duration:number;element?:HTMLMediaElement}>;
5
+ export type MasterReference = HTMLMediaElement | Readonly<{id:string;duration:number;element?:HTMLMediaElement;sourceUrl?:string}>;
6
6
  export interface PlaybackSource extends EventTarget {
7
7
  readonly nodeType:1;readonly tagName:string;readonly element:HTMLMediaElement|null;readonly activePlayer:HTMLMediaElement|HTMLIFrameElement|null;
8
8
  currentTime:number;readonly duration:number;readonly paused:boolean;readonly ended:boolean;readonly seeking:boolean;readonly playbackRate:number;
@@ -26,8 +26,15 @@ export function createPlaybackPublisher(options:ChildPlaybackPublisherOptions):C
26
26
  export function createPlaybackReceiver(options:ChildPlaybackReceiverOptions):ChildPlaybackReceiver;
27
27
  export type Offset = Readonly<{x:number;y:number;z?:number}>;
28
28
  export type Metadata = string | {id?:string;handlerId?:string};
29
+ export interface BeatAlignment {
30
+ schema:'stemlab.beat-alignment.v1';source_sha256:string;source_url:string;source_audio_verified:true;
31
+ source_audio:Readonly<{sample_rate:number;num_frames:number;num_channels?:number;duration_seconds?:number}>;
32
+ bpm:number;exact_bpm:string;bpm_basis:string;bpm_status:'canonical'|'estimated';phase_status:'estimated'|'confirmed'|'synthetic';
33
+ analysis_id:string;evidence_sha256:string;report_sha256:string;first_beat_seconds:number;first_beat_exact_seconds:string;
34
+ offset_pips:number;exact_offset_pips:string;pips_per_beat:64;canonical_first_beat_pip:0;
35
+ }
29
36
  export interface PageConfig {
30
- pageId?:number;bpm?:number|null;bpmSource?:'explicit'|'fallback';lyricTimingUrl?:string;cueTimingUrl?:string;
37
+ pageId?:number;bpm?:number|null;bpmSource?:'explicit'|'fallback'|'analysis';beatAlignment?:BeatAlignment|null;lyricTimingUrl?:string;cueTimingUrl?:string;
31
38
  lyricPopupsEnabled?:boolean;masterDurationMilliseconds?:number;sharedControlTicks?:number;lyricDisclosureTicks?:number;
32
39
  effect?:''|'paper-planes';diagnostics?:boolean;
33
40
  }
@@ -77,6 +84,8 @@ export interface DanceMoves {
77
84
  readonly version:string;readonly bpm:number;readonly bpmSource:string;readonly ticksPerBeat:16;readonly root:HTMLElement;readonly config:Readonly<PageConfig>;
78
85
  readonly destroyed:boolean;ready:Promise<DanceMoves>;
79
86
  quantizeTicks(value:number):number;durationMilliseconds(ticks:number,bpmOverride?:number):number;currentTick(options?:Clock):number;
87
+ sourceTick(audio:PlaybackMedia,bpmOverride?:number):number;rhythmicTime(audio:PlaybackMedia):number;
88
+ beatAlignmentState(audio:PlaybackMedia):Readonly<{status:string;applied:boolean;firstBeatSeconds?:number;offsetPips?:number;sourceSha256?:string;bpmStatus?:string}>;
80
89
  nextIntervalTick(interval:number,fromTick:number,strictlyFuture?:boolean):number;
81
90
  scheduleAtInterval(interval:number,callback:(detail:IntervalDetail)=>void,options?:Clock):Remove;
82
91
  deferStart(target:HTMLElement,interval:number,options?:Clock & {start?:(detail:IntervalDetail)=>void}):Remove;
@@ -92,7 +101,7 @@ export interface DanceMoves {
92
101
  resetRunningAnimations(audio?:PlaybackMedia):number;discoverAudio():void;registerPlaybackSource(source:PlaybackSource):void;unregisterPlaybackSource(source:PlaybackSource):void;
93
102
  setDiagnosticsSink(callback:((record:Record<string,unknown>)=>void)|null):boolean;diagnosticsEnabled():boolean;
94
103
  applyCatalogueTiming?():Record<string,unknown>;catalogueTimingSnapshot?():Record<string,unknown>;removeCatalogueAnimationScope?():void;
95
- effects:Effects;rudiments:import('./rudiments').RudimentApi;
104
+ effects:Effects;rudiments:import('./rudiments').RudimentApi;recordings:RecordingService;
96
105
  orientationCore:Record<string,(...args:any[])=>any>;
97
106
  getOrientation():(Controller & {reset():void})|null;getClay():(Controller & Record<string,any>)|null;getPaperPlanes():Controller|null;
98
107
  createOrientation(options:{render:(point:Offset & Record<string,unknown>)=>void;windowMilliseconds?:number;minimumSpanDegrees?:number;smoothingTimeConstantMilliseconds?:number}):OrientationController;
@@ -104,10 +113,15 @@ export interface DanceMoves {
104
113
  }
105
114
  export const VERSION:string;
106
115
  export const ORIENTATION_ADAPTERS:readonly OrientationAdapter[];
107
- export const PAGE_META_KEYS:Readonly<{bpm:string;lyric:string;cue:string;popups:string;duration:string;effect:string}>;
116
+ export const PAGE_META_KEYS:Readonly<{bpm:string;lyric:string;cue:string;popups:string;duration:string;effect:string;alignment:string;alignmentAudio:string}>;
117
+ export function validateBeatAlignment(input?:BeatAlignment|null):Readonly<BeatAlignment>|null;
108
118
  export function createDanceMoves(options:Options):DanceMoves;
109
119
  export function validatePageConfig(input?:PageConfig):Readonly<PageConfig>;
110
120
  export function fromWordPressMeta(meta:Record<string,unknown>,resolveAttachment?:(id:number)=>string|Promise<string>):Promise<Readonly<PageConfig>>;
111
121
  export interface Revision {revision:number;config:PageConfig;savedAt:string}
112
122
  export interface PageStore {read(id:string):Revision|null;revisions(id:string):Revision[];save(id:string,input:PageConfig,options?:{expectedRevision?:number}):Revision;restore(id:string,revision:number,options?:{expectedRevision?:number}):Revision;delete(id:string):boolean}
113
123
  export function createMemoryPageStore(options?:{maxPages?:number;maxRevisions?:number}):PageStore;
124
+ export interface AudioRecording {format:'dancerudiments.recording';schema_version:1;pips_per_beat:64;sample_dtype:'float64';name:string;dimensions:string[];samples:number[][];clock:{bpm:number;bpm_source:string;bpm_status:'confirmed'|'estimated';beat_zero_seconds:number;phase_status:'unverified'|'estimated'|'supplied';start_pip:number};provenance?:Record<string,unknown>}
125
+ export interface RecordingFrame {recording:string;dimensions:readonly string[];values:number[];position:{x:number;y:number;z:number};pip:number;positionPips:number;sourceBeats:number;loopProgress:null;reason:string}
126
+ export interface RecordingController {id:string;ready:Promise<RecordingController>;setEnabled(value:boolean):void;pause():void;resume():void;refresh():void;destroy():void;teardown():void;snapshot():Record<string,unknown>}
127
+ export interface RecordingService {load(url:string):Promise<AudioRecording>;animate(options:{id:string;root:HTMLElement;target:HTMLElement;audio:PlaybackMedia;recording:AudioRecording;offscreen?:boolean;enabled?:boolean;render:(frame:RecordingFrame)=>void}):RecordingController;get(id:string):RecordingController|null;destroyAll():void;snapshot():Record<string,unknown>}