/**
 * Audio Mixer Service
 *
 * Processes and mixes audio tracks using FFmpeg.
 */
import { type EngineConfig } from "../config.js";
import type { AudioElement, MixResult } from "./audioMixer.types.js";
import { type HfAutomationLane } from "@hyperframes/core/audio-automation";
import type { AudioVolumeKeyframe } from "./audioMixer.types.js";
export type { AudioElement, MixResult } from "./audioMixer.types.js";
/**
 * Filename every caller must use for the mixed-audio artifact.
 *
 * The extension is load-bearing, not cosmetic: FFmpeg picks the muxer from it,
 * and the mix is AAC-encoded. A raw ADTS `.aac` stream has nowhere to record
 * the encoder's priming delay, so those leading samples decode as real silence
 * and shift the whole track ~1024 samples (21.33 ms at 48 kHz) late against a
 * frame-accurate video track. An MP4-family container carries the delay as an
 * edit list, which every decoder then strips, so the mix lands on its authored
 * start. Keep the choice here rather than at each call site: the same file is
 * muxed into the video, shipped in a distributed plan, and handed to users as
 * the PNG-sequence sidecar, and all three have to agree.
 */
export declare const MIXED_AUDIO_FILENAME = "audio.m4a";
/**
 * A volume lane as keyframes for the PCM baker.
 *
 * The baker interpolates linearly between keyframes, so a straight segment
 * needs only its two ends — a simple fade stays two keyframes. A bent one is
 * sampled, or the bake would quietly straighten it.
 *
 * Times come out in composition seconds, which is what the baker subtracts the
 * track start from. Returns null when the track has no volume lane.
 */
export declare function volumeLaneKeyframes(automation: {
    lanes: HfAutomationLane[];
}, trackStart: number, duration: number): AudioVolumeKeyframe[] | null;
export declare function parseAudioElements(html: string): AudioElement[];
export declare function processCompositionAudio(elements: AudioElement[], baseDir: string, workDir: string, outputPath: string, totalDuration: number, signal?: AbortSignal, config?: Partial<Pick<EngineConfig, "ffmpegProcessTimeout" | "audioGain">>, compiledDir?: string): Promise<MixResult>;
//# sourceMappingURL=audioMixer.d.ts.map