@omnimedia/omnitool 1.1.0-106 → 1.1.0-108

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.
Files changed (34) hide show
  1. package/README.md +9 -0
  2. package/package.json +1 -1
  3. package/s/timeline/renderers/parts/audio-level.ts +16 -0
  4. package/s/timeline/renderers/parts/samplers/audio/parts/init.ts +5 -1
  5. package/s/timeline/renderers/parts/samplers/audio/parts/types.ts +2 -0
  6. package/s/timeline/renderers/player/parts/audio-levels.ts +120 -0
  7. package/s/timeline/renderers/player/parts/playback.ts +22 -5
  8. package/s/timeline/renderers/player/parts/types.ts +26 -0
  9. package/s/timeline/renderers/player/player.ts +3 -0
  10. package/x/demo/demo.bundle.min.js +100 -100
  11. package/x/demo/demo.bundle.min.js.map +4 -4
  12. package/x/index.html +2 -2
  13. package/x/tests.bundle.min.js +103 -103
  14. package/x/tests.bundle.min.js.map +4 -4
  15. package/x/tests.html +1 -1
  16. package/x/timeline/renderers/parts/audio-level.d.ts +4 -0
  17. package/x/timeline/renderers/parts/audio-level.js +13 -0
  18. package/x/timeline/renderers/parts/audio-level.js.map +1 -0
  19. package/x/timeline/renderers/parts/samplers/audio/parts/init.js +5 -1
  20. package/x/timeline/renderers/parts/samplers/audio/parts/init.js.map +1 -1
  21. package/x/timeline/renderers/parts/samplers/audio/parts/types.d.ts +2 -0
  22. package/x/timeline/renderers/parts/samplers/audio/sampler.d.ts +1 -0
  23. package/x/timeline/renderers/player/parts/audio-levels.d.ts +15 -0
  24. package/x/timeline/renderers/player/parts/audio-levels.js +93 -0
  25. package/x/timeline/renderers/player/parts/audio-levels.js.map +1 -0
  26. package/x/timeline/renderers/player/parts/playback.d.ts +4 -1
  27. package/x/timeline/renderers/player/parts/playback.js +16 -5
  28. package/x/timeline/renderers/player/parts/playback.js.map +1 -1
  29. package/x/timeline/renderers/player/parts/types.d.ts +20 -0
  30. package/x/timeline/renderers/player/parts/types.js +2 -0
  31. package/x/timeline/renderers/player/parts/types.js.map +1 -0
  32. package/x/timeline/renderers/player/player.d.ts +4 -0
  33. package/x/timeline/renderers/player/player.js +2 -0
  34. package/x/timeline/renderers/player/player.js.map +1 -1
package/x/tests.html CHANGED
@@ -295,7 +295,7 @@ canvas {
295
295
  }
296
296
  }
297
297
  </style>
298
- <script type=module src="tests.bundle.min.js?v=56e6e67d5eb1"></script>
298
+ <script type=module src="tests.bundle.min.js?v=ef9777288ba4"></script>
299
299
 
300
300
 
301
301
  <meta name="theme-color" content="#3cff9c">
