@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/README.md +18 -0
- package/docs/audio-recording-playback.md +56 -0
- package/docs/beat-alignment-media.json +99 -0
- package/docs/beat-alignment.md +79 -0
- package/docs/screenshots/beat-alignment-first-beat.png +0 -0
- package/docs/videos/beat-alignment-browser.mp4 +0 -0
- package/lib/admin.min.js +1 -1
- package/lib/build-manifest.json +21 -21
- package/lib/dancemoves.min.js +3 -3
- package/lib/index.cjs +340 -77
- package/lib/index.d.ts +18 -4
- package/lib/index.mjs +340 -77
- package/lib/react.cjs +7 -2
- package/lib/react.mjs +7 -2
- package/lib/server.cjs +54 -11
- package/lib/server.mjs +54 -11
- package/lib/wordpress.js +3 -3
- package/package.json +1 -1
- package/readme.txt +2 -2
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>}
|