@sudobility/music_spatial_core 0.0.6 → 0.0.8

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.
@@ -5,15 +5,33 @@
5
5
  * Deliberately does NOT take a pose. A model's pose (offset/rotation/scale
6
6
  * from `spatialModelForTrack`) becomes an *object* transform — applied by
7
7
  * `buildScene` as the `position`/`rotation`/`scale` a platform package
8
- * hands to `<group>`/`<lineSegments>` — rather than baked into vertex
9
- * coordinates here. `three`'s own transform pipeline already does this
10
- * correctly; re-deriving rotation matrices by hand in this file would only
11
- * be a second, riskier way to compute the same thing.
8
+ * hands to `<lineSegments>` — rather than baked into vertex coordinates
9
+ * here. `three`'s own transform pipeline already does this correctly;
10
+ * re-deriving rotation matrices by hand in this file would only be a
11
+ * second, riskier way to compute the same thing.
12
12
  */
13
13
  import { BufferGeometry } from 'three';
14
14
  import type { InstrumentSpatialModel } from '@sudobility/music_types';
15
- /** One `THREE.BufferGeometry` per stroke, set up for `THREE.LineSegments`
16
- * (consecutive point pairs, not a single continuous line strip) — both
17
- * platform packages wrap each in `<lineSegments geometry={g} />`. */
18
- export declare function buildInstrumentGeometry(model: InstrumentSpatialModel): readonly BufferGeometry[];
15
+ /**
16
+ * ONE `THREE.BufferGeometry` per model, holding every stroke, laid out for
17
+ * `THREE.LineSegments` (consecutive vertex pairs, not a line strip) — a
18
+ * platform package wraps it in a single `<lineSegments geometry={g} />`.
19
+ *
20
+ * It used to be one geometry per stroke, and the platform packages drew one
21
+ * `<lineSegments>` + one material for each. Measured on a four-track band
22
+ * (piano, bass, string ensemble, drum kit): ~645 draw calls for 6,850
23
+ * vertices, because 58% of the strokes across all GM models are a single
24
+ * two-vertex segment. Every stroke of a model is drawn in the same colour
25
+ * (`InstrumentSpatialModel` carries no per-stroke colour or width — see
26
+ * music_types' `spatial-art.ts`), so nothing distinguished those draw calls
27
+ * but the buffer they read from. Merged: one draw call per instrument.
28
+ */
29
+ export declare function buildInstrumentGeometry(model: InstrumentSpatialModel): BufferGeometry;
30
+ /**
31
+ * How many line segments `model` draws: the sum over its strokes of
32
+ * (points - 1). The merged geometry holds exactly twice this many vertices.
33
+ * This was the per-model draw-call count before merging, and is what a
34
+ * test compares the merged vertex count against.
35
+ */
36
+ export declare function instrumentSegmentCount(model: InstrumentSpatialModel): number;
19
37
  //# sourceMappingURL=geometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAA0B,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;sEAEsE;AACtE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,SAAS,cAAc,EAAE,CAM3B"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAA0B,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,cAAc,CAMhB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAI5E"}
package/dist/geometry.js CHANGED
@@ -5,15 +5,26 @@
5
5
  * Deliberately does NOT take a pose. A model's pose (offset/rotation/scale
6
6
  * from `spatialModelForTrack`) becomes an *object* transform — applied by
7
7
  * `buildScene` as the `position`/`rotation`/`scale` a platform package
8
- * hands to `<group>`/`<lineSegments>` — rather than baked into vertex
9
- * coordinates here. `three`'s own transform pipeline already does this
10
- * correctly; re-deriving rotation matrices by hand in this file would only
11
- * be a second, riskier way to compute the same thing.
8
+ * hands to `<lineSegments>` — rather than baked into vertex coordinates
9
+ * here. `three`'s own transform pipeline already does this correctly;
10
+ * re-deriving rotation matrices by hand in this file would only be a
11
+ * second, riskier way to compute the same thing.
12
12
  */
13
13
  import { BufferGeometry, Float32BufferAttribute } from 'three';
