@remotion/media 4.0.357 → 4.0.358
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.js +29 -13
- package/dist/audio/audio-for-rendering.js +5 -6
- package/dist/audio-extraction/extract-audio.js +1 -0
- package/dist/esm/index.mjs +493 -321
- package/dist/get-time-in-seconds.d.ts +2 -1
- package/dist/get-time-in-seconds.js +10 -10
- package/dist/show-in-timeline.d.ts +8 -0
- package/dist/show-in-timeline.js +31 -0
- package/dist/use-media-in-timeline.d.ts +19 -0
- package/dist/use-media-in-timeline.js +103 -0
- package/dist/video/media-player.d.ts +11 -5
- package/dist/video/media-player.js +72 -36
- package/dist/video/video-for-preview.d.ts +9 -9
- package/dist/video/video-for-preview.js +43 -20
- package/dist/video/video-for-rendering.js +2 -2
- package/dist/video-extraction/extract-frame.js +1 -0
- package/package.json +54 -54
- package/LICENSE.md +0 -49
- package/dist/convert-audiodata/apply-tonefrequency.d.ts +0 -2
- package/dist/convert-audiodata/apply-tonefrequency.js +0 -43
- package/dist/convert-audiodata/wsola.d.ts +0 -13
- package/dist/convert-audiodata/wsola.js +0 -197
- package/dist/get-sink-weak.d.ts +0 -13
- package/dist/get-sink-weak.js +0 -15
- package/dist/log.d.ts +0 -10
- package/dist/log.js +0 -33
- package/dist/video/resolve-playback-time.d.ts +0 -8
- package/dist/video/resolve-playback-time.js +0 -22
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { Internals, Audio as RemotionAudio, useBufferState, useCurrentFrame, } from 'remotion';
|
|
4
|
+
import { useLoopDisplay } from '../show-in-timeline';
|
|
5
|
+
import { useMediaInTimeline } from '../use-media-in-timeline';
|
|
4
6
|
import { MediaPlayer } from '../video/media-player';
|
|
5
|
-
const { useUnsafeVideoConfig, Timeline, SharedAudioContext, useMediaMutedState, useMediaVolumeState, useFrameForVolumeProp, evaluateVolume, warnAboutTooHighVolume, usePreload,
|
|
7
|
+
const { useUnsafeVideoConfig, Timeline, SharedAudioContext, useMediaMutedState, useMediaVolumeState, useFrameForVolumeProp, evaluateVolume, warnAboutTooHighVolume, usePreload, SequenceContext, } = Internals;
|
|
6
8
|
const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVolumeCurveBehavior, loop, trimAfter, trimBefore, name, showInTimeline, stack, disallowFallbackToHtml5Audio, toneFrequency, audioStreamIndex, fallbackHtml5AudioProps, }) => {
|
|
7
9
|
const videoConfig = useUnsafeVideoConfig();
|
|
8
10
|
const frame = useCurrentFrame();
|
|
@@ -34,8 +36,14 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
34
36
|
const currentTimeRef = useRef(currentTime);
|
|
35
37
|
currentTimeRef.current = currentTime;
|
|
36
38
|
const preloadedSrc = usePreload(src);
|
|
37
|
-
const [timelineId] = useState(() => String(Math.random()));
|
|
38
39
|
const parentSequence = useContext(SequenceContext);
|
|
40
|
+
const loopDisplay = useLoopDisplay({
|
|
41
|
+
loop,
|
|
42
|
+
mediaDurationInSeconds: videoConfig.durationInFrames,
|
|
43
|
+
playbackRate,
|
|
44
|
+
trimAfter,
|
|
45
|
+
trimBefore,
|
|
46
|
+
});
|
|
39
47
|
useMediaInTimeline({
|
|
40
48
|
volume,
|
|
41
49
|
mediaVolume,
|
|
@@ -43,11 +51,13 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
43
51
|
src,
|
|
44
52
|
playbackRate,
|
|
45
53
|
displayName: name ?? null,
|
|
46
|
-
id: timelineId,
|
|
47
54
|
stack,
|
|
48
55
|
showInTimeline,
|
|
49
56
|
premountDisplay: parentSequence?.premountDisplay ?? null,
|
|
50
57
|
postmountDisplay: parentSequence?.postmountDisplay ?? null,
|
|
58
|
+
loopDisplay,
|
|
59
|
+
trimAfter,
|
|
60
|
+
trimBefore,
|
|
51
61
|
});
|
|
52
62
|
useEffect(() => {
|
|
53
63
|
if (!sharedAudioContext)
|
|
@@ -60,10 +70,9 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
60
70
|
logLevel,
|
|
61
71
|
sharedAudioContext: sharedAudioContext.audioContext,
|
|
62
72
|
loop,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
: undefined,
|
|
73
|
+
trimAfter,
|
|
74
|
+
trimBefore,
|
|
75
|
+
fps: videoConfig.fps,
|
|
67
76
|
canvas: null,
|
|
68
77
|
playbackRate,
|
|
69
78
|
audioStreamIndex: audioStreamIndex ?? 0,
|
|
@@ -76,7 +85,7 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
76
85
|
if (disallowFallbackToHtml5Audio) {
|
|
77
86
|
throw new Error(`Unknown container format ${preloadedSrc}, and 'disallowFallbackToHtml5Audio' was set.`);
|
|
78
87
|
}
|
|
79
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Unknown container format for ${preloadedSrc} (Supported formats: https://www.remotion.dev/docs/mediabunny/formats), falling back to <
|
|
88
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Unknown container format for ${preloadedSrc} (Supported formats: https://www.remotion.dev/docs/mediabunny/formats), falling back to <Html5Audio>`);
|
|
80
89
|
setShouldFallbackToNativeAudio(true);
|
|
81
90
|
return;
|
|
82
91
|
}
|
|
@@ -84,7 +93,7 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
84
93
|
if (disallowFallbackToHtml5Audio) {
|
|
85
94
|
throw new Error(`Network error fetching ${preloadedSrc}, and 'disallowFallbackToHtml5Audio' was set.`);
|
|
86
95
|
}
|
|
87
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Network error fetching ${preloadedSrc}, falling back to <
|
|
96
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Network error fetching ${preloadedSrc}, falling back to <Html5Audio>`);
|
|
88
97
|
setShouldFallbackToNativeAudio(true);
|
|
89
98
|
return;
|
|
90
99
|
}
|
|
@@ -92,7 +101,7 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
92
101
|
if (disallowFallbackToHtml5Audio) {
|
|
93
102
|
throw new Error(`Cannot decode ${preloadedSrc}, and 'disallowFallbackToHtml5Audio' was set.`);
|
|
94
103
|
}
|
|
95
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Cannot decode ${preloadedSrc}, falling back to <
|
|
104
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Cannot decode ${preloadedSrc}, falling back to <Html5Audio>`);
|
|
96
105
|
setShouldFallbackToNativeAudio(true);
|
|
97
106
|
return;
|
|
98
107
|
}
|
|
@@ -100,7 +109,7 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
100
109
|
if (disallowFallbackToHtml5Audio) {
|
|
101
110
|
throw new Error(`No video or audio tracks found for ${preloadedSrc}, and 'disallowFallbackToHtml5Audio' was set.`);
|
|
102
111
|
}
|
|
103
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `No video or audio tracks found for ${preloadedSrc}, falling back to <
|
|
112
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `No video or audio tracks found for ${preloadedSrc}, falling back to <Html5Audio>`);
|
|
104
113
|
setShouldFallbackToNativeAudio(true);
|
|
105
114
|
return;
|
|
106
115
|
}
|
|
@@ -193,7 +202,7 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
193
202
|
return;
|
|
194
203
|
}
|
|
195
204
|
audioPlayer.setVolume(userPreferredVolume);
|
|
196
|
-
}, [userPreferredVolume, mediaPlayerReady
|
|
205
|
+
}, [userPreferredVolume, mediaPlayerReady]);
|
|
197
206
|
const effectivePlaybackRate = useMemo(() => playbackRate * globalPlaybackRate, [playbackRate, globalPlaybackRate]);
|
|
198
207
|
useEffect(() => {
|
|
199
208
|
const audioPlayer = mediaPlayerRef.current;
|
|
@@ -201,7 +210,14 @@ const NewAudioForPreview = ({ src, playbackRate, logLevel, muted, volume, loopVo
|
|
|
201
210
|
return;
|
|
202
211
|
}
|
|
203
212
|
audioPlayer.setPlaybackRate(effectivePlaybackRate);
|
|
204
|
-
}, [effectivePlaybackRate, mediaPlayerReady
|
|
213
|
+
}, [effectivePlaybackRate, mediaPlayerReady]);
|
|
214
|
+
useEffect(() => {
|
|
215
|
+
const audioPlayer = mediaPlayerRef.current;
|
|
216
|
+
if (!audioPlayer || !mediaPlayerReady) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
audioPlayer.setFps(videoConfig.fps);
|
|
220
|
+
}, [videoConfig.fps, mediaPlayerReady]);
|
|
205
221
|
if (shouldFallbackToNativeAudio && !disallowFallbackToHtml5Audio) {
|
|
206
222
|
return (_jsx(RemotionAudio, { src: src, muted: muted, volume: volume, startFrom: trimBefore, endAt: trimAfter, playbackRate: playbackRate, loopVolumeCurveBehavior: loopVolumeCurveBehavior, name: name, loop: loop, showInTimeline: showInTimeline, stack: stack ?? undefined, toneFrequency: toneFrequency, audioStreamIndex: audioStreamIndex, pauseWhenBuffering: fallbackHtml5AudioProps?.pauseWhenBuffering, ...fallbackHtml5AudioProps }));
|
|
207
223
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useContext, useLayoutEffect, useMemo, useState } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { cancelRender, Html5Audio, Internals, random, useCurrentFrame, useDelayRender, useRemotionEnvironment, } from 'remotion';
|
|
4
4
|
import { applyVolume } from '../convert-audiodata/apply-volume';
|
|
5
5
|
import { TARGET_SAMPLE_RATE } from '../convert-audiodata/resample-audiodata';
|
|
6
6
|
import { frameForVolumeProp } from '../looped-frame';
|
|
@@ -69,7 +69,7 @@ export const AudioForRendering = ({ volume: volumeProp, playbackRate, src, muted
|
|
|
69
69
|
if (disallowFallbackToHtml5Audio) {
|
|
70
70
|
cancelRender(new Error(`Unknown container format ${src}, and 'disallowFallbackToHtml5Audio' was set. Failing the render.`));
|
|
71
71
|
}
|
|
72
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Unknown container format for ${src} (Supported formats: https://www.remotion.dev/docs/mediabunny/formats), falling back to <
|
|
72
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Unknown container format for ${src} (Supported formats: https://www.remotion.dev/docs/mediabunny/formats), falling back to <Html5Audio>`);
|
|
73
73
|
setReplaceWithHtml5Audio(true);
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
@@ -77,7 +77,7 @@ export const AudioForRendering = ({ volume: volumeProp, playbackRate, src, muted
|
|
|
77
77
|
if (disallowFallbackToHtml5Audio) {
|
|
78
78
|
cancelRender(new Error(`Cannot decode ${src}, and 'disallowFallbackToHtml5Audio' was set. Failing the render.`));
|
|
79
79
|
}
|
|
80
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Cannot decode ${src}, falling back to <
|
|
80
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Cannot decode ${src}, falling back to <Html5Audio>`);
|
|
81
81
|
setReplaceWithHtml5Audio(true);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
@@ -85,7 +85,7 @@ export const AudioForRendering = ({ volume: volumeProp, playbackRate, src, muted
|
|
|
85
85
|
if (disallowFallbackToHtml5Audio) {
|
|
86
86
|
cancelRender(new Error(`Cannot decode ${src}, and 'disallowFallbackToHtml5Audio' was set. Failing the render.`));
|
|
87
87
|
}
|
|
88
|
-
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Network error fetching ${src}, falling back to <
|
|
88
|
+
Internals.Log.warn({ logLevel, tag: '@remotion/media' }, `Network error fetching ${src}, falling back to <Html5Audio>`);
|
|
89
89
|
setReplaceWithHtml5Audio(true);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
@@ -153,8 +153,7 @@ export const AudioForRendering = ({ volume: volumeProp, playbackRate, src, muted
|
|
|
153
153
|
replaceWithHtml5Audio,
|
|
154
154
|
]);
|
|
155
155
|
if (replaceWithHtml5Audio) {
|
|
156
|
-
|
|
157
|
-
return (_jsx(Audio, { src: src, playbackRate: playbackRate, muted: muted, loop: loop, volume: volumeProp, delayRenderRetries: delayRenderRetries, delayRenderTimeoutInMilliseconds: delayRenderTimeoutInMilliseconds, style: style, loopVolumeCurveBehavior: loopVolumeCurveBehavior, audioStreamIndex: audioStreamIndex, useWebAudioApi: fallbackHtml5AudioProps?.useWebAudioApi, onError: fallbackHtml5AudioProps?.onError, toneFrequency: toneFrequency, acceptableTimeShiftInSeconds: fallbackHtml5AudioProps?.acceptableTimeShiftInSeconds, name: name, showInTimeline: showInTimeline }));
|
|
156
|
+
return (_jsx(Html5Audio, { src: src, playbackRate: playbackRate, muted: muted, loop: loop, volume: volumeProp, delayRenderRetries: delayRenderRetries, delayRenderTimeoutInMilliseconds: delayRenderTimeoutInMilliseconds, style: style, loopVolumeCurveBehavior: loopVolumeCurveBehavior, audioStreamIndex: audioStreamIndex, useWebAudioApi: fallbackHtml5AudioProps?.useWebAudioApi, onError: fallbackHtml5AudioProps?.onError, toneFrequency: toneFrequency, acceptableTimeShiftInSeconds: fallbackHtml5AudioProps?.acceptableTimeShiftInSeconds, name: name, showInTimeline: showInTimeline }));
|
|
158
157
|
}
|
|
159
158
|
return null;
|
|
160
159
|
};
|