4 #define AL_SILENCE_DEPRECATION
6 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(_WIN32) || defined(__HAIKU__)
27 using std::unique_ptr;
35 void AudioStream::setParameters(uint32_t sampleRate, uint8_t channels,
const int64_t bufferSize) {
38 this->
data = unique_ptr<ByteBuffer>(ByteBuffer::allocate(bufferSize));
43 alGetSourcei(
alSourceId, AL_SOURCE_STATE, &state);
44 return state == AL_PLAYING;
66 ALsizei buffersToPlay = 0;
71 if (
data->getPosition() == 0)
break;
75 if (alGetError() != AL_NO_ERROR) {
76 Console::println(
string(
"AudioStream::play(): '"+
id +
"': Could not upload buffer"));
82 if (alGetError() != AL_NO_ERROR) {
83 Console::println(
string(
"AudioStream::play(): '" +
id +
"': Could not queue buffers"));
86 if (alGetError() != AL_NO_ERROR) {
87 Console::println(
string(
"AudioStream::play(): '"+
id +
"': Could not play source"));
100 if (alGetError() != AL_NO_ERROR) {
101 Console::println(
string(
"AudioStream::pause(): '" +
id +
"': Could not pause"));
111 if (alGetError() != AL_NO_ERROR) {
112 Console::println(
string(
"AudioStream::stop(): '" +
id +
"': Could not stop"));
116 alGetSourcei(
alSourceId, AL_BUFFERS_QUEUED, &queuedBuffers);
117 if (alGetError() != AL_NO_ERROR) {
118 Console::println(
string(
"AudioStream::stop(): '" +
id +
"': Could not determine queued buffers"));
121 if (queuedBuffers > 0) {
122 vector<uint32_t> removedBuffers;
123 removedBuffers.resize(queuedBuffers);
124 alSourceUnqueueBuffers(
alSourceId, queuedBuffers, removedBuffers.data());
125 if (alGetError() != AL_NO_ERROR) {
126 Console::println(
string(
"AudioStream::stop(): '" +
id +
"': Could not unqueue buffers"));
137 case(1):
format = AL_FORMAT_MONO16;
break;
138 case(2):
format = AL_FORMAT_STEREO16;
break;
140 Console::println(
string(
"AudioStream::initialize(): '" +
id +
"': Unsupported number of channels"));
144 if (alGetError() != AL_NO_ERROR) {
145 Console::println(
string(
"AudioStream::initialize(): '" +
id +
"': Could not generate buffer"));
150 if (alGetError() != AL_NO_ERROR) {
151 Console::println(
string(
"AudioStream::initialize(): '" +
id +
"': Could not generate source"));
167 int32_t processedBuffers;
168 alGetSourcei(
alSourceId, AL_BUFFERS_PROCESSED, &processedBuffers);
169 if (alGetError() != AL_NO_ERROR) {
170 Console::println(
string(
"AudioStream::update(): '" +
id +
"': Could not determine processed buffers"));
175 while (processedBuffers > 0) {
177 uint32_t processedBufferId;
178 alSourceUnqueueBuffers(
alSourceId, 1, &processedBufferId);
179 if (alGetError() != AL_NO_ERROR) {
180 Console::println(
string(
"AudioStream::update(): '" +
id +
"': Could not unqueue buffers"));
186 if (
data->getPosition() == 0) {
191 if (alGetError() != AL_NO_ERROR) {
192 Console::println(
string(
"AudioStream::update(): '" +
id +
"': Could not upload buffer"));
195 alSourceQueueBuffers(
alSourceId, 1, &processedBufferId);
196 if (alGetError() != AL_NO_ERROR) {
197 Console::println(
string(
"AudioStream::update(): '" +
id +
"': Could not queue buffer"));
200 if (
data->getPosition() <
data->getCapacity()) {
221 alSourcef(
alSourceId, AL_ROLLOFF_FACTOR, 0.0f);
222 alSourcei(
alSourceId, AL_SOURCE_RELATIVE, AL_TRUE);
224 alSourcef(
alSourceId, AL_ROLLOFF_FACTOR, 1.0f);
225 alSourcei(
alSourceId, AL_SOURCE_RELATIVE, AL_FALSE);
235 if (alGetError() != AL_NO_ERROR) {
236 Console::println(
string(
"AudioStream::dispose(): '" +
id +
"': Could not delete source"));
241 if (alGetError() != AL_NO_ERROR) {
242 Console::println(
string(
"AudioStream::dispose(): '" +
id +
"': Could not delete buffers"));
virtual void play() override
Plays this audio entity.
virtual void rewind() override
Rewinds this audio entity.
virtual void dispose() override
Dispose this entity from OpenAL.
void updateProperties()
Updates properties to Open AL.
virtual void update() override
Commits properties to OpenAl.
virtual bool initialize() override
Initiates this OpenAL entity to OpenAl.
virtual bool isPlaying() override
array< uint32_t, 2 > alBufferIds
virtual void fillBuffer(ByteBuffer *data)=0
Fill buffer.
unique_ptr< ByteBuffer > data
virtual void stop() override
Stops this audio entity.
virtual void pause() override
Pauses this audio entity.
Interface to audio module.
static constexpr uint32_t ALSOURCEID_NONE
static constexpr uint32_t ALBUFFERID_NONE
Vector3 class representing vector3 mathematical structure and operations with x, y,...
const array< float, 3 > & getArray() const