13 #ifndef OALPLUS_ALUT_1303201721_HPP
14 #define OALPLUS_ALUT_1303201721_HPP
20 #include <oalplus/error/alut.hpp>
37 static bool _initialize(
bool with_context,
int argc,
char** argv)
39 bool result = with_context
40 ?(OALPLUS_ALUTFUNC(Init)(&argc, argv) == AL_TRUE)
41 :(OALPLUS_ALUTFUNC(InitWithoutContext)(&argc, argv)==AL_TRUE);
42 OALPLUS_CHECK_SIMPLE_ALUT(Init);
47 static bool _initialize(
bool with_context)
51 return _initialize(with_context, 1, &arg);
61 : _initialized(_initialize(with_context, argc, argv))
71 : _initialized(_initialize(with_context))
76 : _initialized(tmp._initialized)
78 tmp._initialized =
false;
90 OALPLUS_ALUTFUNC(Exit)();
95 static ALfloat _normalize_sample(ALubyte v)
97 return (ALfloat(v)-128.0f)/128.0f;
100 static ALfloat _normalize_sample(ALshort v)
102 return ALfloat(v)/32768.0f;
105 template <
typename T>
106 void _do_load_mem_norm(
107 std::vector<ALfloat>& result,
113 std::size_t n = size/
sizeof(
T);
115 T* data =
static_cast<T*
>(raw_data);
116 for(std::size_t i=0; i!=n; ++i)
118 result[i] = _normalize_sample(data[i]);
122 struct _free_on_scope_exit
126 ~_free_on_scope_exit(
void)
132 std::vector<ALfloat> _load_mem_norm(
138 std::vector<ALfloat> result;
140 if(format == AL_FORMAT_MONO8)
149 else if(format == AL_FORMAT_MONO16)
158 else if(format == AL_FORMAT_STEREO8)
167 else if(format == AL_FORMAT_STEREO16)
177 return std::move(result);
180 std::vector<ALubyte> _load_memory(
185 ::ALubyte* data = (::ALubyte*)raw_data;
186 return std::vector<ALubyte>(data, data+size);
198 assert(_initialized);
201 return Buffer::FromRawName(BufferName(name));
213 assert(_initialized);
216 return Buffer::FromRawName(BufferName(name));
228 DataFormat* data_format,
234 ::ALvoid* ptr = OALPLUS_ALUTFUNC(LoadMemoryHelloWorld)(
239 OALPLUS_CHECK_SIMPLE_ALUT(LoadMemoryHelloWorld);
241 _free_on_scope_exit cleaner = { ptr };
242 OALPLUS_FAKE_USE(cleaner);
244 if(data_format) *data_format = DataFormat(format);
246 return _load_mem_norm(ptr, format, size);
259 const ALchar* file_path,
260 DataFormat* data_format,
274 _free_on_scope_exit cleaner = { ptr };
275 OALPLUS_FAKE_USE(cleaner);
277 if(data_format) *data_format = DataFormat(format);
279 return _load_mem_norm(ptr, format, size);
291 const ALchar* file_path,
292 DataFormat* data_format,
306 _free_on_scope_exit cleaner = { ptr };
307 OALPLUS_FAKE_USE(cleaner);
309 if(data_format) *data_format = DataFormat(format);
311 return _load_memory(ptr, size);
326 std::vector<ALubyte>& raw,
327 std::vector<ALfloat>& norm,
328 const ALchar* file_path,
329 DataFormat* data_format,
343 _free_on_scope_exit cleaner = { ptr };
344 OALPLUS_FAKE_USE(cleaner);
346 if(data_format) *data_format = DataFormat(format);
348 raw = _load_memory(ptr, size);
349 norm = _load_mem_norm(ptr, format, size);
355 #endif // include guard
Compile-time configuration options.
Helper macro expanding into OpenAL function name.
Object< BufferOps > Buffer
An oalplus_object encapsulating the OpenAL buffer functionality.
Definition: buffer.hpp:233
Wrapper for OpenAL buffer object.