168 lines
3.5 KiB
C++
168 lines
3.5 KiB
C++
// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com)
|
|
// This file is part of the "Nazara Engine - Audio module"
|
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
|
|
|
#include <Nazara/Audio/SoundEmitter.hpp>
|
|
#include <Nazara/Audio/AudioDevice.hpp>
|
|
#include <Nazara/Audio/AudioSource.hpp>
|
|
#include <Nazara/Core/Error.hpp>
|
|
#include <Nazara/Audio/Debug.hpp>
|
|
|
|
namespace Nz
|
|
{
|
|
/*!
|
|
* \ingroup audio
|
|
* \class Nz::SoundEmitter
|
|
* \brief Audio class that represents a sound source, that emits sound
|
|
*
|
|
* \remark Module Audio needs to be initialized to use this class
|
|
* \remark This class is abstract
|
|
*/
|
|
|
|
/*!
|
|
* \brief Constructs a SoundEmitter object
|
|
*/
|
|
SoundEmitter::SoundEmitter(AudioDevice& audioDevice) :
|
|
m_source(audioDevice.CreateSource())
|
|
{
|
|
}
|
|
|
|
/*!
|
|
* \brief Destructs the object
|
|
*/
|
|
SoundEmitter::~SoundEmitter() = default;
|
|
|
|
/*!
|
|
* \brief Enables spatialization
|
|
*
|
|
* \param spatialization True if spatialization is enabled
|
|
*/
|
|
void SoundEmitter::EnableSpatialization(bool spatialization)
|
|
{
|
|
m_source->EnableSpatialization(spatialization);
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the attenuation
|
|
* \return Amount that your sound will drop off as by the inverse square law
|
|
*/
|
|
float SoundEmitter::GetAttenuation() const
|
|
{
|
|
return m_source->GetAttenuation();
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the minimum distance to hear
|
|
* \return Distance to begin to hear
|
|
*/
|
|
float SoundEmitter::GetMinDistance() const
|
|
{
|
|
return m_source->GetMinDistance();
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the pitch
|
|
* \return Pitch of the sound
|
|
*/
|
|
float SoundEmitter::GetPitch() const
|
|
{
|
|
return m_source->GetPitch();
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the position of the emitter
|
|
* \return Position of the sound
|
|
*/
|
|
Vector3f SoundEmitter::GetPosition() const
|
|
{
|
|
return m_source->GetPosition();
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the velocity of the emitter
|
|
* \return Velocity of the sound
|
|
*/
|
|
Vector3f SoundEmitter::GetVelocity() const
|
|
{
|
|
return m_source->GetVelocity();
|
|
}
|
|
|
|
/*!
|
|
* \brief Gets the volume of the emitter
|
|
* \param volume Float between [0, inf) with 100.f being the default
|
|
*/
|
|
float SoundEmitter::GetVolume() const
|
|
{
|
|
return m_source->GetVolume();
|
|
}
|
|
|
|
/*!
|
|
* \brief Checks whether the sound emitter has spatialization enabled
|
|
* \return true if it the case
|
|
*/
|
|
bool SoundEmitter::IsSpatializationEnabled() const
|
|
{
|
|
return m_source->IsSpatializationEnabled();
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the attenuation
|
|
*
|
|
* \param attenuation Amount that your sound will drop off as by the inverse square law
|
|
*/
|
|
void SoundEmitter::SetAttenuation(float attenuation)
|
|
{
|
|
m_source->SetAttenuation(attenuation);
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the minimum distance to hear
|
|
*
|
|
* \param minDistance to begin to hear
|
|
*/
|
|
void SoundEmitter::SetMinDistance(float minDistance)
|
|
{
|
|
m_source->SetMinDistance(minDistance);
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the pitch
|
|
*
|
|
* \param pitch of the sound
|
|
*/
|
|
void SoundEmitter::SetPitch(float pitch)
|
|
{
|
|
m_source->SetPitch(pitch);
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the position of the emitter
|
|
*
|
|
* \param position Position of the sound
|
|
*/
|
|
void SoundEmitter::SetPosition(const Vector3f& position)
|
|
{
|
|
m_source->SetPosition(position);
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the velocity of the emitter
|
|
*
|
|
* \param velocity Velocity of the sound
|
|
*/
|
|
void SoundEmitter::SetVelocity(const Vector3f& velocity)
|
|
{
|
|
m_source->SetVelocity(velocity);
|
|
}
|
|
|
|
/*!
|
|
* \brief Sets the volume of the emitter
|
|
*
|
|
* \param volume Float between [0, inf) with 100.f being the default
|
|
*/
|
|
void SoundEmitter::SetVolume(float volume)
|
|
{
|
|
m_source->SetVolume(volume);
|
|
}
|
|
}
|