UNPKG

nes-emu

Version:

A NES emulator

46 lines (40 loc) 1.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _config = _interopRequireDefault(require("../../config")); var _constants = _interopRequireDefault(require("../../constants")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const APU_SAMPLE_RATE = 44100; /** A pulse wave generator. */ class PulseOscillator { constructor() { this.volume = _constants.default.APU_MAX_VOLUME; this.dutyCycle = 0; // (0~1) this.frequency = 0; this._phase = 0; // (0~1) } /** Generates a new sample. */ sample(isNewSample) { if (isNewSample) this._phase = (this._phase + this.frequency / APU_SAMPLE_RATE) % 1; return (this._phase < this.dutyCycle ? this.volume : 0) * _config.default.PULSE_CHANNEL_VOLUME; } /** Returns a snapshot of the current state. */ getSaveState() { return { volume: this.volume, dutyCycle: this.dutyCycle, frequency: this.frequency, phase: this._phase }; } /** Restores state from a snapshot. */ setSaveState(saveState) { this.volume = saveState.volume; this.dutyCycle = saveState.dutyCycle; this.frequency = saveState.frequency; this._phase = saveState.phase; } } exports.default = PulseOscillator;