aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/audio')
-rw-r--r--src/libjin/audio/sdl/source.cpp7
-rw-r--r--src/libjin/audio/sdl/source.h4
-rw-r--r--src/libjin/audio/source.cpp10
-rw-r--r--src/libjin/audio/source.h5
4 files changed, 20 insertions, 6 deletions
diff --git a/src/libjin/audio/sdl/source.cpp b/src/libjin/audio/sdl/source.cpp
index 2bb63f5..b647229 100644
--- a/src/libjin/audio/sdl/source.cpp
+++ b/src/libjin/audio/sdl/source.cpp
@@ -54,7 +54,7 @@ namespace audio
shared std::vector<SDLSource*> Manager::sources;
shared Manager* Manager::manager = nullptr;
- SDLSource* SDLSource::createSource(SourceType format, const char* file)
+ SDLSource* SDLSource::createSource(const char* file)
{
std::ifstream fs;
fs.open(file, std::ios::binary);
@@ -69,12 +69,12 @@ namespace audio
char* buffer = (char*)malloc(size);
memset(buffer, 0, size);
fs.read(buffer, size);
- SDLSource* source = createSource(format, buffer, size);
+ SDLSource* source = createSource(buffer, size);
free(buffer);
return source;
}
- SDLSource* SDLSource::createSource(SourceType format, void* mem, size_t size)
+ SDLSource* SDLSource::createSource(void* mem, size_t size)
{
if (mem == nullptr)
return nullptr;
@@ -82,6 +82,7 @@ namespace audio
#define read(FMT) case FMT : source->load##FMT(mem, size); break
try
{
+ SourceType format = getType(mem, size);
switch (format)
{
read(OGG);
diff --git a/src/libjin/audio/sdl/source.h b/src/libjin/audio/sdl/source.h
index 900568f..743d4f0 100644
--- a/src/libjin/audio/sdl/source.h
+++ b/src/libjin/audio/sdl/source.h
@@ -22,8 +22,8 @@ namespace audio
~SDLSource();
- static SDLSource* createSource(SourceType format, const char* file);
- static SDLSource* createSource(SourceType format, void* mem, size_t size);
+ static SDLSource* createSource(const char* file);
+ static SDLSource* createSource(void* mem, size_t size);
/* ISource interface */
void play() override;
diff --git a/src/libjin/audio/source.cpp b/src/libjin/audio/source.cpp
index dd87718..ec80a0f 100644
--- a/src/libjin/audio/source.cpp
+++ b/src/libjin/audio/source.cpp
@@ -1,3 +1,4 @@
+#include <cstring>
#include "source.h"
namespace jin
@@ -5,7 +6,16 @@ namespace jin
namespace audio
{
+ SourceType Source::getType(const void* mem, int size)
+ {
+ const char* p = (const char* )mem;
+ if (memcmp(p, "RIFF", 4) == 0 && memcmp(p + 8, "WAVE", 4) == 0)
+ return SourceType::WAV;
+ if (memcmp(p, "OggS", 4) == 0)
+ return SourceType::OGG;
+ return SourceType::INVALID;
+ }
}
} \ No newline at end of file
diff --git a/src/libjin/audio/source.h b/src/libjin/audio/source.h
index ea82725..313ebde 100644
--- a/src/libjin/audio/source.h
+++ b/src/libjin/audio/source.h
@@ -10,6 +10,7 @@ namespace audio
enum SourceType
{
+ INVALID = 0,
WAV,
OGG,
};
@@ -35,7 +36,9 @@ namespace audio
virtual bool setLoop(bool loop) = 0;
virtual void setRate(float rate) = 0;
- protected:
+ protected:
+
+ static SourceType getType(const void* mem, int size);
};