mirror of
https://github.com/halpz/re3.git
synced 2025-06-28 20:26:22 +00:00
Merge branch 'miami' of https://github.com/GTAmodding/re3 into miamiDev
This commit is contained in:
@ -10,17 +10,49 @@
|
||||
|
||||
extern bool IsFXSupported();
|
||||
|
||||
ALuint alSources[MAXCHANNELS+MAX2DCHANNELS];
|
||||
ALuint alFilters[MAXCHANNELS+MAX2DCHANNELS];
|
||||
ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS];
|
||||
bool bChannelsCreated = false;
|
||||
|
||||
void
|
||||
CChannel::InitChannels()
|
||||
{
|
||||
alGenSources(MAXCHANNELS+MAX2DCHANNELS, alSources);
|
||||
alGenBuffers(MAXCHANNELS+MAX2DCHANNELS, alBuffers);
|
||||
if (IsFXSupported())
|
||||
alGenFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters);
|
||||
bChannelsCreated = true;
|
||||
}
|
||||
|
||||
void
|
||||
CChannel::DestroyChannels()
|
||||
{
|
||||
if (bChannelsCreated)
|
||||
{
|
||||
alDeleteSources(MAXCHANNELS + MAX2DCHANNELS, alSources);
|
||||
memset(alSources, 0, sizeof(alSources));
|
||||
alDeleteBuffers(MAXCHANNELS + MAX2DCHANNELS, alBuffers);
|
||||
memset(alBuffers, 0, sizeof(alBuffers));
|
||||
if (IsFXSupported())
|
||||
{
|
||||
alDeleteFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters);
|
||||
memset(alFilters, 0, sizeof(alFilters));
|
||||
}
|
||||
bChannelsCreated = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CChannel::CChannel()
|
||||
{
|
||||
alSource = AL_NONE;
|
||||
alFilter = AL_FILTER_NULL;
|
||||
Data = nil;
|
||||
DataSize = 0;
|
||||
SetDefault();
|
||||
}
|
||||
|
||||
void CChannel::SetDefault()
|
||||
{
|
||||
alBuffer = AL_NONE;
|
||||
|
||||
Pitch = 1.0f;
|
||||
Gain = 1.0f;
|
||||
Mix = 0.0f;
|
||||
@ -39,25 +71,19 @@ void CChannel::Reset()
|
||||
SetDefault();
|
||||
}
|
||||
|
||||
void CChannel::Init(bool Is2D)
|
||||
void CChannel::Init(uint32 _id, bool Is2D)
|
||||
{
|
||||
ASSERT(!HasSource());
|
||||
alGenSources(1, &alSource);
|
||||
id = _id;
|
||||
if ( HasSource() )
|
||||
{
|
||||
alSourcei(alSource, AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
alSourcei(alSources[id], AL_SOURCE_RELATIVE, AL_TRUE);
|
||||
if ( IsFXSupported() )
|
||||
alSource3i(alSource, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL);
|
||||
alSource3i(alSources[id], AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL);
|
||||
|
||||
if ( Is2D )
|
||||
{
|
||||
alSource3f(alSource, AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||
alSourcef (alSource, AL_GAIN, 1.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( IsFXSupported() )
|
||||
alGenFilters(1,&alFilter);
|
||||
alSource3f(alSources[id], AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||
alSourcef(alSources[id], AL_GAIN, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -69,39 +95,34 @@ void CChannel::Term()
|
||||
{
|
||||
if ( IsFXSupported() )
|
||||
{
|
||||
alSource3i(alSource, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL);
|
||||
|
||||
if(alFilter != AL_FILTER_NULL)
|
||||
alDeleteFilters(1,&alFilter);
|
||||
alSource3i(alSources[id], AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, 0, AL_FILTER_NULL);
|
||||
}
|
||||
|
||||
alDeleteSources(1, &alSource);
|
||||
}
|
||||
alSource = AL_NONE;
|
||||
alFilter = AL_FILTER_NULL;
|
||||
}
|
||||
|
||||
void CChannel::Start()
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
|
||||
if ( !Data ) return;
|
||||
|
||||
alBufferData(alBuffers[id], AL_FORMAT_MONO16, Data, DataSize, Frequency);
|
||||
if ( LoopPoints[0] != 0 && LoopPoints[0] != -1 )
|
||||
alBufferiv(alBuffer, AL_LOOP_POINTS_SOFT, LoopPoints);
|
||||
alSourcei (alSource, AL_BUFFER, alBuffer);
|
||||
alSourcePlay(alSource);
|
||||
alBufferiv(alBuffers[id], AL_LOOP_POINTS_SOFT, LoopPoints);
|
||||
alSourcei(alSources[id], AL_BUFFER, alBuffers[id]);
|
||||
alSourcePlay(alSources[id]);
|
||||
}
|
||||
|
||||
void CChannel::Stop()
|
||||
{
|
||||
if ( HasSource() )
|
||||
alSourceStop(alSource);
|
||||
alSourceStop(alSources[id]);
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
bool CChannel::HasSource()
|
||||
{
|
||||
return alSource != AL_NONE;
|
||||
return alSources[id] != AL_NONE;
|
||||
}
|
||||
|
||||
bool CChannel::IsUsed()
|
||||
@ -109,7 +130,7 @@ bool CChannel::IsUsed()
|
||||
if ( HasSource() )
|
||||
{
|
||||
ALint sourceState;
|
||||
alGetSourcei(alSource, AL_SOURCE_STATE, &sourceState);
|
||||
alGetSourcei(alSources[id], AL_SOURCE_STATE, &sourceState);
|
||||
return sourceState == AL_PLAYING;
|
||||
}
|
||||
return false;
|
||||
@ -118,27 +139,24 @@ bool CChannel::IsUsed()
|
||||
void CChannel::SetPitch(float pitch)
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
alSourcef(alSource, AL_PITCH, pitch);
|
||||
alSourcef(alSources[id], AL_PITCH, pitch);
|
||||
}
|
||||
|
||||
void CChannel::SetGain(float gain)
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
alSourcef(alSource, AL_GAIN, gain);
|
||||
alSourcef(alSources[id], AL_GAIN, gain);
|
||||
}
|
||||
|
||||
void CChannel::SetVolume(int32 vol)
|
||||
{
|
||||
SetGain(ALfloat(vol) / MAX_VOLUME);
|
||||
}
|
||||
|
||||
void CChannel::SetSampleID(uint32 nSfx)
|
||||
{
|
||||
Sample = nSfx;
|
||||
}
|
||||
|
||||
void CChannel::SetFreq(int32 freq)
|
||||
|
||||
void CChannel::SetSampleData(void *_data, size_t _DataSize, int32 freq)
|
||||
{
|
||||
Data = _data;
|
||||
DataSize = _DataSize;
|
||||
Frequency = freq;
|
||||
}
|
||||
|
||||
@ -150,7 +168,7 @@ void CChannel::SetCurrentFreq(uint32 freq)
|
||||
void CChannel::SetLoopCount(int32 loopCount) // fake. TODO:
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
alSourcei(alSource, AL_LOOPING, loopCount == 1 ? AL_FALSE : AL_TRUE);
|
||||
alSourcei(alSources[id], AL_LOOPING, loopCount == 1 ? AL_FALSE : AL_TRUE);
|
||||
}
|
||||
|
||||
void CChannel::SetLoopPoints(ALint start, ALint end)
|
||||
@ -162,53 +180,49 @@ void CChannel::SetLoopPoints(ALint start, ALint end)
|
||||
void CChannel::SetPosition(float x, float y, float z)
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
alSource3f(alSource, AL_POSITION, x, y, z);
|
||||
alSource3f(alSources[id], AL_POSITION, x, y, z);
|
||||
}
|
||||
|
||||
void CChannel::SetDistances(float max, float min)
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
alSourcef (alSource, AL_MAX_DISTANCE, max);
|
||||
alSourcef (alSource, AL_REFERENCE_DISTANCE, min);
|
||||
alSourcef (alSource, AL_MAX_GAIN, 1.0f);
|
||||
alSourcef (alSource, AL_ROLLOFF_FACTOR, 1.0f);
|
||||
alSourcef (alSources[id], AL_MAX_DISTANCE, max);
|
||||
alSourcef (alSources[id], AL_REFERENCE_DISTANCE, min);
|
||||
alSourcef (alSources[id], AL_MAX_GAIN, 1.0f);
|
||||
alSourcef (alSources[id], AL_ROLLOFF_FACTOR, 1.0f);
|
||||
}
|
||||
|
||||
void CChannel::SetPan(uint32 pan)
|
||||
void CChannel::SetPan(int32 pan)
|
||||
{
|
||||
SetPosition((pan-63)/64.0f, 0.0f, Sqrt(1.0f-SQR((pan-63)/64.0f)));
|
||||
}
|
||||
|
||||
void CChannel::SetBuffer(ALuint buffer)
|
||||
{
|
||||
alBuffer = buffer;
|
||||
}
|
||||
|
||||
void CChannel::ClearBuffer()
|
||||
{
|
||||
if ( !HasSource() ) return;
|
||||
SetBuffer(AL_NONE);
|
||||
alSourcei(alSource, AL_BUFFER, AL_NONE);
|
||||
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
|
||||
Data = nil;
|
||||
DataSize = 0;
|
||||
}
|
||||
|
||||
void CChannel::SetReverbMix(ALuint slot, float mix)
|
||||
{
|
||||
if ( !IsFXSupported() ) return;
|
||||
if ( !HasSource() ) return;
|
||||
if ( alFilter == AL_FILTER_NULL ) return;
|
||||
if ( alFilters[id] == AL_FILTER_NULL ) return;
|
||||
|
||||
Mix = mix;
|
||||
EAX3_SetReverbMix(alFilter, mix);
|
||||
alSource3i(alSource, AL_AUXILIARY_SEND_FILTER, slot, 0, alFilter);
|
||||
EAX3_SetReverbMix(alFilters[id], mix);
|
||||
alSource3i(alSources[id], AL_AUXILIARY_SEND_FILTER, slot, 0, alFilters[id]);
|
||||
}
|
||||
|
||||
void CChannel::UpdateReverb(ALuint slot)
|
||||
{
|
||||
if ( !IsFXSupported() ) return;
|
||||
if ( !HasSource() ) return;
|
||||
if ( alFilter == AL_FILTER_NULL ) return;
|
||||
EAX3_SetReverbMix(alFilter, Mix);
|
||||
alSource3i(alSource, AL_AUXILIARY_SEND_FILTER, slot, 0, alFilter);
|
||||
if ( alFilters[id] == AL_FILTER_NULL ) return;
|
||||
EAX3_SetReverbMix(alFilters[id], Mix);
|
||||
alSource3i(alSources[id], AL_AUXILIARY_SEND_FILTER, slot, 0, alFilters[id]);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -9,22 +9,24 @@
|
||||
|
||||
class CChannel
|
||||
{
|
||||
ALuint alSource;
|
||||
ALuint alFilter;
|
||||
ALuint alBuffer;
|
||||
uint32 id;
|
||||
float Pitch, Gain;
|
||||
float Mix;
|
||||
void *Data;
|
||||
size_t DataSize;
|
||||
int32 Frequency;
|
||||
float Position[3];
|
||||
float Distances[2];
|
||||
int32 LoopCount;
|
||||
ALint LoopPoints[2];
|
||||
uint32 Sample;
|
||||
public:
|
||||
static void InitChannels();
|
||||
static void DestroyChannels();
|
||||
|
||||
CChannel();
|
||||
void SetDefault();
|
||||
void Reset();
|
||||
void Init(bool Is2D = false);
|
||||
void Init(uint32 _id, bool Is2D = false);
|
||||
void Term();
|
||||
void Start();
|
||||
void Stop();
|
||||
@ -33,15 +35,13 @@ public:
|
||||
void SetPitch(float pitch);
|
||||
void SetGain(float gain);
|
||||
void SetVolume(int32 vol);
|
||||
void SetSampleID(uint32 nSfx);
|
||||
void SetFreq(int32 freq);
|
||||
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
|
||||
void SetCurrentFreq(uint32 freq);
|
||||
void SetLoopCount(int32 loopCount); // fake
|
||||
void SetLoopPoints(ALint start, ALint end);
|
||||
void SetPosition(float x, float y, float z);
|
||||
void SetDistances(float max, float min);
|
||||
void SetPan(uint32 pan);
|
||||
void SetBuffer(ALuint buffer);
|
||||
void SetPan(int32 pan);
|
||||
void ClearBuffer();
|
||||
void SetReverbMix(ALuint slot, float mix);
|
||||
void UpdateReverb(ALuint slot);
|
||||
|
@ -175,11 +175,7 @@ public:
|
||||
|
||||
bool Initialise(void);
|
||||
void Terminate (void);
|
||||
|
||||
#ifdef AUDIO_OAL
|
||||
void UpdateSoundBuffers(void);
|
||||
#endif
|
||||
|
||||
|
||||
bool CheckForAnAudioFileOnCD(void);
|
||||
char GetCDAudioDriveLetter (void);
|
||||
|
||||
@ -280,7 +276,114 @@ static char StreamedNameTable[][25] = {
|
||||
"AUDIO\\door_2.OPUS", "AUDIO\\door_3.OPUS", "AUDIO\\door_4.OPUS", "AUDIO\\door_5.OPUS", "AUDIO\\door_6.OPUS", "AUDIO\\t3_a.OPUS",
|
||||
"AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"};
|
||||
#else
|
||||
static char StreamedNameTable[][25]=
|
||||
#ifdef PS2_AUDIO
|
||||
static char StreamedNameTable[][40] =
|
||||
{
|
||||
"AUDIO\\MUSIC\\WILD.VB",
|
||||
"AUDIO\\MUSIC\\FLASH.VB",
|
||||
"AUDIO\\MUSIC\\KCHAT.VB", // 16 khz
|
||||
"AUDIO\\MUSIC\\FEVER.VB",
|
||||
"AUDIO\\MUSIC\\VROCK.VB",
|
||||
"AUDIO\\MUSIC\\VCPR.VB", // 16 khz
|
||||
"AUDIO\\MUSIC\\ESPANT.VB",
|
||||
"AUDIO\\MUSIC\\EMOTION.VB",
|
||||
"AUDIO\\MUSIC\\WAVE.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
"AUDIO\\MUSIC\\CITY.VB",
|
||||
"AUDIO\\MUSIC\\WATER.VB",
|
||||
"AUDIO\\MUSIC\\BEACHAMB.VB",
|
||||
"AUDIO\\MUSIC\\HCITY.VB",
|
||||
"AUDIO\\MUSIC\\HWATER.VB",
|
||||
"AUDIO\\MUSIC\\HBEACH.VB",
|
||||
"AUDIO\\MUSIC\\MALLAMB.VB",
|
||||
"AUDIO\\MUSIC\\STRIP.VB",
|
||||
"AUDIO\\MUSIC\\MALIBU.VB",
|
||||
"AUDIO\\MUSIC\\HOTEL.VB",
|
||||
"AUDIO\\MUSIC\\DIRTRING.VB",
|
||||
"AUDIO\\MUSIC\\LAW4RIOT.VB",
|
||||
"AUDIO\\MUSIC\\AMBSIL.VB",
|
||||
"AUDIO\\MUSIC\\POLICE.VB", // 16 khz
|
||||
"AUDIO\\MUSIC\\TAXI.VB",
|
||||
"AUDIO\\MUSIC\\BCLOSED.VB",
|
||||
"AUDIO\\MUSIC\\BOPEN.VB",
|
||||
"AUDIO\\CUTSCENE\\ASS\\ASS_1.VB",
|
||||
"AUDIO\\CUTSCENE\\ASS\\ASS_2.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_1.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_2A.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_2B.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_3A.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_3B.VB",
|
||||
"AUDIO\\CUTSCENE\\BANK\\BANK_4.VB",
|
||||
"AUDIO\\CUTSCENE\\BIKE\\BIKE_1.VB",
|
||||
"AUDIO\\CUTSCENE\\BIKE\\BIKE_2.VB",
|
||||
"AUDIO\\CUTSCENE\\BIKE\\BIKE_3.VB",
|
||||
"AUDIO\\CUTSCENE\\BUD\\BUD_1.VB",
|
||||
"AUDIO\\CUTSCENE\\BUD\\BUD_2.VB",
|
||||
"AUDIO\\CUTSCENE\\BUD\\BUD_3.VB",
|
||||
"AUDIO\\CUTSCENE\\CAP\\CAP_1.VB",
|
||||
"AUDIO\\CUTSCENE\\CAR\\CAR_1.VB",
|
||||
"AUDIO\\CUTSCENE\\CNT\\CNT_1A.VB",
|
||||
"AUDIO\\CUTSCENE\\CNT\\CNT_1B.VB",
|
||||
"AUDIO\\CUTSCENE\\CNT\\CNT_2.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_1.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_2A.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_2B.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_3.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_4A.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_4A2.VB",
|
||||
"AUDIO\\CUTSCENE\\COK\\COK_4B.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_1.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_2.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_3A.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_4A.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_5A.VB",
|
||||
"AUDIO\\CUTSCENE\\COL\\COL_5B.VB",
|
||||
"AUDIO\\CUTSCENE\\CUB\\CUB_1.VB",
|
||||
"AUDIO\\CUTSCENE\\CUB\\CUB_2.VB",
|
||||
"AUDIO\\CUTSCENE\\CUB\\CUB_3.VB",
|
||||
"AUDIO\\CUTSCENE\\CUB\\CUB_4.VB",
|
||||
"AUDIO\\CUTSCENE\\DRUG\\DRUG_1.VB",
|
||||
"AUDIO\\CUTSCENE\\FIN\\FIN.VB",
|
||||
"AUDIO\\CUTSCENE\\FIN\\FIN2.VB",
|
||||
"AUDIO\\CUTSCENE\\FINALE\\FINALE.VB",
|
||||
"AUDIO\\CUTSCENE\\HAT\\HAT_1.VB",
|
||||
"AUDIO\\CUTSCENE\\HAT\\HAT_2.VB",
|
||||
"AUDIO\\CUTSCENE\\HAT\\HAT_3.VB",
|
||||
"AUDIO\\CUTSCENE\\ICE\\ICE_1.VB",
|
||||
"AUDIO\\CUTSCENE\\INT\\INT_A.VB",
|
||||
"AUDIO\\CUTSCENE\\INT\\INT_B.VB",
|
||||
"AUDIO\\CUTSCENE\\INT\\INT_D.VB",
|
||||
"AUDIO\\CUTSCENE\\INT\\INT_M.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_1A.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_1B.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_2A.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_2B.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_2C.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_3.VB",
|
||||
"AUDIO\\CUTSCENE\\LAW\\LAW_4.VB",
|
||||
"AUDIO\\CUTSCENE\\PHIL\\PHIL_1.VB",
|
||||
"AUDIO\\CUTSCENE\\PHIL\\PHIL_2.VB",
|
||||
"AUDIO\\CUTSCENE\\PORN\\PORN_1.VB",
|
||||
"AUDIO\\CUTSCENE\\PORN\\PORN_2.VB",
|
||||
"AUDIO\\CUTSCENE\\PORN\\PORN_3.VB",
|
||||
"AUDIO\\CUTSCENE\\PORN\\PORN_4.VB",
|
||||
"AUDIO\\CUTSCENE\\RESC\\RESC_1A.VB",
|
||||
"AUDIO\\CUTSCENE\\ROK\\ROK_1.VB",
|
||||
"AUDIO\\CUTSCENE\\ROK\\ROK_2.VB",
|
||||
"AUDIO\\CUTSCENE\\ROK\\ROK_3A.VB",
|
||||
"AUDIO\\CUTSCENE\\STRIPA\\STRIPA.VB",
|
||||
"AUDIO\\CUTSCENE\\TAX\\TAX_1.VB",
|
||||
"AUDIO\\CUTSCENE\\TEX\\TEX_1.VB",
|
||||
"AUDIO\\CUTSCENE\\TEX\\TEX_2.VB",
|
||||
"AUDIO\\CUTSCENE\\TEX\\TEX_3.VB",
|
||||
"AUDIO\\MUSIC\\GLIGHT.VB",
|
||||
"AUDIO\\MUSIC\\FIST.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
"AUDIO\\MUSIC\\MISCOM.VB",
|
||||
#else
|
||||
static char StreamedNameTable[][25] =
|
||||
{
|
||||
"AUDIO\\WILD.ADF",
|
||||
"AUDIO\\FLASH.ADF",
|
||||
@ -385,6 +488,7 @@ static char StreamedNameTable[][25]=
|
||||
"AUDIO\\MISCOM.MP3",
|
||||
"AUDIO\\MISCOM.MP3",
|
||||
"AUDIO\\MISCOM.MP3",
|
||||
#endif
|
||||
"AUDIO\\MOBR1.WAV",
|
||||
"AUDIO\\PAGER.WAV",
|
||||
"AUDIO\\CARREV.WAV",
|
||||
|
@ -98,45 +98,12 @@ int32 nPedSlotSfx [MAX_PEDSFX];
|
||||
int32 nPedSlotSfxAddr[MAX_PEDSFX];
|
||||
uint8 nCurrentPedSlot;
|
||||
|
||||
ALuint pedBuffers[MAX_PEDSFX];
|
||||
|
||||
CChannel aChannel[MAXCHANNELS+MAX2DCHANNELS];
|
||||
uint8 nChannelVolume[MAXCHANNELS+MAX2DCHANNELS];
|
||||
|
||||
uint32 nStreamLength[TOTAL_STREAMED_SOUNDS];
|
||||
ALuint ALStreamSources[MAX_STREAMS];
|
||||
ALuint ALStreamBuffers[MAX_STREAMS][NUM_STREAMBUFFERS];
|
||||
struct
|
||||
{
|
||||
ALuint buffer;
|
||||
ALuint timer;
|
||||
|
||||
bool IsEmpty() { return timer == 0; }
|
||||
void Set(ALuint buf) { buffer = buf; }
|
||||
void Wait() { timer = 10000; }
|
||||
void Init()
|
||||
{
|
||||
buffer = 0;
|
||||
timer = 0;
|
||||
}
|
||||
void Term()
|
||||
{
|
||||
if ( buffer != 0 && alIsBuffer(buffer) )
|
||||
alDeleteBuffers(1, &buffer);
|
||||
timer = 0;
|
||||
}
|
||||
void Update()
|
||||
{
|
||||
if ( !(timer > 0) ) return;
|
||||
timer -= ALuint(CTimer::GetTimeStepInMilliseconds());
|
||||
if ( timer > 0 ) return;
|
||||
if ( buffer != 0 && alIsBuffer(buffer) )
|
||||
{
|
||||
alDeleteBuffers(1, &buffer);
|
||||
timer = ( alGetError() == AL_NO_ERROR ) ? 0 : 10000;
|
||||
}
|
||||
}
|
||||
}ALBuffers[SAMPLEBANK_MAX];
|
||||
|
||||
struct tMP3Entry
|
||||
{
|
||||
@ -282,12 +249,7 @@ release_existing()
|
||||
alDeleteBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]);
|
||||
}
|
||||
|
||||
alDeleteBuffers(MAX_PEDSFX, pedBuffers);
|
||||
|
||||
for ( int32 i = 0; i < SAMPLEBANK_MAX; i++ )
|
||||
{
|
||||
ALBuffers[i].Term();
|
||||
}
|
||||
CChannel::DestroyChannels();
|
||||
|
||||
if ( ALContext )
|
||||
{
|
||||
@ -368,13 +330,6 @@ set_new_provider(int index)
|
||||
stream->ProviderInit();
|
||||
}
|
||||
|
||||
for ( int32 i = 0; i < SAMPLEBANK_MAX; i++ )
|
||||
{
|
||||
ALBuffers[i].Init();
|
||||
}
|
||||
|
||||
alGenBuffers(MAX_PEDSFX, pedBuffers);
|
||||
|
||||
usingEAX = 0;
|
||||
usingEAX3 = 0;
|
||||
_usingEFX = false;
|
||||
@ -406,10 +361,12 @@ set_new_provider(int index)
|
||||
}
|
||||
|
||||
//SampleManager.SetSpeakerConfig(speaker_type);
|
||||
|
||||
|
||||
CChannel::InitChannels();
|
||||
|
||||
for ( int32 i = 0; i < MAXCHANNELS; i++ )
|
||||
aChannel[i].Init();
|
||||
aChannel[CHANNEL2D].Init(true);
|
||||
aChannel[i].Init(i);
|
||||
aChannel[CHANNEL2D].Init(CHANNEL2D, true);
|
||||
|
||||
if ( IsFXSupported() )
|
||||
{
|
||||
@ -1178,7 +1135,7 @@ cSampleManager::Terminate(void)
|
||||
_DeleteMP3Entries();
|
||||
|
||||
CStream::Terminate();
|
||||
|
||||
|
||||
if ( nSampleBankMemoryStartAddress[SFX_BANK_0] != 0 )
|
||||
{
|
||||
free((void *)nSampleBankMemoryStartAddress[SFX_BANK_0]);
|
||||
@ -1194,15 +1151,6 @@ cSampleManager::Terminate(void)
|
||||
_bSampmanInitialised = false;
|
||||
}
|
||||
|
||||
void
|
||||
cSampleManager::UpdateSoundBuffers(void)
|
||||
{
|
||||
for ( int32 i = 0; i < SAMPLEBANK_MAX; i++ )
|
||||
{
|
||||
ALBuffers[i].Update();
|
||||
}
|
||||
}
|
||||
|
||||
bool cSampleManager::CheckForAnAudioFileOnCD(void)
|
||||
{
|
||||
return true;
|
||||
@ -1409,13 +1357,7 @@ cSampleManager::LoadPedComment(uint32 nComment)
|
||||
|
||||
#endif
|
||||
nPedSlotSfx[nCurrentPedSlot] = nComment;
|
||||
|
||||
alBufferData(pedBuffers[nCurrentPedSlot],
|
||||
AL_FORMAT_MONO16,
|
||||
(void *)(nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE*nCurrentPedSlot),
|
||||
m_aSamples[nComment].nSize,
|
||||
m_aSamples[nComment].nFrequency);
|
||||
|
||||
|
||||
if ( ++nCurrentPedSlot >= MAX_PEDSFX )
|
||||
nCurrentPedSlot = 0;
|
||||
|
||||
@ -1553,25 +1495,14 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
||||
{
|
||||
ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS );
|
||||
|
||||
ALuint buffer;
|
||||
uintptr addr;
|
||||
|
||||
if ( nSfx < SAMPLEBANK_MAX )
|
||||
{
|
||||
if ( !IsSampleBankLoaded(nBank) )
|
||||
return false;
|
||||
|
||||
uintptr addr = nSampleBankMemoryStartAddress[nBank] + m_aSamples[nSfx].nOffset - m_aSamples[BankStartOffset[nBank]].nOffset;
|
||||
|
||||
if ( ALBuffers[nSfx].IsEmpty() )
|
||||
{
|
||||
ALuint buf;
|
||||
alGenBuffers(1, &buf);
|
||||
alBufferData(buf, AL_FORMAT_MONO16, (void *)addr, m_aSamples[nSfx].nSize, m_aSamples[nSfx].nFrequency);
|
||||
ALBuffers[nSfx].Set(buf);
|
||||
}
|
||||
ALBuffers[nSfx].Wait();
|
||||
|
||||
buffer = ALBuffers[nSfx].buffer;
|
||||
addr = nSampleBankMemoryStartAddress[nBank] + m_aSamples[nSfx].nOffset - m_aSamples[BankStartOffset[nBank]].nOffset;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1579,14 +1510,7 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
||||
return false;
|
||||
|
||||
int32 slot = _GetPedCommentSlot(nSfx);
|
||||
|
||||
buffer = pedBuffers[slot];
|
||||
}
|
||||
|
||||
if ( buffer == 0 )
|
||||
{
|
||||
TRACE("No buffer to play id %d", nSfx);
|
||||
return false;
|
||||
addr = (nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE * slot);
|
||||
}
|
||||
|
||||
if ( GetChannelUsedFlag(nChannel) )
|
||||
@ -1598,10 +1522,8 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank)
|
||||
aChannel[nChannel].Reset();
|
||||
if ( aChannel[nChannel].HasSource() )
|
||||
{
|
||||
aChannel[nChannel].SetSampleID (nSfx);
|
||||
aChannel[nChannel].SetFreq (m_aSamples[nSfx].nFrequency);
|
||||
aChannel[nChannel].SetSampleData ((void*)addr, m_aSamples[nSfx].nSize, m_aSamples[nSfx].nFrequency);
|
||||
aChannel[nChannel].SetLoopPoints (0, -1);
|
||||
aChannel[nChannel].SetBuffer (buffer);
|
||||
aChannel[nChannel].SetPitch (1.0f);
|
||||
return true;
|
||||
}
|
||||
@ -2059,8 +1981,6 @@ cSampleManager::Service(void)
|
||||
if ( stream )
|
||||
stream->Update();
|
||||
}
|
||||
|
||||
UpdateSoundBuffers();
|
||||
}
|
||||
|
||||
bool
|
||||
|
Reference in New Issue
Block a user