UNPKG

audio-tracker

Version:

A headless JavaScript library that gives you full control over web audio — playback, tracking, and Media Session integration made simple.

116 lines 3.69 kB
/** * Speaker information in a segment */ interface Speaker { id: string; name?: string; } /** * Sub-segment of a timestamp segment */ interface SubSegment { id: string; start: number; end: number; order?: number; text?: string; } /** * Segment representing a time range in audio with optional speaker and sub-segments */ interface Segment { id: string; label?: string; start: number; end: number; order?: number; speaker?: Speaker | null; text?: string; subSegments?: SubSegment[]; } /** * Options defining segment list and gap behavior for timestamps */ interface TimestampOptions { segments?: Segment[]; gapBehavior?: "persist-previous" | "persist-next" | null; } /** * Extended AudioTracker interface with timestamp module functionality */ interface AudioTrackerWithTimestamp { options: { timestamp?: TimestampOptions; }; callbacks: { onSegmentChange?: (segment: Segment | null) => void; onSegmentEnter?: (segment: Segment | null) => void; onSegmentExit?: (segment: Segment | null) => void; onSubSegmentChange?: (subSegment: SubSegment | null) => void; onSubSegmentEnter?: (subSegment: SubSegment | null) => void; onSubSegmentExit?: (subSegment: SubSegment | null) => void; onSpeakerChange?: (speaker: Speaker | null) => void; }; getCurrentTime: () => number; getDuration: () => number; seekTo: (time: number) => void; subscribe: (event: string, callback: () => void) => void; unsubscribe: (event: string, callback: () => void) => void; getCurrentSegment?: () => Segment | null; getCurrentSubSegment?: () => SubSegment | null; getCurrentSpeaker?: () => Speaker | null; seekToSegmentById?: (id: string) => void; seekToSubSegmentById?: (id: string) => void; getAllSegments?: () => Segment[]; getSubSegmentsBySegmentId?: (id: string) => SubSegment[]; getNextSegment?: () => Segment | null; getPreviousSegment?: () => Segment | null; seekToNextSegment?: () => void; seekToPreviousSegment?: () => void; isInGap?: () => boolean; getGapBehavior?: () => "persist-previous" | "persist-next" | null; getSegmentAtTime?: (time: number) => Segment | null; getSubSegmentAtTime?: (time: number) => SubSegment | null; } /** * Timestamp module for AudioTracker that tracks audio segments and subsegments in real time. * Fires callbacks on segment, subsegment, and speaker changes based on playback time. * * @param tracker - AudioTracker instance with timestamp options * @returns Cleanup function that unsubscribes from events * * @example * // Example timestamp structure passed during AudioTracker construction: * const timestampData = { * segments: [ * { * id: 'seg1', * start: 0, * end: 30, * order: 1, * speaker: { id: 'sp1', name: 'Speaker 1' }, * label: 'Intro', * text: 'hi everyone' * subSegments: [ * { id: 'sub1', start: 0, end: 10, order: 1, text: 'hi' }, * { id: 'sub2', start: 10, end: 30, order: 2, text: 'everyone' }, * ], * }, * { * id: 'seg2', * start: 30, * end: 60, * order: 2, * label: 'Main section', * text: 'welcome to todays podcast...' * }, * ], * gapBehavior: 'persist-previous', // Optional gap behavior * }; * * const tracker = new AudioTracker('audio.mp3', { timestamp: timestampData }); * tracker.use(timestampModule); */ export declare function timestampModule(tracker: AudioTrackerWithTimestamp): () => void; export {}; //# sourceMappingURL=timestampModule.d.ts.map