From 8fba362fc568e91dcc87f49ab3d55c1ba3517841 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Tue, 29 Jan 2013 23:19:26 +0100 Subject: [PATCH] Add SoundData:getDuration, returns the duration in seconds --- src/modules/sound/SoundData.cpp | 5 +++++ src/modules/sound/SoundData.h | 2 ++ src/modules/sound/wrap_SoundData.cpp | 8 ++++++++ src/modules/sound/wrap_SoundData.h | 1 + 4 files changed, 16 insertions(+) diff --git a/src/modules/sound/SoundData.cpp b/src/modules/sound/SoundData.cpp index 41e925cf3..af4a9d33d 100644 --- a/src/modules/sound/SoundData.cpp +++ b/src/modules/sound/SoundData.cpp @@ -147,6 +147,11 @@ int SoundData::getSampleRate() const return sampleRate; } +int SoundData::getDuration() const +{ + return size/(channels*sampleRate*bits/8); +} + void SoundData::setSample(int i, float sample) { // Check range. diff --git a/src/modules/sound/SoundData.h b/src/modules/sound/SoundData.h index 254dd092d..d082215c2 100644 --- a/src/modules/sound/SoundData.h +++ b/src/modules/sound/SoundData.h @@ -49,6 +49,8 @@ public: virtual int getBits() const; virtual int getSampleRate() const; + virtual int getDuration() const; + void setSample(int i, float sample); float getSample(int i) const; diff --git a/src/modules/sound/wrap_SoundData.cpp b/src/modules/sound/wrap_SoundData.cpp index 897be515e..6ce1402ed 100644 --- a/src/modules/sound/wrap_SoundData.cpp +++ b/src/modules/sound/wrap_SoundData.cpp @@ -53,6 +53,13 @@ int w_SoundData_getSampleRate(lua_State *L) return 1; } +int w_SoundData_getDuration(lua_State *L) +{ + SoundData *t = luax_checksounddata(L, 1); + lua_pushinteger(L, t->getDuration()); + return 1; +} + int w_SoundData_setSample(lua_State *L) { SoundData *sd = luax_checksounddata(L, 1); @@ -80,6 +87,7 @@ static const luaL_Reg functions[] = { "getChannels", w_SoundData_getChannels }, { "getBits", w_SoundData_getBits }, { "getSampleRate", w_SoundData_getSampleRate }, + { "getDuration", w_SoundData_getDuration }, { "setSample", w_SoundData_setSample }, { "getSample", w_SoundData_getSample }, { 0, 0 } diff --git a/src/modules/sound/wrap_SoundData.h b/src/modules/sound/wrap_SoundData.h index 9d0fca2a8..ce43f763d 100644 --- a/src/modules/sound/wrap_SoundData.h +++ b/src/modules/sound/wrap_SoundData.h @@ -36,6 +36,7 @@ int w_getSize(lua_State *L); int w_getChannels(lua_State *L); int w_getBits(lua_State *L); int w_getSampleRate(lua_State *L); +int w_getDuration(lua_State *L); int w_setSample(lua_State *L); int w_getSample(lua_State *L); extern "C" int luaopen_sounddata(lua_State *L);