40 typedef short (
Mixer::*mixer_func_t)()
const;
49 std::vector<sidemu*> m_chips;
50 std::vector<short*> m_buffers;
52 std::vector<int_least32_t> m_iSamples;
53 std::vector<int_least32_t> m_volume;
55 std::vector<mixer_func_t> m_mix;
58 int m_fastForwardFactor;
61 short *m_sampleBuffer;
62 uint_least32_t m_sampleCount;
63 uint_least32_t m_sampleIndex;
70 int triangularDithering()
72 const int prevValue = oldRandomValue;
74 return oldRandomValue - prevValue;
77 short channel1MonoMix()
const {
return static_cast<short>((m_iSamples[0] + m_iSamples[1]) / 2); }
78 short channel1StereoMix()
const {
return static_cast<short>(m_iSamples[0]); }
80 short channel2FromMonoMix()
const {
return static_cast<short>(m_iSamples[0]); }
81 short channel2FromStereoMix()
const {
return static_cast<short>(m_iSamples[1]); }
91 m_fastForwardFactor(1),
95 m_mix.push_back(&Mixer::channel1MonoMix);
119 void begin(
short *buffer, uint_least32_t count);
139 sidemu*
getSid(
unsigned int i)
const {
return (i < m_chips.size()) ? m_chips[i] : 0; }
155 void setVolume(int_least32_t left, int_least32_t right);
167 bool notFinished()
const {
return m_sampleIndex != m_sampleCount; }