Files
RP411/MUNGA/AUDCMP.h
T
CydandClaude Opus 4.8 4abbf8879f Initial import of Red Planet v4.10 Win32 source
Imports the current Win32 source for the pod-racing game 'Red Planet',
built on the MUNGA engine and its L4 (Win32/DirectX) platform layer:

- MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend
- RP / RP_L4: Red Planet game logic and Win32 application
- DivLoader, Setup1: asset loader and installer project
- lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies

Removed stale Subversion metadata and added .gitignore/.gitattributes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 07:59:51 -05:00

721 lines
17 KiB
C++

#pragma once
#include "style.h"
#include "audio.h"
#include "audloc.h"
#include "average.h"
#include "audtime.h"
//##########################################################################
//######################## AudioMessageWatcher #######################
//##########################################################################
class AudioMessageWatcher:
public AudioComponent
{
public:
//
//-----------------------------------------------------------------------
// Constructor, Destructor
//-----------------------------------------------------------------------
//
AudioMessageWatcher(
PlugStream *stream,
Entity *entity
);
~AudioMessageWatcher();
Logical
TestInstance() const;
//
//-----------------------------------------------------------------------
// BuildFromPage
//-----------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//-----------------------------------------------------------------------
// MessageTapScanCallback
//-----------------------------------------------------------------------
//
void
MessageTapScanCallback(
Receiver::Message *message,
Receiver *receiver
);
//
//-----------------------------------------------------------------------
// Controller methods
//-----------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//-----------------------------------------------------------------------
// Controller methods
//-----------------------------------------------------------------------
//
virtual Logical
DoesMessageMatch(Receiver::Message*)
{return True;}
//
//-----------------------------------------------------------------------
// Private Data
//-----------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AudioControlID controlID;
AudioControlValue controlValue;
MessageTap *messageTap;
#if DEBUG_LEVEL>0
Receiver *verifyReceiver;
Receiver::MessageID verifyMessageID;
#endif
};
//##########################################################################
//############### AudioControlsButtonMessageWatcher ##################
//##########################################################################
class AudioControlsButtonMessageWatcher:
public AudioMessageWatcher
{
public:
//
//-----------------------------------------------------------------------
// Constructor, Destructor
//-----------------------------------------------------------------------
//
AudioControlsButtonMessageWatcher(
PlugStream *stream,
Entity *entity
);
~AudioControlsButtonMessageWatcher();
private:
//
//-----------------------------------------------------------------------
// Controller methods
//-----------------------------------------------------------------------
//
Logical
DoesMessageMatch(Receiver::Message*);
};
//##########################################################################
//######################### AudioControlSend #########################
//##########################################################################
class AudioControlSend:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioControlSend(
PlugStream *stream,
Entity *entity
);
~AudioControlSend();
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
};
//##########################################################################
//####################### AudioControlSplitter #######################
//##########################################################################
class AudioControlSplitter:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioControlSplitter(
PlugStream *stream,
Entity *entity
);
void
AudioControlSplitterX(Entity *entity);
~AudioControlSplitter();
Logical
TestInstance() const;
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//--------------------------------------------------------------------
// Private data
//--------------------------------------------------------------------
//
SChainOf<AudioComponent*> audioComponentSocket;
};
//##########################################################################
//####################### AudioControlMixer ##########################
//##########################################################################
#define AUDIO_CONTROL_MIXER_MAX_CONTROLS (4)
class AudioControlMixer:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioControlMixer(
PlugStream *stream,
Entity *entity
);
void
AudioControlMixerX(
AudioComponent *audio_component,
Entity *entity,
AudioControlID first_input_control_ID,
AudioControlID last_input_control_ID,
AudioControlID output_control_ID
);
~AudioControlMixer();
Logical
TestInstance() const;
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//--------------------------------------------------------------------
// Private data
//--------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AudioControlValue
controlValueArray[AUDIO_CONTROL_MIXER_MAX_CONTROLS];
AudioControlID
firstInputControlID;
int
numberOfInputs;
AudioControlID
outputControlID;
};
//##########################################################################
//###################### AudioControlMultiplier ######################
//##########################################################################
#define AUDIO_CONTROL_MULTIPLIER_MAX_CONTROLS (4)
class AudioControlMultiplier:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioControlMultiplier(
PlugStream *stream,
Entity *entity
);
void
AudioControlMultiplierX(
AudioComponent *audio_component,
Entity *entity,
AudioControlID first_input_control_ID,
AudioControlID last_input_control_ID,
AudioControlID output_control_ID
);
~AudioControlMultiplier();
Logical
TestInstance() const;
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//--------------------------------------------------------------------
// Private data
//--------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AudioControlValue
controlValueArray[AUDIO_CONTROL_MULTIPLIER_MAX_CONTROLS];
AudioControlID
firstInputControlID;
int
numberOfInputs;
AudioControlID
outputControlID;
};
//##########################################################################
//######################## AudioControlSmoother ######################
//##########################################################################
class AudioControlSmoother:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioControlSmoother(
PlugStream *stream,
Entity *entity
);
void
AudioControlSmootherX(
AudioComponent *audio_component,
Entity *entity,
AudioControlID control_ID
);
~AudioControlSmoother();
Logical
TestInstance() const;
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//--------------------------------------------------------------------
// Private data
//--------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AverageOf<AudioControlValue>
audioControlAverage;
AudioControlID
controlID;
};
//##########################################################################
//####################### AudioResourceSelector ######################
//##########################################################################
class AudioResourceIndex;
class AudioResourceSelector:
public AudioComponent
{
public:
//
//--------------------------------------------------------------------
// Construction, Destruction, Testing
//--------------------------------------------------------------------
//
AudioResourceSelector(
PlugStream *stream,
Entity *entity
);
void
AudioResourceSelectorX(
AudioSource *audio_source,
Entity *entity,
AudioResourceIndex *audio_resource_index,
AudioControlID control_ID,
AudioControlValue min_control_value,
AudioControlValue max_control_value,
Logical dump_value
);
~AudioResourceSelector();
Logical
TestInstance() const;
//
//--------------------------------------------------------------------
// BuildFromPage
//--------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Controller methods
//--------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//--------------------------------------------------------------------
// Private data
//--------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioSourceSocket;
AudioResourceIndex
*audioResourceIndex;
AudioControlID
controlID;
AudioControlValue
minControlValue,
maxControlValue;
Logical
dumpValue;
};
//##########################################################################
//######################## AudioSampleAndHold ########################
//##########################################################################
class AudioSampleAndHold:
public AudioComponent
{
public:
//
//-----------------------------------------------------------------------
// Construction, Destruction, Testing
//-----------------------------------------------------------------------
//
AudioSampleAndHold(
PlugStream *stream,
Entity *entity
);
void
AudioSampleAndHoldX(
AudioComponent *audio_component,
Entity *entity,
AudioControlID audio_control_ID,
const AudioTime &sample_duration,
Scalar min_value,
Scalar max_value
);
~AudioSampleAndHold();
//
//-----------------------------------------------------------------------
// BuildFromPage
//-----------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Execute
//--------------------------------------------------------------------
//
void
Execute();
//
//-----------------------------------------------------------------------
// Controller methods
//-----------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//-----------------------------------------------------------------------
// Private methods
//-----------------------------------------------------------------------
//
void
SampleAndHold();
//
//-----------------------------------------------------------------------
// Private data
//-----------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AudioControlID
audioControlID;
AudioControlValue
minValue,
maxValue,
currentValue;
AudioTime
nextSampleTime,
sampleDuration;
};
//##########################################################################
//############################# AudioLFO #############################
//##########################################################################
enum AudioLFOWaveForm
{
SinusoidalAudioLFOWaveForm = 0,
TriangularAudioLFOWaveForm = 1
};
inline MemoryStream&
MemoryStream_Read(
MemoryStream *stream,
AudioLFOWaveForm *ptr
)
{return stream->ReadBytes(ptr, sizeof(*ptr));}
inline MemoryStream&
MemoryStream_Write(
MemoryStream *stream,
const AudioLFOWaveForm *ptr
)
{return stream->WriteBytes(ptr, sizeof(*ptr));}
class AudioLFO:
public AudioComponent
{
public:
//
//-----------------------------------------------------------------------
// Construction, Destruction, Testing
//-----------------------------------------------------------------------
//
AudioLFO(
PlugStream *stream,
Entity *entity
);
void
AudioLFOX(
AudioComponent *audio_component,
Entity *entity,
AudioControlID audio_control_ID,
AudioLFOWaveForm wave_form,
Scalar the_period,
AudioControlValue min_value,
AudioControlValue max_value,
Logical dump_value
);
~AudioLFO();
//
//-----------------------------------------------------------------------
// BuildFromPage
//-----------------------------------------------------------------------
//
static void
BuildFromPage(
PlugStream *stream,
NameList *name_list,
ClassID class_ID,
ObjectID object_ID
);
//
//--------------------------------------------------------------------
// Execute
//--------------------------------------------------------------------
//
void
Execute();
//
//-----------------------------------------------------------------------
// Controller methods
//-----------------------------------------------------------------------
//
void
ReceiveControl(
AudioControlID control_ID,
AudioControlValue control_value
);
private:
//
//-----------------------------------------------------------------------
// Private methods
//-----------------------------------------------------------------------
//
void
Generate();
//
//-----------------------------------------------------------------------
// Private data
//-----------------------------------------------------------------------
//
SlotOf<AudioComponent*>
audioComponentSocket;
AudioControlID
audioControlID;
AudioLFOWaveForm
waveForm;
AudioControlValue
minValue,
maxValue;
AudioTime
period;
AudioTime
startTime;
Logical
dumpValue;
};