mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
- removed the old sound system header from Duke and RR frontends and fixed every report this produced:
* reverb/echo is not yet implemented, so there's two stub functions for now. * RTS needs to be done differently, because the sound engine cannot play raw buffers without any control data.
This commit is contained in:
parent
fbfb1972b8
commit
fa7638c446
17 changed files with 68 additions and 36 deletions
|
@ -621,6 +621,8 @@ file( GLOB HEADER_FILES
|
||||||
common/console/*.h
|
common/console/*.h
|
||||||
common/filesystem/*.h
|
common/filesystem/*.h
|
||||||
common/music/*.h
|
common/music/*.h
|
||||||
|
common/sound/*.h
|
||||||
|
common/sound/backend/*.h
|
||||||
common/menu/*.h
|
common/menu/*.h
|
||||||
common/input/*.h
|
common/input/*.h
|
||||||
|
|
||||||
|
@ -902,6 +904,7 @@ include_directories(
|
||||||
common/filesystem
|
common/filesystem
|
||||||
common/music
|
common/music
|
||||||
common/sound
|
common/sound
|
||||||
|
common/sound/backend
|
||||||
common/dobject
|
common/dobject
|
||||||
common/menu
|
common/menu
|
||||||
common/input
|
common/input
|
||||||
|
|
|
@ -91,7 +91,7 @@ static FORCE_INLINE void FX_SetVolume(int volume) { MV_SetVolume(volume); }
|
||||||
static FORCE_INLINE int FX_GetVolume(void) { return MV_GetVolume(); }
|
static FORCE_INLINE int FX_GetVolume(void) { return MV_GetVolume(); }
|
||||||
static FORCE_INLINE void FX_SetReverseStereo(int setting) { MV_SetReverseStereo(setting); }
|
static FORCE_INLINE void FX_SetReverseStereo(int setting) { MV_SetReverseStereo(setting); }
|
||||||
static FORCE_INLINE int FX_GetReverseStereo(void) { return MV_GetReverseStereo(); }
|
static FORCE_INLINE int FX_GetReverseStereo(void) { return MV_GetReverseStereo(); }
|
||||||
static FORCE_INLINE void FX_SetReverb(int reverb) { MV_SetReverb(reverb); }
|
static FORCE_INLINE void FX_SetReverb_(int reverb) { MV_SetReverb(reverb); }
|
||||||
static FORCE_INLINE int FX_GetMaxReverbDelay(void) { return MV_GetMaxReverbDelay(); }
|
static FORCE_INLINE int FX_GetMaxReverbDelay(void) { return MV_GetMaxReverbDelay(); }
|
||||||
static FORCE_INLINE int FX_GetReverbDelay(void) { return MV_GetReverbDelay(); }
|
static FORCE_INLINE int FX_GetReverbDelay(void) { return MV_GetReverbDelay(); }
|
||||||
static FORCE_INLINE void FX_SetReverbDelay(int delay) { MV_SetReverbDelay(delay); }
|
static FORCE_INLINE void FX_SetReverbDelay(int delay) { MV_SetReverbDelay(delay); }
|
||||||
|
|
|
@ -488,22 +488,22 @@ void sfxSetReverb(bool toggle)
|
||||||
{
|
{
|
||||||
if (toggle)
|
if (toggle)
|
||||||
{
|
{
|
||||||
FX_SetReverb(128);
|
FX_SetReverb_(128);
|
||||||
FX_SetReverbDelay(10);
|
FX_SetReverbDelay(10);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FX_SetReverb(0);
|
FX_SetReverb_(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sfxSetReverb2(bool toggle)
|
void sfxSetReverb2(bool toggle)
|
||||||
{
|
{
|
||||||
if (toggle)
|
if (toggle)
|
||||||
{
|
{
|
||||||
FX_SetReverb(128);
|
FX_SetReverb_(128);
|
||||||
FX_SetReverbDelay(20);
|
FX_SetReverbDelay(20);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FX_SetReverb(0);
|
FX_SetReverb_(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
|
@ -893,13 +893,14 @@ const char *FileSystem::GetResourceFileFullName (int rfnum) const noexcept
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void FileSystem::AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags)
|
int FileSystem::AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags)
|
||||||
{
|
{
|
||||||
FStringf fullname("%s.%s", name, type);
|
FStringf fullname("%s.%s", name, type);
|
||||||
auto newlump = new FMemoryLump(data, size);
|
auto newlump = new FMemoryLump(data, size);
|
||||||
newlump->LumpNameSetup(fullname);
|
newlump->LumpNameSetup(fullname);
|
||||||
newlump->ResourceId = id;
|
newlump->ResourceId = id;
|
||||||
AddLump(newlump);
|
AddLump(newlump);
|
||||||
|
return Files.Size()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -118,7 +118,7 @@ public:
|
||||||
int FindResource (int resid, const char *type, int filenum = -1) const noexcept;
|
int FindResource (int resid, const char *type, int filenum = -1) const noexcept;
|
||||||
int GetResource (int resid, const char *type, int filenum = -1) const; // Like FindFile, but throws an exception when it cannot find what it looks for.
|
int GetResource (int resid, const char *type, int filenum = -1) const; // Like FindFile, but throws an exception when it cannot find what it looks for.
|
||||||
|
|
||||||
void AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags);
|
int AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags);
|
||||||
|
|
||||||
|
|
||||||
TArray<FString> GetAllFilesOfType(FName type, bool withsubdirs = false);
|
TArray<FString> GetAllFilesOfType(FName type, bool withsubdirs = false);
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "filesystem/filesystem.h"
|
#include "filesystem/filesystem.h"
|
||||||
#include "rts.h"
|
#include "rts.h"
|
||||||
#include "m_swap.h"
|
#include "m_swap.h"
|
||||||
|
#include "s_soundinternal.h"
|
||||||
|
|
||||||
|
|
||||||
struct WadInfo
|
struct WadInfo
|
||||||
|
@ -56,7 +57,7 @@ struct FileLump
|
||||||
|
|
||||||
struct LumpInfoInternal
|
struct LumpInfoInternal
|
||||||
{
|
{
|
||||||
int32_t position, size;
|
int32_t position, size, sid;
|
||||||
};
|
};
|
||||||
|
|
||||||
//=============
|
//=============
|
||||||
|
@ -96,7 +97,7 @@ bool RTS_IsInitialized()
|
||||||
LumpInfo.Resize(numlumps);
|
LumpInfo.Resize(numlumps);
|
||||||
for(unsigned i = 0; i < numlumps; i++, li++)
|
for(unsigned i = 0; i < numlumps; i++, li++)
|
||||||
{
|
{
|
||||||
LumpInfo[i] = { LittleLong(li->position), LittleLong(li->size) };
|
LumpInfo[i] = { LittleLong(li->position), LittleLong(li->size), -1 };
|
||||||
if (unsigned(LumpInfo[i].position + LumpInfo[i].size) >= RTSFile.Size())
|
if (unsigned(LumpInfo[i].position + LumpInfo[i].size) >= RTSFile.Size())
|
||||||
{
|
{
|
||||||
LumpInfo[i].size = 0; // points to invalid data
|
LumpInfo[i].size = 0; // points to invalid data
|
||||||
|
@ -108,6 +109,19 @@ bool RTS_IsInitialized()
|
||||||
}
|
}
|
||||||
RTSFile.Reset();
|
RTSFile.Reset();
|
||||||
LumpInfo.Reset();
|
LumpInfo.Reset();
|
||||||
|
|
||||||
|
// For the benefit of the sound system we have to link the RTS content into the file system.
|
||||||
|
// Unfortunately the file cannot be added directly because the internal names are meaningless.
|
||||||
|
int i = 0;
|
||||||
|
for (auto& li : LumpInfo)
|
||||||
|
{
|
||||||
|
if (li.size > 0)
|
||||||
|
{
|
||||||
|
FStringf rts("rts%02d", i);
|
||||||
|
int lump = fileSystem.AddFromBuffer(rts, "rts", (char*)RTSFile.Data() + li.position, li.size, -1, 0);
|
||||||
|
li.sid = soundEngine->AddSoundLump(rts, lump, 0, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,3 +141,12 @@ void *RTS_GetSound(int lump)
|
||||||
if(LumpInfo[lump].size <= 0) return nullptr;
|
if(LumpInfo[lump].size <= 0) return nullptr;
|
||||||
return RTSFile.Data() + LumpInfo[lump].position;
|
return RTSFile.Data() + LumpInfo[lump].position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RTS_GetSoundID(int lump)
|
||||||
|
{
|
||||||
|
if (!RTS_IsInitialized()) return -1;
|
||||||
|
lump++;
|
||||||
|
if ((unsigned)lump >= LumpInfo.Size()) return -1;
|
||||||
|
if (LumpInfo[lump].size <= 0) return -1;
|
||||||
|
return LumpInfo[lump].sid;
|
||||||
|
}
|
||||||
|
|
|
@ -4,3 +4,4 @@ void RTS_Init(const char *filename);
|
||||||
bool RTS_IsInitialized();
|
bool RTS_IsInitialized();
|
||||||
int RTS_SoundLength(int lump);
|
int RTS_SoundLength(int lump);
|
||||||
void *RTS_GetSound(int lump);
|
void *RTS_GetSound(int lump);
|
||||||
|
int RTS_GetSoundID(int lump);
|
||||||
|
|
|
@ -453,3 +453,7 @@ inline void FX_StopAllSounds(void)
|
||||||
soundEngine->StopAllChannels();
|
soundEngine->StopAllChannels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void FX_SetReverb(int strength)
|
||||||
|
{
|
||||||
|
// todo: investigate how this works and set a proper environment.
|
||||||
|
}
|
|
@ -1486,7 +1486,6 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
else if (playerDist >= spriteHitag && T1(spriteNum) == 1)
|
else if (playerDist >= spriteHitag && T1(spriteNum) == 1)
|
||||||
{
|
{
|
||||||
FX_SetReverb(0);
|
FX_SetReverb(0);
|
||||||
FX_SetReverbDelay(0);
|
|
||||||
T1(spriteNum) = 0;
|
T1(spriteNum) = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#include "build.h"
|
#include "build.h"
|
||||||
#include "cache1d.h"
|
#include "cache1d.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "fx_man.h"
|
|
||||||
#include "pragmas.h"
|
#include "pragmas.h"
|
||||||
#include "polymost.h"
|
#include "polymost.h"
|
||||||
#include "gamecvars.h"
|
#include "gamecvars.h"
|
||||||
|
|
|
@ -4392,16 +4392,15 @@ void G_InitTimer(int32_t ticspersec)
|
||||||
static int32_t g_RTSPlaying;
|
static int32_t g_RTSPlaying;
|
||||||
|
|
||||||
// Returns: started playing?
|
// Returns: started playing?
|
||||||
extern int G_StartRTS(int lumpNum, int localPlayer)
|
int G_StartRTS(int lumpNum, int localPlayer)
|
||||||
{
|
{
|
||||||
if (!adult_lockout && SoundEnabled() &&
|
if (!adult_lockout && SoundEnabled() &&
|
||||||
RTS_IsInitialized() && g_RTSPlaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
|
RTS_IsInitialized() && g_RTSPlaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
|
||||||
{
|
{
|
||||||
char *const pData = (char *)RTS_GetSound(lumpNum - 1);
|
auto sid = RTS_GetSoundID(lumpNum - 1);
|
||||||
|
if (sid != -1)
|
||||||
if (pData != NULL)
|
|
||||||
{
|
{
|
||||||
FX_Play3D(pData, RTS_SoundLength(lumpNum - 1), FX_ONESHOT, 0, 0, 1, 255, 1.f, -lumpNum);
|
S_PlaySound(sid, CHAN_UI);
|
||||||
g_RTSPlaying = 7;
|
g_RTSPlaying = 7;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,8 @@ void cacheAllSounds(void)
|
||||||
|
|
||||||
static inline int S_GetPitch(int num)
|
static inline int S_GetPitch(int num)
|
||||||
{
|
{
|
||||||
auto const* snd = (sound_t*)soundEngine->GetUserData(num+1);
|
auto const* snd = (sound_t*)soundEngine->GetUserData(num + 1);
|
||||||
|
if (!snd) return 0;
|
||||||
int const range = abs(snd->pitchEnd - snd->pitchStart);
|
int const range = abs(snd->pitchEnd - snd->pitchStart);
|
||||||
|
|
||||||
return (range == 0) ? snd->pitchStart : min(snd->pitchStart, snd->pitchEnd) + rand() % range;
|
return (range == 0) ? snd->pitchStart : min(snd->pitchStart, snd->pitchEnd) + rand() % range;
|
||||||
|
@ -115,9 +116,11 @@ float S_ConvertPitch(int lpitch)
|
||||||
return pow(2, lpitch / 1200.); // I hope I got this right that ASS uses a linear scale where 1200 is a full octave.
|
return pow(2, lpitch / 1200.); // I hope I got this right that ASS uses a linear scale where 1200 is a full octave.
|
||||||
}
|
}
|
||||||
|
|
||||||
int S_GetUserFlags(int sndnum)
|
int S_GetUserFlags(int num)
|
||||||
{
|
{
|
||||||
return ((sound_t*)soundEngine->GetUserData(sndnum + 1))->flags;
|
auto const* snd = (sound_t*)soundEngine->GetUserData(num + 1);
|
||||||
|
if (!snd) return 0;
|
||||||
|
return snd->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -177,8 +180,8 @@ static int S_CalcDistAndAng(int spriteNum, int soundNum, int sectNum,
|
||||||
|
|
||||||
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
||||||
auto const* snd = (sound_t*)soundEngine->GetUserData(soundNum+1);
|
auto const* snd = (sound_t*)soundEngine->GetUserData(soundNum+1);
|
||||||
int userflags = snd->flags;
|
int userflags = snd? snd->flags : 0;
|
||||||
int dist_adjust = snd->volAdjust;
|
int dist_adjust = snd? snd->volAdjust : 0;
|
||||||
|
|
||||||
if (PN(spriteNum) != APLAYER || P_Get(spriteNum) != screenpeek)
|
if (PN(spriteNum) != APLAYER || P_Get(spriteNum) != screenpeek)
|
||||||
{
|
{
|
||||||
|
@ -378,7 +381,7 @@ int S_PlaySound3D(int num, int spriteNum, const vec3_t* pos, int flags)
|
||||||
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
||||||
{
|
{
|
||||||
auto sid = chan->OrgID;
|
auto sid = chan->OrgID;
|
||||||
auto flags = ((sound_t*)soundEngine->GetUserData(sid))->flags;
|
auto flags = S_GetUserFlags(sid - 1);
|
||||||
return !!(flags & SF_TALK);
|
return !!(flags & SF_TALK);
|
||||||
});
|
});
|
||||||
// don't play if any Duke talk sounds are already playing
|
// don't play if any Duke talk sounds are already playing
|
||||||
|
|
|
@ -1352,7 +1352,6 @@ ACTOR_STATIC void G_MoveFX(void)
|
||||||
else if (playerDist >= spriteHitag && T1(spriteNum) == 1)
|
else if (playerDist >= spriteHitag && T1(spriteNum) == 1)
|
||||||
{
|
{
|
||||||
FX_SetReverb(0);
|
FX_SetReverb(0);
|
||||||
FX_SetReverbDelay(0);
|
|
||||||
T1(spriteNum) = 0;
|
T1(spriteNum) = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#include "cache1d.h"
|
#include "cache1d.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
|
||||||
#include "fx_man.h"
|
|
||||||
#include "pragmas.h"
|
#include "pragmas.h"
|
||||||
|
|
||||||
#include "polymost.h"
|
#include "polymost.h"
|
||||||
|
|
|
@ -5946,16 +5946,15 @@ void G_InitTimer(int32_t ticspersec)
|
||||||
static int32_t g_RTSPlaying;
|
static int32_t g_RTSPlaying;
|
||||||
|
|
||||||
// Returns: started playing?
|
// Returns: started playing?
|
||||||
extern int G_StartRTS(int lumpNum, int localPlayer)
|
int G_StartRTS(int lumpNum, int localPlayer)
|
||||||
{
|
{
|
||||||
if (!adult_lockout && SoundEnabled() &&
|
if (!adult_lockout && SoundEnabled() &&
|
||||||
RTS_IsInitialized() && g_RTSPlaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
|
RTS_IsInitialized() && g_RTSPlaying == 0 && (snd_speech & (localPlayer ? 1 : 4)))
|
||||||
{
|
{
|
||||||
char *const pData = (char *)RTS_GetSound(lumpNum - 1);
|
auto sid = RTS_GetSoundID(lumpNum - 1);
|
||||||
|
if (sid != -1)
|
||||||
if (pData != NULL)
|
|
||||||
{
|
{
|
||||||
FX_Play3D(pData, RTS_SoundLength(lumpNum - 1), FX_ONESHOT, 0, 0, 1, 255, 1.f, -lumpNum);
|
S_PlaySound(sid, CHAN_UI);
|
||||||
g_RTSPlaying = 7;
|
g_RTSPlaying = 7;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,6 +105,7 @@ void cacheAllSounds(void)
|
||||||
static inline int S_GetPitch(int num)
|
static inline int S_GetPitch(int num)
|
||||||
{
|
{
|
||||||
auto const* snd = (sound_t*)soundEngine->GetUserData(num+1);
|
auto const* snd = (sound_t*)soundEngine->GetUserData(num+1);
|
||||||
|
if (!snd) return 0;
|
||||||
int const range = abs(snd->pitchEnd - snd->pitchStart);
|
int const range = abs(snd->pitchEnd - snd->pitchStart);
|
||||||
|
|
||||||
return (range == 0) ? snd->pitchStart : min(snd->pitchStart, snd->pitchEnd) + rand() % range;
|
return (range == 0) ? snd->pitchStart : min(snd->pitchStart, snd->pitchEnd) + rand() % range;
|
||||||
|
@ -115,9 +116,11 @@ float S_ConvertPitch(int lpitch)
|
||||||
return pow(2, lpitch / 1200.); // I hope I got this right that ASS uses a linear scale where 1200 is a full octave.
|
return pow(2, lpitch / 1200.); // I hope I got this right that ASS uses a linear scale where 1200 is a full octave.
|
||||||
}
|
}
|
||||||
|
|
||||||
int S_GetUserFlags(int sndnum)
|
int S_GetUserFlags(int num)
|
||||||
{
|
{
|
||||||
return ((sound_t*)soundEngine->GetUserData(sndnum + 1))->flags;
|
auto const* snd = (sound_t*)soundEngine->GetUserData(num + 1);
|
||||||
|
if (!snd) return 0;
|
||||||
|
return snd->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -176,9 +179,9 @@ static int S_CalcDistAndAng(int spriteNum, int soundNum, int sectNum,
|
||||||
// However, ultimately rolloff would also just reposition the sound source so this can remain as it is.
|
// However, ultimately rolloff would also just reposition the sound source so this can remain as it is.
|
||||||
|
|
||||||
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
||||||
auto const* snd = (sound_t*)soundEngine->GetUserData(soundNum+1);
|
auto const* snd = (sound_t*)soundEngine->GetUserData(soundNum + 1);
|
||||||
int userflags = snd->flags;
|
int userflags = snd ? snd->flags : 0;
|
||||||
int dist_adjust = snd->volAdjust;
|
int dist_adjust = snd ? snd->volAdjust : 0;
|
||||||
|
|
||||||
if (PN(spriteNum) != APLAYER || P_Get(spriteNum) != screenpeek)
|
if (PN(spriteNum) != APLAYER || P_Get(spriteNum) != screenpeek)
|
||||||
{
|
{
|
||||||
|
@ -381,7 +384,7 @@ int S_PlaySound3D(int sndnum, int spriteNum, const vec3_t* pos, int flags)
|
||||||
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
||||||
{
|
{
|
||||||
auto sid = chan->OrgID;
|
auto sid = chan->OrgID;
|
||||||
auto flags = ((sound_t*)soundEngine->GetUserData(sid))->flags;
|
auto flags = S_GetUserFlags(sid - 1);
|
||||||
return !!(flags & SF_TALK);
|
return !!(flags & SF_TALK);
|
||||||
});
|
});
|
||||||
// don't play if any Duke talk sounds are already playing
|
// don't play if any Duke talk sounds are already playing
|
||||||
|
|
|
@ -894,7 +894,7 @@ SoundShutdown(void)
|
||||||
|
|
||||||
void COVER_SetReverb(int amt)
|
void COVER_SetReverb(int amt)
|
||||||
{
|
{
|
||||||
FX_SetReverb(amt);
|
FX_SetReverb_(amt);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in a new issue