25 #define OV_EXCLUDE_STATIC_CALLBACKS
27 #undef OV_EXCLUDE_STATIC_CALLBACKS
30 #if defined(_DEBUG) && defined(_WINDOWS)
31 #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
37 Sound_Buffer::Sound_Buffer()
48 const String &
filename =
"sfx/104469__dkmedic__world";
51 if(dynamic_cast<Sound_Renderer_AL *>(&sr.get_Renderer())) {
55 std::pair<ALuint, float> loaded_ogg = load_ogg_vorbis(filename);
57 if(loaded_ogg.first ==
AL_NONE) {
59 throw Sound_Buffer_Init_Failure();
62 m_buffer = loaded_ogg.first;
63 m_duration = loaded_ogg.second;
71 Sound_Buffer::Sound_Buffer(
const String &
filename)
83 if(dynamic_cast<Sound_Renderer_AL *>(&sr.get_Renderer())) {
87 std::pair<ALuint, float> loaded_ogg = load_ogg_vorbis(filename);
89 if(loaded_ogg.first ==
AL_NONE) {
91 throw Sound_Buffer_Init_Failure();
94 m_buffer = loaded_ogg.first;
95 m_duration = loaded_ogg.second;
103 Sound_Buffer::~Sound_Buffer() {
123 if(
ov_fopen(const_cast<char *>((filename +
".ogg").c_str()), &oggFile))
124 return std::make_pair(
AL_NONE, 0.0
f);
133 const ogg_int64_t pcm_size = num_samples * bytes_per_sample;
134 const float duration = float(num_samples) / freq;
138 std::cerr <<
"WARNING: '" << filename <<
"' is stereo and will be unaffected by the OpenAL positional audio system." << std::endl;
144 int buffer_size =
int(pcm_size);
145 std::vector<char>
buffer( static_cast<size_t>(buffer_size) );
146 for(
char *begin = &buffer[0], *
end = begin + pcm_size;
148 begin += bytes, buffer_size -= bytes) {
149 bytes =
int(
ov_read(&oggFile, begin, buffer_size, 0, 2, 1, 0));
163 return std::make_pair(bufferID, duration);
167 return std::make_pair(
AL_NONE, 0.0
f);
174 void Sound_Buffer::init_SLES(
const String &filename) {
175 if(dynamic_cast<Sound_Renderer_SLES *>(&
get_Sound().get_Renderer())) {
177 AAsset* asset = AAssetManager_open(File_Ops::get_AAssetManager(), (filename +
".wav").c_str(), AASSET_MODE_UNKNOWN);
183 int fd = AAsset_openFileDescriptor(asset, &start, &length);
188 loc_fd = {SL_DATALOCATOR_ANDROIDFD, fd,
start, length};
189 format_mime = {SL_DATAFORMAT_MIME,
NULL, SL_CONTAINERTYPE_UNSPECIFIED};
190 audioSrc = {&loc_fd, &format_mime};
int ov_clear(OggVorbis_File *vf)
int ov_fopen(const char *path, OggVorbis_File *vf)
ogg_int64_t ov_pcm_total(OggVorbis_File *vf, int i)
static std::pair< ALuint, float > load_ogg_vorbis(const String &filename)
Ogg Vorbis Loader.
EGLContext EGLenum EGLClientBuffer buffer
Sound & get_Sound()
Get access to the singleton.
vorbis_info * ov_info(OggVorbis_File *vf, int link)
static String errorString()
static alBufferData_fcn alBufferData()
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum format
long ov_read(OggVorbis_File *vf, char *buffer, int length, int bigendianp, int word, int sgned, int *bitstream)
static alDeleteBuffers_fcn alDeleteBuffers()
#define AL_FORMAT_STEREO16
static alGenBuffers_fcn alGenBuffers()