43 static const int_least32_t SCALE_FACTOR = 1 << 16;
44 static const int_least32_t C1 =
static_cast<int_least32_t
>(1.0 / (1.0 + 0.7071067812) * SCALE_FACTOR);
45 static const int_least32_t C2 =
static_cast<int_least32_t
>(0.7071067812 / (1.0 + 0.7071067812) * SCALE_FACTOR);
48 typedef int_least32_t (
Mixer::*mixer_func_t)()
const;
55 std::vector<sidemu*> m_chips;
56 std::vector<short*> m_buffers;
58 std::vector<int_least32_t> m_iSamples;
59 std::vector<int_least32_t> m_volume;
61 std::vector<mixer_func_t> m_mix;
64 int m_fastForwardFactor;
67 short *m_sampleBuffer;
68 uint_least32_t m_sampleCount;
69 uint_least32_t m_sampleIndex;
76 int triangularDithering()
78 const int prevValue = oldRandomValue;
79 oldRandomValue = rand() & (VOLUME_MAX-1);
80 return oldRandomValue - prevValue;
100 int_least32_t mono_OneChip()
const {
return m_iSamples[0]; }
101 int_least32_t mono_TwoChips()
const {
return (m_iSamples[0] + m_iSamples[1]) / 2; }
102 int_least32_t mono_ThreeChips()
const {
return (m_iSamples[0] + m_iSamples[1] + m_iSamples[2]) / 3; }
105 int_least32_t stereo_OneChip()
const {
return m_iSamples[0]; }
107 int_least32_t stereo_ch1_TwoChips()
const {
return m_iSamples[0]; }
108 int_least32_t stereo_ch2_TwoChips()
const {
return m_iSamples[1]; }
110 int_least32_t stereo_ch1_ThreeChips()
const {
return (C1*m_iSamples[0] + C2*m_iSamples[1]) / SCALE_FACTOR; }
111 int_least32_t stereo_ch2_ThreeChips()
const {
return (C2*m_iSamples[1] + C1*m_iSamples[2]) / SCALE_FACTOR; }
120 m_fastForwardFactor(1),
124 m_mix.push_back(&Mixer::mono_OneChip);
148 void begin(
short *buffer, uint_least32_t count);
168 sidemu*
getSid(
unsigned int i)
const {
return (i < m_chips.size()) ? m_chips[i] : 0; }
184 void setVolume(int_least32_t left, int_least32_t right);
196 bool notFinished()
const {
return m_sampleIndex != m_sampleCount; }
static const unsigned int MAX_SIDS
Maximum number of supported SIDs.
Definition: mixer.h:41
void clockChips()
Definition: mixer.cpp:59
static const int_least32_t VOLUME_MAX
Maximum allowed volume, must be a power of 2.
Definition: mixer.h:52
void setStereo(bool stereo)
Definition: mixer.cpp:170
uint_least32_t samplesGenerated() const
Definition: mixer.h:201
bool setFastForward(int ff)
Definition: mixer.cpp:182
void setVolume(int_least32_t left, int_least32_t right)
Definition: mixer.cpp:191
void doMix()
Definition: mixer.cpp:69
Mixer()
Definition: mixer.h:118
void addSid(sidemu *chip)
Definition: mixer.cpp:156
void clearSids()
Definition: mixer.cpp:150
sidemu * getSid(unsigned int i) const
Definition: mixer.h:168
bool notFinished() const
Definition: mixer.h:196
void begin(short *buffer, uint_least32_t count)
Definition: mixer.cpp:125
void resetBufs()
Definition: mixer.cpp:64