@rendley/sdk 1.14.2 → 1.14.3
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/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/libs/ffmpeg/classes.d.ts +5 -1
- package/dist/libs/ffmpeg/const.d.ts +4 -0
- package/dist/libs/ffmpeg/types.d.ts +18 -1
- package/dist/modules/clip/Clip.d.ts +3 -3
- package/dist/modules/clip/clips/audio/AudioClip.d.ts +1 -1
- package/dist/modules/clip/clips/custom/CustomClip.d.ts +1 -1
- package/dist/modules/clip/clips/htmlText/HtmlTextClip.d.ts +1 -1
- package/dist/modules/clip/clips/lottie/LottieClip.d.ts +1 -1
- package/dist/modules/clip/clips/shape/ShapeClip.d.ts +1 -1
- package/dist/modules/clip/clips/svg/SvgClip.d.ts +1 -1
- package/dist/modules/clip/clips/text/TextClip.d.ts +1 -1
- package/dist/modules/clip/clips/video/VideoClip.d.ts +1 -1
- package/dist/modules/library/MediaData.d.ts +1 -10
- package/dist/modules/settings/Settings.d.ts +1 -8
- package/dist/modules/settings/index.d.ts +1 -0
- package/dist/utils/audio/AudioPostProcess.d.ts +19 -0
- package/dist/utils/audio/AudioPostProcess.types.d.ts +53 -0
- package/dist/utils/audio/AudioPostProcessWorker.d.ts +2 -0
- package/dist/utils/audio/AudioSampleExtractor.d.ts +19 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DemuxerPacket, FFFSMountOptions, FFFSPath, FFFSType, FFMessageFrameData, FFMessageLoadConfig, FFMessageRenderSettings, FileData, FSNode, IsFirst, LogEventCallback, OK, ProgressEventCallback, FFMessageMuxerData, FFMessageInitMuxerData, FFMessageAuthentificateData, FFMessageFetchTSChunksData, FFMessageTranscodeData, FFMessageFrame, FFMessageChunkedMuxData } from "./types";
|
|
1
|
+
import { AudioDemuxerPacket, DemuxerPacket, FFFSMountOptions, FFFSPath, FFFSType, FFMessageFrameData, FFMessageLoadConfig, FFMessageRenderSettings, FileData, FSNode, IsFirst, LogEventCallback, OK, ProgressEventCallback, FFMessageMuxerData, FFMessageInitMuxerData, FFMessageAuthentificateData, FFMessageFetchTSChunksData, FFMessageTranscodeData, FFMessageFrame, FFMessageChunkedMuxData } from "./types";
|
|
2
2
|
import { MediaInfo } from '../../modules/ffmpeg/types/FFmpeg.types';
|
|
3
3
|
import { HashAlgorithmEnum } from '../../types/hash.types';
|
|
4
4
|
type FFMessageOptions = {
|
|
@@ -173,6 +173,10 @@ export declare class FFmpeg {
|
|
|
173
173
|
closeDemuxer: (id: string, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
174
174
|
seekDemuxer: (id: string, time: number, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
175
175
|
getNextPacketDemuxer: (id: string, { signal }?: FFMessageOptions) => Promise<DemuxerPacket | undefined>;
|
|
176
|
+
initAudioDemuxer: (id: string, path: string, audioStream?: number, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
177
|
+
closeAudioDemuxer: (id: string, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
178
|
+
seekAudioDemuxer: (id: string, time: number, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
179
|
+
getNextPacketAudioDemuxer: (id: string, { signal }?: FFMessageOptions) => Promise<AudioDemuxerPacket | undefined>;
|
|
176
180
|
initMuxer: (initSettings: FFMessageInitMuxerData, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
177
181
|
addChunkMuxer: (data: FFMessageMuxerData, { signal }?: FFMessageOptions) => Promise<OK>;
|
|
178
182
|
closeMuxer: ({ signal }?: FFMessageOptions) => Promise<OK>;
|
|
@@ -33,6 +33,10 @@ export declare enum FFMessageType {
|
|
|
33
33
|
DEMUXER_SEEK = "DEMUXER_SEEK",
|
|
34
34
|
DEMUXER_CLOSE = "DEMUXER_CLOSE",
|
|
35
35
|
DEMUXER_GET_PACKET = "DEMUXER_GET_PACKET",
|
|
36
|
+
AUDIO_DEMUXER_INIT = "AUDIO_DEMUXER_INIT",
|
|
37
|
+
AUDIO_DEMUXER_SEEK = "AUDIO_DEMUXER_SEEK",
|
|
38
|
+
AUDIO_DEMUXER_CLOSE = "AUDIO_DEMUXER_CLOSE",
|
|
39
|
+
AUDIO_DEMUXER_GET_PACKET = "AUDIO_DEMUXER_GET_PACKET",
|
|
36
40
|
MUXER_INIT = "MUXER_INIT",
|
|
37
41
|
MUXER_ADD_VIDEO_CHUNK = "MUXER_ADD_VIDEO_CHUNK",
|
|
38
42
|
MUXER_CLOSE = "MUXER_FINALIZE",
|
|
@@ -68,6 +68,18 @@ export interface FFMessageSeekDemuxerData {
|
|
|
68
68
|
export interface FFMessageIdDemuxerData {
|
|
69
69
|
id: string;
|
|
70
70
|
}
|
|
71
|
+
export interface FFMessageInitAudioDemuxerData {
|
|
72
|
+
id: string;
|
|
73
|
+
path: FFFSPath;
|
|
74
|
+
audioStream: number;
|
|
75
|
+
}
|
|
76
|
+
export interface FFMessageSeekAudioDemuxerData {
|
|
77
|
+
id: string;
|
|
78
|
+
time: number;
|
|
79
|
+
}
|
|
80
|
+
export interface FFMessageIdAudioDemuxerData {
|
|
81
|
+
id: string;
|
|
82
|
+
}
|
|
71
83
|
export interface FFMessageMuxerData {
|
|
72
84
|
packet: Uint8Array;
|
|
73
85
|
timestamp: bigint;
|
|
@@ -215,7 +227,7 @@ export interface FFMessageMountData {
|
|
|
215
227
|
export interface FFMessageUnmountData {
|
|
216
228
|
mountPoint: FFFSPath;
|
|
217
229
|
}
|
|
218
|
-
export type FFMessageData = FFMessageLoadConfig | FFMessageExecData | FFMessageWriteFileData | FFMessageReadFileData | FFMessageReadFilesAsBlobData | FFMessageDeleteFileData | FFMessageRenameData | FFMessageCreateDirData | FFMessageListDirData | FFMessageDeleteDirData | FFMessageMountData | FFMessageUnmountData | FFMessageGetInfoData | FFMessageGetSubtitlesData | FFMessageFrameData | FFMessageFrame | FFMessageRenderSettings | FFMessageChunkedMuxData | FFMessageInitDemuxerData | FFMessageSeekDemuxerData | FFMessageIdDemuxerData | FFMessageMuxerData | FFMessageAuthentificateData | FFMessageFetchTSChunksData | FFMessageTranscodeData | FFMessageCreateArchiveData | FFMessageOpenArchiveData | FFMessageSaveArchiveData | FFMessageCloseArchiveData | FFMessageAddDataToArchiveData | FFMessageReadFileFromArchiveData | FFMessageExtractAllFromArchiveData | FFMessageAddFileToArchiveData | FFMessageAddFilesToArchiveData | FFMessageListFilesFromArchiveData | FFMessageExtractFileFromArchiveData | FFMessagePathExistsData;
|
|
230
|
+
export type FFMessageData = FFMessageLoadConfig | FFMessageExecData | FFMessageWriteFileData | FFMessageReadFileData | FFMessageReadFilesAsBlobData | FFMessageDeleteFileData | FFMessageRenameData | FFMessageCreateDirData | FFMessageListDirData | FFMessageDeleteDirData | FFMessageMountData | FFMessageUnmountData | FFMessageGetInfoData | FFMessageGetSubtitlesData | FFMessageFrameData | FFMessageFrame | FFMessageRenderSettings | FFMessageChunkedMuxData | FFMessageInitDemuxerData | FFMessageSeekDemuxerData | FFMessageIdDemuxerData | FFMessageInitAudioDemuxerData | FFMessageSeekAudioDemuxerData | FFMessageIdAudioDemuxerData | FFMessageMuxerData | FFMessageAuthentificateData | FFMessageFetchTSChunksData | FFMessageTranscodeData | FFMessageCreateArchiveData | FFMessageOpenArchiveData | FFMessageSaveArchiveData | FFMessageCloseArchiveData | FFMessageAddDataToArchiveData | FFMessageReadFileFromArchiveData | FFMessageExtractAllFromArchiveData | FFMessageAddFileToArchiveData | FFMessageAddFilesToArchiveData | FFMessageListFilesFromArchiveData | FFMessageExtractFileFromArchiveData | FFMessagePathExistsData;
|
|
219
231
|
export interface Message {
|
|
220
232
|
type: string;
|
|
221
233
|
data?: FFMessageData;
|
|
@@ -240,6 +252,11 @@ export interface DemuxerPacket {
|
|
|
240
252
|
timestamp: bigint;
|
|
241
253
|
duration: bigint;
|
|
242
254
|
}
|
|
255
|
+
export interface AudioDemuxerPacket {
|
|
256
|
+
packet: Uint8Array;
|
|
257
|
+
timestamp: bigint;
|
|
258
|
+
duration: bigint;
|
|
259
|
+
}
|
|
243
260
|
export type ExitCode = number;
|
|
244
261
|
export type ErrorMessage = string;
|
|
245
262
|
export type FileData = Uint8Array | string;
|
|
@@ -919,9 +919,9 @@ export declare const ClipSchema: z.ZodObject<{
|
|
|
919
919
|
}, "strip", z.ZodTypeAny, {
|
|
920
920
|
type: string;
|
|
921
921
|
id: string;
|
|
922
|
+
duration: number;
|
|
922
923
|
subtitlesOffset: number;
|
|
923
924
|
startTime: number;
|
|
924
|
-
duration: number;
|
|
925
925
|
leftTrim: number;
|
|
926
926
|
rightTrim: number;
|
|
927
927
|
filters: {
|
|
@@ -1015,9 +1015,9 @@ export declare const ClipSchema: z.ZodObject<{
|
|
|
1015
1015
|
}, {
|
|
1016
1016
|
type: string;
|
|
1017
1017
|
id: string;
|
|
1018
|
+
duration: number;
|
|
1018
1019
|
subtitlesOffset: number;
|
|
1019
1020
|
startTime: number;
|
|
1020
|
-
duration: number;
|
|
1021
1021
|
leftTrim: number;
|
|
1022
1022
|
rightTrim: number;
|
|
1023
1023
|
filters: {
|
|
@@ -1335,9 +1335,9 @@ export declare class Clip<T extends PIXI.Sprite = PIXI.Sprite, K extends ClipSty
|
|
|
1335
1335
|
serialize(): {
|
|
1336
1336
|
type: string;
|
|
1337
1337
|
id: string;
|
|
1338
|
+
duration: number;
|
|
1338
1339
|
subtitlesOffset: number;
|
|
1339
1340
|
startTime: number;
|
|
1340
|
-
duration: number;
|
|
1341
1341
|
leftTrim: number;
|
|
1342
1342
|
rightTrim: number;
|
|
1343
1343
|
filters: {
|
|
@@ -91,10 +91,10 @@ export declare class AudioClip extends Clip {
|
|
|
91
91
|
serialize(): {
|
|
92
92
|
type: string;
|
|
93
93
|
id: string;
|
|
94
|
+
duration: number;
|
|
94
95
|
mediaDataId: string;
|
|
95
96
|
subtitlesOffset: number;
|
|
96
97
|
startTime: number;
|
|
97
|
-
duration: number;
|
|
98
98
|
leftTrim: number;
|
|
99
99
|
rightTrim: number;
|
|
100
100
|
filters: {
|
|
@@ -11,9 +11,9 @@ export declare class CustomClip extends Clip<PIXI.Sprite, ClipStyle> {
|
|
|
11
11
|
serialize(): {
|
|
12
12
|
type: string;
|
|
13
13
|
id: string;
|
|
14
|
+
duration: number;
|
|
14
15
|
subtitlesOffset: number;
|
|
15
16
|
startTime: number;
|
|
16
|
-
duration: number;
|
|
17
17
|
leftTrim: number;
|
|
18
18
|
rightTrim: number;
|
|
19
19
|
filters: {
|
|
@@ -120,9 +120,9 @@ export declare class HtmlTextClip extends Clip<PIXI.Sprite, ClipStyle<PIXI.Sprit
|
|
|
120
120
|
serialize(): {
|
|
121
121
|
type: string;
|
|
122
122
|
id: string;
|
|
123
|
+
duration: number;
|
|
123
124
|
subtitlesOffset: number;
|
|
124
125
|
startTime: number;
|
|
125
|
-
duration: number;
|
|
126
126
|
leftTrim: number;
|
|
127
127
|
rightTrim: number;
|
|
128
128
|
filters: {
|
|
@@ -187,9 +187,9 @@ export declare class LottieClip extends Clip<PIXI.Sprite, ClipStyle<PIXI.Sprite>
|
|
|
187
187
|
serialize(): {
|
|
188
188
|
type: string;
|
|
189
189
|
id: string;
|
|
190
|
+
duration: number;
|
|
190
191
|
subtitlesOffset: number;
|
|
191
192
|
startTime: number;
|
|
192
|
-
duration: number;
|
|
193
193
|
leftTrim: number;
|
|
194
194
|
rightTrim: number;
|
|
195
195
|
filters: {
|
|
@@ -14,9 +14,9 @@ export declare class ShapeClip extends Clip<ShapeSprite, ShapeStyle> {
|
|
|
14
14
|
serialize(): {
|
|
15
15
|
type: string;
|
|
16
16
|
id: string;
|
|
17
|
+
duration: number;
|
|
17
18
|
subtitlesOffset: number;
|
|
18
19
|
startTime: number;
|
|
19
|
-
duration: number;
|
|
20
20
|
leftTrim: number;
|
|
21
21
|
rightTrim: number;
|
|
22
22
|
filters: {
|
|
@@ -21,9 +21,9 @@ export declare class SvgClip extends Clip<PIXI.Sprite, ClipStyle<PIXI.Sprite>> {
|
|
|
21
21
|
serialize(): {
|
|
22
22
|
type: string;
|
|
23
23
|
id: string;
|
|
24
|
+
duration: number;
|
|
24
25
|
subtitlesOffset: number;
|
|
25
26
|
startTime: number;
|
|
26
|
-
duration: number;
|
|
27
27
|
leftTrim: number;
|
|
28
28
|
rightTrim: number;
|
|
29
29
|
filters: {
|
|
@@ -23,9 +23,9 @@ export declare class TextClip extends Clip<TextSprite, TextStyle> {
|
|
|
23
23
|
type: string;
|
|
24
24
|
text: string;
|
|
25
25
|
id: string;
|
|
26
|
+
duration: number;
|
|
26
27
|
subtitlesOffset: number;
|
|
27
28
|
startTime: number;
|
|
28
|
-
duration: number;
|
|
29
29
|
leftTrim: number;
|
|
30
30
|
rightTrim: number;
|
|
31
31
|
filters: {
|
|
@@ -169,10 +169,10 @@ export declare class VideoClip extends Clip<PIXI.Sprite, ClipStyle<PIXI.Sprite>>
|
|
|
169
169
|
serialize(): {
|
|
170
170
|
type: string;
|
|
171
171
|
id: string;
|
|
172
|
+
duration: number;
|
|
172
173
|
mediaDataId: string;
|
|
173
174
|
subtitlesOffset: number;
|
|
174
175
|
startTime: number;
|
|
175
|
-
duration: number;
|
|
176
176
|
leftTrim: number;
|
|
177
177
|
rightTrim: number;
|
|
178
178
|
filters: {
|
|
@@ -82,13 +82,6 @@ export declare class MediaData {
|
|
|
82
82
|
private workerFSFilePath?;
|
|
83
83
|
private fetchAbortController;
|
|
84
84
|
audioSplit?: string;
|
|
85
|
-
private static audioSampleWorker;
|
|
86
|
-
private static audioSampleWorkerInitPromise;
|
|
87
|
-
private static audioSampleActiveRequests;
|
|
88
|
-
private static audioSampleCleanupTimer;
|
|
89
|
-
private static readonly AUDIO_SAMPLE_WORKER_IDLE_TIMEOUT_MS;
|
|
90
|
-
private static acquireAudioSampleWorker;
|
|
91
|
-
private static releaseAudioSampleWorker;
|
|
92
85
|
private static lockMediaInfo;
|
|
93
86
|
private waitForMediaInfoUnlock;
|
|
94
87
|
static unlockMediaInfo(): void;
|
|
@@ -124,9 +117,7 @@ export declare class MediaData {
|
|
|
124
117
|
private ensureWorkerFSRoot;
|
|
125
118
|
private cleanupWorkerFSMount;
|
|
126
119
|
private mountInputToWorkerFS;
|
|
127
|
-
private
|
|
128
|
-
private mixToMono;
|
|
129
|
-
private extractAudioSamples;
|
|
120
|
+
private doExtractAudioSamples;
|
|
130
121
|
getAudioSamples(startTime: number, duration?: number): Float32Array[] | null;
|
|
131
122
|
private checkPlaceholderClips;
|
|
132
123
|
setCustomData(key: string, value: unknown, overwrite?: boolean): boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { HashAlgorithmEnum } from '../../types/hash.types';
|
|
3
|
+
import { MonoMixType } from '../../utils/audio/AudioPostProcess.types';
|
|
3
4
|
export declare enum PreferredAcceleration {
|
|
4
5
|
HARDWARE = "prefer-hardware",
|
|
5
6
|
SOFTWARE = "prefer-software",
|
|
@@ -24,14 +25,6 @@ export declare enum AutoLayoutMode {
|
|
|
24
25
|
PREFER_WIDTH = "prefer-width",
|
|
25
26
|
PREFER_HEIGHT = "prefer-height"
|
|
26
27
|
}
|
|
27
|
-
export declare enum MonoMixType {
|
|
28
|
-
AVERAGE = "average",
|
|
29
|
-
ABSOLUTE_AVERAGE = "absolute-average",
|
|
30
|
-
PEAK_MIN = "peak-min",
|
|
31
|
-
PEAK_MAX = "peak-max",
|
|
32
|
-
ABSOLUTE_MAX = "absolute-max",
|
|
33
|
-
ABSOLUTE_MIN = "absolute-min"
|
|
34
|
-
}
|
|
35
28
|
export declare const SettingsSchema: z.ZodObject<{
|
|
36
29
|
m3u8MaxResolution: z.ZodDefault<z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>;
|
|
37
30
|
useInternalTranscoder: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AudioPostProcessSettings } from "./AudioPostProcess.types";
|
|
2
|
+
export type { AudioPostProcessSettings } from "./AudioPostProcess.types";
|
|
3
|
+
export interface DecodeAndPostProcessResult {
|
|
4
|
+
channels: Float32Array[];
|
|
5
|
+
decodedChannels: number;
|
|
6
|
+
decodedDuration: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Send already-decoded channel data to the worker for resample + mono mix.
|
|
10
|
+
* Buffers are transferred (zero-copy) both ways.
|
|
11
|
+
*/
|
|
12
|
+
export declare function postProcessAudioChannels(channels: Float32Array[], settings: AudioPostProcessSettings): Promise<Float32Array[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Send raw encoded audio data to the worker for decode + resample + mono mix.
|
|
15
|
+
* When OfflineAudioContext is available in the worker (secure context), the entire
|
|
16
|
+
* pipeline runs off the main thread. Otherwise, decoding falls back to the main
|
|
17
|
+
* thread's AudioContext, with resample + mix still handled by the worker.
|
|
18
|
+
*/
|
|
19
|
+
export declare function decodeAndPostProcessInWorker(audioData: ArrayBuffer, settings: AudioPostProcessSettings): Promise<DecodeAndPostProcessResult>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export declare enum MonoMixType {
|
|
2
|
+
AVERAGE = "average",
|
|
3
|
+
ABSOLUTE_AVERAGE = "absolute-average",
|
|
4
|
+
PEAK_MIN = "peak-min",
|
|
5
|
+
PEAK_MAX = "peak-max",
|
|
6
|
+
ABSOLUTE_MAX = "absolute-max",
|
|
7
|
+
ABSOLUTE_MIN = "absolute-min"
|
|
8
|
+
}
|
|
9
|
+
export interface AudioPostProcessSettings {
|
|
10
|
+
inputSampleRate: number;
|
|
11
|
+
outputSampleRate: number;
|
|
12
|
+
forceMono: boolean;
|
|
13
|
+
monoMixType: MonoMixType;
|
|
14
|
+
monoChannelsWeight: number[];
|
|
15
|
+
}
|
|
16
|
+
export declare enum AudioPostProcessMsgType {
|
|
17
|
+
PROCESS = "process",
|
|
18
|
+
DECODE_AND_PROCESS = "decode_and_process",
|
|
19
|
+
RESULT = "result",
|
|
20
|
+
DECODE_UNSUPPORTED = "decode_unsupported",
|
|
21
|
+
ERROR = "error"
|
|
22
|
+
}
|
|
23
|
+
export interface AudioPostProcessRequest {
|
|
24
|
+
id: number;
|
|
25
|
+
type: AudioPostProcessMsgType.PROCESS;
|
|
26
|
+
channels: Float32Array[];
|
|
27
|
+
settings: AudioPostProcessSettings;
|
|
28
|
+
}
|
|
29
|
+
export interface AudioDecodeAndProcessRequest {
|
|
30
|
+
id: number;
|
|
31
|
+
type: AudioPostProcessMsgType.DECODE_AND_PROCESS;
|
|
32
|
+
audioData: ArrayBuffer;
|
|
33
|
+
settings: AudioPostProcessSettings;
|
|
34
|
+
}
|
|
35
|
+
export interface AudioPostProcessResultResponse {
|
|
36
|
+
id: number;
|
|
37
|
+
type: AudioPostProcessMsgType.RESULT;
|
|
38
|
+
channels: Float32Array[];
|
|
39
|
+
decodedChannels: number;
|
|
40
|
+
decodedDuration: number;
|
|
41
|
+
}
|
|
42
|
+
export interface AudioPostProcessDecodeUnsupportedResponse {
|
|
43
|
+
id: number;
|
|
44
|
+
type: AudioPostProcessMsgType.DECODE_UNSUPPORTED;
|
|
45
|
+
audioData: ArrayBuffer;
|
|
46
|
+
settings: AudioPostProcessSettings;
|
|
47
|
+
}
|
|
48
|
+
export interface AudioPostProcessErrorResponse {
|
|
49
|
+
id: number;
|
|
50
|
+
type: AudioPostProcessMsgType.ERROR;
|
|
51
|
+
error: string;
|
|
52
|
+
}
|
|
53
|
+
export type AudioPostProcessResponse = AudioPostProcessResultResponse | AudioPostProcessDecodeUnsupportedResponse | AudioPostProcessErrorResponse;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MediaInfoStream } from '../../modules/ffmpeg/types/FFmpeg.types';
|
|
2
|
+
export interface AudioSampleExtractionParams {
|
|
3
|
+
mediaId: string;
|
|
4
|
+
mediaSource: Blob | File;
|
|
5
|
+
filename: string;
|
|
6
|
+
fileSize: number;
|
|
7
|
+
audioStream: MediaInfoStream | undefined;
|
|
8
|
+
storePath: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Main entry point for audio sample extraction.
|
|
12
|
+
*
|
|
13
|
+
* Strategy:
|
|
14
|
+
* 1. File < 1GB → decodeAudioData directly on the media source (no FFmpeg)
|
|
15
|
+
* 2. File >= 1GB, decoded samples fit in memory → FFmpeg demux audio stream, then decodeAudioData
|
|
16
|
+
* 3. Decoded samples would overflow or compressed audio too large → FFmpeg chunked extraction,
|
|
17
|
+
* decode + post-process per chunk, then join downsampled results
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractAudioSamples(params: AudioSampleExtractionParams): Promise<Float32Array[] | null>;
|