22 #if !defined(SCUMM_IMUSE_DIGI_MIXER_H) && defined(ENABLE_SCUMM_7_8) 23 #define SCUMM_IMUSE_DIGI_MIXER_H 25 #include "common/scummsys.h" 26 #include "common/mutex.h" 27 #include "common/serializer.h" 28 #include "common/textconsole.h" 29 #include "common/util.h" 31 #include "scumm/imuse_digi/dimuse_engine.h" 32 #include "scumm/music.h" 33 #include "scumm/sound.h" 34 #include "audio/mixer.h" 35 #include "audio/audiostream.h" 40 class QueuingAudioStream;
45 class IMuseDigiInternalMixer {
48 int32 *_amp8Table =
nullptr;
49 int32 *_amp12Table =
nullptr;
50 int32 *_softLMID =
nullptr;
51 int32 *_softLTable =
nullptr;
53 uint8 *_mixBuf =
nullptr;
58 int _radioChatter = 0;
60 int _outChannelCount = 0;
62 int _stereoReverseFlag = 0;
63 bool _isEarlyDiMUSE =
false;
64 bool _lowLatencyMode =
false;
66 void mixBits8Mono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable,
bool ftIs11025Hz);
67 void mixBits12Mono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
68 void mixBits16Mono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
70 void mixBits8ConvertToMono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
71 void mixBits12ConvertToMono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
72 void mixBits16ConvertToMono(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
74 void mixBits8ConvertToStereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *leftAmpTable, int32 *rightAmpTable,
bool ftIs11025Hz);
75 void mixBits12ConvertToStereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *leftAmpTable, int32 *rightAmpTable);
76 void mixBits16ConvertToStereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *leftAmpTable, int32 *rightAmpTable);
78 void mixBits8Stereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
79 void mixBits12Stereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
80 void mixBits16Stereo(uint8 *srcBuf, int32 inFrameCount,
int feedSize, int32 mixBufStartIndex, int32 *ampTable);
83 IMuseDigiInternalMixer(
Audio::Mixer *mixer,
int sampleRate,
bool isEarlyDiMUSE,
bool lowLatencyMode =
false);
84 ~IMuseDigiInternalMixer();
85 int init(
int bytesPerSample,
int numChannels, uint8 *mixBuf,
int mixBufSize,
int sizeSampleKB,
int mixChannelsNum);
86 void setRadioChatter();
87 void clearRadioChatter();
88 int clearMixerBuffer();
90 void mix(uint8 *srcBuf, int32 inFrameCount,
int wordSize,
int channelCount,
int feedSize, int32 mixBufStartIndex,
int volume,
int pan,
bool ftIs11025Hz);
91 int loop(uint8 **destBuffer,
int len);
95 void setCurrentMixerBuffer(uint8 *newBuf);
96 void endStream(
int idx);
Definition: audiostream.h:370