|
SFML
Simple and Fast Multimedia Library
|
Storage for audio samples defining a sound. More...
#include <SoundBuffer.hpp>
Public Member Functions | |
| SoundBuffer ()=default | |
| Default constructor. | |
| SoundBuffer (const SoundBuffer ©) | |
| Copy constructor. | |
| SoundBuffer (const std::filesystem::path &filename) | |
| Construct the sound buffer from a file. | |
| SoundBuffer (const void *data, std::size_t sizeInBytes) | |
| Construct the sound buffer from a file in memory. | |
| SoundBuffer (InputStream &stream) | |
| Construct the sound buffer from a custom stream. | |
| SoundBuffer (const std::int16_t *samples, std::uint64_t sampleCount, unsigned int channelCount, unsigned int sampleRate, const std::vector< SoundChannel > &channelMap) | |
| Construct the sound buffer from an array of audio samples. | |
| ~SoundBuffer () | |
| Destructor. | |
| bool | loadFromFile (const std::filesystem::path &filename) |
| Load the sound buffer from a file. | |
| bool | loadFromMemory (const void *data, std::size_t sizeInBytes) |
| Load the sound buffer from a file in memory. | |
| bool | loadFromStream (InputStream &stream) |
| Load the sound buffer from a custom stream. | |
| bool | loadFromSamples (const std::int16_t *samples, std::uint64_t sampleCount, unsigned int channelCount, unsigned int sampleRate, const std::vector< SoundChannel > &channelMap) |
| Load the sound buffer from an array of audio samples. | |
| bool | saveToFile (const std::filesystem::path &filename) const |
| Save the sound buffer to an audio file. | |
| const std::int16_t * | getSamples () const |
| Get the array of audio samples stored in the buffer. | |
| std::uint64_t | getSampleCount () const |
| Get the number of samples stored in the buffer. | |
| unsigned int | getSampleRate () const |
| Get the sample rate of the sound. | |
| unsigned int | getChannelCount () const |
| Get the number of channels used by the sound. | |
| std::vector< SoundChannel > | getChannelMap () const |
| Get the map of position in sample frame to sound channel. | |
| Time | getDuration () const |
| Get the total duration of the sound. | |
| SoundBuffer & | operator= (const SoundBuffer &right) |
| Overload of assignment operator. | |
Friends | |
| class | Sound |
Storage for audio samples defining a sound.
A sound buffer holds the data of a sound, which is an array of audio samples. A sample is a 16 bit signed integer that defines the amplitude of the sound at a given time. The sound is then reconstituted by playing these samples at a high rate (for example, 44100 samples per second is the standard rate used for playing CDs). In short, audio samples are like texture pixels, and a sf::SoundBuffer is similar to a sf::Texture.
A sound buffer can be loaded from a file, from memory, from a custom stream (see sf::InputStream) or directly from an array of samples. It can also be saved back to a file.
Sound buffers alone are not very useful: they hold the audio data but cannot be played. To do so, you need to use the sf::Sound class, which provides functions to play/pause/stop the sound as well as changing the way it is outputted (volume, pitch, 3D position, ...). This separation allows more flexibility and better performances: indeed a sf::SoundBuffer is a heavy resource, and any operation on it is slow (often too slow for real-time applications). On the other side, a sf::Sound is a lightweight object, which can use the audio data of a sound buffer and change the way it is played without actually modifying that data. Note that it is also possible to bind several sf::Sound instances to the same sf::SoundBuffer.
It is important to note that the sf::Sound instance doesn't copy the buffer that it uses, it only keeps a reference to it. Thus, a sf::SoundBuffer must not be destructed while it is used by a sf::Sound (i.e. never write a function that uses a local sf::SoundBuffer instance for loading a sound).
Usage example:
|
default |
Default constructor.
Construct an empty sound buffer that does not contain any samples.
| sf::SoundBuffer::SoundBuffer | ( | const SoundBuffer & | copy | ) |
Copy constructor.
| copy | Instance to copy |
| sf::SoundBuffer::SoundBuffer | ( | const std::filesystem::path & | filename | ) |
Construct the sound buffer from a file.
See the documentation of sf::InputSoundFile for the list of supported formats.
| filename | Path of the sound file to load |
| `sf::Exception` | if loading was unsuccessful |
| sf::SoundBuffer::SoundBuffer | ( | const void * | data, |
| std::size_t | sizeInBytes ) |
Construct the sound buffer from a file in memory.
See the documentation of sf::InputSoundFile for the list of supported formats.
| data | Pointer to the file data in memory |
| sizeInBytes | Size of the data to load, in bytes |
| `sf::Exception` | if loading was unsuccessful |
| sf::SoundBuffer::SoundBuffer | ( | InputStream & | stream | ) |
Construct the sound buffer from a custom stream.
See the documentation of sf::InputSoundFile for the list of supported formats.
| stream | Source stream to read from |
| `sf::Exception` | if loading was unsuccessful |
| sf::SoundBuffer::SoundBuffer | ( | const std::int16_t * | samples, |
| std::uint64_t | sampleCount, | ||
| unsigned int | channelCount, | ||
| unsigned int | sampleRate, | ||
| const std::vector< SoundChannel > & | channelMap ) |
Construct the sound buffer from an array of audio samples.
The assumed format of the audio samples is 16 bit signed integer.
| samples | Pointer to the array of samples in memory |
| sampleCount | Number of samples in the array |
| channelCount | Number of channels (1 = mono, 2 = stereo, ...) |
| sampleRate | Sample rate (number of samples to play per second) |
| channelMap | Map of position in sample frame to sound channel |
| `sf::Exception` | if loading was unsuccessful |
| sf::SoundBuffer::~SoundBuffer | ( | ) |
Destructor.
|
nodiscard |
Get the number of channels used by the sound.
If the sound is mono then the number of channels will be 1, 2 for stereo, etc.
|
nodiscard |
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 spatialisation.
|
nodiscard |
Get the total duration of the sound.
|
nodiscard |
Get the number of samples stored in the buffer.
The array of samples can be accessed with the getSamples() function.
|
nodiscard |
Get the sample rate of the sound.
The sample rate is the number of samples played per second. The higher, the better the quality (for example, 44100 samples/s is CD quality).
|
nodiscard |
Get the array of audio samples stored in the buffer.
The format of the returned samples is 16 bit signed integer. The total number of samples in this array is given by the getSampleCount() function.
|
nodiscard |
Load the sound buffer from a file.
See the documentation of sf::InputSoundFile for the list of supported formats.
| filename | Path of the sound file to load |
|
nodiscard |
Load the sound buffer from a file in memory.
See the documentation of sf::InputSoundFile for the list of supported formats.
| data | Pointer to the file data in memory |
| sizeInBytes | Size of the data to load, in bytes |
|
nodiscard |
Load the sound buffer from an array of audio samples.
The assumed format of the audio samples is 16 bit signed integer.
| samples | Pointer to the array of samples in memory |
| sampleCount | Number of samples in the array |
| channelCount | Number of channels (1 = mono, 2 = stereo, ...) |
| sampleRate | Sample rate (number of samples to play per second) |
| channelMap | Map of position in sample frame to sound channel |
|
nodiscard |
Load the sound buffer from a custom stream.
See the documentation of sf::InputSoundFile for the list of supported formats.
| stream | Source stream to read from |
| SoundBuffer & sf::SoundBuffer::operator= | ( | const SoundBuffer & | right | ) |
Overload of assignment operator.
| right | Instance to assign |
|
nodiscard |
Save the sound buffer to an audio file.
See the documentation of sf::OutputSoundFile for the list of supported formats.
| filename | Path of the sound file to write |
|
friend |