1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #pragma once
- #include "openmpt/all/BuildSettings.hpp"
- #include "Snd_defs.h"
- #include "Mixer.h"
- OPENMPT_NAMESPACE_BEGIN
- namespace Paula
- {
- inline constexpr int PAULA_HZ = 3546895;
- inline constexpr int MINIMUM_INTERVAL = 4;
- inline constexpr int BLEP_SCALE = 17;
- inline constexpr int BLEP_SIZE = 2048;
- using BlepArray = std::array<mixsample_t, BLEP_SIZE>;
- class BlepTables
- {
- enum AmigaFilter
- {
- A500Off = 0,
- A500On,
- A1200Off,
- A1200On,
- Unfiltered,
- NumFilterTypes
- };
- std::array<Paula::BlepArray, AmigaFilter::NumFilterTypes> WinSincIntegral;
- public:
- void InitTables();
- const Paula::BlepArray &GetAmigaTable(Resampling::AmigaFilter amigaType, bool enableFilter) const;
- };
- class State
- {
-
-
-
-
-
-
- static constexpr uint16 MAX_BLEPS = 128;
- struct Blep
- {
- int16 level;
- uint16 age;
- };
- public:
- SamplePosition remainder, stepRemainder;
- int numSteps;
- private:
- uint16 activeBleps = 0, firstBlep = 0;
- int16 globalOutputLevel = 0;
- Blep blepState[MAX_BLEPS];
- public:
- State(uint32 sampleRate = 48000);
- void Reset();
- void InputSample(int16 sample);
- int OutputSample(const BlepArray &WinSincIntegral);
- void Clock(int cycles);
- };
- }
- OPENMPT_NAMESPACE_END
|