jsgbc
Version:
jsGBC Core Emulator
115 lines (114 loc) • 3.86 kB
TypeScript
import CPU from "../CPU";
import * as util from "../util";
import GameBoy from "../GameBoy";
import AudioDevice from "./AudioDevice";
import SquareAudioChannel from "./SquareAudioChannel";
export default class AudioController {
cartridgeLeftChannelInputVolume: number;
cartridgeRightChannelInputVolume: number;
mixerOutputCache: number;
sequencerClocks: number;
sequencePosition: number;
audioClocksUntilNextEvent: number;
audioClocksUntilNextEventCounter: number;
resamplerFirstPassFactor: number;
leftChannel3: boolean;
rightChannel3: boolean;
channel3Enabled: boolean;
channel3CanPlay: boolean;
cachedChannel3Sample: number;
channel3CurrentSampleLeft: number;
channel3CurrentSampleRight: number;
channel3CurrentSampleLeftSecondary: number;
channel3CurrentSampleRightSecondary: number;
channel3envelopeVolume: number;
channel3TotalLength: number;
channel3PatternType: number;
channel3frequency: number;
channel3Consecutive: boolean;
channel3Counter: number;
channel3FrequencyPeriod: number;
channel3LastSampleLookup: number;
channel3PcmData: Int8Array;
leftChannel4: boolean;
rightChannel4: boolean;
channel4Enabled: boolean;
channel4CanPlay: boolean;
cachedChannel4Sample: number;
channel4Counter: number;
channel4CurrentSampleLeft: number;
channel4CurrentSampleRight: number;
channel4CurrentSampleLeftSecondary: number;
channel4CurrentSampleRightSecondary: number;
channel4FrequencyPeriod: number;
channel4TotalLength: number;
channel4EnvelopeVolume: number;
channel4CurrentVolume: number;
channel4EnvelopeType: boolean;
channel4EnvelopeSweeps: number;
channel4EnvelopeSweepsLast: number;
channel4Consecutive: boolean;
channel4BitRange: number;
channel4VolumeShifter: number;
channel4LastSampleLookup: number;
downSampleInputDivider: number;
device: AudioDevice;
memory: util.TypedArray;
gameboy: GameBoy;
cpu: CPU;
LSFR15Table: Int8Array;
LSFR7Table: Int8Array;
noiseSampleTable: Int8Array;
bufferLength: number;
audioTicks: number;
audioIndex: number;
bufferContainAmount: number;
bufferPosition: number;
downsampleInput: number;
buffer: Float32Array;
enabled: boolean;
channel1: SquareAudioChannel;
channel2: SquareAudioChannel;
constructor({ cpu, gameboy }: {
cpu: CPU;
gameboy: GameBoy;
});
setMemory(memory: util.TypedArray): void;
initMemory(): void;
init(): void;
setInitialState(): void;
setSkippedBootRomState(): void;
generate(sampleCount: number): void;
enable(): void;
disable(): void;
run(): void;
clockAudioEnvelope(): void;
performChannel1AudioSweepDummy(): void;
audioComputeSequencer(): void;
clockAudioLength(): void;
clockAudioSweep(): void;
computeChannels(): void;
cacheChannel3Update(): void;
checkChannel3Enable(): void;
cacheChannel3OutputLevel(): void;
channel3OutputLevelSecondaryCache(): void;
checkChannel4Enable(): void;
cacheChannel4Update(): void;
cacheChannel4OutputLevel(): void;
checkChannel4VolumeEnable(): void;
cacheChannel4OutputLevelSecondary(): void;
cacheMixerOutputLevel(): void;
connectDevice(device: AudioDevice): void;
setVolume(volume: number): void;
adjustUnderrun(): void;
recalculateIterationClockLimitForAudio(audioClocking: any): void;
outputAudio(): void;
fillBuffer(): void;
generateWhiteNoise(): void;
generateLSFR7Table(): Int8Array;
generateLSFR15Table(): Int8Array;
registerMemoryWriters(): void;
registerWaveformMemoryWriters(): void;
writeWaveformRam(address: number, data: number): void;
channelVolumeControlWriter: (address: number, data: number) => void;
}