@remotion/media 4.0.451 → 4.0.453
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/dist/audio/audio-for-preview.d.ts +0 -1
- package/dist/audio/audio-preview-iterator.d.ts +13 -39
- package/dist/audio/get-scheduled-time.d.ts +3 -3
- package/dist/audio/props.d.ts +0 -1
- package/dist/audio/sort-by-priority.d.ts +1 -0
- package/dist/audio-iterator-manager.d.ts +41 -47
- package/dist/canvas-ahead-of-time.d.ts +13 -0
- package/dist/debug-overlay/preview-overlay.d.ts +32 -47
- package/dist/esm/index.mjs +846 -918
- package/dist/index.d.ts +0 -1
- package/dist/make-iterator-with-priming.d.ts +9 -2
- package/dist/media-player.d.ts +16 -16
- package/dist/prewarm-iterator-for-looping.d.ts +5 -11
- package/dist/shared-audio-context-for-media-player.d.ts +2 -0
- package/dist/use-common-effects.d.ts +1 -8
- package/dist/video/props.d.ts +0 -1
- package/dist/video/video-for-preview.d.ts +0 -1
- package/dist/video/video-preview-iterator.d.ts +6 -3
- package/dist/video/video.d.ts +0 -1
- package/dist/video-iterator-manager.d.ts +4 -4
- package/package.json +3 -3
- package/dist/audio/decode-pool.d.ts +0 -7
- package/dist/audio-decode-scheduler.d.ts +0 -14
- package/dist/draw-with-object-fit.d.ts +0 -14
- package/dist/set-global-time-anchor.d.ts +0 -11
|
@@ -25,7 +25,6 @@ type InnerAudioProps = {
|
|
|
25
25
|
readonly toneFrequency?: number;
|
|
26
26
|
readonly audioStreamIndex?: number;
|
|
27
27
|
readonly fallbackHtml5AudioProps?: FallbackHtml5AudioProps;
|
|
28
|
-
readonly debugAudioScheduling?: boolean;
|
|
29
28
|
readonly onError?: MediaOnError;
|
|
30
29
|
readonly credentials?: RequestCredentials;
|
|
31
30
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { SharedAudioContextForMediaPlayer } from '../shared-audio-context-for-media-player';
|
|
1
|
+
import type { AudioBufferSink } from 'mediabunny';
|
|
3
2
|
export declare const HEALTHY_BUFFER_THRESHOLD_SECONDS = 1;
|
|
3
|
+
export declare const ALLOWED_GLOBAL_TIME_ANCHOR_SHIFT = 0.1;
|
|
4
4
|
export type QueuedNode = {
|
|
5
5
|
node: AudioBufferSourceNode;
|
|
6
6
|
timestamp: number;
|
|
@@ -13,57 +13,31 @@ export type QueuedPeriod = {
|
|
|
13
13
|
from: number;
|
|
14
14
|
until: number;
|
|
15
15
|
};
|
|
16
|
-
export declare const makeAudioIterator: ({ startFromSecond, maximumTimestamp,
|
|
16
|
+
export declare const makeAudioIterator: ({ startFromSecond, maximumTimestamp, audioSink, loop, playbackRate, sequenceDurationInSeconds, unscheduleAudioNode, }: {
|
|
17
17
|
startFromSecond: number;
|
|
18
18
|
maximumTimestamp: number;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
destroy: () => void;
|
|
26
|
-
};
|
|
27
|
-
debugAudioScheduling: boolean;
|
|
19
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
20
|
+
audioSink: AudioBufferSink;
|
|
21
|
+
loop: boolean;
|
|
22
|
+
playbackRate: number;
|
|
23
|
+
sequenceDurationInSeconds: number;
|
|
24
|
+
unscheduleAudioNode: (node: AudioBufferSourceNode) => void;
|
|
28
25
|
}) => {
|
|
29
|
-
destroy: (
|
|
30
|
-
|
|
26
|
+
destroy: () => void;
|
|
27
|
+
getNextFn: () => Promise<IteratorResult<import("../make-iterator-with-priming").BufferWithMediaTimestamp, void>>;
|
|
31
28
|
isDestroyed: () => boolean;
|
|
32
|
-
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime,
|
|
29
|
+
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, scheduledAtAnchor, }: {
|
|
33
30
|
node: AudioBufferSourceNode;
|
|
34
31
|
timestamp: number;
|
|
35
32
|
buffer: AudioBuffer;
|
|
36
33
|
scheduledTime: number;
|
|
37
|
-
playbackRate: number;
|
|
38
34
|
scheduledAtAnchor: number;
|
|
39
35
|
}) => void;
|
|
40
|
-
|
|
41
|
-
getAndClearAudioChunksForAfterResuming: () => {
|
|
42
|
-
buffer: AudioBuffer;
|
|
43
|
-
timestamp: number;
|
|
44
|
-
}[];
|
|
36
|
+
guessNextTimestamp: () => number;
|
|
45
37
|
getQueuedPeriod: () => {
|
|
46
38
|
from: number;
|
|
47
39
|
until: number;
|
|
48
40
|
} | null;
|
|
49
|
-
tryToSatisfySeek: (time: number, onBufferScheduled: (buffer: WrappedAudioBuffer) => void) => Promise<{
|
|
50
|
-
type: "not-satisfied";
|
|
51
|
-
reason: string;
|
|
52
|
-
} | {
|
|
53
|
-
type: "ended";
|
|
54
|
-
} | {
|
|
55
|
-
type: "satisfied";
|
|
56
|
-
}>;
|
|
57
|
-
bufferAsFarAsPossible: (onBufferScheduled: (buffer: WrappedAudioBuffer) => void, maxTimestamp: number) => Promise<{
|
|
58
|
-
type: "ended";
|
|
59
|
-
} | {
|
|
60
|
-
type: "waiting";
|
|
61
|
-
} | {
|
|
62
|
-
type: "max-reached";
|
|
63
|
-
}>;
|
|
64
|
-
addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
|
|
65
|
-
moveQueuedChunksToPauseQueue: () => void;
|
|
66
|
-
getNumberOfChunksAfterResuming: () => number;
|
|
67
41
|
};
|
|
68
42
|
export type AudioIterator = ReturnType<typeof makeAudioIterator>;
|
|
69
43
|
export declare const isAlreadyQueued: (time: number, queuedPeriod: {
|
|
@@ -4,11 +4,11 @@ export declare const getScheduledTime: ({ mediaTimestamp, targetTime, currentTim
|
|
|
4
4
|
currentTime: number;
|
|
5
5
|
sequenceStartTime: number;
|
|
6
6
|
}) => number;
|
|
7
|
-
export declare const getDurationOfNode: ({
|
|
8
|
-
mediaTimestamp: number;
|
|
7
|
+
export declare const getDurationOfNode: ({ bufferDuration, loopSegmentMediaEndTimestamp, offset, originalUnloopedMediaTimestamp, }: {
|
|
9
8
|
bufferDuration: number;
|
|
10
|
-
|
|
9
|
+
loopSegmentMediaEndTimestamp: number;
|
|
11
10
|
offset: number;
|
|
11
|
+
originalUnloopedMediaTimestamp: number;
|
|
12
12
|
}) => number;
|
|
13
13
|
export declare const getOffset: ({ mediaTimestamp, targetTime, sequenceStartTime, }: {
|
|
14
14
|
mediaTimestamp: number;
|
package/dist/audio/props.d.ts
CHANGED
|
@@ -1,92 +1,86 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type InputAudioTrack } from 'mediabunny';
|
|
2
2
|
import { type ScheduleAudioNodeResult } from 'remotion';
|
|
3
3
|
import type { DelayPlaybackIfNotPremounting } from './delay-playback-if-not-premounting';
|
|
4
|
+
import type { BufferWithMediaTimestamp } from './make-iterator-with-priming';
|
|
4
5
|
import type { Nonce } from './nonce-manager';
|
|
5
6
|
import type { SharedAudioContextForMediaPlayer } from './shared-audio-context-for-media-player';
|
|
6
|
-
type ScheduleAudioNode = (node: AudioBufferSourceNode, mediaTimestamp: number) => ScheduleAudioNodeResult;
|
|
7
|
-
export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfNotPremounting, sharedAudioContext,
|
|
7
|
+
type ScheduleAudioNode = (node: AudioBufferSourceNode, mediaTimestamp: number, originalUnloopedMediaTimestamp: number, currentTime: number) => ScheduleAudioNodeResult;
|
|
8
|
+
export declare const audioIteratorManager: ({ audioTrack, delayPlaybackHandleIfNotPremounting, sharedAudioContext, getSequenceEndTimestamp, getSequenceDurationInSeconds, getMediaEndTimestamp, getStartTime, initialMuted, drawDebugOverlay, initialPlaybackRate, initialTrimBefore, initialTrimAfter, initialSequenceOffset, initialSequenceDurationInFrames, initialLoop, initialFps, }: {
|
|
8
9
|
audioTrack: InputAudioTrack;
|
|
9
10
|
delayPlaybackHandleIfNotPremounting: () => DelayPlaybackIfNotPremounting;
|
|
10
11
|
sharedAudioContext: SharedAudioContextForMediaPlayer;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
getSequenceEndTimestamp: () => number;
|
|
13
|
+
getSequenceDurationInSeconds: () => number;
|
|
14
|
+
getMediaEndTimestamp: () => number;
|
|
13
15
|
getStartTime: () => number;
|
|
14
16
|
initialMuted: boolean;
|
|
15
17
|
drawDebugOverlay: () => void;
|
|
18
|
+
initialPlaybackRate: number;
|
|
19
|
+
initialTrimBefore: number | undefined;
|
|
20
|
+
initialTrimAfter: number | undefined;
|
|
21
|
+
initialSequenceOffset: number;
|
|
22
|
+
initialSequenceDurationInFrames: number;
|
|
23
|
+
initialLoop: boolean;
|
|
24
|
+
initialFps: number;
|
|
16
25
|
}) => {
|
|
17
|
-
startAudioIterator: ({ nonce, playbackRate, startFromSecond,
|
|
26
|
+
startAudioIterator: ({ nonce, playbackRate, startFromSecond, scheduleAudioNode, getTargetTime, logLevel, loop, unscheduleAudioNode, getAudioContextCurrentTimeMockedInTest, }: {
|
|
18
27
|
startFromSecond: number;
|
|
19
28
|
nonce: Nonce;
|
|
20
29
|
playbackRate: number;
|
|
21
|
-
getIsPlaying: () => boolean;
|
|
22
30
|
scheduleAudioNode: ScheduleAudioNode;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
debugAudioScheduling: boolean;
|
|
31
|
+
getTargetTime: (mediaTimestamp: number, currentTime: number) => number | null;
|
|
32
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
33
|
+
loop: boolean;
|
|
34
|
+
unscheduleAudioNode: (node: AudioBufferSourceNode) => void;
|
|
35
|
+
getAudioContextCurrentTimeMockedInTest: () => number;
|
|
29
36
|
}) => void;
|
|
30
|
-
pausePlayback: () => void;
|
|
31
37
|
getAudioBufferIterator: () => {
|
|
32
|
-
destroy: (
|
|
33
|
-
|
|
38
|
+
destroy: () => void;
|
|
39
|
+
getNextFn: () => Promise<IteratorResult<BufferWithMediaTimestamp, void>>;
|
|
34
40
|
isDestroyed: () => boolean;
|
|
35
|
-
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime,
|
|
41
|
+
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, scheduledAtAnchor, }: {
|
|
36
42
|
node: AudioBufferSourceNode;
|
|
37
43
|
timestamp: number;
|
|
38
44
|
buffer: AudioBuffer;
|
|
39
45
|
scheduledTime: number;
|
|
40
|
-
playbackRate: number;
|
|
41
46
|
scheduledAtAnchor: number;
|
|
42
47
|
}) => void;
|
|
43
|
-
|
|
44
|
-
getAndClearAudioChunksForAfterResuming: () => {
|
|
45
|
-
buffer: AudioBuffer;
|
|
46
|
-
timestamp: number;
|
|
47
|
-
}[];
|
|
48
|
+
guessNextTimestamp: () => number;
|
|
48
49
|
getQueuedPeriod: () => {
|
|
49
50
|
from: number;
|
|
50
51
|
until: number;
|
|
51
52
|
} | null;
|
|
52
|
-
tryToSatisfySeek: (time: number, onBufferScheduled: (buffer: WrappedAudioBuffer) => void) => Promise<{
|
|
53
|
-
type: "not-satisfied";
|
|
54
|
-
reason: string;
|
|
55
|
-
} | {
|
|
56
|
-
type: "ended";
|
|
57
|
-
} | {
|
|
58
|
-
type: "satisfied";
|
|
59
|
-
}>;
|
|
60
|
-
bufferAsFarAsPossible: (onBufferScheduled: (buffer: WrappedAudioBuffer) => void, maxTimestamp: number) => Promise<{
|
|
61
|
-
type: "ended";
|
|
62
|
-
} | {
|
|
63
|
-
type: "waiting";
|
|
64
|
-
} | {
|
|
65
|
-
type: "max-reached";
|
|
66
|
-
}>;
|
|
67
|
-
addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
|
|
68
|
-
moveQueuedChunksToPauseQueue: () => void;
|
|
69
|
-
getNumberOfChunksAfterResuming: () => number;
|
|
70
53
|
} | null;
|
|
71
54
|
destroyIterator: () => void;
|
|
72
|
-
seek: ({ newTime, nonce, playbackRate,
|
|
55
|
+
seek: ({ newTime, nonce, playbackRate, scheduleAudioNode, getTargetTime, logLevel, loop, trimBefore, trimAfter, sequenceOffset, sequenceDurationInFrames, fps, getAudioContextCurrentTimeMockedInTest, }: {
|
|
73
56
|
newTime: number;
|
|
74
57
|
nonce: Nonce;
|
|
75
58
|
playbackRate: number;
|
|
76
|
-
getIsPlaying: () => boolean;
|
|
77
59
|
scheduleAudioNode: ScheduleAudioNode;
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
getTargetTime: (mediaTimestamp: number, currentTime: number) => number | null;
|
|
61
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
62
|
+
loop: boolean;
|
|
63
|
+
trimBefore: number | undefined;
|
|
64
|
+
trimAfter: number | undefined;
|
|
65
|
+
sequenceOffset: number;
|
|
66
|
+
sequenceDurationInFrames: number;
|
|
67
|
+
fps: number;
|
|
68
|
+
getAudioContextCurrentTimeMockedInTest: () => number;
|
|
69
|
+
}) => void;
|
|
80
70
|
getAudioIteratorsCreated: () => number;
|
|
71
|
+
getTotalAudioScheduledInSeconds: () => number;
|
|
81
72
|
setMuted: (newMuted: boolean) => void;
|
|
82
73
|
setVolume: (volume: number) => void;
|
|
83
|
-
scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode,
|
|
74
|
+
scheduleAudioChunk: ({ buffer, mediaTimestamp, originalUnloopedMediaTimestamp, playbackRate, scheduleAudioNode, logLevel, currentTime, }: {
|
|
84
75
|
buffer: AudioBuffer;
|
|
85
76
|
mediaTimestamp: number;
|
|
86
77
|
playbackRate: number;
|
|
87
78
|
scheduleAudioNode: ScheduleAudioNode;
|
|
88
|
-
|
|
79
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
80
|
+
originalUnloopedMediaTimestamp: number;
|
|
81
|
+
currentTime: number;
|
|
89
82
|
}) => void;
|
|
83
|
+
waitForNScheduledNodes: (n: number) => Promise<void>;
|
|
90
84
|
};
|
|
91
85
|
export type AudioIteratorManager = ReturnType<typeof audioIteratorManager>;
|
|
92
86
|
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CanvasSink, WrappedCanvas } from 'mediabunny';
|
|
2
|
+
export type CanvasAheadOfTimeNext = {
|
|
3
|
+
type: 'ready';
|
|
4
|
+
frame: WrappedCanvas | null;
|
|
5
|
+
} | {
|
|
6
|
+
type: 'pending';
|
|
7
|
+
wait: () => Promise<WrappedCanvas | null>;
|
|
8
|
+
};
|
|
9
|
+
export declare const canvasesAheadOfTime: (videoSink: CanvasSink, startTimestamp?: number | undefined) => {
|
|
10
|
+
next: () => CanvasAheadOfTimeNext;
|
|
11
|
+
closeIterator: () => Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
export type CanvasAheadOfTimeIterator = ReturnType<typeof canvasesAheadOfTime>;
|
|
@@ -7,79 +7,64 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
|
|
|
7
7
|
} | null;
|
|
8
8
|
playing: boolean;
|
|
9
9
|
audioIteratorManager: {
|
|
10
|
-
startAudioIterator: ({ nonce, playbackRate, startFromSecond,
|
|
10
|
+
startAudioIterator: ({ nonce, playbackRate, startFromSecond, scheduleAudioNode, getTargetTime, logLevel, loop, unscheduleAudioNode, getAudioContextCurrentTimeMockedInTest, }: {
|
|
11
11
|
startFromSecond: number;
|
|
12
12
|
nonce: import("../nonce-manager").Nonce;
|
|
13
13
|
playbackRate: number;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
|
|
21
|
-
debugAudioScheduling: boolean;
|
|
14
|
+
scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, originalUnloopedMediaTimestamp: number, currentTime: number) => import("remotion").ScheduleAudioNodeResult;
|
|
15
|
+
getTargetTime: (mediaTimestamp: number, currentTime: number) => number | null;
|
|
16
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
17
|
+
loop: boolean;
|
|
18
|
+
unscheduleAudioNode: (node: AudioBufferSourceNode) => void;
|
|
19
|
+
getAudioContextCurrentTimeMockedInTest: () => number;
|
|
22
20
|
}) => void;
|
|
23
|
-
pausePlayback: () => void;
|
|
24
21
|
getAudioBufferIterator: () => {
|
|
25
|
-
destroy: (
|
|
26
|
-
|
|
22
|
+
destroy: () => void;
|
|
23
|
+
getNextFn: () => Promise<IteratorResult<import("../make-iterator-with-priming").BufferWithMediaTimestamp, void>>;
|
|
27
24
|
isDestroyed: () => boolean;
|
|
28
|
-
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime,
|
|
25
|
+
addQueuedAudioNode: ({ node, timestamp, buffer, scheduledTime, scheduledAtAnchor, }: {
|
|
29
26
|
node: AudioBufferSourceNode;
|
|
30
27
|
timestamp: number;
|
|
31
28
|
buffer: AudioBuffer;
|
|
32
29
|
scheduledTime: number;
|
|
33
|
-
playbackRate: number;
|
|
34
30
|
scheduledAtAnchor: number;
|
|
35
31
|
}) => void;
|
|
36
|
-
|
|
37
|
-
getAndClearAudioChunksForAfterResuming: () => {
|
|
38
|
-
buffer: AudioBuffer;
|
|
39
|
-
timestamp: number;
|
|
40
|
-
}[];
|
|
32
|
+
guessNextTimestamp: () => number;
|
|
41
33
|
getQueuedPeriod: () => {
|
|
42
34
|
from: number;
|
|
43
35
|
until: number;
|
|
44
36
|
} | null;
|
|
45
|
-
tryToSatisfySeek: (time: number, onBufferScheduled: (buffer: import("mediabunny").WrappedAudioBuffer) => void) => Promise<{
|
|
46
|
-
type: "not-satisfied";
|
|
47
|
-
reason: string;
|
|
48
|
-
} | {
|
|
49
|
-
type: "ended";
|
|
50
|
-
} | {
|
|
51
|
-
type: "satisfied";
|
|
52
|
-
}>;
|
|
53
|
-
bufferAsFarAsPossible: (onBufferScheduled: (buffer: import("mediabunny").WrappedAudioBuffer) => void, maxTimestamp: number) => Promise<{
|
|
54
|
-
type: "ended";
|
|
55
|
-
} | {
|
|
56
|
-
type: "waiting";
|
|
57
|
-
} | {
|
|
58
|
-
type: "max-reached";
|
|
59
|
-
}>;
|
|
60
|
-
addChunkForAfterResuming: (buffer: AudioBuffer, timestamp: number) => void;
|
|
61
|
-
moveQueuedChunksToPauseQueue: () => void;
|
|
62
|
-
getNumberOfChunksAfterResuming: () => number;
|
|
63
37
|
} | null;
|
|
64
38
|
destroyIterator: () => void;
|
|
65
|
-
seek: ({ newTime, nonce, playbackRate,
|
|
39
|
+
seek: ({ newTime, nonce, playbackRate, scheduleAudioNode, getTargetTime, logLevel, loop, trimBefore, trimAfter, sequenceOffset, sequenceDurationInFrames, fps, getAudioContextCurrentTimeMockedInTest, }: {
|
|
66
40
|
newTime: number;
|
|
67
41
|
nonce: import("../nonce-manager").Nonce;
|
|
68
42
|
playbackRate: number;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
43
|
+
scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, originalUnloopedMediaTimestamp: number, currentTime: number) => import("remotion").ScheduleAudioNodeResult;
|
|
44
|
+
getTargetTime: (mediaTimestamp: number, currentTime: number) => number | null;
|
|
45
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
46
|
+
loop: boolean;
|
|
47
|
+
trimBefore: number | undefined;
|
|
48
|
+
trimAfter: number | undefined;
|
|
49
|
+
sequenceOffset: number;
|
|
50
|
+
sequenceDurationInFrames: number;
|
|
51
|
+
fps: number;
|
|
52
|
+
getAudioContextCurrentTimeMockedInTest: () => number;
|
|
53
|
+
}) => void;
|
|
73
54
|
getAudioIteratorsCreated: () => number;
|
|
55
|
+
getTotalAudioScheduledInSeconds: () => number;
|
|
74
56
|
setMuted: (newMuted: boolean) => void;
|
|
75
57
|
setVolume: (volume: number) => void;
|
|
76
|
-
scheduleAudioChunk: ({ buffer, mediaTimestamp, playbackRate, scheduleAudioNode,
|
|
58
|
+
scheduleAudioChunk: ({ buffer, mediaTimestamp, originalUnloopedMediaTimestamp, playbackRate, scheduleAudioNode, logLevel, currentTime, }: {
|
|
77
59
|
buffer: AudioBuffer;
|
|
78
60
|
mediaTimestamp: number;
|
|
79
61
|
playbackRate: number;
|
|
80
|
-
scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number) => import("remotion").ScheduleAudioNodeResult;
|
|
81
|
-
|
|
62
|
+
scheduleAudioNode: (node: AudioBufferSourceNode, mediaTimestamp: number, originalUnloopedMediaTimestamp: number, currentTime: number) => import("remotion").ScheduleAudioNodeResult;
|
|
63
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
64
|
+
originalUnloopedMediaTimestamp: number;
|
|
65
|
+
currentTime: number;
|
|
82
66
|
}) => void;
|
|
67
|
+
waitForNScheduledNodes: (n: number) => Promise<void>;
|
|
83
68
|
} | null;
|
|
84
69
|
videoIteratorManager: {
|
|
85
70
|
startVideoIterator: (timeToSeek: number, nonce: import("../nonce-manager").Nonce) => Promise<void>;
|
|
@@ -93,13 +78,13 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
|
|
|
93
78
|
destroy: () => void;
|
|
94
79
|
initialFrame: import("mediabunny").WrappedCanvas | null;
|
|
95
80
|
isDestroyed: () => boolean;
|
|
96
|
-
tryToSatisfySeek: (time: number) =>
|
|
81
|
+
tryToSatisfySeek: (time: number) => {
|
|
97
82
|
type: "not-satisfied";
|
|
98
83
|
reason: string;
|
|
99
84
|
} | {
|
|
100
85
|
type: "satisfied";
|
|
101
86
|
frame: import("mediabunny").WrappedCanvas;
|
|
102
|
-
}
|
|
87
|
+
};
|
|
103
88
|
} | null;
|
|
104
89
|
drawFrame: (frame: import("mediabunny").WrappedCanvas) => void;
|
|
105
90
|
getFramesRendered: () => number;
|