From e024e5a23c4f5c8e8fb02e7b03c8e9265ac6c1ef Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 29 May 2018 12:39:52 +0800 Subject: =?UTF-8?q?Image=E6=94=B9=E4=B8=BA=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/audio/sdl/source.cpp | 7 ++++--- src/libjin/audio/sdl/source.h | 4 ++-- src/libjin/audio/source.cpp | 10 ++++++++++ src/libjin/audio/source.h | 5 ++++- 4 files changed, 20 insertions(+), 6 deletions(-) (limited to 'src/libjin/audio') 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 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 #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); }; -- cgit v1.1-26-g67d0