mirror of
https://github.com/SFML/CSFML.git
synced 2026-10-26 13:06:13 +01:00
Implement new audio functions
This commit is contained in:
1 parent
eb0f2974ab
commit
8113ed23b9
20 files changed
+1766
-15
No files matched your search
@@ -0,0 +1,106 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SFML - Simple and Fast Multimedia Library
|
||||
// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
|
||||
//
|
||||
// This software is provided 'as-is', without any express or implied warranty.
|
||||
// In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
//
|
||||
// Permission is granted to anyone to use this software for any purpose,
|
||||
// including commercial applications, and to alter it and redistribute it freely,
|
||||
// subject to the following restrictions:
|
||||
//
|
||||
// 1. The origin of this software must not be misrepresented;
|
||||
// you must not claim that you wrote the original software.
|
||||
// If you use this software in a product, an acknowledgment
|
||||
// in the product documentation would be appreciated but is not required.
|
||||
//
|
||||
// 2. Altered source versions must be plainly marked as such,
|
||||
// and must not be misrepresented as being the original software.
|
||||
//
|
||||
// 3. This notice may not be removed or altered from any source distribution.
|
||||
//
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Callable that is provided with sound data for processing
|
||||
///
|
||||
/// When the audio engine sources sound data from sound
|
||||
/// sources it will pass the data through an effects
|
||||
/// processor if one is set. The sound data will already be
|
||||
/// converted to the internal floating point format.
|
||||
///
|
||||
/// Sound data that is processed this way is provided in
|
||||
/// frames. Each frame contains 1 floating point sample per
|
||||
/// channel. If e.g. the data source provides stereo data,
|
||||
/// each frame will contain 2 floats.
|
||||
///
|
||||
/// The effects processor function takes 4 parameters:
|
||||
/// - The input data frames, channels interleaved
|
||||
/// - The number of input data frames available
|
||||
/// - The buffer to write output data frames to, channels interleaved
|
||||
/// - The number of output data frames that the output buffer can hold
|
||||
/// - The channel count
|
||||
///
|
||||
/// The input and output frame counts are in/out parameters.
|
||||
///
|
||||
/// When this function is called, the input count will
|
||||
/// contain the number of frames available in the input
|
||||
/// buffer. The output count will contain the size of the
|
||||
/// output buffer i.e. the maximum number of frames that
|
||||
/// can be written to the output buffer.
|
||||
///
|
||||
/// Attempting to read more frames than the input frame
|
||||
/// count or write more frames than the output frame count
|
||||
/// will result in undefined behaviour.
|
||||
///
|
||||
/// It is important to note that the channel count of the
|
||||
/// audio engine currently sourcing data from this sound
|
||||
/// will always be provided in `frameChannelCount`. This can
|
||||
/// be different from the channel count of the sound source
|
||||
/// so make sure to size necessary processing buffers
|
||||
/// according to the engine channel count and not the sound
|
||||
/// source channel count.
|
||||
///
|
||||
/// When done processing the frames, the input and output
|
||||
/// frame counts must be updated to reflect the actual
|
||||
/// number of frames that were read from the input and
|
||||
/// written to the output.
|
||||
///
|
||||
/// The processing function should always try to process as
|
||||
/// much sound data as possible i.e. always try to fill the
|
||||
/// output buffer to the maximum. In certain situations for
|
||||
/// specific effects it can be possible that the input frame
|
||||
/// count and output frame count aren't equal. As long as
|
||||
/// the frame counts are updated accordingly this is
|
||||
/// perfectly valid.
|
||||
///
|
||||
/// If the audio engine determines that no audio data is
|
||||
/// available from the data source, the input data frames
|
||||
/// pointer is set to `NULL` and the input frame count is
|
||||
/// set to 0. In this case it is up to the function to
|
||||
/// decide how to handle the situation. For specific effects
|
||||
/// e.g. Echo/Delay buffered data might still be able to be
|
||||
/// written to the output buffer even if there is no longer
|
||||
/// any input data.
|
||||
///
|
||||
/// An important thing to remember is that this function is
|
||||
/// directly called by the audio engine. Because the audio
|
||||
/// engine runs on an internal thread of its own, make sure
|
||||
/// access to shared data is synchronized appropriately.
|
||||
///
|
||||
/// Because this function is stored by the `SoundSource`
|
||||
/// object it will be able to be called as long as the
|
||||
/// `SoundSource` object hasn't yet been destroyed. Make sure
|
||||
/// that any data this function references outlives the
|
||||
/// SoundSource object otherwise use-after-free errors will
|
||||
/// occur.
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
typedef void (*sfEffectProcessor)(const float* inputFrames,
|
||||
unsigned int* inputFrameCount,
|
||||
float* outputFrames,
|
||||
unsigned int* outputFrameCount,
|
||||
unsigned int frameChannelCount);
|
||||
@@ -32,6 +32,25 @@
|
||||
#include <CSFML/System/Vector3.h>
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Structure defining the properties of a directional cone
|
||||
///
|
||||
/// Sounds will play at gain 1 when they are positioned
|
||||
/// within the inner angle of the cone. Sounds will play
|
||||
/// at `outerGain` when they are positioned outside the
|
||||
/// outer angle of the cone. The gain declines linearly
|
||||
/// from 1 to `outerGain` as the sound moves from the inner
|
||||
/// angle to the outer angle.
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
typedef struct
|
||||
{
|
||||
float innerAngle; //!< Inner angle, in degrees
|
||||
float outerAngle; //!< Outer angle, in degrees
|
||||
float outerGain; //!< Outer gain
|
||||
} sfListenerCone;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Change the global volume of all the sounds and musics
|
||||
///
|
||||
@@ -93,6 +112,43 @@ CSFML_AUDIO_API void sfListener_setDirection(sfVector3f direction);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfListener_getDirection(void);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the velocity of the listener in the scene
|
||||
///
|
||||
/// The default listener's velocity is (0, 0, -1).
|
||||
///
|
||||
/// \param velocity New listener's velocity
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfListener_setVelocity(sfVector3f velocity);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the current forward vector of the listener in the scene
|
||||
///
|
||||
/// \return Listener's velocity
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfListener_getVelocity(void);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the cone properties of the listener in the audio scene
|
||||
///
|
||||
/// The cone defines how directional attenuation is applied.
|
||||
/// The default cone of a sound is (2 * PI, 2 * PI, 1).
|
||||
///
|
||||
/// \param cone Cone properties of the listener in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfListener_setCone(sfListenerCone cone);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the cone properties of the listener in the audio scene
|
||||
///
|
||||
/// \return Cone properties of the listener
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfListenerCone sfListener_getCone(void);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the upward vector of the listener in the scene
|
||||
///
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
#include <CSFML/Audio/Export.h>
|
||||
|
||||
#include <CSFML/Audio/EffectProcessor.h>
|
||||
#include <CSFML/Audio/SoundChannel.h>
|
||||
#include <CSFML/Audio/SoundSourceCone.h>
|
||||
#include <CSFML/Audio/SoundStatus.h>
|
||||
#include <CSFML/Audio/Types.h>
|
||||
#include <CSFML/System/InputStream.h>
|
||||
@@ -130,6 +133,18 @@ CSFML_AUDIO_API void sfMusic_setLooping(sfMusic* music, bool loop);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API bool sfMusic_isLooping(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the effect processor to be applied to the sound
|
||||
///
|
||||
/// The effect processor is a callable that will be called
|
||||
/// with sound data to be processed.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param effectProcessor The effect processor to attach to this sound, attach a null processor to disable processing
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setEffectProcessor(sfMusic* music, sfEffectProcessor effectProcessor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the total duration of a music
|
||||
///
|
||||
@@ -244,6 +259,20 @@ CSFML_AUDIO_API unsigned int sfMusic_getChannelCount(const sfMusic* music);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API unsigned int sfMusic_getSampleRate(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the map of position in sample frame to sound channel
|
||||
///
|
||||
/// This is used to map a sample in the sample stream to a
|
||||
/// position during spatialization.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param count Pointer to a variable that will be filled with the number of channels in the map
|
||||
///
|
||||
/// \return Map of position in sample frame to sound channel
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API const sfSoundChannel* sfMusic_getChannelMap(const sfMusic* music, size_t* count);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the current status of a music (stopped, paused, playing)
|
||||
///
|
||||
@@ -279,6 +308,20 @@ CSFML_AUDIO_API sfTime sfMusic_getPlayingOffset(const sfMusic* music);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setPitch(sfMusic* music, float pitch);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the pan of the sound
|
||||
///
|
||||
/// Using panning, a mono sound can be panned between
|
||||
/// stereo channels. When the pan is set to -1, the sound
|
||||
/// is played only on the left channel, when the pan is set
|
||||
/// to +1, the sound is played only on the right channel.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param pan New pan to apply to the sound [-1, +1]
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setPan(sfMusic* music, float pan);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the volume of a music
|
||||
///
|
||||
@@ -291,6 +334,20 @@ CSFML_AUDIO_API void sfMusic_setPitch(sfMusic* music, float pitch);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setVolume(sfMusic* music, float volume);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set whether spatialization of the sound is enabled
|
||||
///
|
||||
/// Spatialization is the application of various effects to
|
||||
/// simulate a sound being emitted at a virtual position in
|
||||
/// 3D space and exhibiting various physical phenomena such as
|
||||
/// directional attenuation and doppler shift.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param enabled `true` to enable spatialization, `false` to disable
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setSpatializationEnabled(sfMusic* music, bool enabled);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D position of a music in the audio scene
|
||||
///
|
||||
@@ -304,6 +361,74 @@ CSFML_AUDIO_API void sfMusic_setVolume(sfMusic* music, float volume);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setPosition(sfMusic* music, sfVector3f position);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// The direction defines where the sound source is facing
|
||||
/// in 3D space. It will affect how the sound is attenuated
|
||||
/// if facing away from the listener.
|
||||
/// The default direction of a sound is (0, 0, -1).
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param direction Direction of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setDirection(sfMusic* music, sfVector3f direction);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// The cone defines how directional attenuation is applied.
|
||||
/// The default cone of a sound is (2 * PI, 2 * PI, 1).
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param cone Cone properties of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setCone(sfMusic* music, sfSoundSourceCone cone);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// The velocity is used to determine how to doppler shift
|
||||
/// the sound. Sounds moving towards the listener will be
|
||||
/// perceived to have a higher pitch and sounds moving away
|
||||
/// from the listener will be perceived to have a lower pitch.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param velocity Velocity of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setVelocity(sfMusic* music, sfVector3f velocity);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the doppler factor of the sound
|
||||
///
|
||||
/// The doppler factor determines how strong the doppler
|
||||
/// shift will be.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param factor New doppler factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setDopplerFactor(sfMusic* music, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the directional attenuation factor of the sound
|
||||
///
|
||||
/// Depending on the virtual position of an output channel
|
||||
/// relative to the listener (such as in surround sound
|
||||
/// setups), sounds will be attenuated when emitting them
|
||||
/// from certain channels. This factor determines how strong
|
||||
/// the attenuation based on output channel position
|
||||
/// relative to the listener is.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param factor New directional attenuation factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setDirectionalAttenuationFactor(sfMusic* music, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Make a musics's position relative to the listener or absolute
|
||||
///
|
||||
@@ -335,6 +460,48 @@ CSFML_AUDIO_API void sfMusic_setRelativeToListener(sfMusic* music, bool relative
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setMinDistance(sfMusic* music, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum distance of the sound
|
||||
///
|
||||
/// The "maximum distance" of a sound is the minimum
|
||||
/// distance at which it is heard at its minimum volume. Closer
|
||||
/// than the maximum distance, it will start to fade in according
|
||||
/// to its attenuation factor.
|
||||
/// The default value of the maximum distance is the maximum
|
||||
/// value a float can represent.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param distance New maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setMaxDistance(sfMusic* music, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the minimum gain of the sound
|
||||
///
|
||||
/// When the sound is further away from the listener than
|
||||
/// the "maximum distance" the attenuated gain is clamped
|
||||
/// so it cannot go below the minimum gain value.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param gain New minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setMinGain(sfMusic* music, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum gain of the sound
|
||||
///
|
||||
/// When the sound is closer from the listener than
|
||||
/// the "minimum distance" the attenuated gain is clamped
|
||||
/// so it cannot go above the maximum gain value.
|
||||
///
|
||||
/// \param music Music object
|
||||
/// \param gain New maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfMusic_setMaxGain(sfMusic* music, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the attenuation factor of a music
|
||||
///
|
||||
@@ -375,6 +542,26 @@ CSFML_AUDIO_API void sfMusic_setPlayingOffset(sfMusic* music, sfTime timeOffset)
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getPitch(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the pan of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Pan of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getPan(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether spatialization of the sound is enabled
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return `true` if spatialization is enabled, `false` if it's disabled
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API bool sfMusic_isSpatializationEnabled(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the volume of a music
|
||||
///
|
||||
@@ -395,6 +582,56 @@ CSFML_AUDIO_API float sfMusic_getVolume(const sfMusic* music);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfMusic_getPosition(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Direction of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfMusic_getDirection(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Cone properties of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundSourceCone sfMusic_getCone(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Velocity of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfMusic_getVelocity(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the doppler factor of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Doppler factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getDopplerFactor(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the directional attenuation factor of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Directional attenuation factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getDirectionalAttenuationFactor(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether a music's position is relative to the
|
||||
/// listener or is absolute
|
||||
@@ -416,6 +653,36 @@ CSFML_AUDIO_API bool sfMusic_isRelativeToListener(const sfMusic* music);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getMinDistance(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum distance of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getMaxDistance(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the minimum gain of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getMinGain(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum gain of the sound
|
||||
///
|
||||
/// \param music Music object
|
||||
///
|
||||
/// \return Maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfMusic_getMaxGain(const sfMusic* music);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the attenuation factor of a music
|
||||
///
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
#include <CSFML/Audio/Export.h>
|
||||
|
||||
#include <CSFML/Audio/EffectProcessor.h>
|
||||
#include <CSFML/Audio/SoundSourceCone.h>
|
||||
#include <CSFML/Audio/SoundStatus.h>
|
||||
#include <CSFML/Audio/Types.h>
|
||||
#include <CSFML/System/Time.h>
|
||||
@@ -172,6 +174,21 @@ CSFML_AUDIO_API sfSoundStatus sfSound_getStatus(const sfSound* sound);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setPitch(sfSound* sound, float pitch);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the pan of the sound
|
||||
///
|
||||
/// Using panning, a mono sound can be panned between
|
||||
/// stereo channels. When the pan is set to -1, the sound
|
||||
/// is played only on the left channel, when the pan is set
|
||||
/// to +1, the sound is played only on the right channel.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param pan New pan to apply to the sound [-1, +1]
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setPan(sfSound* sound, float pan);
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the volume of a sound
|
||||
///
|
||||
@@ -184,6 +201,20 @@ CSFML_AUDIO_API void sfSound_setPitch(sfSound* sound, float pitch);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setVolume(sfSound* sound, float volume);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set whether spatialization of the sound is enabled
|
||||
///
|
||||
/// Spatialization is the application of various effects to
|
||||
/// simulate a sound being emitted at a virtual position in
|
||||
/// 3D space and exhibiting various physical phenomena such as
|
||||
/// directional attenuation and doppler shift.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param enabled `true` to enable spatialization, `false` to disable
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setSpatializationEnabled(sfSound* sound, bool enabled);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D position of a sound in the audio scene
|
||||
///
|
||||
@@ -197,6 +228,74 @@ CSFML_AUDIO_API void sfSound_setVolume(sfSound* sound, float volume);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setPosition(sfSound* sound, sfVector3f position);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// The direction defines where the sound source is facing
|
||||
/// in 3D space. It will affect how the sound is attenuated
|
||||
/// if facing away from the listener.
|
||||
/// The default direction of a sound is (0, 0, -1).
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param direction Direction of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setDirection(sfSound* sound, sfVector3f direction);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// The cone defines how directional attenuation is applied.
|
||||
/// The default cone of a sound is (2 * PI, 2 * PI, 1).
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param cone Cone properties of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setCone(sfSound* sound, sfSoundSourceCone cone);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// The velocity is used to determine how to doppler shift
|
||||
/// the sound. Sounds moving towards the listener will be
|
||||
/// perceived to have a higher pitch and sounds moving away
|
||||
/// from the listener will be perceived to have a lower pitch.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param velocity Velocity of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setVelocity(sfSound* sound, sfVector3f velocity);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the doppler factor of the sound
|
||||
///
|
||||
/// The doppler factor determines how strong the doppler
|
||||
/// shift will be.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param factor New doppler factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setDopplerFactor(sfSound* sound, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the directional attenuation factor of the sound
|
||||
///
|
||||
/// Depending on the virtual position of an output channel
|
||||
/// relative to the listener (such as in surround sound
|
||||
/// setups), sounds will be attenuated when emitting them
|
||||
/// from certain channels. This factor determines how strong
|
||||
/// the attenuation based on output channel position
|
||||
/// relative to the listener is.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param factor New directional attenuation factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setDirectionalAttenuationFactor(sfSound* sound, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Make the sound's position relative to the listener or absolute
|
||||
///
|
||||
@@ -228,6 +327,49 @@ CSFML_AUDIO_API void sfSound_setRelativeToListener(sfSound* sound, bool relative
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setMinDistance(sfSound* sound, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum distance of the sound
|
||||
///
|
||||
/// The "maximum distance" of a sound is the minimum
|
||||
/// distance at which it is heard at its minimum volume. Closer
|
||||
/// than the maximum distance, it will start to fade in according
|
||||
/// to its attenuation factor.
|
||||
/// The default value of the maximum distance is the maximum
|
||||
/// value a float can represent.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param distance New maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setMaxDistance(sfSound* sound, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the minimum gain of the sound
|
||||
///
|
||||
/// When the sound is further away from the listener than
|
||||
/// the "maximum distance" the attenuated gain is clamped
|
||||
/// so it cannot go below the minimum gain value.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param gain New minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setMinGain(sfSound* sound, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum gain of the sound
|
||||
///
|
||||
/// When the sound is closer from the listener than
|
||||
/// the "minimum distance" the attenuated gain is clamped
|
||||
/// so it cannot go above the maximum gain value.
|
||||
///
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param gain New maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setMaxGain(sfSound* sound, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the attenuation factor of a sound
|
||||
///
|
||||
@@ -258,6 +400,18 @@ CSFML_AUDIO_API void sfSound_setAttenuation(sfSound* sound, float attenuation);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setPlayingOffset(sfSound* sound, sfTime timeOffset);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the effect processor to be applied to the sound
|
||||
///
|
||||
/// The effect processor is a callable that will be called
|
||||
/// with sound data to be processed.
|
||||
///
|
||||
/// \param sound Sound object
|
||||
/// \param effectProcessor The effect processor to attach to this sound, attach an empty processor to disable processing
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSound_setEffectProcessor(sfSound* sound, sfEffectProcessor effectProcessor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the pitch of a sound
|
||||
///
|
||||
@@ -268,6 +422,16 @@ CSFML_AUDIO_API void sfSound_setPlayingOffset(sfSound* sound, sfTime timeOffset)
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getPitch(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the pan of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Pan of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getPan(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the volume of a sound
|
||||
///
|
||||
@@ -278,6 +442,16 @@ CSFML_AUDIO_API float sfSound_getPitch(const sfSound* sound);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getVolume(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether spatialization of the sound is enabled
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return `true` if spatialization is enabled, `false` if it's disabled
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API bool sfSound_isSpatializationEnabled(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D position of a sound in the audio scene
|
||||
///
|
||||
@@ -288,6 +462,56 @@ CSFML_AUDIO_API float sfSound_getVolume(const sfSound* sound);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSound_getPosition(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Direction of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSound_getDirection(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Cone properties of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundSourceCone sfSound_getCone(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Velocity of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSound_getVelocity(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the doppler factor of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Doppler factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getDopplerFactor(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the directional attenuation factor of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Directional attenuation factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getDirectionalAttenuationFactor(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether a sound's position is relative to the
|
||||
/// listener or is absolute
|
||||
@@ -309,6 +533,36 @@ CSFML_AUDIO_API bool sfSound_isRelativeToListener(const sfSound* sound);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getMinDistance(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum distance of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getMaxDistance(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the minimum gain of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getMinGain(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum gain of the sound
|
||||
///
|
||||
/// \param sound Sound object
|
||||
///
|
||||
/// \return Maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSound_getMaxGain(const sfSound* sound);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the attenuation factor of a sound
|
||||
///
|
||||
|
||||
@@ -191,6 +191,20 @@ CSFML_AUDIO_API unsigned int sfSoundBuffer_getSampleRate(const sfSoundBuffer* so
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API unsigned int sfSoundBuffer_getChannelCount(const sfSoundBuffer* soundBuffer);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the map of position in sample frame to sound channel
|
||||
///
|
||||
/// This is used to map a sample in the sample stream to a
|
||||
/// position during spatialization.
|
||||
///
|
||||
/// \param soundBuffer Sound buffer object
|
||||
/// \param count Pointer to a variable that will be filled with the number of channels in the map
|
||||
///
|
||||
/// \return Map of position in sample frame to sound channel
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundChannel* sfSoundBuffer_getChannelMap(const sfSoundBuffer* soundBuffer, size_t* count);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the total duration of a sound buffer
|
||||
///
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
#include <CSFML/Audio/Export.h>
|
||||
|
||||
#include <CSFML/Audio/SoundChannel.h>
|
||||
#include <CSFML/Audio/Types.h>
|
||||
#include <CSFML/System/Time.h>
|
||||
|
||||
@@ -195,3 +196,17 @@ CSFML_AUDIO_API void sfSoundRecorder_setChannelCount(sfSoundRecorder* soundRecor
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API unsigned int sfSoundRecorder_getChannelCount(const sfSoundRecorder* soundRecorder);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the map of position in sample frame to sound channel
|
||||
///
|
||||
/// This is used to map a sample in the sample stream to a
|
||||
/// position during spatialization.
|
||||
///
|
||||
/// \param soundRecorder Sound recorder object
|
||||
/// \param count Pointer to a variable that will be filled with the number of channels in the map
|
||||
///
|
||||
/// \return Map of position in sample frame to sound channel
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundChannel* sfSoundRecorder_getChannelMap(const sfSoundRecorder* soundRecorder, size_t* count);
|
||||
@@ -0,0 +1,43 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SFML - Simple and Fast Multimedia Library
|
||||
// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
|
||||
//
|
||||
// This software is provided 'as-is', without any express or implied warranty.
|
||||
// In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
//
|
||||
// Permission is granted to anyone to use this software for any purpose,
|
||||
// including commercial applications, and to alter it and redistribute it freely,
|
||||
// subject to the following restrictions:
|
||||
//
|
||||
// 1. The origin of this software must not be misrepresented;
|
||||
// you must not claim that you wrote the original software.
|
||||
// If you use this software in a product, an acknowledgment
|
||||
// in the product documentation would be appreciated but is not required.
|
||||
//
|
||||
// 2. Altered source versions must be plainly marked as such,
|
||||
// and must not be misrepresented as being the original software.
|
||||
//
|
||||
// 3. This notice may not be removed or altered from any source distribution.
|
||||
//
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Structure defining the properties of a directional cone
|
||||
///
|
||||
/// Sounds will play at gain 1 when the listener
|
||||
/// is positioned within the inner angle of the cone.
|
||||
/// Sounds will play at `outerGain` when the listener is
|
||||
/// positioned outside the outer angle of the cone.
|
||||
/// The gain declines linearly from 1 to `outerGain` as the
|
||||
/// listener moves from the inner angle to the outer angle.
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
typedef struct
|
||||
{
|
||||
float innerAngle; //!< Inner angle, in degrees
|
||||
float outerAngle; //!< Outer angle, in degrees
|
||||
float outerGain; //!< Outer gain
|
||||
} sfSoundSourceCone;
|
||||
@@ -29,7 +29,9 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
#include <CSFML/Audio/Export.h>
|
||||
|
||||
#include <CSFML/Audio/EffectProcessor.h>
|
||||
#include <CSFML/Audio/SoundChannel.h>
|
||||
#include <CSFML/Audio/SoundSourceCone.h>
|
||||
#include <CSFML/Audio/SoundStatus.h>
|
||||
#include <CSFML/Audio/Types.h>
|
||||
#include <CSFML/System/Time.h>
|
||||
@@ -155,6 +157,20 @@ CSFML_AUDIO_API unsigned int sfSoundStream_getChannelCount(const sfSoundStream*
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API unsigned int sfSoundStream_getSampleRate(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the map of position in sample frame to sound channel
|
||||
///
|
||||
/// This is used to map a sample in the sample stream to a
|
||||
/// position during spatialization.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param count Pointer to a variable that will be filled with the number of channels in the map
|
||||
///
|
||||
/// \return Map of position in sample frame to sound channel
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundChannel* sfSoundStream_getChannelMap(const sfSoundStream* soundStream, size_t* count);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the pitch of a sound stream
|
||||
///
|
||||
@@ -170,6 +186,20 @@ CSFML_AUDIO_API unsigned int sfSoundStream_getSampleRate(const sfSoundStream* so
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setPitch(sfSoundStream* soundStream, float pitch);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the pan of the sound
|
||||
///
|
||||
/// Using panning, a mono sound can be panned between
|
||||
/// stereo channels. When the pan is set to -1, the sound
|
||||
/// is played only on the left channel, when the pan is set
|
||||
/// to +1, the sound is played only on the right channel.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param pan New pan to apply to the sound [-1, +1]
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setPan(sfSoundStream* soundStream, float pan);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the volume of a sound stream
|
||||
///
|
||||
@@ -182,6 +212,20 @@ CSFML_AUDIO_API void sfSoundStream_setPitch(sfSoundStream* soundStream, float pi
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setVolume(sfSoundStream* soundStream, float volume);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set whether spatialization of the sound is enabled
|
||||
///
|
||||
/// Spatialization is the application of various effects to
|
||||
/// simulate a sound being emitted at a virtual position in
|
||||
/// 3D space and exhibiting various physical phenomena such as
|
||||
/// directional attenuation and doppler shift.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param enabled `true` to enable spatialization, `false` to disable
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setSpatializationEnabled(sfSoundStream* soundStream, bool enabled);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D position of a sound stream in the audio scene
|
||||
///
|
||||
@@ -195,6 +239,74 @@ CSFML_AUDIO_API void sfSoundStream_setVolume(sfSoundStream* soundStream, float v
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setPosition(sfSoundStream* soundStream, sfVector3f position);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// The direction defines where the sound source is facing
|
||||
/// in 3D space. It will affect how the sound is attenuated
|
||||
/// if facing away from the listener.
|
||||
/// The default direction of a sound is (0, 0, -1).
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param direction Direction of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setDirection(sfSoundStream* soundStream, sfVector3f direction);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// The cone defines how directional attenuation is applied.
|
||||
/// The default cone of a sound is (2 * PI, 2 * PI, 1).
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param cone Cone properties of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setCone(sfSoundStream* soundStream, sfSoundSourceCone cone);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// The velocity is used to determine how to doppler shift
|
||||
/// the sound. Sounds moving towards the listener will be
|
||||
/// perceived to have a higher pitch and sounds moving away
|
||||
/// from the listener will be perceived to have a lower pitch.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param velocity Velocity of the sound in the scene
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setVelocity(sfSoundStream* soundStream, sfVector3f velocity);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the doppler factor of the sound
|
||||
///
|
||||
/// The doppler factor determines how strong the doppler
|
||||
/// shift will be.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param factor New doppler factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setDopplerFactor(sfSoundStream* soundStream, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the directional attenuation factor of the sound
|
||||
///
|
||||
/// Depending on the virtual position of an output channel
|
||||
/// relative to the listener (such as in surround sound
|
||||
/// setups), sounds will be attenuated when emitting them
|
||||
/// from certain channels. This factor determines how strong
|
||||
/// the attenuation based on output channel position
|
||||
/// relative to the listener is.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param factor New directional attenuation factor to apply to the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setDirectionalAttenuationFactor(sfSoundStream* soundStream, float factor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Make a sound stream's position relative to the listener or absolute
|
||||
///
|
||||
@@ -226,6 +338,48 @@ CSFML_AUDIO_API void sfSoundStream_setRelativeToListener(sfSoundStream* soundStr
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setMinDistance(sfSoundStream* soundStream, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum distance of the sound
|
||||
///
|
||||
/// The "maximum distance" of a sound is the minimum
|
||||
/// distance at which it is heard at its minimum volume. Closer
|
||||
/// than the maximum distance, it will start to fade in according
|
||||
/// to its attenuation factor.
|
||||
/// The default value of the maximum distance is the maximum
|
||||
/// value a float can represent.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param distance New maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setMaxDistance(sfSoundStream* soundStream, float distance);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the minimum gain of the sound
|
||||
///
|
||||
/// When the sound is further away from the listener than
|
||||
/// the "maximum distance" the attenuated gain is clamped
|
||||
/// so it cannot go below the minimum gain value.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param gain New minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setMinGain(sfSoundStream* soundStream, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the maximum gain of the sound
|
||||
///
|
||||
/// When the sound is closer from the listener than
|
||||
/// the "minimum distance" the attenuated gain is clamped
|
||||
/// so it cannot go above the maximum gain value.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param gain New maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setMaxGain(sfSoundStream* soundStream, float gain);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the attenuation factor of a sound stream
|
||||
///
|
||||
@@ -280,6 +434,16 @@ CSFML_AUDIO_API void sfSoundStream_setLooping(sfSoundStream* soundStream, bool l
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getPitch(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the pan of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Pan of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getPan(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the volume of a sound stream
|
||||
///
|
||||
@@ -290,6 +454,16 @@ CSFML_AUDIO_API float sfSoundStream_getPitch(const sfSoundStream* soundStream);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getVolume(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether spatialization of the sound is enabled
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return `true` if spatialization is enabled, `false` if it's disabled
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API bool sfSoundStream_isSpatializationEnabled(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D position of a sound stream in the audio scene
|
||||
///
|
||||
@@ -300,6 +474,56 @@ CSFML_AUDIO_API float sfSoundStream_getVolume(const sfSoundStream* soundStream);
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSoundStream_getPosition(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D direction of the sound in the audio scene
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Direction of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSoundStream_getDirection(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the cone properties of the sound in the audio scene
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Cone properties of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfSoundSourceCone sfSoundStream_getCone(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the 3D velocity of the sound in the audio scene
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Velocity of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API sfVector3f sfSoundStream_getVelocity(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the doppler factor of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Doppler factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getDopplerFactor(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the directional attenuation factor of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Directional attenuation factor of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getDirectionalAttenuationFactor(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Tell whether a sound stream's position is relative to the
|
||||
/// listener or is absolute
|
||||
@@ -321,6 +545,36 @@ CSFML_AUDIO_API bool sfSoundStream_isRelativeToListener(const sfSoundStream* sou
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getMinDistance(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum distance of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Maximum distance of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getMaxDistance(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the minimum gain of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Minimum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getMinGain(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the maximum gain of the sound
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
///
|
||||
/// \return Maximum gain of the sound
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API float sfSoundStream_getMaxGain(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the attenuation factor of a sound stream
|
||||
///
|
||||
@@ -341,6 +595,18 @@ CSFML_AUDIO_API float sfSoundStream_getAttenuation(const sfSoundStream* soundStr
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API bool sfSoundStream_isLooping(const sfSoundStream* soundStream);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Set the effect processor to be applied to the sound
|
||||
///
|
||||
/// The effect processor is a callable that will be called
|
||||
/// with sound data to be processed.
|
||||
///
|
||||
/// \param soundStream Sound stream object
|
||||
/// \param effectProcessor The effect processor to attach to this sound, attach an empty processor to disable processing
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
CSFML_AUDIO_API void sfSoundStream_setEffectProcessor(sfSoundStream* soundStream, sfEffectProcessor effectProcessor);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// \brief Get the current playing position of a sound stream
|
||||
///
|
||||
|
||||
Reference in new issue
Block a user