Can now trigger audio emitters through scripts

This commit is contained in:
Antoine Pilote
2023-09-23 16:18:11 -04:00
parent a4724e2a91
commit 79a9265dc6
6 changed files with 66 additions and 17 deletions

View File

@@ -44,8 +44,6 @@ namespace Nuake {
void AudioManager::SetListenerPosition(const Vector3& position, const Vector3& direction, const Vector3& up)
{
const std::lock_guard<std::mutex> lock(m_AudioQueueMutex);
if (position != m_ListenerPosition || direction != m_ListenerDirection || up != m_ListenerUp)
{
m_ListenerPosition = position;
@@ -96,13 +94,20 @@ namespace Nuake {
}
SoLoud::handle& voice = m_ActiveClips[request.audioFile];
m_Soloud->set3dSourcePosition(voice, request.position.x, request.position.y, request.position.z);
if (request.spatialized)
{
m_Soloud->set3dSourcePosition(voice, request.position.x, request.position.y, request.position.z);
m_Soloud->set3dSourceMinMaxDistance(voice, request.MinDistance, request.MaxDistance);
m_Soloud->set3dSourceAttenuation(voice, 1, request.AttenuationFactor);
m_Soloud->update3dAudio();
}
else
{
m_Soloud->setPan(voice, request.pan);
}
m_Soloud->setLooping(voice, request.Loop);
m_Soloud->set3dSourceMinMaxDistance(voice, request.MinDistance, request.MaxDistance);
m_Soloud->set3dSourceAttenuation(voice, 1, request.AttenuationFactor);
m_Soloud->setRelativePlaySpeed(voice, request.speed);
m_Soloud->setPan(voice, request.pan);
m_Soloud->update3dAudio();
}
void AudioManager::StopVoice(const std::string& filePath)
@@ -111,6 +116,7 @@ namespace Nuake {
if (!IsVoiceActive(filePath))
{
// We can't stop a voice that isn't active.
return;
}
@@ -118,6 +124,11 @@ namespace Nuake {
m_Soloud->stop(voice);
}
void AudioManager::StopAll() const
{
m_Soloud->stopAll();
}
bool AudioManager::IsWavLoaded(const std::string& filePath) const
{
return m_WavSamples.find(filePath) != m_WavSamples.end();
@@ -136,15 +147,11 @@ namespace Nuake {
void AudioManager::AudioThreadLoop()
{
while(m_AudioThreadRunning)
{
// Acquire mutex lock
const std::lock_guard<std::mutex> lock(m_AudioQueueMutex);
//CleanupInactiveVoices();
// Check if we have audio queued
while (!m_AudioQueue.empty())
{
@@ -157,18 +164,18 @@ namespace Nuake {
soloudHandle = m_Soloud->play(audio);
m_Soloud->setVolume(soloudHandle, audioRequest.volume);
m_Soloud->setPan(soloudHandle, audioRequest.pan);
m_Soloud->setRelativePlaySpeed(soloudHandle, audioRequest.speed);
m_Soloud->setLooping(soloudHandle, audioRequest.Loop);
}
else
{
const Vector3& position = audioRequest.position;
soloudHandle = m_Soloud->play3d(audio, position.x, position.y, position.z);
m_Soloud->set3dSourceMinMaxDistance(soloudHandle, audioRequest.MinDistance, audioRequest.MaxDistance);
m_Soloud->set3dSourceAttenuation(soloudHandle, 1, audioRequest.AttenuationFactor);
m_Soloud->setLooping(soloudHandle, audioRequest.Loop);
m_Soloud->set3dSourceAttenuation(soloudHandle, SoLoud::AudioSource::ATTENUATION_MODELS::EXPONENTIAL_DISTANCE, audioRequest.AttenuationFactor);
}
m_Soloud->setRelativePlaySpeed(soloudHandle, audioRequest.speed);
m_Soloud->setLooping(soloudHandle, audioRequest.Loop);
m_ActiveClips[audioRequest.audioFile] = soloudHandle;
// Remove item from queue.