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
TypeScript
/**
* 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