ALuint SoundManager::load_file_into_buffer(const std::string& filename) { // open sound file std::auto_ptr<SoundFile> file (load_sound_file(filename)); ALenum format = get_sample_format(file.get()); ALuint buffer; alGenBuffers(1, &buffer); check_al_error("Couldn't create audio buffer: "); char* samples = new char[file->size]; try { file->read(samples, file->size); alBufferData(buffer, format, samples, static_cast<ALsizei> (file->size), static_cast<ALsizei> (file->rate)); check_al_error("Couldn't fill audio buffer: "); } catch(...) { delete[] samples; throw; } delete[] samples; return buffer; }
ALuint SoundManager::load_file_into_buffer(SoundFile& file) { ALenum format = get_sample_format(file); ALuint buffer; alGenBuffers(1, &buffer); check_al_error("Couldn't create audio buffer: "); std::unique_ptr<char[]> samples(new char[file.size]); file.read(samples.get(), file.size); alBufferData(buffer, format, samples.get(), static_cast<ALsizei>(file.size), static_cast<ALsizei>(file.rate)); check_al_error("Couldn't fill audio buffer: "); return buffer; }
ALuint SoundManager::load_file_into_buffer(SoundFile* file) { ALenum format = get_sample_format(file); ALuint buffer; alGenBuffers(1, &buffer); check_al_error("Couldn't create audio buffer: "); char* samples = new char[file->size]; try { file->read(samples, file->size); alBufferData(buffer, format, samples, static_cast<ALsizei> (file->size), static_cast<ALsizei> (file->rate)); check_al_error("Couldn't fill audio buffer: "); } catch(...) { delete[] samples; throw; } delete[] samples; return buffer; }