summaryrefslogtreecommitdiffstats
path: root/src/audio/sampman_oal.cpp
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-10-27 08:35:09 +0100
committerSergeanur <s.anureev@yandex.ua>2020-10-27 08:35:09 +0100
commit4cfb3b0984c1de2820691b4b5f1c63cd19c498fb (patch)
tree16399a8b15c03ac6b03bfb014fbdd2c1f9fbf99b /src/audio/sampman_oal.cpp
parentRevert "(TEST) Try to fix OAL audio problems" (diff)
downloadre3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar.gz
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar.bz2
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar.lz
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar.xz
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.tar.zst
re3-4cfb3b0984c1de2820691b4b5f1c63cd19c498fb.zip
Diffstat (limited to '')
-rw-r--r--src/audio/sampman_oal.cpp117
1 files changed, 12 insertions, 105 deletions
diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp
index ad6961b0..eec5ca5f 100644
--- a/src/audio/sampman_oal.cpp
+++ b/src/audio/sampman_oal.cpp
@@ -98,58 +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;
- ALint timer;
-
- bool IsEmpty() { return buffer == 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);
- assert(alGetError() == AL_NO_ERROR);
- }
- timer = 0;
- buffer = 0;
- }
- void Update()
- {
- if ( !(timer > 0) ) return;
- timer -= ALint(CTimer::GetTimeStepInMilliseconds());
- if ( timer > 0 ) return;
- timer = 0;
- if ( buffer != 0 )
- {
- if (!alIsBuffer(buffer))
- {
- buffer = 0;
- return;
- }
- alDeleteBuffers(1, &buffer);
- ALenum error = alGetError();
- if (error != AL_NO_ERROR)
- timer = 10000;
- else
- buffer = 0;
- }
- }
-}ALBuffers[SAMPLEBANK_MAX];
struct tMP3Entry
{
@@ -295,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 )
{
@@ -381,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;
@@ -419,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() )
{
@@ -1166,7 +1110,7 @@ cSampleManager::Terminate(void)
_DeleteMP3Entries();
CStream::Terminate();
-
+
if ( nSampleBankMemoryStartAddress[SFX_BANK_0] != 0 )
{
free((void *)nSampleBankMemoryStartAddress[SFX_BANK_0]);
@@ -1182,15 +1126,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;
@@ -1399,13 +1334,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;
@@ -1541,25 +1470,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
{
@@ -1567,14 +1485,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) )
@@ -1586,10 +1497,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;
}
@@ -2040,8 +1949,6 @@ cSampleManager::Service(void)
if ( stream )
stream->Update();
}
-
- UpdateSoundBuffers();
}
bool