Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inline ALuint loadBufferSound(std::filesystem::path const& Filename)
- {
- SF_INFO FileInfos = {};
- SNDFILE* File = sf_open(Filename.generic_string().c_str(), SFM_READ, &FileInfos);
- if (!File)
- return 0;
- ALsizei NbSamples = static_cast<ALsizei>(FileInfos.channels * FileInfos.frames);
- std::vector<ALshort> Samples(NbSamples);
- if (sf_read_short(File, Samples.data(), NbSamples) < NbSamples)
- return 0;
- sf_close(File);
- ALenum Format;
- switch (FileInfos.channels)
- {
- case 1: Format = AL_FORMAT_MONO16; break;
- case 2: Format = AL_FORMAT_STEREO16; break;
- default: return 0;
- }
- ALuint Buffer;
- alGenBuffers(1, &Buffer);
- alBufferData(Buffer, Format, Samples.data(), Samples.size() * sizeof(ALshort), FileInfos.samplerate);
- if (alGetError() != AL_NO_ERROR)
- return 0;
- return Buffer;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement