@sudobility/music_player 0.1.63 → 0.1.65

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.
@@ -1 +1 @@
1
- {"version":3,"file":"usePlaybackReadiness.d.ts","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,EAAE,OAAc,EAAE,GAAE,2BAAgC,GACnD,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAYxC"}
1
+ {"version":3,"file":"usePlaybackReadiness.d.ts","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,EAAE,OAAc,EAAE,GAAE,2BAAgC,GACnD,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAcxC"}
@@ -15,7 +15,9 @@
15
15
  * sees `preparing` or `ready`.
16
16
  *
17
17
  * `useSyncExternalStore` over `onLoadState`, so a change is a re-render of
18
- * the button and nothing else.
18
+ * the button and nothing else. A host that must wait for a user gesture can
19
+ * disable automatic preparation; while idle, its Play button stays available
20
+ * to provide that gesture.
19
21
  */
20
22
  import { useEffect, useSyncExternalStore } from 'react';
21
23
  /**
@@ -31,6 +33,8 @@ export function usePlaybackReadiness(player, { prepare = true } = {}) {
31
33
  void player.prepare();
32
34
  }
33
35
  }, [player, prepare]);
34
- return readiness === 'ready' ? 'ready' : 'preparing';
36
+ return readiness === 'ready' || (!prepare && readiness === 'notReady')
37
+ ? 'ready'
38
+ : 'preparing';
35
39
  }
36
40
  //# sourceMappingURL=usePlaybackReadiness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePlaybackReadiness.js","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAYxD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA2B,EAC3B,EAAE,OAAO,GAAG,IAAI,KAAkC,EAAE;IAEpD,MAAM,SAAS,GAAG,oBAAoB,CACpC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EACrE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAC5C,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtB,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"usePlaybackReadiness.js","sourceRoot":"","sources":["../../src/react/usePlaybackReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAYxD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA2B,EAC3B,EAAE,OAAO,GAAG,IAAI,KAAkC,EAAE;IAEpD,MAAM,SAAS,GAAG,oBAAoB,CACpC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EACrE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAC5C,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACzD,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtB,OAAO,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,KAAK,UAAU,CAAC;QACpE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"soundfont-loader.d.ts","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAK7D;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAOhE;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACjB,GACL,OAAO,CAAC,WAAW,CAAC,CA2BtB"}
1
+ {"version":3,"file":"soundfont-loader.d.ts","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAa7D;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAoBhE;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IACJ,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACjB,GACL,OAAO,CAAC,WAAW,CAAC,CAwDtB"}
@@ -1,5 +1,11 @@
1
1
  /** Bumped when the stored representation changes, so old entries are not reused. */
2
2
  const CACHE_NAME = 'music-soundfont-v1';
3
+ /** Shared with the web backend's `[ScoreSmith audio]` logs so one filter shows the whole load. */
4
+ const SOUNDFONT_LOG = '[ScoreSmith audio]';
5
+ /** Monotonic clock for load timings, falling back where `performance` is absent. */
6
+ function soundfontNow() {
7
+ return typeof performance !== 'undefined' ? performance.now() : Date.now();
8
+ }
3
9
  /**
4
10
  * The cache the soundfont lives in, or `null` where the Cache API is missing.
5
11
  *
@@ -9,19 +15,35 @@ const CACHE_NAME = 'music-soundfont-v1';
9
15
  * visibly wrong.
10
16
  */
