/**
 * SPC File Format Builder
 *
 * Creates SPC (SNES-SPC700 Sound File Data) files with proper structure
 * based on the format used in snes9x smp_state.cpp
 *
 * SPC File Structure:
 * - 33-byte header with "SNES-SPC700 Sound File Data v0.30"
 * - SPC700 CPU state (PC, registers, PSW, SP)
 * - 64KB APU RAM allocation
 * - 128 DSP register configuration
 * - Sample directory setup at 0x200 (DIR register)
 * - Voice configuration for each sample
 */
import { VoiceConfig, SampleDirectoryEntry } from '../types/audio-types';
/**
 * Configuration for CPU state
 */
export interface CPUState {
    /** Program Counter */
    pc: number;
    /** Accumulator register */
    a: number;
    /** X index register */
    x: number;
    /** Y index register */
    y: number;
    /** Processor Status Word */
    psw: number;
    /** Stack Pointer */
    sp: number;
}
/**
 * Sample data for loading into SPC
 */
export interface SPCSample {
    /** BRR-encoded sample data */
    brrData: Uint8Array;
    /** Starting address in APU RAM */
    startAddress: number;
    /** Loop address (where to restart when looping) */
    loopAddress: number;
}
/**
 * Echo configuration settings
 */
export interface EchoSettings {
    /** Voice enable mask for echo */
    enableMask: number;
    /** Left channel echo volume */
    volumeLeft: number;
    /** Right channel echo volume */
    volumeRight: number;
    /** Echo feedback amount */
    feedback: number;
    /** Echo buffer start address */
    startAddress: number;
    /** Echo delay (buffer size) */
    delay: number;
}
/**
 * Builder class for creating SPC files from SNES audio data
 */
export declare class SPCBuilder {
    private static readonly SPC_FILE_SIZE;
    private static readonly HEADER_SIZE;
    private static readonly APURAM_SIZE;
    private static readonly DSP_REGISTERS_SIZE;
    private static readonly IPLROM_SIZE;
    private static readonly DSP_MVOLL;
    private static readonly DSP_MVOLR;
    private static readonly DSP_EVOLL;
    private static readonly DSP_EVOLR;
    private static readonly DSP_KON;
    private static readonly DSP_KOFF;
    private static readonly DSP_FLG;
    private static readonly DSP_ENDX;
    private static readonly DSP_EFB;
    private static readonly DSP_PMON;
    private static readonly DSP_NON;
    private static readonly DSP_EON;
    private static readonly DSP_DIR;
    private static readonly DSP_ESA;
    private static readonly DSP_EDL;
    private static readonly DSP_FIR;
    private static readonly VOICE_VOLL;
    private static readonly VOICE_VOLR;
    private static readonly VOICE_PITCHL;
    private static readonly VOICE_PITCHH;
    private static readonly VOICE_SRCN;
    private static readonly VOICE_ADSR0;
    private static readonly VOICE_ADSR1;
    private static readonly VOICE_GAIN;
    private static readonly VOICE_ENVX;
    private static readonly VOICE_OUTX;
    private cpuState;
    private apuRam;
    private dspRegisters;
    private iplRom;
    /**
     * Initialize SPC builder with default values
     */
    constructor();
    /**
     * Reset builder to default state
     */
    reset(): void;
    /**
     * Setup default DSP register values
     */
    private setupDefaultDSP;
    /**
     * Set SPC700 CPU state
     */
    setCPUState(state: Partial<CPUState>): void;
    /**
     * Set APU RAM data at specified offset
     */
    setAPURAM(data: Uint8Array, offset?: number): void;
    /**
     * Set individual DSP register
     */
    setDSPRegister(register: number, value: number): void;
    /**
     * Configure a DSP voice (0-7)
     */
    setupVoice(voice: number, sampleNum?: number, volumeLeft?: number, volumeRight?: number, pitch?: number, adsr0?: number, adsr1?: number): void;
    /**
     * Setup sample directory at specified page (default 0x200)
     */
    setupSampleDirectory(samples: SampleDirectoryEntry[], dirPage?: number): void;
    /**
     * Load BRR sample data into APU RAM
     * @returns End address after sample data
     */
    loadBRRSample(brrData: Uint8Array, startAddr: number): number;
    /**
     * Enable voices using KON register
     */
    enableVoices(voiceMask: number): void;
    /**
     * Set main output volume
     */
    setMainVolume(left?: number, right?: number): void;
    /**
     * Configure echo settings
     */
    setEchoSettings(settings: Partial<EchoSettings>): void;
    /**
     * Build complete SPC file data
     */
    build(): Uint8Array;
    /**
     * Save SPC file to binary data (for use with file system APIs)
     */
    save(): Uint8Array;
    /**
     * Create a simple SPC file with samples and voice configuration
     */
    static createSimpleSPC(samples: SPCSample[], voices?: Partial<VoiceConfig>[]): SPCBuilder;
    /**
     * Get current CPU state
     */
    getCPUState(): CPUState;
    /**
     * Get APU RAM copy
     */
    getAPURAM(): Uint8Array;
    /**
     * Get DSP registers copy
     */
    getDSPRegisters(): Uint8Array;
}
//# sourceMappingURL=SPCBuilder.d.ts.map