Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. inline ALuint loadBufferSound(std::filesystem::path const& Filename)
  2.     {
  3.         SF_INFO FileInfos = {};
  4.         SNDFILE* File = sf_open(Filename.generic_string().c_str(), SFM_READ, &FileInfos);
  5.         if (!File)
  6.             return 0;
  7.  
  8.         ALsizei NbSamples = static_cast<ALsizei>(FileInfos.channels * FileInfos.frames);
  9.  
  10.         std::vector<ALshort> Samples(NbSamples);
  11.         if (sf_read_short(File, Samples.data(), NbSamples) < NbSamples)
  12.             return 0;
  13.         sf_close(File);
  14.  
  15.         ALenum Format;
  16.         switch (FileInfos.channels)
  17.         {
  18.         case 1:  Format = AL_FORMAT_MONO16;   break;
  19.         case 2:  Format = AL_FORMAT_STEREO16; break;
  20.         default: return 0;
  21.         }
  22.         ALuint Buffer;
  23.         alGenBuffers(1, &Buffer);
  24.  
  25.  
  26.         alBufferData(Buffer, Format, Samples.data(), Samples.size() * sizeof(ALshort), FileInfos.samplerate);
  27.  
  28.  
  29.         if (alGetError() != AL_NO_ERROR)
  30.             return 0;
  31.  
  32.         return Buffer;
  33.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement