bool LLAudioChannelOpenAL::updateBuffer() { if (LLAudioChannel::updateBuffer()) { // Base class update returned true, which means that we need to actually // set up the source for a different buffer. LLAudioBufferOpenAL *bufferp = (LLAudioBufferOpenAL *)mCurrentSourcep->getCurrentBuffer(); ALuint buffer = bufferp->getBuffer(); alSourcei(mALSource, AL_BUFFER, buffer); mLastSamplePos = 0; } if (mCurrentSourcep) { alSourcef(mALSource, AL_GAIN, mCurrentSourcep->getGain() * getSecondaryGain()); alSourcei(mALSource, AL_LOOPING, mCurrentSourcep->isLoop() ? AL_TRUE : AL_FALSE); alSourcef(mALSource, AL_ROLLOFF_FACTOR, gAudiop->mListenerp->getRolloffFactor()); alSourcef(mALSource, AL_REFERENCE_DISTANCE, gAudiop->mListenerp->getDistanceFactor()); } return true; }
bool LLAudioChannelFMOD::updateBuffer() { if (LLAudioChannel::updateBuffer()) { // Base class update returned true, which means that we need to actually // set up the channel for a different buffer. LLAudioBufferFMOD *bufferp = (LLAudioBufferFMOD *)mCurrentSourcep->getCurrentBuffer(); // Grab the FMOD sample associated with the buffer FSOUND_SAMPLE *samplep = bufferp->getSample(); if (!samplep) { // This is bad, there should ALWAYS be a sample associated with a legit // buffer. llerrs << "No FMOD sample!" << llendl; return false; } // Actually play the sound. Start it off paused so we can do all the necessary // setup. mChannelID = FSOUND_PlaySoundEx(FSOUND_FREE, samplep, FSOUND_DSP_GetSFXUnit(), true); //llinfos << "Setting up channel " << std::hex << mChannelID << std::dec << llendl; } // If we have a source for the channel, we need to update its gain. if (mCurrentSourcep) { // SJB: warnings can spam and hurt framerate, disabling if (!FSOUND_SetVolume(mChannelID, llround(getSecondaryGain() * mCurrentSourcep->getGain() * 255.0f))) { // llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; } if (!FSOUND_SetLoopMode(mChannelID, mCurrentSourcep->isLoop() ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF)) { // llwarns << "Channel " << mChannelID << "Source ID: " << mCurrentSourcep->getID() // << " at " << mCurrentSourcep->getPositionGlobal() << llendl; // llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl; } } return true; }
BOOL LLAudioChannelOpenAL::updateBuffer() { if (LLAudioChannel::updateBuffer()) { // Base class update returned TRUE, which means that we need to actually // set up the source for a different buffer. LLAudioBufferOpenAL *bufferp = (LLAudioBufferOpenAL *)mCurrentSourcep->getCurrentBuffer(); alSourcei(ALSource, AL_BUFFER, bufferp->getBuffer()); //alSourcef(ALSource, AL_GAIN, mCurrentSourcep->getGain()); //alSourcei(ALSource, AL_LOOPING, mCurrentSourcep->isLoop() ? AL_TRUE : AL_FALSE); } if (mCurrentSourcep) { alSourcef(ALSource, AL_GAIN, mCurrentSourcep->getGain()); alSourcef(ALSource, AL_MAX_GAIN, getSecondaryGain()); alSourcei(ALSource, AL_LOOPING, mCurrentSourcep->isLoop() ? AL_TRUE : AL_FALSE); } return TRUE; }
void LLAudioChannelOpenAL::update3DPosition() { if(!mCurrentSourcep) { return; } if (mCurrentSourcep->isAmbient()) { alSource3f(mALSource, AL_POSITION, 0.0, 0.0, 0.0); alSource3f(mALSource, AL_VELOCITY, 0.0, 0.0, 0.0); alSourcei (mALSource, AL_SOURCE_RELATIVE, AL_TRUE); } else { LLVector3 float_pos; float_pos.setVec(mCurrentSourcep->getPositionGlobal()); alSourcefv(mALSource, AL_POSITION, float_pos.mV); alSourcefv(mALSource, AL_VELOCITY, mCurrentSourcep->getVelocity().mV); alSourcei (mALSource, AL_SOURCE_RELATIVE, AL_FALSE); } alSourcef(mALSource, AL_GAIN, mCurrentSourcep->getGain() * getSecondaryGain()); }