UNPKG

snes-disassembler

Version:

A Super Nintendo (SNES) ROM disassembler for 65816 assembly

174 lines 5.02 kB
/** * 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