timingsrc 1.2.15 → 1.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/build/es2019/factories/set-playback-rate.d.ts +1 -1
- package/build/es2019/factories/set-playback-rate.d.ts.map +1 -1
- package/build/es2019/factories/set-playback-rate.js +3 -3
- package/build/es2019/factories/set-playback-rate.js.map +1 -1
- package/build/es2019/factories/set-timingsrc-with-custom-update-function.d.ts +1 -1
- package/build/es2019/factories/set-timingsrc-with-custom-update-function.d.ts.map +1 -1
- package/build/es2019/factories/set-timingsrc-with-custom-update-function.js +12 -2
- package/build/es2019/factories/set-timingsrc-with-custom-update-function.js.map +1 -1
- package/build/es2019/module.d.ts.map +1 -1
- package/build/es2019/module.js +2 -2
- package/build/es2019/module.js.map +1 -1
- package/build/es5/bundle.js +20 -7
- package/package.json +8 -8
- package/src/factories/set-playback-rate.ts +7 -3
- package/src/factories/set-timingsrc-with-custom-update-function.ts +15 -1
- package/src/module.ts +8 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const createSetPlaybackRate: (playbackRateAssignments: WeakMap<HTMLMediaElement, [number, number]
|
|
1
|
+
export declare const createSetPlaybackRate: (negativeMaximum: number, playbackRateAssignments: WeakMap<HTMLMediaElement, [number, number]>, positiveMinimum: number) => (mediaElement: HTMLMediaElement, previousValue: number, nextValue: number) => void;
|
|
2
2
|
//# sourceMappingURL=set-playback-rate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-playback-rate.d.ts","sourceRoot":"","sources":["../../../src/factories/set-playback-rate.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"set-playback-rate.d.ts","sourceRoot":"","sources":["../../../src/factories/set-playback-rate.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,oBACb,MAAM,2BACE,QAAQ,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,mBACnD,MAAM,oBAED,gBAAgB,iBAAiB,MAAM,aAAa,MAAM,SAcnF,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export const createSetPlaybackRate = (playbackRateAssignments) => {
|
|
1
|
+
export const createSetPlaybackRate = (negativeMaximum, playbackRateAssignments, positiveMinimum) => {
|
|
2
2
|
return (mediaElement, previousValue, nextValue) => {
|
|
3
3
|
const playbackRateAssignment = playbackRateAssignments.get(mediaElement);
|
|
4
4
|
if (playbackRateAssignment === undefined ||
|
|
5
5
|
playbackRateAssignment[0] !== previousValue ||
|
|
6
6
|
playbackRateAssignment[1] !== nextValue) {
|
|
7
|
-
//
|
|
8
|
-
mediaElement.playbackRate = nextValue
|
|
7
|
+
// Bug #6: Chrome does not adjust the tempo when the playbackRate is very close to 1.
|
|
8
|
+
mediaElement.playbackRate = nextValue > 1 ? Math.max(positiveMinimum, nextValue) : Math.min(negativeMaximum, nextValue);
|
|
9
9
|
playbackRateAssignments.set(mediaElement, [mediaElement.playbackRate, nextValue]);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-playback-rate.js","sourceRoot":"","sources":["../../../src/factories/set-playback-rate.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"version":3,"file":"set-playback-rate.js","sourceRoot":"","sources":["../../../src/factories/set-playback-rate.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,eAAuB,EACvB,uBAAoE,EACpE,eAAuB,EACzB,EAAE;IACA,OAAO,CAAC,YAA8B,EAAE,aAAqB,EAAE,SAAiB,EAAE,EAAE;QAChF,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEzE,IACI,sBAAsB,KAAK,SAAS;YACpC,sBAAsB,CAAC,CAAC,CAAC,KAAK,aAAa;YAC3C,sBAAsB,CAAC,CAAC,CAAC,KAAK,SAAS,EACzC;YACE,qFAAqF;YACrF,YAAY,CAAC,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;YAExH,uBAAuB,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;SACrF;IACL,CAAC,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -3,5 +3,5 @@ import type { ITimingObject } from 'timing-object';
|
|
|
3
3
|
import { IUpdateVector } from '../interfaces';
|
|
4
4
|
import { TPrepareTimingStateVectorFunction, TUpdateFunction } from '../types';
|
|
5
5
|
import type { createUpdateMediaElement } from './update-media-element';
|
|
6
|
-
export declare const createSetTimingsrcWithCustomUpdateFunction: (animationFrame: TAnimationFrameFunction, document: Document, on: TOnFunction, updateMediaElement: ReturnType<typeof createUpdateMediaElement>) => <UpdateVectorWithCustomState extends IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: ITimingObject, updateFunction: TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction) => () => void;
|
|
6
|
+
export declare const createSetTimingsrcWithCustomUpdateFunction: (animationFrame: TAnimationFrameFunction, clearInterval: Window['clearInterval'], document: Document, on: TOnFunction, setInterval: Window['setInterval'], updateMediaElement: ReturnType<typeof createUpdateMediaElement>) => <UpdateVectorWithCustomState extends IUpdateVector>(mediaElement: HTMLMediaElement, timingObject: ITimingObject, updateFunction: TUpdateFunction<UpdateVectorWithCustomState>, prepareTimingStateVector?: null | TPrepareTimingStateVectorFunction) => () => void;
|
|
7
7
|
//# sourceMappingURL=set-timingsrc-with-custom-update-function.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-timingsrc-with-custom-update-function.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,eAAO,MAAM,0CAA0C,mBACnC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"set-timingsrc-with-custom-update-function.d.ts","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,eAAO,MAAM,0CAA0C,mBACnC,uBAAuB,iBACxB,MAAM,CAAC,eAAe,CAAC,YAC5B,QAAQ,MACd,WAAW,eACF,MAAM,CAAC,aAAa,CAAC,sBACd,WAAW,+BAA+B,CAAC,uEAG7C,gBAAgB,gBAChB,aAAa,2FAED,IAAI,GAAG,iCAAiC,eA0EzE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, document, on, updateMediaElement) => {
|
|
1
|
+
export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, clearInterval, document, on, setInterval, updateMediaElement) => {
|
|
2
2
|
return (mediaElement, timingObject, updateFunction, prepareTimingStateVector = null) => {
|
|
3
3
|
let previousUpdateVectorWithCustomState = null;
|
|
4
4
|
const update = () => {
|
|
@@ -18,10 +18,20 @@ export const createSetTimingsrcWithCustomUpdateFunction = (animationFrame, docum
|
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
const updateConsistently = () => {
|
|
21
|
+
let intervalId = setInterval(() => updateOnce(), 100);
|
|
22
|
+
const restartInterval = () => {
|
|
23
|
+
clearInterval(intervalId);
|
|
24
|
+
intervalId = setInterval(() => updateOnce(), 100);
|
|
25
|
+
};
|
|
21
26
|
const unsubscribeFunctions = [
|
|
22
|
-
|
|
27
|
+
() => clearInterval(intervalId),
|
|
28
|
+
animationFrame()(() => {
|
|
29
|
+
restartInterval();
|
|
30
|
+
updateOnce();
|
|
31
|
+
}),
|
|
23
32
|
on(timingObject, 'change')(() => {
|
|
24
33
|
if (document.visibilityState === 'hidden') {
|
|
34
|
+
restartInterval();
|
|
25
35
|
updateOnce();
|
|
26
36
|
}
|
|
27
37
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-timingsrc-with-custom-update-function.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,0CAA0C,GAAG,CACtD,cAAuC,EACvC,QAAkB,EAClB,EAAe,EACf,kBAA+D,EACjE,EAAE;IACA,OAAO,CACH,YAA8B,EAC9B,YAA2B,EAC3B,cAA4D,EAC5D,2BAAqE,IAAI,EAC3E,EAAE;QACA,IAAI,mCAAmC,GAAuC,IAAI,CAAC;QAEnF,MAAM,MAAM,GAAG,GAAG,EAAE;YAChB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;YAC7D,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;YAE/C,mCAAmC,GAAG,cAAc,CAChD,wBAAwB,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,EACnG,WAAW,EACX,mCAAmC,CACtC,CAAC;YAEF,MAAM,iBAAiB,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,mCAAmC,CAAC;YAEnE,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEnG,OAAO,QAAQ,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,WAAuB,CAAC;QAE5B,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,MAAM,EAAE,EAAE;gBACX,WAAW,EAAE,CAAC;gBAEd,WAAW,GAAG,gBAAgB,EAAE,CAAC;aACpC;QACL,CAAC,CAAC;QACF,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC5B,MAAM,oBAAoB,GAAG;gBACzB,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"set-timingsrc-with-custom-update-function.js","sourceRoot":"","sources":["../../../src/factories/set-timingsrc-with-custom-update-function.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB;;;;;;;;EAA0D,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB;;;;;;;;EAA0D,CAAC;AAS5F,eAAO,MAAM,oCAAoC,sVAOhD,CAAC;AAEF,eAAO,MAAM,YAAY,4LAQxB,CAAC"}
|
package/build/es2019/module.js
CHANGED
|
@@ -16,7 +16,7 @@ import { play } from './functions/play';
|
|
|
16
16
|
export { createSetTimingsrc };
|
|
17
17
|
export { createUpdateGradually };
|
|
18
18
|
export const createUpdateStepwise = createUpdateStepwiseFactory(translateTimingStateVector);
|
|
19
|
-
const updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(new WeakMap()));
|
|
20
|
-
export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement);
|
|
19
|
+
const updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881));
|
|
20
|
+
export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(animationFrame, clearInterval, document, on, setInterval, updateMediaElement);
|
|
21
21
|
export const setTimingsrc = createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, createWindow());
|
|
22
22
|
//# sourceMappingURL=module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0CAA0C,EAAE,MAAM,uDAAuD,CAAC;AACnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;AAE5F,MAAM,kBAAkB,GAAG,wBAAwB,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0CAA0C,EAAE,MAAM,uDAAuD,CAAC;AACnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,sDAAsD,CAAC;AAC5G,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;AAE5F,MAAM,kBAAkB,GAAG,wBAAwB,CAC/C,KAAK,EACL,IAAI,EACJ,oBAAoB,CAAC,IAAI,OAAO,EAAE,CAAC,EACnC,qBAAqB,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAC1F,cAAc,EACd,aAAa,EACb,QAAQ,EACR,EAAE,EACF,WAAW,EACX,kBAAkB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CACjD,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oCAAoC,EACpC,oCAAoC,EACpC,YAAY,EAAE,CACjB,CAAC"}
|
package/build/es5/bundle.js
CHANGED
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
var createSetPlaybackRate = function createSetPlaybackRate(playbackRateAssignments) {
|
|
34
|
+
var createSetPlaybackRate = function createSetPlaybackRate(negativeMaximum, playbackRateAssignments, positiveMinimum) {
|
|
35
35
|
return function (mediaElement, previousValue, nextValue) {
|
|
36
36
|
var playbackRateAssignment = playbackRateAssignments.get(mediaElement);
|
|
37
37
|
if (playbackRateAssignment === undefined || playbackRateAssignment[0] !== previousValue || playbackRateAssignment[1] !== nextValue) {
|
|
38
|
-
//
|
|
39
|
-
mediaElement.playbackRate = nextValue
|
|
38
|
+
// Bug #6: Chrome does not adjust the tempo when the playbackRate is very close to 1.
|
|
39
|
+
mediaElement.playbackRate = nextValue > 1 ? Math.max(positiveMinimum, nextValue) : Math.min(negativeMaximum, nextValue);
|
|
40
40
|
playbackRateAssignments.set(mediaElement, [mediaElement.playbackRate, nextValue]);
|
|
41
41
|
}
|
|
42
42
|
};
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, document, on, updateMediaElement) {
|
|
52
|
+
var createSetTimingsrcWithCustomUpdateFunction = function createSetTimingsrcWithCustomUpdateFunction(animationFrame, clearInterval, document, on, setInterval, updateMediaElement) {
|
|
53
53
|
return function (mediaElement, timingObject, updateFunction) {
|
|
54
54
|
var prepareTimingStateVector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
55
55
|
var previousUpdateVectorWithCustomState = null;
|
|
@@ -74,10 +74,23 @@
|
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
var updateConsistently = function updateConsistently() {
|
|
77
|
-
var
|
|
77
|
+
var intervalId = setInterval(function () {
|
|
78
78
|
return updateOnce();
|
|
79
|
+
}, 100);
|
|
80
|
+
var restartInterval = function restartInterval() {
|
|
81
|
+
clearInterval(intervalId);
|
|
82
|
+
intervalId = setInterval(function () {
|
|
83
|
+
return updateOnce();
|
|
84
|
+
}, 100);
|
|
85
|
+
};
|
|
86
|
+
var unsubscribeFunctions = [function () {
|
|
87
|
+
return clearInterval(intervalId);
|
|
88
|
+
}, animationFrame()(function () {
|
|
89
|
+
restartInterval();
|
|
90
|
+
updateOnce();
|
|
79
91
|
}), on(timingObject, 'change')(function () {
|
|
80
92
|
if (document.visibilityState === 'hidden') {
|
|
93
|
+
restartInterval();
|
|
81
94
|
updateOnce();
|
|
82
95
|
}
|
|
83
96
|
})];
|
|
@@ -364,8 +377,8 @@
|
|
|
364
377
|
};
|
|
365
378
|
|
|
366
379
|
var createUpdateStepwise = createUpdateStepwiseFactory(timingObject.translateTimingStateVector);
|
|
367
|
-
var updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(new WeakMap()));
|
|
368
|
-
var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, document, subscribableThings.on, updateMediaElement);
|
|
380
|
+
var updateMediaElement = createUpdateMediaElement(pause, play, createSetCurrentTime(new WeakMap()), createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881));
|
|
381
|
+
var setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(subscribableThings.animationFrame, clearInterval, document, subscribableThings.on, setInterval, updateMediaElement);
|
|
369
382
|
var setTimingsrc = createDefaultSetTimingsrc(createComputeVelocity, createSetTimingsrc, createUpdateGradually, createUpdateStepwise, determineSupportedPlaybackRateValues, setTimingsrcWithCustomUpdateFunction, createWindow());
|
|
370
383
|
|
|
371
384
|
exports.createSetTimingsrc = createSetTimingsrc;
|
package/package.json
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@babel/runtime": "^7.20.13",
|
|
13
|
-
"subscribable-things": "^2.1.
|
|
14
|
-
"timing-object": "^3.1.
|
|
13
|
+
"subscribable-things": "^2.1.13",
|
|
14
|
+
"timing-object": "^3.1.54",
|
|
15
15
|
"tslib": "^2.5.0"
|
|
16
16
|
},
|
|
17
17
|
"description": "A library to synchronize a MediaElement with a TimingObject.",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"commitizen": "^4.3.0",
|
|
28
28
|
"cz-conventional-changelog": "^3.3.0",
|
|
29
29
|
"eslint": "^8.33.0",
|
|
30
|
-
"eslint-config-holy-grail": "^55.0.
|
|
31
|
-
"grunt": "^1.6.
|
|
30
|
+
"eslint-config-holy-grail": "^55.0.6",
|
|
31
|
+
"grunt": "^1.6.1",
|
|
32
32
|
"grunt-cli": "^1.4.3",
|
|
33
33
|
"grunt-sh": "^0.2.0",
|
|
34
34
|
"husky": "^8.0.3",
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
"prettier": "^2.8.3",
|
|
46
46
|
"pretty-quick": "^3.1.3",
|
|
47
47
|
"rimraf": "^4.1.2",
|
|
48
|
-
"rollup": "^3.12.
|
|
48
|
+
"rollup": "^3.12.1",
|
|
49
49
|
"sinon": "^15.0.1",
|
|
50
50
|
"sinon-chai": "^3.7.0",
|
|
51
51
|
"ts-loader": "^9.4.2",
|
|
52
52
|
"tsconfig-holy-grail": "^12.0.0",
|
|
53
53
|
"tslint": "^6.1.3",
|
|
54
|
-
"tslint-config-holy-grail": "^54.0.
|
|
55
|
-
"typescript": "^4.9.
|
|
54
|
+
"tslint-config-holy-grail": "^54.0.1",
|
|
55
|
+
"typescript": "^4.9.5",
|
|
56
56
|
"webpack": "^5.75.0"
|
|
57
57
|
},
|
|
58
58
|
"files": [
|
|
@@ -75,5 +75,5 @@
|
|
|
75
75
|
"test": "grunt lint && grunt test"
|
|
76
76
|
},
|
|
77
77
|
"types": "build/es2019/module.d.ts",
|
|
78
|
-
"version": "1.
|
|
78
|
+
"version": "1.3.0"
|
|
79
79
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
export const createSetPlaybackRate = (
|
|
1
|
+
export const createSetPlaybackRate = (
|
|
2
|
+
negativeMaximum: number,
|
|
3
|
+
playbackRateAssignments: WeakMap<HTMLMediaElement, [number, number]>,
|
|
4
|
+
positiveMinimum: number
|
|
5
|
+
) => {
|
|
2
6
|
return (mediaElement: HTMLMediaElement, previousValue: number, nextValue: number) => {
|
|
3
7
|
const playbackRateAssignment = playbackRateAssignments.get(mediaElement);
|
|
4
8
|
|
|
@@ -7,8 +11,8 @@ export const createSetPlaybackRate = (playbackRateAssignments: WeakMap<HTMLMedia
|
|
|
7
11
|
playbackRateAssignment[0] !== previousValue ||
|
|
8
12
|
playbackRateAssignment[1] !== nextValue
|
|
9
13
|
) {
|
|
10
|
-
//
|
|
11
|
-
mediaElement.playbackRate = nextValue
|
|
14
|
+
// Bug #6: Chrome does not adjust the tempo when the playbackRate is very close to 1.
|
|
15
|
+
mediaElement.playbackRate = nextValue > 1 ? Math.max(positiveMinimum, nextValue) : Math.min(negativeMaximum, nextValue);
|
|
12
16
|
|
|
13
17
|
playbackRateAssignments.set(mediaElement, [mediaElement.playbackRate, nextValue]);
|
|
14
18
|
}
|
|
@@ -6,8 +6,10 @@ import type { createUpdateMediaElement } from './update-media-element';
|
|
|
6
6
|
|
|
7
7
|
export const createSetTimingsrcWithCustomUpdateFunction = (
|
|
8
8
|
animationFrame: TAnimationFrameFunction,
|
|
9
|
+
clearInterval: Window['clearInterval'],
|
|
9
10
|
document: Document,
|
|
10
11
|
on: TOnFunction,
|
|
12
|
+
setInterval: Window['setInterval'],
|
|
11
13
|
updateMediaElement: ReturnType<typeof createUpdateMediaElement>
|
|
12
14
|
) => {
|
|
13
15
|
return <UpdateVectorWithCustomState extends IUpdateVector>(
|
|
@@ -46,13 +48,25 @@ export const createSetTimingsrcWithCustomUpdateFunction = (
|
|
|
46
48
|
}
|
|
47
49
|
};
|
|
48
50
|
const updateConsistently = () => {
|
|
51
|
+
let intervalId = setInterval(() => updateOnce(), 100);
|
|
52
|
+
|
|
53
|
+
const restartInterval = () => {
|
|
54
|
+
clearInterval(intervalId);
|
|
55
|
+
|
|
56
|
+
intervalId = setInterval(() => updateOnce(), 100);
|
|
57
|
+
};
|
|
49
58
|
const unsubscribeFunctions = [
|
|
50
|
-
|
|
59
|
+
() => clearInterval(intervalId),
|
|
60
|
+
animationFrame()(() => {
|
|
61
|
+
restartInterval();
|
|
62
|
+
updateOnce();
|
|
63
|
+
}),
|
|
51
64
|
on(
|
|
52
65
|
timingObject,
|
|
53
66
|
'change'
|
|
54
67
|
)(() => {
|
|
55
68
|
if (document.visibilityState === 'hidden') {
|
|
69
|
+
restartInterval();
|
|
56
70
|
updateOnce();
|
|
57
71
|
}
|
|
58
72
|
})
|
package/src/module.ts
CHANGED
|
@@ -20,12 +20,19 @@ export { createUpdateGradually };
|
|
|
20
20
|
|
|
21
21
|
export const createUpdateStepwise = createUpdateStepwiseFactory(translateTimingStateVector);
|
|
22
22
|
|
|
23
|
-
const updateMediaElement = createUpdateMediaElement(
|
|
23
|
+
const updateMediaElement = createUpdateMediaElement(
|
|
24
|
+
pause,
|
|
25
|
+
play,
|
|
26
|
+
createSetCurrentTime(new WeakMap()),
|
|
27
|
+
createSetPlaybackRate(881 / 882, new WeakMap(), 882 / 881)
|
|
28
|
+
);
|
|
24
29
|
|
|
25
30
|
export const setTimingsrcWithCustomUpdateFunction = createSetTimingsrcWithCustomUpdateFunction(
|
|
26
31
|
animationFrame,
|
|
32
|
+
clearInterval,
|
|
27
33
|
document,
|
|
28
34
|
on,
|
|
35
|
+
setInterval,
|
|
29
36
|
updateMediaElement
|
|
30
37
|
);
|
|
31
38
|
|