UNPKG

nes-emu

Version:

A NES emulator

40 lines (35 loc) 1.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _config = _interopRequireDefault(require("../../config")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const APU_SAMPLE_RATE = 44100; const TRIANGLE_SEQUENCE = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; /** A triangle wave generator. */ class TriangleOscillator { constructor() { 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; const step = Math.floor(this._phase * TRIANGLE_SEQUENCE.length); return TRIANGLE_SEQUENCE[step] * _config.default.TRIANGLE_CHANNEL_VOLUME; } /** Returns a snapshot of the current state. */ getSaveState() { return { frequency: this.frequency, phase: this._phase }; } /** Restores state from a snapshot. */ setSaveState(saveState) { this.frequency = saveState.frequency; this._phase = saveState.phase; } } exports.default = TriangleOscillator;