14
- /** One `THREE.BufferGeometry` per stroke, set up for `THREE.LineSegments`
15
- * (consecutive point pairs, not a single continuous line strip) — both
16
- * platform packages wrap each in `<lineSegments geometry={g} />`. */
14
+ /**
15
+ * ONE `THREE.BufferGeometry` per model, holding every stroke, laid out for
16
+ * `THREE.LineSegments` (consecutive vertex pairs, not a line strip) — a
17
+ * platform package wraps it in a single `<lineSegments geometry={g} />`.
18
+ *
19
+ * It used to be one geometry per stroke, and the platform packages drew one
20
+ * `<lineSegments>` + one material for each. Measured on a four-track band
21
+ * (piano, bass, string ensemble, drum kit): ~645 draw calls for 6,850
22
+ * vertices, because 58% of the strokes across all GM models are a single
23
+ * two-vertex segment. Every stroke of a model is drawn in the same colour
24
+ * (`InstrumentSpatialModel` carries no per-stroke colour or width — see
25
+ * music_types' `spatial-art.ts`), so nothing distinguished those draw calls
26
+ * but the buffer they read from. Merged: one draw call per instrument.
27
+ */
17
28
  export function buildInstrumentGeometry(model) {
18
29
  const cached = GEOMETRY_CACHE.get(model);
19
30
  if (cached)
@@ -22,18 +33,32 @@ export function buildInstrumentGeometry(model) {
22
33
  GEOMETRY_CACHE.set(model, built);
23
34
  return built;
24
35
  }
36
+ /**
37
+ * How many line segments `model` draws: the sum over its strokes of
38
+ * (points - 1). The merged geometry holds exactly twice this many vertices.
39
+ * This was the per-model draw-call count before merging, and is what a
40
+ * test compares the merged vertex count against.
41
+ */
42
+ export function instrumentSegmentCount(model) {
43
+ let count = 0;
44
+ for (const stroke of model.strokes)
45
+ count += Math.max(0, stroke.length - 1);
46
+ return count;
47
+ }
25
48
  /**
26
49
  * Keyed by model identity: the models are module-level singletons in
27
50
  * music_types (a violin is one object for the life of the process), and
28
51
  * `buildScene` runs on every sounding-state change — many times a second
29
52
  * while playing — so without this every note-on rebuilt a few hundred
30
- * segments per instrument. Geometries are never mutated after creation,
31
- * so sharing one across instances and frames is safe.
53
+ * segments per instrument (measured: 3.0ms cold, 0.44ms warm). Geometries
54
+ * are never mutated after creation, so sharing one across instances and
55
+ * frames is safe.
32
56
  */
33
57
  const GEOMETRY_CACHE = new WeakMap();
34
58
  function buildUncached(model) {
35
- return model.strokes.map(stroke => {
36
- const positions = [];
59
+ const positions = new Float32Array(instrumentSegmentCount(model) * 6);
60
+ let at = 0;
61
+ for (const stroke of model.strokes) {
37
62
  for (let i = 0; i < stroke.length - 1; i++) {
38
63
  const [ax, ay, az] = stroke[i];
39
64
  const [bx, by, bz] = stroke[i + 1];
@@ -41,11 +66,16 @@ function buildUncached(model) {
41
66
  // frame (+x = the player's right facing +z); three.js is
42
67
  // right-handed. See scene.ts, which mirrors positions and rotations
43
68
  // to match.
44
- positions.push(-ax, ay, az, -bx, by, bz);
69
+ positions[at++] = -ax;
70
+ positions[at++] = ay;
71
+ positions[at++] = az;
72
+ positions[at++] = -bx;
73
+ positions[at++] = by;
74
+ positions[at++] = bz;
45
75
  }
46
- const geometry = new BufferGeometry();
47
- geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
48
- return geometry;
49
- });
76
+ }
77
+ const geometry = new BufferGeometry();
78
+ geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
79
+ return geometry;
50
80
  }
51
81
  //# sourceMappingURL=geometry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAG/D;;sEAEsE;AACtE,MAAM,UAAU,uBAAuB,CACrC,KAA6B;IAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,IAAI,OAAO,EAG/B,CAAC;AAEJ,SAAS,aAAa,CACpB,KAA6B;IAE7B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,qEAAqE;YACrE,yDAAyD;YACzD,oEAAoE;YACpE,YAAY;YACZ,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAG/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAA6B;IAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA6B;IAClE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,IAAI,OAAO,EAA0C,CAAC;AAE7E,SAAS,aAAa,CAAC,KAA6B;IAClD,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,qEAAqE;YACrE,yDAAyD;YACzD,oEAAoE;YACpE,YAAY;YACZ,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YACrB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YACrB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YACrB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC;AAClB,CAAC"}
package/dist/project.js CHANGED
@@ -127,13 +127,11 @@ class Projector {
127
127
  const segments = [];
128
128
  const a = new Vector3();
129
129
  const b = new Vector3();
130
- for (const geometry of instrument.geometry) {
131
- const positions = geometry.getAttribute('position');
132
- for (let i = 0; i + 1 < positions.count; i += 2) {
133
- a.fromBufferAttribute(positions, i).applyMatrix4(modelView);
134
- b.fromBufferAttribute(positions, i + 1).applyMatrix4(modelView);
135
- this.pushSegment(segments, a, b);
136
- }
130
+ const positions = instrument.geometry.getAttribute('position');
131
+ for (let i = 0; i + 1 < positions.count; i += 2) {
132
+ a.fromBufferAttribute(positions, i).applyMatrix4(modelView);
133
+ b.fromBufferAttribute(positions, i + 1).applyMatrix4(modelView);
134
+ this.pushSegment(segments, a, b);
137
135
  }
138
136
  const distance = this.eye.distanceTo(new Vector3(px, py, pz));
139
137
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
package/dist/scene.d.ts CHANGED
@@ -5,6 +5,16 @@
5
5
  * once per relevant render/tick — a platform's `SpatialCanvas` becomes
6
6
  * close to a plain `.map()` over `instruments` plus one camera assignment.
7
7
  *
8
+ * ## Two halves, memoised apart
9
+ *
10
+ * `buildInstruments` reads the tracks, their stage positions and the lit
11
+ * set; `cameraFor` reads the listener and nothing else. They are separate
12
+ * functions so a platform can memoise each on its own inputs: the listener
13
+ * moves on every walking frame, and when the whole scene was one memo keyed
14
+ * on `score` every step re-created every instrument's element for a camera
15
+ * that was the only thing that had changed. `buildScene` composes the two
16
+ * for callers that want the whole frame at once.
17
+ *
8
18
  * ## Handedness
9
19
  *
10
20
  * The arrangement convention (`unplugged.ts`, the map overlay, the audio
@@ -19,11 +29,12 @@
19
29
  * every rotation about y and z. Nothing upstream has to know.
20
30
  */
21
31
  import type { BufferGeometry } from 'three';
22
- import type { Score } from '@sudobility/music_types';
32
+ import type { EffectiveUnpluggedArrangement, Score, Track, UnpluggedListener } from '@sudobility/music_types';
23
33
  export type Vec3Tuple = readonly [number, number, number];
24
34
  export interface SpatialInstrument {
25
35
  readonly trackId: string;
26
- readonly geometry: readonly BufferGeometry[];
36
+ /** Every stroke of the model in one `LineSegments` buffer — one draw call. */
37
+ readonly geometry: BufferGeometry;
27
38
  readonly position: Vec3Tuple;
28
39
  readonly rotation: Vec3Tuple;
29
40
  readonly scale: number;
@@ -41,5 +52,17 @@ export interface SpatialScene {
41
52
  readonly instruments: readonly SpatialInstrument[];
42
53
  readonly camera: SpatialCamera;
43
54
  }
55
+ /** What `buildInstruments` needs to know about a track. */
56
+ export type SpatialTrack = Pick<Track, 'id' | 'name' | 'clef' | 'midiProgram'>;
57
+ /**
58
+ * One `SpatialInstrument` per track, placed by `arrangementTracks` (the
59
+ * `tracks` half of an `EffectiveUnpluggedArrangement`) and lit by
60
+ * `soundingTrackIds`. Independent of the listener: memoise it on these
61
+ * three inputs and a walking frame costs nothing here.
62
+ */
63
+ export declare function buildInstruments(tracks: readonly SpatialTrack[], arrangementTracks: EffectiveUnpluggedArrangement['tracks'], soundingTrackIds: ReadonlySet<string>): readonly SpatialInstrument[];
64
+ /** The camera transform for `listener`: ear height, x mirrored, yaw from its facing. */
65
+ export declare function cameraFor(listener: UnpluggedListener): SpatialCamera;
66
+ /** Both halves at once, from the score's effective arrangement. */
44
67
  export declare function buildScene(score: Pick<Score, 'tracks' | 'unplugged'>, soundingTrackIds: ReadonlySet<string>): SpatialScene;
45
68
  //# sourceMappingURL=scene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAIrD,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAqBD,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC,EAC1C,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,YAAY,CAiDd"}
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,OAAO,KAAK,EACV,6BAA6B,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;AAqB/E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,iBAAiB,EAAE,6BAA6B,CAAC,QAAQ,CAAC,EAC1D,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,SAAS,iBAAiB,EAAE,CAkC9B;AAED,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,aAAa,CAWpE;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC,EAC1C,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,YAAY,CAUd"}
package/dist/scene.js CHANGED
@@ -16,11 +16,16 @@ const AUDIENCE_YAW = Math.PI;
16
16
  function degToRad(deg) {
17
17
  return (deg * Math.PI) / 180;
18
18
  }
19
- export function buildScene(score, soundingTrackIds) {
20
- const arrangement = effectiveUnpluggedArrangement(score);
21
- const colors = trackColors(score.tracks);
22
- const instruments = score.tracks.map(track => {
23
- const point = arrangement.tracks[track.id] ?? { x: 0, z: 0 };
19
+ /**
20
+ * One `SpatialInstrument` per track, placed by `arrangementTracks` (the
21
+ * `tracks` half of an `EffectiveUnpluggedArrangement`) and lit by
22
+ * `soundingTrackIds`. Independent of the listener: memoise it on these
23
+ * three inputs and a walking frame costs nothing here.
24
+ */
25
+ export function buildInstruments(tracks, arrangementTracks, soundingTrackIds) {
26
+ const colors = trackColors(tracks);
27
+ return tracks.map(track => {
28
+ const point = arrangementTracks[track.id] ?? { x: 0, z: 0 };
24
29
  const { model, pose } = trackSpatialModel(track);
25
30
  const lit = soundingTrackIds.has(track.id);
26
31
  const color = colors[track.id];
@@ -49,18 +54,26 @@ export function buildScene(score, soundingTrackIds) {
49
54
  litColor: color.lit,
50
55
  };
51
56
  });
57
+ }
58
+ /** The camera transform for `listener`: ear height, x mirrored, yaw from its facing. */
59
+ export function cameraFor(listener) {
60
+ return {
61
+ position: [-listener.x, EAR_HEIGHT, listener.z],
62
+ // Three.js cameras look down their local -Z. With x mirrored, a
63
+ // facing of f degrees (clockwise-positive from +z in arrangement
64
+ // space) is a camera yaw of PI - f: PI looks toward +z, and turning
65
+ // left (f decreasing) turns the camera toward its own left. Pinned
66
+ // by scene.test.ts rather than left to visual inspection — the sign
67
+ // is exactly what was wrong before.
68
+ rotation: [0, Math.PI - degToRad(listener.facingDeg), 0],
69
+ };
70
+ }
71
+ /** Both halves at once, from the score's effective arrangement. */
72
+ export function buildScene(score, soundingTrackIds) {
73
+ const arrangement = effectiveUnpluggedArrangement(score);
52
74
  return {
53
- instruments,
54
- camera: {
55
- position: [-arrangement.listener.x, EAR_HEIGHT, arrangement.listener.z],
56
- // Three.js cameras look down their local -Z. With x mirrored, a
57
- // facing of f degrees (clockwise-positive from +z in arrangement
58
- // space) is a camera yaw of PI - f: PI looks toward +z, and turning
59
- // left (f decreasing) turns the camera toward its own left. Pinned
60
- // by scene.test.ts rather than left to visual inspection — the sign
61
- // is exactly what was wrong before.
62
- rotation: [0, Math.PI - degToRad(arrangement.listener.facingDeg), 0],
63
- },
75
+ instruments: buildInstruments(score.tracks, arrangement.tracks, soundingTrackIds),
76
+ camera: cameraFor(arrangement.listener),
64
77
  };
65
78
  }
66
79
  //# sourceMappingURL=scene.js.map
package/dist/scene.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AA2BvC,8EAA8E;AAC9E,MAAM,QAAQ,GAAG,CAAC,CAAC;AAEnB,4DAA4D;AAC5D,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;AAE7B,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAA0C,EAC1C,gBAAqC;IAErC,MAAM,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAwB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAChE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE/B,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,QAAQ,EAAE,uBAAuB,CAAC,KAAK,CAAC;YACxC,mCAAmC;YACnC,QAAQ,EAAE;gBACR,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC3B;YACD,oEAAoE;YACpE,sEAAsE;YACtE,mEAAmE;YACnE,gEAAgE;YAChE,sCAAsC;YACtC,QAAQ,EAAE;gBACR,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;gBAC/C,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC/B;YACD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG;YACH,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,KAAK,CAAC,GAAG;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvE,gEAAgE;YAChE,iEAAiE;YACjE,oEAAoE;YACpE,mEAAmE;YACnE,oEAAoE;YACpE,oCAAoC;YACpC,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;SACrE;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/music_spatial_core",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Platform-agnostic engine behind the Moosiac Spatial view: instrument geometry, scene composition, camera/listener math, movement, and map-overlay math shared by music_spatial and music_spatial_rn.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -31,13 +31,13 @@
31
31
  },
32
32
  "dependencies": {},
33
33
  "peerDependencies": {
34
- "@sudobility/music_types": "^0.13.41",
34
+ "@sudobility/music_types": "^0.13.43",
35
35
  "react": ">=18",
36
36
  "three": "^0.160.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@eslint/js": "^9.38.0",
40
- "@sudobility/music_types": "^0.13.41",
40
+ "@sudobility/music_types": "^0.13.43",
41
41
  "@testing-library/react": "^16.0.0",
42
42
  "@types/react": "^19.2.18",
43
43
  "@types/react-dom": "^19.2.0",