- Applied VoidMage's OpenAL patch.

This commit is contained in:
Braden Obrzut 2013-10-23 19:41:58 -04:00
parent 97d7b1e59e
commit 2142e857a9
2 changed files with 23 additions and 5 deletions

View File

@ -1866,7 +1866,7 @@ float OpenALSoundRenderer::GetOutputRate()
}
SoundHandle OpenALSoundRenderer::LoadSoundRaw(BYTE *sfxdata, int length, int frequency, int channels, int bits, int loopstart)
SoundHandle OpenALSoundRenderer::LoadSoundRaw(BYTE *sfxdata, int length, int frequency, int channels, int bits, int loopstart, int loopend)
{
SoundHandle retval = { NULL };
@ -1915,7 +1915,7 @@ SoundHandle OpenALSoundRenderer::LoadSoundRaw(BYTE *sfxdata, int length, int fre
{
ALint loops[2] = {
loopstart,
length / (channels*bits/8)
loopend == -1 ? length / (channels*bits/8) : loopend
};
Printf("Setting loop points %d -> %d\n", loops[0], loops[1]);
alBufferiv(buffer, AL_LOOP_POINTS, loops);
@ -2346,6 +2346,21 @@ void OpenALSoundRenderer::StopChannel(FISoundChannel *chan)
FreeSfx.push_back(source);
}
void OpenALSoundRenderer::ChannelVolume(FISoundChannel *chan, float volume)
{
if (chan != NULL && chan->SysChannel != NULL)
{
ALuint source = *((ALuint*)chan->SysChannel);
alcSuspendContext(Context);
alSourcef(source, AL_MAX_GAIN, volume);
if(chan->ManualGain)
volume *= GetRolloff(&chan->Rolloff, sqrt(chan->DistanceSqr));
alSourcef(source, AL_GAIN, volume);
}
getALError();
}
unsigned int OpenALSoundRenderer::GetPosition(FISoundChannel *chan)
{
if(chan == NULL || chan->SysChannel == NULL)
@ -2384,7 +2399,7 @@ void OpenALSoundRenderer::SetSfxPaused(bool paused, int slot)
}
}
void OpenALSoundRenderer::SetInactive(bool inactive)
void OpenALSoundRenderer::SetInactive(SoundRenderer::EInactiveState inactive)
{
}

View File

@ -82,7 +82,7 @@ public:
virtual void SetSfxVolume(float volume);
virtual void SetMusicVolume(float volume);
virtual SoundHandle LoadSound(BYTE *sfxdata, int length);
virtual SoundHandle LoadSoundRaw(BYTE *sfxdata, int length, int frequency, int channels, int bits, int loopstart);
virtual SoundHandle LoadSoundRaw(BYTE *sfxdata, int length, int frequency, int channels, int bits, int loopstart, int loopend = -1);
virtual void UnloadSound(SoundHandle sfx);
virtual unsigned int GetMSLength(SoundHandle sfx);
virtual unsigned int GetSampleLength(SoundHandle sfx);
@ -99,6 +99,9 @@ public:
// Stops a sound channel.
virtual void StopChannel(FISoundChannel *chan);
// Changes a channel's volume.
void ChannelVolume (FISoundChannel *chan, float volume);
// Returns position of sound on this channel, in samples.
virtual unsigned int GetPosition(FISoundChannel *chan);
@ -109,7 +112,7 @@ public:
virtual void SetSfxPaused(bool paused, int slot);
// Pauses or resumes *every* channel, including environmental reverb.
virtual void SetInactive(bool inactive);
virtual void SetInactive(SoundRenderer::EInactiveState inactive);
// Updates the volume, separation, and pitch of a sound channel.
virtual void UpdateSoundParams3D(SoundListener *listener, FISoundChannel *chan, bool areasound, const FVector3 &pos, const FVector3 &vel);