libsidplayfp 3.0.0
WavGen.h
1/*
2 * This file is part of libsidplayfp, a SID player engine.
3 *
4 * Copyright (C) 2025-2026 Leandro Nini
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21// Based on cRSID lightweight RealSID by Hermit (Mihaly Horvath)
22
23#ifndef SIDLITE_WAVGEN_H
24#define SIDLITE_WAVGEN_H
25
26#include <utility>
27
28namespace SIDLite
29{
30
31class ADSR;
32class settings;
33
34using wg_output_t = std::pair<int, int>;
35
36class WavGen
37{
38public:
39 WavGen(settings *s, unsigned char *regs);
40 void reset();
41 wg_output_t clock(const ADSR *adsr);
42
43 inline unsigned char getOsc3() const { return oscReg; }
44 inline unsigned char getEnv3() const { return envReg; }
45
46private:
47 unsigned char *regs;
48 settings *s;
49
50 int PhaseAccu[3]; // 28bit precision instead of 24bit
51 int PrevPhaseAccu[3]; // (integerized ClockRatio fractionals, WebSID has similar solution)
52 unsigned int NoiseLFSR[3];
53 unsigned int PrevWavGenOut[3];
54 unsigned char PrevWavData[3];
55 signed char PrevSounDemonDigiWF[3];
56 unsigned int RingSourceMSB;
57 unsigned char SyncSourceMSBrise;
58
59 unsigned char oscReg;
60 unsigned char envReg;
61};
62
63}
64
65#endif // SIDLITE_WAVGEN_H
Definition ADSR.h:30
Definition sl_settings.h:32