28#include <SFML/Audio/SoundBuffer.hpp>
29#include <SFML/Audio/SoundFile.hpp>
30#include <SFML/Audio/Sound.hpp>
31#include <SFML/Audio/AudioDevice.hpp>
32#include <SFML/Audio/OpenAL.hpp>
58mySamples (Copy.mySamples),
59myDuration (Copy.myDuration),
76 for (SoundList::const_iterator
it = mySounds.begin();
it != mySounds.end(); ++
it)
91 std::auto_ptr<priv::SoundFile>
File(priv::SoundFile::CreateRead(
Filename));
97 std::size_t NbSamples =
File->GetSamplesCount();
102 mySamples.resize(NbSamples);
103 if (
File->Read(&mySamples[0], NbSamples) == NbSamples)
111 std::cerr <<
"Failed to read audio data from file \"" <<
Filename <<
"\"" << std::endl;
119 std::cerr <<
"Failed to load sound buffer from file \"" <<
Filename <<
"\"" << std::endl;
138 std::size_t NbSamples =
File->GetSamplesCount();
143 mySamples.resize(NbSamples);
144 if (
File->Read(&mySamples[0], NbSamples) == NbSamples)
152 std::cerr <<
"Failed to read audio data from file in memory" << std::endl;
160 std::cerr <<
"Failed to load sound buffer from file in memory" << std::endl;
184 std::cerr <<
"Failed to load sound buffer from memory ("
185 <<
"Samples : " << Samples <<
", "
206 File->Write(&mySamples[0], mySamples.size());
213 std::cerr <<
"Failed to save sound buffer to file \"" <<
Filename <<
"\"" << std::endl;
225 return mySamples.empty() ?
NULL : &mySamples[0];
234 return mySamples.size();
278 std::swap(mySamples,
Temp.mySamples);
279 std::swap(myBuffer,
Temp.myBuffer);
280 std::swap(myDuration,
Temp.myDuration);
281 std::swap(mySounds,
Temp.mySounds);
302 std::cerr <<
"Unsupported number of channels (" <<
ChannelsCount <<
")" << std::endl;
307 ALsizei Size =
static_cast<ALsizei
>(mySamples.size()) *
sizeof(Int16);
308 ALCheck(alBufferData(myBuffer, Format, &mySamples[0], Size, SampleRate));
311 myDuration =
static_cast<float>(mySamples.size()) / SampleRate / ChannelsCount;
320void SoundBuffer::AttachSound(Sound* Instance)
const
322 mySounds.insert(Instance);
329void SoundBuffer::DetachSound(Sound* Instance)
const
331 mySounds.erase(Instance);
Abstract base class for every class that owns a device-dependant resource – allow them to initialize ...
Base class for every resource that needs to notify dependent classes about its destruction.
SoundBuffer is the low-level for loading and manipulating sound buffers.
SoundBuffer()
Default constructor.
bool LoadFromFile(const std::string &Filename)
Load the sound buffer from a file.
bool SaveToFile(const std::string &Filename) const
Save the sound buffer to a file.
unsigned int GetSampleRate() const
Get the sample rate.
const Int16 * GetSamples() const
Return the sound samples.
bool LoadFromSamples(const Int16 *Samples, std::size_t SamplesCount, unsigned int ChannelsCount, unsigned int SampleRate)
Load the sound buffer from an array of samples - assumed format for samples is 16 bits signed integer...
bool LoadFromMemory(const char *Data, std::size_t SizeInBytes)
Load the sound buffer from a file in memory.
std::size_t GetSamplesCount() const
Return the samples count.
SoundBuffer & operator=(const SoundBuffer &Other)
Assignment operator.
~SoundBuffer()
Destructor.
float GetDuration() const
Get the sound duration.
unsigned int GetChannelsCount() const
Return the number of channels (1 = mono, 2 = stereo, ...)
Vector2 is an utility class for manipulating 2 dimensional vectors.