SCUMM: Cleanup CMS code a bit.
This commit is contained in:
parent
28004ac8d9
commit
6bd9cd33d9
2 changed files with 18 additions and 29 deletions
|
@ -28,14 +28,6 @@
|
|||
|
||||
namespace Scumm {
|
||||
|
||||
#define PROCESS_ATTACK 1
|
||||
#define PROCESS_RELEASE 2
|
||||
#define PROCESS_SUSTAIN 3
|
||||
#define PROCESS_DECAY 4
|
||||
#define PROCESS_VIBRATO 5
|
||||
|
||||
#define CMS_RATE 22050
|
||||
|
||||
static const byte freqTable[] = {
|
||||
3, 10, 17, 24, 31, 38, 45, 51,
|
||||
58, 65, 71, 77, 83, 90, 96, 102,
|
||||
|
@ -492,27 +484,20 @@ void Player_V2CMS::playVoice() {
|
|||
void Player_V2CMS::processChannel(Voice2 *channel) {
|
||||
++_outputTableReady;
|
||||
switch (channel->nextProcessState) {
|
||||
case PROCESS_RELEASE:
|
||||
processRelease(channel);
|
||||
break;
|
||||
|
||||
case PROCESS_ATTACK:
|
||||
case Voice2::kEnvelopeAttack:
|
||||
processAttack(channel);
|
||||
break;
|
||||
|
||||
case PROCESS_DECAY:
|
||||
case Voice2::kEnvelopeDecay:
|
||||
processDecay(channel);
|
||||
break;
|
||||
|
||||
case PROCESS_SUSTAIN:
|
||||
case Voice2::kEnvelopeSustain:
|
||||
processSustain(channel);
|
||||
break;
|
||||
|
||||
case PROCESS_VIBRATO:
|
||||
processVibrato(channel);
|
||||
break;
|
||||
|
||||
default:
|
||||
case Voice2::kEnvelopeRelease:
|
||||
processRelease(channel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -530,7 +515,7 @@ void Player_V2CMS::processAttack(Voice2 *channel) {
|
|||
int newVolume = channel->curVolume + channel->attackRate;
|
||||
if (newVolume > channel->maxAmpl) {
|
||||
channel->curVolume = channel->maxAmpl;
|
||||
channel->nextProcessState = PROCESS_DECAY;
|
||||
channel->nextProcessState = Voice2::kEnvelopeDecay;
|
||||
} else {
|
||||
channel->curVolume = newVolume;
|
||||
}
|
||||
|
@ -542,7 +527,7 @@ void Player_V2CMS::processDecay(Voice2 *channel) {
|
|||
int newVolume = channel->curVolume - channel->decayRate;
|
||||
if (newVolume <= channel->sustainRate) {
|
||||
channel->curVolume = channel->sustainRate;
|
||||
channel->nextProcessState = PROCESS_SUSTAIN;
|
||||
channel->nextProcessState = Voice2::kEnvelopeSustain;
|
||||
} else {
|
||||
channel->curVolume = newVolume;
|
||||
}
|
||||
|
@ -670,7 +655,7 @@ void Player_V2CMS::playNote(byte *&data) {
|
|||
freeVoice->curOctave = octave;
|
||||
freeVoice->curFreq = freqTable[(note >> 8) << 2];
|
||||
freeVoice->curVolume = 0;
|
||||
freeVoice->nextProcessState = PROCESS_ATTACK;
|
||||
freeVoice->nextProcessState = Voice2::kEnvelopeAttack;
|
||||
if (!(_lastMidiCommand & 1))
|
||||
freeVoice->channel = 0xF0;
|
||||
else
|
||||
|
@ -710,7 +695,7 @@ void Player_V2CMS::clearNote(byte *&data) {
|
|||
if (voice) {
|
||||
voice->chanNumber = 0xFF;
|
||||
voice->nextVoice = 0;
|
||||
voice->nextProcessState = PROCESS_RELEASE;
|
||||
voice->nextProcessState = Voice2::kEnvelopeRelease;
|
||||
}
|
||||
data += 2;
|
||||
}
|
||||
|
|
|
@ -48,11 +48,8 @@ public:
|
|||
// AudioStream API
|
||||
int readBuffer(int16 *buffer, const int numSamples);
|
||||
bool isStereo() const { return true; }
|
||||
bool endOfData() const { return false; }
|
||||
int getRate() const { return _sampleRate; }
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
#include "common/pack-start.h" // START STRUCT PACKING
|
||||
struct Voice {
|
||||
byte attack;
|
||||
|
@ -90,7 +87,14 @@ protected:
|
|||
int8 unkRate;
|
||||
int8 unkCount;
|
||||
|
||||
int nextProcessState;
|
||||
enum EnvelopeState {
|
||||
kEnvelopeAttack,
|
||||
kEnvelopeDecay,
|
||||
kEnvelopeSustain,
|
||||
kEnvelopeRelease
|
||||
};
|
||||
|
||||
EnvelopeState nextProcessState;
|
||||
uint8 curVolume;
|
||||
uint8 curOctave;
|
||||
uint8 curFreq;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue