remotion
Version:
Render videos in React
71 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AudioForRendering = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const absolute_src_1 = require("../absolute-src");
const CompositionManager_1 = require("../CompositionManager");
const is_remote_asset_1 = require("../is-remote-asset");
const random_1 = require("../random");
const sequencing_1 = require("../sequencing");
const use_frame_1 = require("../use-frame");
const volume_prop_1 = require("../volume-prop");
const use_audio_frame_1 = require("./use-audio-frame");
const AudioForRenderingRefForwardingFunction = (props, ref) => {
const audioRef = react_1.useRef(null);
const absoluteFrame = use_frame_1.useAbsoluteCurrentFrame();
const volumePropFrame = use_audio_frame_1.useFrameForVolumeProp();
const frame = use_frame_1.useCurrentFrame();
const sequenceContext = react_1.useContext(sequencing_1.SequenceContext);
const { registerAsset, unregisterAsset } = react_1.useContext(CompositionManager_1.CompositionManager);
// Generate a string that's as unique as possible for this asset
// but at the same time the same on all threads
const id = react_1.useMemo(() => {
var _a;
return `audio-${random_1.random((_a = props.src) !== null && _a !== void 0 ? _a : '')}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.relativeFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.cumulatedFrom}-${sequenceContext === null || sequenceContext === void 0 ? void 0 : sequenceContext.durationInFrames}-muted:${props.muted}`;
}, [props.muted, props.src, sequenceContext]);
const { volume: volumeProp, playbackRate, ...nativeProps } = props;
const volume = volume_prop_1.evaluateVolume({
volume: volumeProp,
frame: volumePropFrame,
mediaVolume: 1,
});
react_1.useImperativeHandle(ref, () => {
return audioRef.current;
});
react_1.useEffect(() => {
var _a;
if (!props.src) {
throw new Error('No src passed');
}
if (props.muted) {
return;
}
registerAsset({
type: 'audio',
src: absolute_src_1.getAbsoluteSrc(props.src),
id,
frame: absoluteFrame,
volume,
isRemote: is_remote_asset_1.isRemoteAsset(absolute_src_1.getAbsoluteSrc(props.src)),
mediaFrame: frame,
playbackRate: (_a = props.playbackRate) !== null && _a !== void 0 ? _a : 1,
});
return () => unregisterAsset(id);
}, [
props.muted,
props.src,
registerAsset,
absoluteFrame,
id,
unregisterAsset,
volume,
volumePropFrame,
frame,
playbackRate,
props.playbackRate,
]);
return jsx_runtime_1.jsx("audio", Object.assign({ ref: audioRef }, nativeProps), void 0);
};
exports.AudioForRendering = react_1.forwardRef(AudioForRenderingRefForwardingFunction);
//# sourceMappingURL=AudioForRendering.js.map