diff options
author | chai <chaifix@163.com> | 2018-08-14 14:56:47 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-14 14:56:47 +0800 |
commit | 5c9af043503f92852a1a765b6ecfbc1aea24d2e9 (patch) | |
tree | eb371092c4137a672e7bfc13dc56ee777623ebfe /src/lua/audio | |
parent | 5162f84be0a4deb447c6ba1226722b049335d525 (diff) |
*update
Diffstat (limited to 'src/lua/audio')
-rw-r--r-- | src/lua/audio/Audio.h | 19 | ||||
-rw-r--r-- | src/lua/audio/Source.h | 93 | ||||
-rw-r--r-- | src/lua/audio/luaopen_Source.cpp | 31 | ||||
-rw-r--r-- | src/lua/audio/luaopen_audio.cpp | 24 |
4 files changed, 139 insertions, 28 deletions
diff --git a/src/lua/audio/Audio.h b/src/lua/audio/Audio.h new file mode 100644 index 0000000..3d22a90 --- /dev/null +++ b/src/lua/audio/Audio.h @@ -0,0 +1,19 @@ +#ifndef __JIN_LUA_AUDIO_AUDIO_H +#define __JIN_LUA_AUDIO_AUDIO_H +#include "libjin/jin.h" +#include "../luaopen_types.h" + +namespace jin +{ +namespace lua +{ +namespace audio +{ + + typedef jin::audio::SDLAudio Audio; + +} +} +} + +#endif#pragma once diff --git a/src/lua/audio/Source.h b/src/lua/audio/Source.h new file mode 100644 index 0000000..094ad12 --- /dev/null +++ b/src/lua/audio/Source.h @@ -0,0 +1,93 @@ +#ifndef __JIN_LUA_AUDIO_SOURCE_H +#define __JIN_LUA_AUDIO_SOURCE_H +#include "libjin/jin.h" +#include "../luaopen_types.h" + +namespace jin +{ +namespace lua +{ +namespace audio +{ + + class Source : public Object + { + public: + void play() + { + source->play(); + } + + void stop() + { + source->stop(); + } + + void pause() + { + source->pause(); + } + + void resume() + { + source->resume(); + } + + void rewind() + { + source->rewind(); + } + + bool isStopped() const + { + return source->isStopped(); + } + + bool isPaused() const + { + return source->isPaused(); + } + + void setPitch(float pitch) + { + source->setPitch(pitch); + } + + void setVolume(float volume) + { + source->setVolume(volume); + } + + bool setLoop(bool loop) + { + return source->setLoop(loop); + } + + void setRate(float rate) + { + source->setRate(rate); + } + + inline static Source * createSource(void* mem, size_t size) + { + Source* src = new Source; + src->source = jin::audio::SDLSource::createSource(mem, size); + return src; + } + + private: + ~Source() + { + source->stop(); + delete source; + } + + jin::audio::SDLSource* source; + + }; + +} // audio +} // lua +} // jin + +#endif
\ No newline at end of file diff --git a/src/lua/audio/luaopen_Source.cpp b/src/lua/audio/luaopen_Source.cpp index 10aab4d..8881620 100644 --- a/src/lua/audio/luaopen_Source.cpp +++ b/src/lua/audio/luaopen_Source.cpp @@ -1,60 +1,60 @@ #include "lua/luax.h" -#include "libjin/jin.h" #include "../luaopen_types.h" +#include "Source.h" namespace jin { namespace lua { - using namespace jin::audio; + using audio::Source; - static inline SDLSource* checkSource(lua_State* L) + static inline Source* checkSource(lua_State* L) { Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_AUDIO_SOURCE); if (proxy != 0 && proxy != nullptr) - return (SDLSource*)proxy->object; + return (Source*)proxy->object; return nullptr; } static int l_play(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); src->play(); return 0; } static int l_stop(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); src->stop(); return 0; } static int l_pause(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); src->pause(); return 0; } static int l_rewind(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); src->rewind(); return 0; } static int l_resume(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); src->resume(); return 0; } static int l_isStop(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); bool isStop = src->isStopped(); luax_pushboolean(L, isStop); return 1; @@ -62,7 +62,7 @@ namespace lua static int l_isPaused(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); bool isPaused = src->isPaused(); luax_pushboolean(L, isPaused); return 1; @@ -70,7 +70,7 @@ namespace lua static int l_setVolume(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); float volume = luax_checknumber(L, 2); src->setVolume(volume); return 0; @@ -78,7 +78,7 @@ namespace lua static int l_setLoop(lua_State* L) { - SDLSource* src = checkSource(L); + Source* src = checkSource(L); bool loop = luax_checkbool(L, 2); src->setLoop(loop); return 0; @@ -86,9 +86,8 @@ namespace lua static int l_gc(lua_State* L) { - SDLSource* src = checkSource(L); - src->stop(); - delete src; + Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_AUDIO_SOURCE); + proxy->release(); return 0; } diff --git a/src/lua/audio/luaopen_audio.cpp b/src/lua/audio/luaopen_audio.cpp index 33f0561..2bb2f3a 100644 --- a/src/lua/audio/luaopen_audio.cpp +++ b/src/lua/audio/luaopen_audio.cpp @@ -1,20 +1,21 @@ #include "lua/luax.h" #include "../luaopen_types.h" -#include "libjin/jin.h" +#include "Source.h" +#include "Audio.h" namespace jin { namespace lua { using namespace jin::filesystem; - using namespace jin::audio; + using namespace jin::lua::audio; static int l_init(lua_State* L) { - SDLAudio::Setting setting; + Audio::Setting setting; setting.samplerate = 44100; setting.samples = 44100; - if (! SDLAudio::get()->init(&setting)) + if (!Audio::get()->init(&setting)) { luax_error(L, "could not init audio"); luax_pushboolean(L, false); @@ -26,32 +27,32 @@ namespace lua static int l_play(lua_State* L) { - SDLAudio::get()->play(); + Audio::get()->play(); return 0; } static int l_stop(lua_State* L) { - SDLAudio::get()->stop(); + Audio::get()->stop(); return 0; } static int l_pause(lua_State* L) { - SDLAudio::get()->pause(); + Audio::get()->pause(); return 0; } static int l_resume(lua_State* L) { - SDLAudio::get()->resume(); + Audio::get()->resume(); return 0; } static int l_setVolume(lua_State* L) { float volume = luax_checknumber(L, 1); - SDLAudio::get()->setVolume(volume); + Audio::get()->setVolume(volume); return 0; } @@ -66,16 +67,15 @@ namespace lua } Buffer b; fs->read(f, &b); - Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_AUDIO_SOURCE, sizeof(Proxy)); - SDLSource* src = SDLSource::createSource(b.data, b.size); + Source* src = Source::createSource(b.data, b.size); proxy->bind(src, JIN_AUDIO_SOURCE); return 1; } static int l_destroy(lua_State* L) { - SDLAudio* audio = SDLAudio::get(); + Audio* audio = Audio::get(); audio->quit(); return 0; } |