|
| 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.
|
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).
When loading sound samples from an array, a channel map needs to be provided, which specifies the mapping of the position in the sample frame to the sound channel. For example when you have six samples in a frame and a 5.1 sound system, the channel map defines how each of those samples map to which speaker channel.
Usage example:
sound1.play();
sound2.setPitch(2);
sound2.play();
auto samples = std::vector<std::int16_t>();
auto channelMap = std::vector<sf::SoundChannel>{
};
auto soundBuffer =
sf::SoundBuffer(samples.data(), samples.size(), channelMap.size(), 44100, channelMap);
Storage for audio samples defining a sound.
Regular sound that can be played in the audio environment.
- See also
- sf::Sound, sf::SoundBufferRecorder
Definition at line 54 of file SoundBuffer.hpp.