@@ -0,0 +1,4 @@
1
+ export declare function measureAudioLevel(samples: Float32Array<ArrayBufferLike>): {
2
+ peak: number;
3
+ rms: number;
4
+ };
@@ -0,0 +1,13 @@
1
+ export function measureAudioLevel(samples) {
2
+ let peak = 0;
3
+ let sumSquares = 0;
4
+ for (const value of samples) {
5
+ peak = Math.max(peak, Math.abs(value));
6
+ sumSquares += value ** 2;
7
+ }
8
+ return {
9
+ peak,
10
+ rms: samples.length > 0 ? Math.sqrt(sumSquares / samples.length) : 0
11
+ };
12
+ }
13
+ //# sourceMappingURL=audio-level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-level.js","sourceRoot":"","sources":["../../../../s/timeline/renderers/parts/audio-level.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,iBAAiB,CAAC,OAAsC;IACvE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,UAAU,GAAG,CAAC,CAAA;IAElB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QACtC,UAAU,IAAI,KAAK,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,OAAO;QACN,IAAI;QACJ,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACpE,CAAA;AACF,CAAC"}
@@ -6,12 +6,15 @@ export async function initStreams(pool, items, from) {
6
6
  return;
7
7
  if (item.enabled === false)
8
8
  return;
9
+ if (localTime >= item.duration)
10
+ return;
9
11
  const sink = await pool.getSink(item.mediaHash);
10
12
  if (!sink)
11
13
  return;
12
14
  const mediaTime = item.start + localTime;
15
+ const mediaEnd = item.start + item.duration;
13
16
  const offset = seconds((from - mediaTime) / 1000);
14
- const iter = sink.samples(mediaTime / 1000);
17
+ const iter = sink.samples(mediaTime / 1000, mediaEnd / 1000);
15
18
  const first = await iter.next();
16
19
  if (first.done)
17
20
  return;
@@ -23,6 +26,7 @@ export async function initStreams(pool, items, from) {
23
26
  get currentSample() { return currentSample; },
24
27
  timelineTime: () => seconds(offset + currentSample.timestamp),
25
28
  output: () => ({
29
+ itemId: item.id,
26
30
  sample: currentSample,
27
31
  timestamp: offset + currentSample.timestamp,
28
32
  gain: item.gain ?? 1
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../s/timeline/renderers/parts/samplers/audio/parts/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,oCAAoC,CAAA;AAE1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAAmB,EACnB,KAAmC,EACnC,IAAQ;IAER,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,SAAS,EAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;YAC3B,OAAM;QACP,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YACzB,OAAM;QAEP,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YACR,OAAM;QAEP,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;QAE3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC/B,IAAI,KAAK,CAAC,IAAI;YACb,OAAM;QAEP,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAA;QAC/B,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE7B,OAAO;YACN,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;YACpB,IAAI,aAAa,KAAI,OAAO,aAAa,CAAA,CAAA,CAAC;YAC1C,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;YAC7D,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS;gBAC3C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;aACpB,CAAC;YACF,OAAO,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAA;gBAChC,IAAI,MAAM,CAAC,IAAI;oBACd,OAAO,KAAK,CAAA;gBAEb,aAAa,GAAG,MAAM,CAAC,KAAK,CAAA;gBAC5B,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBAEzB,OAAO,IAAI,CAAA;YACZ,CAAC;SACD,CAAA;IACF,CAAC,CAAC,CACF,CAAA;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA0B,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../s/timeline/renderers/parts/samplers/audio/parts/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,IAAI,EAAC,MAAM,8BAA8B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,oCAAoC,CAAA;AAE1D,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAAmB,EACnB,KAAmC,EACnC,IAAQ;IAER,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,SAAS,EAAC,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;YAC3B,OAAM;QACP,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YACzB,OAAM;QACP,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC7B,OAAM;QAEP,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI;YACR,OAAM;QAEP,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAA;QAE5D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC/B,IAAI,KAAK,CAAC,IAAI;YACb,OAAM;QAEP,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAA;QAC/B,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE7B,OAAO;YACN,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;YACpB,IAAI,aAAa,KAAI,OAAO,aAAa,CAAA,CAAA,CAAC;YAC1C,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;YAC7D,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,aAAa;gBACrB,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS;gBAC3C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;aACpB,CAAC;YACF,OAAO,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAA;gBAChC,IAAI,MAAM,CAAC,IAAI;oBACd,OAAO,KAAK,CAAA;gBAEb,aAAa,GAAG,MAAM,CAAC,KAAK,CAAA;gBAC5B,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBAEzB,OAAO,IAAI,CAAA;YACZ,CAAC;SACD,CAAA;IACF,CAAC,CAAC,CACF,CAAA;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA0B,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACpE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { AudioSample } from "mediabunny";
2
+ import { Id } from "../../../../../parts/basics.js";
2
3
  import { Seconds } from "../../../../../../units/seconds.js";
3
4
  export type ActiveStream = {
4
5
  offset: Seconds;
@@ -6,6 +7,7 @@ export type ActiveStream = {
6
7
  currentSample: AudioSample;
7
8
  timelineTime: () => Seconds;
8
9
  output: () => {
10
+ itemId: Id;
9
11
  sample: AudioSample;
10
12
  timestamp: number;
11
13
  gain: number;
@@ -4,6 +4,7 @@ import { TimelineFile } from "../../../../parts/basics.js";
4
4
  import { DecoderSource } from "../../../../../driver/fns/schematic.js";
5
5
  export declare function createAudioSampler(resolveMedia: (hash: string) => DecoderSource): {
6
6
  sampleAudio(timeline: TimelineFile, from: Ms): AsyncGenerator<{
7
+ itemId: import("../../../../parts/basics.js").Id;
7
8
  sample: AudioSample;
8
9
  timestamp: number;
9
10
  gain: number;
@@ -0,0 +1,15 @@
1
+ import { Ms } from '../../../../units/ms.js';
2
+ import { Id } from '../../../parts/basics.js';
3
+ import { AudioItemSelector, AudioLevelListener, AudioLevelObserver } from './types.js';
4
+ export declare class AudioLevels implements AudioLevelObserver {
5
+ #private;
6
+ private context;
7
+ private time;
8
+ private isPlaying;
9
+ constructor(context: AudioContext, time: () => Ms, isPlaying: () => boolean);
10
+ on(items: AudioItemSelector, listener: AudioLevelListener): () => void;
11
+ attach(itemId: Id, node: GainNode): void;
12
+ detach(node: GainNode): void;
13
+ start(): void;
14
+ stop(): void;
15
+ }
@@ -0,0 +1,93 @@
1
+ import { measureAudioLevel } from '../../parts/audio-level.js';
2
+ export class AudioLevels {
3
+ context;
4
+ time;
5
+ isPlaying;
6
+ #meters = new Set();
7
+ #items = new Map();
8
+ #frame = null;
9
+ #running = false;
10
+ constructor(context, time, isPlaying) {
11
+ this.context = context;
12
+ this.time = time;
13
+ this.isPlaying = isPlaying;
14
+ }
15
+ on(items, listener) {
16
+ const silent = this.context.createGain();
17
+ const analyser = this.context.createAnalyser();
18
+ silent.gain.value = 0;
19
+ analyser.smoothingTimeConstant = 0;
20
+ analyser.connect(silent);
21
+ silent.connect(this.context.destination);
22
+ const meter = {
23
+ items,
24
+ silent,
25
+ listener,
26
+ analyser,
27
+ nodes: new Set(),
28
+ samples: new Float32Array(analyser.fftSize)
29
+ };
30
+ this.#meters.add(meter);
31
+ if (this.isPlaying())
32
+ this.start();
33
+ return () => {
34
+ if (!this.#meters.delete(meter))
35
+ return;
36
+ for (const node of meter.nodes)
37
+ node.disconnect(analyser);
38
+ analyser.disconnect();
39
+ silent.disconnect();
40
+ if (!this.#meters.size)
41
+ this.stop();
42
+ };
43
+ }
44
+ attach(itemId, node) {
45
+ this.#items.set(node, itemId);
46
+ }
47
+ detach(node) {
48
+ this.#items.delete(node);
49
+ for (const meter of this.#meters) {
50
+ if (meter.nodes.delete(node))
51
+ node.disconnect(meter.analyser);
52
+ }
53
+ }
54
+ start() {
55
+ if (this.#running || !this.#meters.size)
56
+ return;
57
+ this.#running = true;
58
+ this.#frame = requestAnimationFrame(() => this.#tick());
59
+ }
60
+ stop() {
61
+ this.#running = false;
62
+ if (this.#frame !== null)
63
+ cancelAnimationFrame(this.#frame);
64
+ this.#frame = null;
65
+ }
66
+ #tick() {
67
+ if (!this.#running)
68
+ return;
69
+ for (const meter of this.#meters) {
70
+ this.#sync(meter);
71
+ meter.analyser.getFloatTimeDomainData(meter.samples);
72
+ meter.listener({ time: this.time(), ...measureAudioLevel(meter.samples) });
73
+ }
74
+ if (this.#running)
75
+ this.#frame = requestAnimationFrame(() => this.#tick());
76
+ }
77
+ #sync(meter) {
78
+ const selected = new Set(meter.items());
79
+ for (const [node, itemId] of this.#items) {
80
+ const connected = meter.nodes.has(node);
81
+ const shouldConnect = selected.has(itemId);
82
+ if (shouldConnect && !connected) {
83
+ node.connect(meter.analyser);
84
+ meter.nodes.add(node);
85
+ }
86
+ else if (!shouldConnect && connected) {
87
+ node.disconnect(meter.analyser);
88
+ meter.nodes.delete(node);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=audio-levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-levels.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/audio-levels.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { AudioLevels } from "./audio-levels.js";
1
2
  import { Fps } from '../../../../units/fps.js';
2
3
  import { Ms } from '../../../../units/ms.js';
3
4
  import { Driver } from '../../../../driver/driver.js';
@@ -9,8 +10,10 @@ export declare class Playback {
9
10
  private driver;
10
11
  private timeline;
11
12
  private resolveMedia;
13
+ audioLevels: AudioLevels;
12
14
  audioSampler: {
13
15
  sampleAudio(timeline: TimelineFile, from: Ms): AsyncGenerator<{
16
+ itemId: import("../../../parts/basics.js").Id;
14
17
  sample: import("mediabunny").AudioSample;
15
18
  timestamp: number;
16
19
  gain: number;
@@ -24,7 +27,7 @@ export declare class Playback {
24
27
  onTick: import("@e280/stz").Pub<[]>;
25
28
  audioContext: AudioContext;
26
29
  audioGain: GainNode;
27
- audioNodes: Set<AudioBufferSourceNode>;
30
+ audioNodes: Map<AudioBufferSourceNode, GainNode>;
28
31
  constructor(driver: Driver, timeline: TimelineFile, resolveMedia: (hash: string) => DecoderSource);
29
32
  update(timeline: TimelineFile): void;
30
33
  get isPlaying(): boolean;
@@ -1,3 +1,4 @@
1
+ import { AudioLevels } from "./audio-levels.js";
1
2
  import { ms } from '../../../../units/ms.js';
2
3
  import { realtime } from '../../parts/schedulers.js';
3
4
  import { seconds } from '../../../../units/seconds.js';
@@ -9,6 +10,7 @@ export class Playback {
9
10
  driver;
10
11
  timeline;
11
12
  resolveMedia;
13
+ audioLevels;
12
14
  audioSampler;
13
15
  seekVisualSampler;
14
16
  playVisualSampler = null;
@@ -20,7 +22,7 @@ export class Playback {
20
22
  onTick = this.#controller.onTick;
21
23
  audioContext = new AudioContext({ sampleRate: 48000 });
22
24
  audioGain = this.audioContext.createGain();
23
- audioNodes = new Set();
25
+ audioNodes = new Map();
24
26
  #audioAbort = null;
25
27
  constructor(driver, timeline, resolveMedia) {
26
28
  this.driver = driver;
@@ -28,6 +30,7 @@ export class Playback {
28
30
  this.resolveMedia = resolveMedia;
29
31
  this.audioGain.connect(this.audioContext.destination);
30
32
  this.audioGain.gain.value = 0.7 ** 2;
33
+ this.audioLevels = new AudioLevels(this.audioContext, () => this.currentTime, () => this.#controller.isPlaying());
31
34
  this.seekVisualSampler = createVisualSampler(this.resolveMedia);
32
35
  this.audioSampler = createAudioSampler(this.resolveMedia);
33
36
  this.#samples();
@@ -68,11 +71,13 @@ export class Playback {
68
71
  this.playVisualSampler = new CursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
69
72
  this.reversePlayVisualSampler = new ReverseCursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
70
73
  this.#controller.play();
74
+ this.audioLevels.start();
71
75
  this.#startAudio();
72
76
  }
73
77
  pause() {
74
78
  this.#playbackStart = this.currentTime;
75
79
  this.#controller.pause();
80
+ this.audioLevels.stop();
76
81
  this.#stopAudio();
77
82
  if (this.playVisualSampler) {
78
83
  this.playVisualSampler.cancel();
@@ -127,8 +132,10 @@ export class Playback {
127
132
  #stopAudio() {
128
133
  this.#audioAbort?.abort();
129
134
  this.#audioAbort = null;
130
- for (const node of this.audioNodes)
135
+ for (const [node, gain] of this.audioNodes) {
131
136
  node.stop();
137
+ this.audioLevels.detach(gain);
138
+ }
132
139
  this.audioNodes.clear();
133
140
  }
134
141
  async #startAudio() {
@@ -140,7 +147,7 @@ export class Playback {
140
147
  const ctx = this.audioContext;
141
148
  if (this.#audioStartSec === null)
142
149
  return;
143
- for await (const { sample, timestamp, gain } of this.audioSampler.sampleAudio(this.timeline, ms(from * 1000))) {
150
+ for await (const { itemId, sample, timestamp, gain } of this.audioSampler.sampleAudio(this.timeline, ms(from * 1000))) {
144
151
  if (signal.aborted || !this.#controller.isPlaying())
145
152
  return;
146
153
  while (timestamp - (ctx.currentTime - this.#audioStartSec + from) > 0.75)
@@ -151,8 +158,12 @@ export class Playback {
151
158
  itemGain.gain.value = gain;
152
159
  node.connect(itemGain);
153
160
  itemGain.connect(this.audioGain);
154
- node.onended = () => this.audioNodes.delete(node);
155
- this.audioNodes.add(node);
161
+ node.onended = () => {
162
+ this.audioNodes.delete(node);
163
+ this.audioLevels.detach(itemGain);
164
+ };
165
+ this.audioNodes.set(node, itemGain);
166
+ this.audioLevels.attach(itemId, itemGain);
156
167
  const startAt = this.#audioStartSec + timestamp - from;
157
168
  startAt >= ctx.currentTime
158
169
  ? node.start(startAt)
@@ -1 +1 @@
1
- {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/playback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/playback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Ms } from "../../../../units/ms.js";
2
+ import { Id } from "../../../parts/basics.js";
3
+ export type AudioLevel = {
4
+ time: Ms;
5
+ peak: number;
6
+ rms: number;
7
+ };
8
+ export type AudioItemSelector = () => Iterable<Id>;
9
+ export type AudioLevelListener = (level: AudioLevel) => void;
10
+ export type AudioLevelObserver = {
11
+ on(items: AudioItemSelector, listener: AudioLevelListener): () => void;
12
+ };
13
+ export type Meter = {
14
+ items: AudioItemSelector;
15
+ listener: AudioLevelListener;
16
+ analyser: AnalyserNode;
17
+ silent: GainNode;
18
+ samples: Float32Array<ArrayBuffer>;
19
+ nodes: Set<GainNode>;
20
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/types.ts"],"names":[],"mappings":""}
@@ -1,6 +1,7 @@
1
1
  import { Playback } from "./parts/playback.js";
2
2
  import { Driver } from "../../../driver/driver.js";
3
3
  import { TimelineFile } from "../../parts/basics.js";
4
+ import { AudioLevelObserver } from "./parts/types.js";
4
5
  import { DecoderSource } from "../../../driver/fns/schematic.js";
5
6
  type ResolveMedia = (hash: string) => DecoderSource;
6
7
  export declare class VideoPlayer {
@@ -8,6 +9,9 @@ export declare class VideoPlayer {
8
9
  private driver;
9
10
  canvas: HTMLCanvasElement;
10
11
  playback: Playback;
12
+ readonly audio: {
13
+ levels: AudioLevelObserver;
14
+ };
11
15
  constructor(driver: Driver, resolveMedia: ResolveMedia, timeline: TimelineFile);
12
16
  play(): Promise<void>;
13
17
  pause(): void;
@@ -5,11 +5,13 @@ export class VideoPlayer {
5
5
  driver;
6
6
  canvas;
7
7
  playback;
8
+ audio;
8
9
  #pendingSeek = null;
9
10
  #flushTask = null;
10
11
  constructor(driver, resolveMedia, timeline) {
11
12
  this.driver = driver;
12
13
  this.playback = new Playback(driver, timeline, resolveMedia);
14
+ this.audio = { levels: this.playback.audioLevels };
13
15
  this.canvas = driver.compositor.pixi.renderer.canvas;
14
16
  }
15
17
  async play() {
@@ -1 +1 @@
1
- {"version":3,"file":"player.js","sourceRoot":"","sources":["../../../../s/timeline/renderers/player/player.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,sBAAsB,CAAA;AACvC,OAAO,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAA;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAO5C,MAAM,OAAO,WAAW;IAQd;IAPT,MAAM,CAAmB;IACzB,QAAQ,CAAU;IAElB,YAAY,GAAkB,IAAI,CAAA;IAClC,UAAU,GAAyB,IAAI,CAAA;IAEvC,YACS,MAAc,EACtB,YAA0B,EAC1B,QAAsB;QAFd,WAAM,GAAN,MAAM,CAAQ;QAItB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,CAAC,MAAc;QAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;QAC1B,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACpF,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,MAAc;QACnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAA;IAChC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAA;IAC/B,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA;IAC9B,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;IACjC,CAAC;IAED,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;IAClC,CAAC;IAED,IAAI,YAAY,CAAC,IAAY;QAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAA;IAClC,CAAC;IAED;;MAEE;IACF,KAAK,CAAC,MAAM,CAAC,QAAsB;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS;YAClB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAA;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"player.js","sourceRoot":"","sources":["../../../../s/timeline/renderers/player/player.ts"],"names":[],"mappings":"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"}