mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-18 19:29:09 +00:00
Decode the whole audio track on startup
This commit is contained in:
@ -619,6 +619,16 @@ void plDSoundBuffer::Play( void )
|
||||
|
||||
}
|
||||
|
||||
//// Pause ///////////////////////////////////////////////////////////////////
|
||||
|
||||
void plDSoundBuffer::Pause()
|
||||
{
|
||||
if (!source)
|
||||
return;
|
||||
alSourcePause(source);
|
||||
alGetError();
|
||||
}
|
||||
|
||||
//// Stop ////////////////////////////////////////////////////////////////////
|
||||
|
||||
void plDSoundBuffer::Stop( void )
|
||||
|
@ -73,8 +73,9 @@ public:
|
||||
|
||||
void Play( void );
|
||||
void Stop( void );
|
||||
void Rewind() ;
|
||||
|
||||
void Rewind();
|
||||
void Pause();
|
||||
|
||||
uint32_t GetLengthInBytes( void ) const;
|
||||
void SetScalarVolume( float volume ); // Sets the volume, but on a range from 0 to 1
|
||||
|
||||
|
@ -47,16 +47,15 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "plDSoundBuffer.h"
|
||||
|
||||
static int uniqueID = 0;
|
||||
plWin32VideoSound::plWin32VideoSound(plWAVHeader& header) : plWin32Sound()
|
||||
plWin32VideoSound::plWin32VideoSound(const plWAVHeader& header) : plWin32Sound()
|
||||
{
|
||||
fCurrVolume = 1.0f;
|
||||
fDesiredVol = 1.0f;
|
||||
fSoftVolume = 1.0f;
|
||||
fType = kGUISound;
|
||||
|
||||
fDSoundBuffer = new plDSoundBuffer(0, header, false, false, false, true);
|
||||
fDSoundBuffer->SetupVoiceSource();
|
||||
fDSoundBuffer->SetScalarVolume(1.0f);
|
||||
fWAVHeader = header;
|
||||
fDSoundBuffer = new plDSoundBuffer(0, fWAVHeader, false, false);
|
||||
|
||||
uniqueID++;
|
||||
hsgResMgr::ResMgr()->NewKey(plFormat("videosound#{}", uniqueID), this, plLocation::kGlobalFixedLoc);
|
||||
@ -68,24 +67,26 @@ plWin32VideoSound::~plWin32VideoSound()
|
||||
delete fDSoundBuffer;
|
||||
}
|
||||
|
||||
void plWin32VideoSound::UpdateSoundBuffer(void* buffer, size_t size)
|
||||
void plWin32VideoSound::Play()
|
||||
{
|
||||
uint32_t bufferId;
|
||||
uint32_t chunk;
|
||||
|
||||
fDSoundBuffer->UnQueueVoiceBuffers();
|
||||
while (size > 0)
|
||||
{
|
||||
chunk = size < STREAM_BUFFER_SIZE ? size : STREAM_BUFFER_SIZE;
|
||||
if (!fDSoundBuffer->GetAvailableBufferId(&bufferId))
|
||||
break;
|
||||
|
||||
fDSoundBuffer->VoiceFillBuffer(buffer, chunk, bufferId);
|
||||
size -= chunk;
|
||||
}
|
||||
IActuallyPlay();
|
||||
}
|
||||
|
||||
void plWin32VideoSound::Pause(bool on)
|
||||
{
|
||||
if (on)
|
||||
fDSoundBuffer->Pause();
|
||||
else if (!fReallyPlaying)
|
||||
fDSoundBuffer->Play();
|
||||
fReallyPlaying = !on;
|
||||
}
|
||||
|
||||
void plWin32VideoSound::FillSoundBuffer(void* buffer, size_t size)
|
||||
{
|
||||
fDSoundBuffer->FillBuffer(buffer, size, &fWAVHeader);
|
||||
fDSoundBuffer->SetScalarVolume(1.0f);
|
||||
}
|
||||
|
||||
void plWin32VideoSound::IDerivedActuallyPlay()
|
||||
{
|
||||
if (!fReallyPlaying)
|
||||
|
@ -48,10 +48,12 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
class plWin32VideoSound : public plWin32Sound
|
||||
{
|
||||
public:
|
||||
plWin32VideoSound(plWAVHeader& header);
|
||||
plWin32VideoSound(const plWAVHeader& header);
|
||||
virtual ~plWin32VideoSound();
|
||||
|
||||
void UpdateSoundBuffer(void* buffer, size_t size);
|
||||
virtual void Play();
|
||||
virtual void Pause(bool on);
|
||||
void FillSoundBuffer(void* buffer, size_t size);
|
||||
|
||||
protected:
|
||||
void IDerivedActuallyPlay(void);
|
||||
@ -60,5 +62,6 @@ protected:
|
||||
float GetActualTimeSec();
|
||||
void ISetActualTime(double t);
|
||||
|
||||
plWAVHeader fWAVHeader;
|
||||
};
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user