9 #include "../../CodecRegistry.h"
10 #include "../../Stream.h"
21 using namespace Audio::__impl::OpenAL;
24 #define NUM_BUFFERS (sizeof(bufferHandles) / sizeof(bufferHandles[0]))
30 unsigned int _bufferSamples)
33 bufferSamples(_bufferSamples)
60 SharedPtr<Stream> stream = getStream();
64 targetFormat = stream->getFormat();
65 targetFormat.signedSamples = (targetFormat.bitsPerSample > 8);
66 targetFormat.nativeOrder = 1;
67 if (targetFormat.bitsPerSample > 8)
68 targetFormat.bitsPerSample = 16;
70 targetFormat.bitsPerSample = 8;
74 bufferSamples =
std::max( 16384U, targetFormat.sampleFrequency/4 );
77 buffer.reserve(bufferSamples, targetFormat);
109 if (isStreamLoaded())
112 alDeleteBuffers(
sizeof(bufferHandles)/
sizeof(bufferHandles[0]), bufferHandles);
122 if (playBufferIndex == readBufferIndex)
125 bufferStarts[readBufferIndex] = getStream()->getPosition();
130 if (
buffer.getUsedBytes() == 0)
136 alBufferData(bufferHandle,
139 targetFormat.sampleFrequency);
143 playBufferIndex = readBufferIndex;
145 readBufferIndex = (readBufferIndex + 1) %
NUM_BUFFERS;
153 playBufferIndex = (playBufferIndex + 1) %
NUM_BUFFERS;
163 getStream()->seek(position);
169 return bufferStarts[playBufferIndex];