[Scummvm-git-logs] scummvm master -> 84b2f1fd11be64a323cb85c1297f8b445c564b34
AndywinXp
noreply at scummvm.org
Thu Jan 19 09:31:18 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
84b2f1fd11 JANITORIAL: SCUMM: Improve readability of SMUSH audio code
Commit: 84b2f1fd11be64a323cb85c1297f8b445c564b34
https://github.com/scummvm/scummvm/commit/84b2f1fd11be64a323cb85c1297f8b445c564b34
Author: AndywinXp (andywinxp at gmail.com)
Date: 2023-01-19T10:31:13+01:00
Commit Message:
JANITORIAL: SCUMM: Improve readability of SMUSH audio code
Changed paths:
engines/scumm/imuse_digi/dimuse_defs.h
engines/scumm/imuse_digi/dimuse_engine.cpp
engines/scumm/smush/smush_player.cpp
engines/scumm/smush/smush_player.h
diff --git a/engines/scumm/imuse_digi/dimuse_defs.h b/engines/scumm/imuse_digi/dimuse_defs.h
index f9774897bea..7c105132a2b 100644
--- a/engines/scumm/imuse_digi/dimuse_defs.h
+++ b/engines/scumm/imuse_digi/dimuse_defs.h
@@ -51,7 +51,7 @@ namespace Scumm {
#define DIMUSE_GROUP_MUSICEFF 4
#define DIMUSE_BUFFER_SPEECH 1
#define DIMUSE_BUFFER_MUSIC 2
-#define DIMUSE_BUFFER_SMUSH 3
+#define DIMUSE_BUFFER_SFX 3
#define DIMUSE_TIMER_BASE_RATE_HZ 50
#define DIMUSE_TIMER_BASE_RATE_USEC 20000 // 1000000 / 50Hz
diff --git a/engines/scumm/imuse_digi/dimuse_engine.cpp b/engines/scumm/imuse_digi/dimuse_engine.cpp
index 2856115d62d..6b463c38306 100644
--- a/engines/scumm/imuse_digi/dimuse_engine.cpp
+++ b/engines/scumm/imuse_digi/dimuse_engine.cpp
@@ -112,7 +112,7 @@ IMuseDigital::IMuseDigital(ScummEngine_v7 *scumm, int sampleRate, Audio::Mixer *
_filesHandler->allocSoundBuffer(DIMUSE_BUFFER_MUSIC, 220000, 22000, 44000);
}
- _filesHandler->allocSoundBuffer(DIMUSE_BUFFER_SMUSH, 198000, 0, 0);
+ _filesHandler->allocSoundBuffer(DIMUSE_BUFFER_SFX, 198000, 0, 0);
if (_mixer->getOutputBufSize() != 0) {
// Let's find the optimal value for the maximum number of streams which can stay in the queue at once;
@@ -147,7 +147,7 @@ IMuseDigital::~IMuseDigital() {
_vm->getTimerManager()->removeTimerProc(timer_handler);
_filesHandler->deallocSoundBuffer(DIMUSE_BUFFER_SPEECH);
_filesHandler->deallocSoundBuffer(DIMUSE_BUFFER_MUSIC);
- _filesHandler->deallocSoundBuffer(DIMUSE_BUFFER_SMUSH);
+ _filesHandler->deallocSoundBuffer(DIMUSE_BUFFER_SFX);
cmdsDeinit();
diMUSETerminate();
delete _internalMixer;
@@ -563,7 +563,7 @@ void IMuseDigital::stopSMUSHAudio() {
// remaining cases. This fixes instances in which exiting from a cutscene leaves both
// DiMUSE streams locked, with speech consequently unable to play and a "WARNING: three
// streams in use" message from streamerProcessStreams()
- if (bufSize == 193900 || foundSoundId == DIMUSE_SMUSH_SOUNDID + DIMUSE_BUFFER_SMUSH)
+ if (bufSize == 193900 || foundSoundId == DIMUSE_SMUSH_SOUNDID + DIMUSE_BUFFER_SFX)
diMUSEStopSound(foundSoundId);
}
diff --git a/engines/scumm/smush/smush_player.cpp b/engines/scumm/smush/smush_player.cpp
index d85a2c7799f..17784100b69 100644
--- a/engines/scumm/smush/smush_player.cpp
+++ b/engines/scumm/smush/smush_player.cpp
@@ -453,16 +453,16 @@ void SmushPlayer::handleIACT(int32 subSize, Common::SeekableReadStream &b) {
b.read(dataBuffer, bsize);
switch (userId) {
- case 1:
- bufId = 1;
+ case TRK_USERID_SPEECH:
+ bufId = DIMUSE_BUFFER_SPEECH;
volume = 127;
break;
- case 2:
- bufId = 2;
+ case TRK_USERID_MUSIC:
+ bufId = DIMUSE_BUFFER_MUSIC;
volume = 127;
break;
- case 3:
- bufId = 3;
+ case TRK_USERID_SFX:
+ bufId = DIMUSE_BUFFER_SFX;
volume = 127;
break;
default:
@@ -473,7 +473,7 @@ void SmushPlayer::handleIACT(int32 subSize, Common::SeekableReadStream &b) {
bufId = DIMUSE_BUFFER_MUSIC;
volume = 2 * userId - 400;
} else if (userId >= 300 && userId <= 363) {
- bufId = DIMUSE_BUFFER_SMUSH;
+ bufId = DIMUSE_BUFFER_SFX;
volume = 2 * userId - 600;
} else {
free(dataBuffer);
@@ -1830,7 +1830,7 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
code = _smushDispatch[idx].headerPtr;
switch (code[0]) {
- case 1: // Init
+ case SAUD_OP_INIT:
_smushDispatch[idx].audioLength = 0;
buf = _smushDispatch[idx].headerPtr;
_smushDispatch[idx].audioRemaining = READ_BE_UINT32(buf + 2);
@@ -1850,20 +1850,21 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
_smushDispatch[idx].currentOffset -= chunk;
}
break;
- case 2: //
- case 8: //
- case 9: // Compare params
- case 0xA: //
- case 0xB: //
+
+ case SAUD_OP_UPDATE_HEADER:
+ case SAUD_OP_COMPARE_GT:
+ case SAUD_OP_COMPARE_LT:
+ case SAUD_OP_COMPARE_EQ:
+ case SAUD_OP_COMPARE_NE:
subcode = code[4];
switch (subcode) {
- case 0xFF:
+ case SAUD_VALUEID_ALL_VOLS:
value = _smushTrackVols[0];
break;
- case 0xFE:
+ case SAUD_VALUEID_TRK_VOL:
value = _smushTracks[idx].volume;
break;
- case 0xFD:
+ case SAUD_VALUEID_TRK_PAN:
value = _smushTracks[idx].pan;
break;
default:
@@ -1872,21 +1873,21 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
}
switch (code[0]) {
- case 2:
+ case SAUD_OP_UPDATE_HEADER:
if (value || (subcode == 0)) {
_smushDispatch[idx].headerPtr = &code[READ_BE_UINT16(&code[2])];
}
break;
- case 8:
+ case SAUD_OP_COMPARE_GT:
value = value > code[5];
break;
- case 9:
+ case SAUD_OP_COMPARE_LT:
value = value < code[5];
break;
- case 0xA:
+ case SAUD_OP_COMPARE_EQ:
value = value == code[5];
break;
- case 0xB:
+ case SAUD_OP_COMPARE_NE:
value = value != code[5];
break;
default:
@@ -1898,14 +1899,14 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
} else {
_smushDispatch[idx].headerPtr = &code[READ_BE_UINT16(&code[2])];
}
-
break;
- case 3: // Set params
+
+ case SAUD_OP_SET_PARAM:
switch (code[2]) {
- case 0xFF:
+ case SAUD_VALUEID_ALL_VOLS:
_smushTrackVols[0] = code[3];
break;
- case 0xFE:
+ case SAUD_VALUEID_TRK_VOL:
_smushTracks[idx].volume = code[3];
mixVolume = (_smushTrackVols[0] * _smushTracks[idx].volume) / 127;
@@ -1913,7 +1914,7 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
if ((_smushTracks[idx].flags & TRK_TYPE_MASK) == IS_BKG_MUSIC && isChanActive(CHN_SPEECH))
mixVolume = (mixVolume * _gainReductionMultiplier) >> 8;
break;
- case 0xFD:
+ case SAUD_VALUEID_TRK_PAN:
_smushTracks[idx].pan = code[3];
break;
default:
@@ -1922,15 +1923,16 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
}
_smushDispatch[idx].headerPtr = &code[code[1] + 2];
break;
- case 4: // Increment params
+
+ case SAUD_OP_INCR_PARAM:
switch (code[2]) {
- case 0xFF:
+ case SAUD_VALUEID_ALL_VOLS:
_smushTrackVols[0] += code[3];
break;
- case 0xFE:
+ case SAUD_VALUEID_TRK_VOL:
_smushTracks[idx].volume += code[3];
break;
- case 0xFD:
+ case SAUD_VALUEID_TRK_PAN:
_smushTracks[idx].pan += code[3];
break;
default:
@@ -1939,7 +1941,8 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
}
_smushDispatch[idx].headerPtr = &code[code[1] + 2];
break;
- case 6: // Set offset
+
+ case SAUD_OP_SET_OFFSET:
_smushDispatch[idx].audioLength = 0;
buf = _smushDispatch[idx].headerPtr;
_smushDispatch[idx].audioRemaining = READ_BE_UINT32(buf + 2);
@@ -1960,7 +1963,8 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
_smushDispatch[idx].currentOffset -= chunk;
}
break;
- case 7: // Set audio length
+
+ case SAUD_OP_SET_LENGTH:
if (!_smushDispatch[idx].audioLength) {
_smushDispatch[idx].audioLength = READ_BE_UINT32(&code[6]);
_smushDispatch[idx].elapsedAudio = 0;
@@ -1995,8 +1999,8 @@ bool SmushPlayer::processAudioCodes(int idx, int32 &tmpFeedSize, int &mixVolume)
_smushDispatch[idx].currentOffset -= chunk;
}
}
-
break;
+
default:
_smushTracks[idx].state = TRK_STATE_INACTIVE;
_smushTracks[idx].groupId = GRP_MASTER;
diff --git a/engines/scumm/smush/smush_player.h b/engines/scumm/smush/smush_player.h
index 4660e069433..afab716feb0 100644
--- a/engines/scumm/smush/smush_player.h
+++ b/engines/scumm/smush/smush_player.h
@@ -54,6 +54,25 @@ namespace Scumm {
#define TRK_TYPE_MASK 0xC0
+#define SAUD_OP_INIT 1
+#define SAUD_OP_UPDATE_HEADER 2
+#define SAUD_OP_SET_PARAM 3
+#define SAUD_OP_INCR_PARAM 4
+#define SAUD_OP_SET_OFFSET 6
+#define SAUD_OP_SET_LENGTH 7
+#define SAUD_OP_COMPARE_GT 8
+#define SAUD_OP_COMPARE_LT 9
+#define SAUD_OP_COMPARE_EQ 10
+#define SAUD_OP_COMPARE_NE 11
+
+#define SAUD_VALUEID_ALL_VOLS 0xFF
+#define SAUD_VALUEID_TRK_VOL 0xFE
+#define SAUD_VALUEID_TRK_PAN 0xFD
+
+#define TRK_USERID_SPEECH 1
+#define TRK_USERID_MUSIC 2
+#define TRK_USERID_SFX 3
+
#define SMUSH_CODEC_RLE 1
#define SMUSH_CODEC_RLE_ALT 3
#define SMUSH_CODEC_UNCOMPRESSED 20
More information about the Scummvm-git-logs
mailing list