nCine::IAudioDevice class

Interface for an audio device backend.

Manages the listener, the pool of audio sources and all active players. Implemented by ALAudioDevice on top of OpenAL and by NullAudioDevice as a silent fallback.

Derived classes

class ALAudioDevice
OpenAL implementation of IAudioDevice.

Public types

enum class PlayerType { Buffer, Stream }
Player backing type.

Constructors, destructors, conversion operators

~IAudioDevice() pure virtual

Public functions

auto isValid() const -> bool pure virtual
Returns true if the device was initialized successfully.
auto name() const -> const char* pure virtual
Returns the name of the underlying device.
auto gain() const -> float pure virtual
Returns the listener gain (master volume).
void setGain(float gain) pure virtual
Sets the listener gain (master volume).
auto maxNumPlayers() const -> std::uint32_t pure virtual
Returns the maximum number of players that can be active at once.
auto numPlayers() const -> std::uint32_t pure virtual
Returns the number of currently active players.
auto player(std::uint32_t index) const -> const IAudioPlayer* pure virtual
Returns the active player at the specified index.
auto player(std::uint32_t index) -> IAudioPlayer* pure virtual
void stopPlayers() pure virtual
Stops every player currently playing.
void pausePlayers() pure virtual
Pauses every player currently playing.
void stopPlayers(PlayerType playerType) pure virtual
Stops every player of the specified type.
void pausePlayers(PlayerType playerType) pure virtual
Pauses every player of the specified type.
void freezePlayers() pure virtual
Pauses every player currently playing while keeping it registered.
void unfreezePlayers() pure virtual
Resumes every player previously paused by freezePlayers().
auto registerPlayer(IAudioPlayer* player) -> std::uint32_t pure virtual
Registers a player so it receives state and buffer queue updates, returning its source id.
void unregisterPlayer(IAudioPlayer* player) pure virtual
Unregisters a previously registered player.
void updatePlayers() pure virtual
Updates the state of every registered player, including the buffer queue of stream players.
auto submitStreamDecode(const std::shared_ptr<StreamDecodeRequest>& request) -> bool pure virtual
Submits a decode request to be executed asynchronously on the decoding thread.
void drainStreamDecode(const std::shared_ptr<StreamDecodeRequest>& request) pure virtual
Ensures the specified request is neither queued nor being executed when this method returns.
auto getListenerPosition() const -> const Vector3f& pure virtual
Returns the 3D position of the listener.
void updateListener(const Vector3f& position, const Vector3f& velocity) pure virtual
Updates the position and velocity of the listener.
auto nativeFrequency() -> std::int32_t pure virtual
Returns the native sample rate of the device.
void suspendDevice() pure virtual
Suspends the audio device.
void resumeDevice() pure virtual
Resumes the audio device.

Constants

static std::uint32_t UnavailableSource constexpr
Value returned by registerPlayer() when no source is available.
static float LengthToPhysical constexpr
Scale factor converting game length units to physical (OpenAL) units.
static float VelocityToPhysical constexpr
Scale factor converting game velocity units to physical (OpenAL) units.
static float ReferenceDistance constexpr
Distance at which attenuation begins, in physical units.
static float MaxDistance constexpr
Distance beyond which attenuation no longer increases, in physical units.

Enum documentation

enum class nCine::IAudioDevice::PlayerType

Player backing type.

Enumerators
Buffer

Player backed by a fully loaded AudioBuffer

Stream

Player decoding an AudioStream on the fly

Function documentation

IAudioPlayer* nCine::IAudioDevice::player(std::uint32_t index) pure virtual

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

bool nCine::IAudioDevice::submitStreamDecode(const std::shared_ptr<StreamDecodeRequest>& request) pure virtual

Submits a decode request to be executed asynchronously on the decoding thread.

Returns false when no decoding thread is available and the caller has to decode synchronously

The request state must be StreamDecodeRequest::State::Pending when submitted.

void nCine::IAudioDevice::drainStreamDecode(const std::shared_ptr<StreamDecodeRequest>& request) pure virtual

Ensures the specified request is neither queued nor being executed when this method returns.

Required before the caller touches the request's reader (rewinding, changing looping or replacing it). A request removed from the queue before execution is reset to StreamDecodeRequest::State::Idle, a request already being executed is waited for.