11
17
  export async function openSoundfontCache() {
12
- if (typeof caches === 'undefined')
18
+ if (typeof caches === 'undefined') {
19
+ // The Cache API only exists in a secure context (https or localhost). A LAN
20
+ // IP or plain http silently lands here, and every visit re-downloads.
21
+ console.info(SOUNDFONT_LOG, 'Cache API unavailable (insecure context?); soundfont will not be cached');
13
22
  return null;
23
+ }
14
24
  try {
15
25
  return await caches.open(CACHE_NAME);
16
26
  }
17
- catch {
27
+ catch (error) {
28
+ console.warn(SOUNDFONT_LOG, 'opening soundfont cache failed; continuing without cache', error);
18
29
  return null; // private browsing and similar; the font still loads
19
30
  }
20
31
  }
21
32
  export async function loadSoundfont(url, opts = {}) {
22
33
  const cached = await opts.cache?.match(url);
23
- if (cached)
24
- return await cached.arrayBuffer();
34
+ if (cached) {
35
+ const buffer = await cached.arrayBuffer();
36
+ console.info(SOUNDFONT_LOG, 'soundfont cache HIT', {
37
+ url,
38
+ bytes: buffer.byteLength,
39
+ });
40
+ return buffer;
41
+ }
42
+ console.info(SOUNDFONT_LOG, 'soundfont cache MISS; downloading', {
43
+ url,
44
+ cacheAvailable: Boolean(opts.cache),
45
+ });
46
+ const started = soundfontNow();
25
47
  const response = await fetch(url);
26
48
  if (!response.ok) {
27
49
  throw new Error(`Soundfont fetch failed: ${response.status} ${response.statusText} (${url})`);
@@ -29,9 +51,27 @@ export async function loadSoundfont(url, opts = {}) {
29
51
  const declared = Number(response.headers.get('content-length') ?? 0);
30
52
  opts.onProgress?.({ loaded: 0, total: declared });
31
53
  const buffer = await readWithProgress(response, declared, opts.onProgress);
54
+ console.info(SOUNDFONT_LOG, 'soundfont downloaded', {
55
+ url,
56
+ bytes: buffer.byteLength,
57
+ downloadMs: Math.round(soundfontNow() - started),
58
+ cacheControl: response.headers.get('cache-control'),
59
+ });
32
60
  // Rebuilt rather than cloned: the body has already been consumed to report
33
- // progress, and a body can only be read once.
34
- await opts.cache?.put(url, new Response(buffer, { headers: response.headers }));
61
+ // progress, and a body can only be read once. A cache write that fails (quota,
62
+ // private mode) must not fail the load — it just means no caching this time.
63
+ try {
64
+ await opts.cache?.put(url, new Response(buffer, { headers: response.headers }));
65
+ if (opts.cache) {
66
+ console.info(SOUNDFONT_LOG, 'soundfont stored in cache', {
67
+ url,
68
+ bytes: buffer.byteLength,
69
+ });
70
+ }
71
+ }
72
+ catch (error) {
73
+ console.warn(SOUNDFONT_LOG, 'storing soundfont in cache failed', error);
74
+ }
35
75
  opts.onProgress?.({
36
76
  loaded: buffer.byteLength,
37
77
  total: declared || buffer.byteLength,
@@ -1 +1 @@
1
- {"version":3,"file":"soundfont-loader.js","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"soundfont-loader.js","sourceRoot":"","sources":["../../../src/web/playback/soundfont-loader.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,15 @@ export declare class WebSynthBackend implements SynthBackend {
65
65
  instanceCount: number;
66
66
  onProgress: (state: PlaybackLoadState) => void;
67
67
  }): Promise<PrepareResult>;
68
- /** Best effort: without a user gesture behind it this is allowed to fail. */
68
+ /**
69
+ * Best effort, and bounded. Without a user gesture Chrome leaves `resume()`
70
+ * pending rather than rejecting it, so awaiting it unbounded blocks the whole
71
+ * cold load — the font never starts fetching and the Play button spins until
72
+ * the reader happens to click. The resume is kicked off and left to settle on
73
+ * its own (logging either way, even after the timeout), while the caller waits
74
+ * at most `RESUME_WAIT_MS`; `contextCanRun` then sees a still-suspended
75
+ * context and defers the rest, preloading the graph for the eventual gesture.
76
+ */
69
77
  private resumeContext;
70
78
  private contextSnapshot;
71
79
  private installLifecycleListeners;
@@ -1 +1 @@
1
- {"version":3,"file":"web-backend.d.ts","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-backend.d.ts","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,25 @@ function debugAudio(message, details) {
7
7
  else
8
8
  console.info(WEB_AUDIO_DEBUG, message);
9
9
  }
10
+ /** A monotonic clock for load timings, falling back where `performance` is absent. */
11
+ function debugNow() {
12
+ return typeof performance !== 'undefined' ? performance.now() : Date.now();
13
+ }
10
14
  /**
11
15
  * Fetching is the measurable half of the load; handing the bytes to fluidsynth
12
16
  * takes seconds more and reports nothing. So the bar is held below halfway
13
17
  * until the fetch is done, rather than sitting at "done" through the decode.
14
18
  */
15
19
  const FETCH_SHARE = 0.5;
20
+ /**
21
+ * How long `prepare` waits on a context resume before moving on.
22
+ *
23
+ * Chrome neither resolves nor rejects `resume()` on a suspended context until
24
+ * the page sees a user gesture — the promise simply stays pending. So the wait
25
+ * is bounded: the resume still runs (and settles on the eventual gesture), but
26
+ * `prepare` stops blocking on it and goes on to preload the font and graph.
27
+ */
28
+ const RESUME_WAIT_MS = 250;
16
29
  export class WebSynthBackend {
17
30
  deps;
18
31
  context = null;
@@ -81,20 +94,34 @@ export class WebSynthBackend {
81
94
  debugAudio('context suspended; preloading synth graph', this.contextSnapshot());
82
95
  }
83
96
  onProgress({ status: 'loading', fraction: 0 });
97
+ const fontStart = debugNow();
84
98
  const soundfont = await this.deps.loadFont(this.deps.fontUrl, ({ loaded, total }) => {
85
99
  onProgress({
86
100
  status: 'loading',
87
101
  fraction: total > 0 ? (loaded / total) * FETCH_SHARE : null,
88
102
  });
89
103
  });
104
+ // The headline number for the download-vs-decode question: a cache hit is a
105
+ // few milliseconds here, a real fetch is seconds.
106
+ debugAudio('soundfont bytes ready', {
107
+ url: this.deps.fontUrl,
108
+ bytes: soundfont.byteLength,
109
+ loadMs: Math.round(debugNow() - fontStart),
110
+ });
90
111
  // Busy, no idea how long — which is the honest answer for the decode.
91
112
  onProgress({ status: 'loading', fraction: null });
113
+ const decodeStart = debugNow();
92
114
  await this.deps.host.init(this.context, {
93
115
  fluidsynthModuleUrl: this.deps.moduleUrls.fluidsynth,
94
116
  workletModuleUrl: this.deps.moduleUrls.worklet,
95
117
  soundfont,
96
118
  instanceCount,
97
119
  });
120
+ // This is the cost no byte-cache can remove: the SF3 is decompressed into
121
+ // the worklet on every page load.
122
+ debugAudio('synth decode/init done', {
123
+ decodeMs: Math.round(debugNow() - decodeStart),
124
+ });
98
125
  // Safari can report a running context before the AudioWorklet graph is
99
126
  // connected. Resume once more after the destination exists; this is a
100
127
  // no-op elsewhere and recovers contexts that remain output-suspended.
@@ -102,23 +129,30 @@ export class WebSynthBackend {
102
129
  debugAudio('synth graph ready', this.contextSnapshot());
103
130
  return 'ready';
104
131
  }
105
- /** Best effort: without a user gesture behind it this is allowed to fail. */
132
+ /**
133
+ * Best effort, and bounded. Without a user gesture Chrome leaves `resume()`
134
+ * pending rather than rejecting it, so awaiting it unbounded blocks the whole
135
+ * cold load — the font never starts fetching and the Play button spins until
136
+ * the reader happens to click. The resume is kicked off and left to settle on
137
+ * its own (logging either way, even after the timeout), while the caller waits
138
+ * at most `RESUME_WAIT_MS`; `contextCanRun` then sees a still-suspended
139
+ * context and defers the rest, preloading the graph for the eventual gesture.
140
+ */
106
141
  async resumeContext() {
107
142
  const context = this.context;
108
143
  if (!context?.resume || context.state === 'running')
109
144
  return;
110
145
  debugAudio('resuming context', this.contextSnapshot());
111
- try {
112
- await context.resume();
113
- debugAudio('context resume resolved', this.contextSnapshot());
114
- }
115
- catch (error) {
116
- debugAudio('context resume rejected', {
117
- ...this.contextSnapshot(),
118
- error: error instanceof Error ? error.message : String(error),
119
- });
120
- // No gesture yet. `contextCanRun` will see it and defer the rest.
121
- }
146
+ // Attached here, not awaited, so a rejection that arrives after the timeout
147
+ // has won the race is still handled rather than left unhandled.
148
+ const resumed = context.resume().then(() => debugAudio('context resume resolved', this.contextSnapshot()), (error) => debugAudio('context resume rejected', {
149
+ ...this.contextSnapshot(),
150
+ error: error instanceof Error ? error.message : String(error),
151
+ }));
152
+ await Promise.race([
153
+ resumed,
154
+ new Promise((resolve) => setTimeout(resolve, RESUME_WAIT_MS)),
155
+ ]);
122
156
  }
123
157
  contextSnapshot() {
124
158
  const context = this.context;
@@ -1 +1 @@
1
- {"version":3,"file":"web-backend.js","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-backend.js","sourceRoot":"","sources":["../../../src/web/playback/web-backend.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/music_player",
3
- "version": "0.1.63",
3
+ "version": "0.1.65",
4
4
  "description": "Playback for ScoreSmith: transport, synth engines and offline rendering, for web and React Native",
5
5
  "author": "Sudobility",
6
6
  "license": "BUSL-1.1",
@@ -78,7 +78,7 @@
78
78
  "prepublishOnly": "bun run clean && bun run verify"
79
79
  },
80
80
  "peerDependencies": {
81
- "@sudobility/music_types": "^0.13.50",
81
+ "@sudobility/music_types": "^0.13.51",
82
82
  "js-synthesizer": "^1.13.0",
83
83
  "react-native-audio-api": ">=0.13.0",
84
84
  "react": ">=18.0.0"
@@ -96,7 +96,7 @@
96
96
  },
97
97
  "devDependencies": {
98
98
  "@eslint/js": "^10.0.1",
99
- "@sudobility/music_types": "^0.13.50",
99
+ "@sudobility/music_types": "^0.13.51",
100
100
  "@testing-library/react": "^16.3.3",
101
101
  "@types/node": "^26.2.0",
102
102
  "@types/react": "^19.0.0",