snes-disassembler
Version:
A Super Nintendo (SNES) ROM disassembler for 65816 assembly
174 lines • 5.02 kB
TypeScript
/**
* 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