int ALSound::Play(Sound sound, const Math::Vector &pos, float amplitude, float frequency, bool bLoop) { if (!m_enabled) { return -1; } if (m_sounds.find(sound) == m_sounds.end()) { GetLogger()->Debug("Sound %d was not loaded!\n", sound); return -1; } int channel; bool bAlreadyLoaded = false; if (!SearchFreeBuffer(sound, channel, bAlreadyLoaded)) { return -1; } if (!bAlreadyLoaded) { if (!m_channels[channel]->SetBuffer(m_sounds[sound])) { m_channels[channel]->SetBuffer(nullptr); return -1; } } m_channels[channel]->SetPosition(pos); m_channels[channel]->SetVolumeAtrib(1.0f); // setting initial values m_channels[channel]->SetStartAmplitude(amplitude); m_channels[channel]->SetStartFrequency(frequency); m_channels[channel]->SetChangeFrequency(1.0f); m_channels[channel]->ResetOper(); m_channels[channel]->SetFrequency(frequency); m_channels[channel]->SetVolume(powf(amplitude * m_channels[channel]->GetVolumeAtrib(), 0.2f) * m_audioVolume); m_channels[channel]->SetLoop(bLoop); if (!m_channels[channel]->Play()) { m_channels_limit = m_channels.size() - 1; GetLogger()->Debug("Changing channel limit to %u.\n", m_channels_limit); auto it = m_channels.find(channel); Channel *ch = it->second; m_channels.erase(it); delete ch; return -1; } return channel | ((m_channels[channel]->GetId() & 0xffff) << 16); }
int CALSound::Play(SoundType sound, const Math::Vector &pos, float amplitude, float frequency, bool loop) { if (!m_enabled) { return -1; } if (m_sounds.find(sound) == m_sounds.end()) { GetLogger()->Debug("Sound %d was not loaded!\n", sound); return -1; } int channel; bool alreadyLoaded = false; if (!SearchFreeBuffer(sound, channel, alreadyLoaded)) { return -1; } if (!alreadyLoaded) { if (!m_channels[channel]->SetBuffer(m_sounds[sound].get())) { m_channels[channel]->SetBuffer(nullptr); return -1; } } CChannel* chn = m_channels[channel].get(); chn->SetPosition(pos); chn->SetVolumeAtrib(1.0f); // setting initial values chn->SetStartAmplitude(amplitude); chn->SetStartFrequency(frequency); chn->SetChangeFrequency(1.0f); chn->ResetOper(); chn->SetFrequency(frequency); chn->SetVolume(powf(amplitude * chn->GetVolumeAtrib(), 0.2f) * m_audioVolume); chn->SetLoop(loop); chn->Mute(false); if (!chn->Play()) { m_channelsLimit = m_channels.size() - 1; GetLogger()->Debug("Changing channel limit to %u.\n", m_channelsLimit); m_channels.erase(channel); return -1; } return channel | ((chn->GetId() & 0xffff) << 16); }
int ALSound::Play(Sound sound, Math::Vector pos, float amplitude, float frequency, bool bLoop) { if (!mEnabled) { return -1; } if (mSounds.find(sound) == mSounds.end()) { GetLogger()->Warn("Sound %d was not loaded!\n", sound); return -1; } int channel; bool bAlreadyLoaded = false; if (!SearchFreeBuffer(sound, channel, bAlreadyLoaded)) return -1; if (!bAlreadyLoaded) { if (!mChannels[channel]->SetBuffer(mSounds[sound])) { mChannels[channel]->SetBuffer(nullptr); return -1; } } Position(channel, pos); // setting initial values mChannels[channel]->SetStartAmplitude(amplitude); mChannels[channel]->SetStartFrequency(frequency); mChannels[channel]->SetChangeFrequency(1.0f); mChannels[channel]->ResetOper(); mChannels[channel]->SetFrequency(frequency); mChannels[channel]->SetVolume(amplitude * mAudioVolume); mChannels[channel]->SetLoop(bLoop); mChannels[channel]->Play(); return channel; }