22 #ifndef AUDIO_SOFTSYNTH_YM2149_H 23 #define AUDIO_SOFTSYNTH_YM2149_H 25 #include "audio/ym2149.h" 35 void reset()
override;
36 void writeReg(
int reg, uint8 value)
override;
37 bool isStereo()
const override {
return false; }
43 static const int YM_ATARI_CLOCK = 2000000;
44 static const int YM_ATARI_CLOCK_COUNTER = (YM_ATARI_CLOCK / 8);
46 static const int YM_BUFFER_250_SIZE = 32768;
47 static const int YM_BUFFER_250_SIZE_MASK = (YM_BUFFER_250_SIZE - 1);
49 static const uint32 YmVolume4to5[32];
51 static const int ENV_GODOWN = 0;
52 static const int ENV_GOUP = 1;
53 static const int ENV_DOWN = 2;
54 static const int ENV_UP = 3;
55 static const int YmEnvDef[16][3];
57 static uint16 YmEnvWaves[16][32 * 3];
58 static const uint16 volumeTable[16][16][16];
59 static uint16 ymout5_u16[32][32][32];
61 static bool _tablesBuilt;
63 static const uint16 YM_MASK_1VOICE = 0x1f;
64 static const uint16 YM_MASK_A = 0x1f;
65 static const uint16 YM_MASK_B = (0x1f << 5);
66 static const uint16 YM_MASK_C = (0x1f << 10);
68 static const uint16 YM_SQUARE_UP = 0x1f;
69 static const uint16 YM_SQUARE_DOWN = 0x00;
71 uint16 _toneAPer, _toneACount, _toneAVal;
72 uint16 _toneBPer, _toneBCount, _toneBVal;
73 uint16 _toneCPer, _toneCCount, _toneCVal;
74 uint16 _noisePer, _noiseCount, _noiseVal;
75 uint16 _envPer, _envCount;
80 uint32 _mixerTA, _mixerTB, _mixerTC;
81 uint32 _mixerNA, _mixerNB, _mixerNC;
86 uint16 _envMask3Voices;
91 int16 _YMBuffer250[YM_BUFFER_250_SIZE];
92 int _YMBuffer250PosWrite;
93 int _YMBuffer250PosRead;
95 uint32 _posFractWeightedN;
98 void setOutputRate(
int outputRate);
99 void generate(int16 *dst,
int count);
100 static uint16 mergeVoice(uint16 c, uint16 b, uint16 a);
101 static void envBuild();
102 static void interpolateVolumetable(uint16 volumetable[32][32][32]);
103 static void normalise5bitTable(uint16 *in5bit, int16 *out5bit,
unsigned int level);
104 static void initOnce();
105 static uint16 tonePer(uint8 rHigh, uint8 rLow);
106 static uint16 noisePer(uint8 rNoise);
107 static uint16 envPer(uint8 rHigh, uint8 rLow);
109 void doSamples250(
int samplesToGenerate250);
void writeReg(int reg, uint8 value) override
void generateSamples(int16 *buffer, int numSamples) override
bool isStereo() const override
Definition: ym2149.h:37