summaryrefslogtreecommitdiffstats
path: root/src/sound/oalsound/buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sound/oalsound/buffer.cpp')
-rw-r--r--src/sound/oalsound/buffer.cpp33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/sound/oalsound/buffer.cpp b/src/sound/oalsound/buffer.cpp
index 5a46566..7584767 100644
--- a/src/sound/oalsound/buffer.cpp
+++ b/src/sound/oalsound/buffer.cpp
@@ -20,7 +20,10 @@
#include "sound/oalsound/buffer.h"
-#include <cstring>
+#include <memory>
+
+#include "common/resources/resourcemanager.h"
+
Buffer::Buffer()
{
@@ -45,19 +48,17 @@ bool Buffer::LoadFromFile(std::string filename, Sound sound)
m_sound = sound;
GetLogger()->Debug("Loading audio file: %s\n", filename.c_str());
- SF_INFO fileInfo;
- memset(&fileInfo, 0, sizeof(SF_INFO));
- SNDFILE *file = sf_open(filename.c_str(), SFM_READ, &fileInfo);
+ std::unique_ptr<CSNDFile> file = std::unique_ptr<CSNDFile>(CResourceManager::GetSNDFileHandler(filename));
- GetLogger()->Trace(" channels %d\n", fileInfo.channels);
- GetLogger()->Trace(" format %d\n", fileInfo.format);
- GetLogger()->Trace(" frames %d\n", fileInfo.frames);
- GetLogger()->Trace(" samplerate %d\n", fileInfo.samplerate);
- GetLogger()->Trace(" sections %d\n", fileInfo.sections);
+ GetLogger()->Trace(" channels %d\n", file->GetFileInfo().channels);
+ GetLogger()->Trace(" format %d\n", file->GetFileInfo().format);
+ GetLogger()->Trace(" frames %d\n", file->GetFileInfo().frames);
+ GetLogger()->Trace(" samplerate %d\n", file->GetFileInfo().samplerate);
+ GetLogger()->Trace(" sections %d\n", file->GetFileInfo().sections);
- if (!file)
+ if (!file->IsOpen())
{
- GetLogger()->Warn("Could not load file. Reason: %s\n", sf_strerror(file));
+ GetLogger()->Warn("Could not load file. Reason: %s\n", file->GetLastError().c_str());
m_loaded = false;
return false;
}
@@ -67,23 +68,21 @@ bool Buffer::LoadFromFile(std::string filename, Sound sound)
{
GetLogger()->Warn("Could not create audio buffer\n");
m_loaded = false;
- sf_close(file);
return false;
}
// read chunks of 4096 samples
std::vector<uint16_t> data;
std::array<int16_t, 4096> buffer;
- data.reserve(fileInfo.frames);
+ data.reserve(file->GetFileInfo().frames);
size_t read = 0;
- while ((read = sf_read_short(file, buffer.data(), buffer.size())) != 0)
+ while ((read = file->Read(buffer.data(), buffer.size())) != 0)
{
data.insert(data.end(), buffer.begin(), buffer.begin() + read);
}
- sf_close(file);
- alBufferData(m_buffer, fileInfo.channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16, &data.front(), data.size() * sizeof(uint16_t), fileInfo.samplerate);
- m_duration = static_cast<float>(fileInfo.frames) / fileInfo.samplerate;
+ alBufferData(m_buffer, file->GetFileInfo().channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16, &data.front(), data.size() * sizeof(uint16_t), file->GetFileInfo().samplerate);
+ m_duration = static_cast<float>(file->GetFileInfo().frames) / file->GetFileInfo().samplerate;
m_loaded = true;
return true;
}