1
Fork 0

feat(volume): Add conversion functions

This commit is contained in:
Lucas Schwiderski 2022-08-11 13:37:00 +02:00
parent 3173460b17
commit 1745e5d4ad
Signed by: lucas
GPG key ID: AA12679AAA6DF4D8
2 changed files with 84 additions and 4 deletions

View file

@ -1,5 +1,7 @@
#include "volume.h"
#include "lua_util.h"
#include <pulse/xmalloc.h>
#include <stdbool.h>
#include <stdio.h>
@ -311,3 +313,31 @@ int volume_divide(lua_State* L) {
}
}
}
int volume_from_dB(lua_State* L) {
double value = (double) luaL_checknumber(L, 1);
lua_pushinteger(L, pa_sw_volume_from_dB(value));
return 1;
}
int volume_to_dB(lua_State* L) {
pa_volume_t value = luaL_checkinteger(L, 1);
lua_pushnumber(L, pa_sw_volume_to_dB(value));
return 1;
}
int volume_from_linear(lua_State* L) {
double value = (double) luaL_checknumber(L, 1);
lua_pushinteger(L, pa_sw_volume_from_linear(value));
return 1;
}
int volume_to_linear(lua_State* L) {
pa_volume_t value = luaL_checkinteger(L, 1);
lua_pushnumber(L, pa_sw_volume_to_linear(value));
return 1;
}

View file

@ -55,7 +55,6 @@ int volume__newindex(lua_State*);
*/
int volume_new(lua_State*);
/** Checks whether a value is a valid @{Volume}.
*
* @function is_valid
@ -64,6 +63,53 @@ int volume_new(lua_State*);
*/
int volume_is_valid(lua_State*);
/** Converts a decibel value to an integer volume value.
*
* This is only valid for software volumes. It does not operate
* on instances of @{Volume}.
*
* @function from_dB
* @tparam number value
* @treturn number
*/
int volume_from_dB(lua_State*);
/** Converts an integer volume value to a decibel value.
*
* This is only valid for software volumes. It does not operate
* on instances of @{Volume}.
*
* @function to_dB
* @tparam number value
* @treturn number
*/
int volume_to_dB(lua_State*);
/** Converts a linear factor to an integer volume value.
*
* `0.0` and less is muted, `1.0` is normal volume.
*
* This is only valid for software volumes. It does not operate
* on instances of @{Volume}.
*
* @function from_linear
* @tparam number value
* @treturn number
*/
int volume_from_linear(lua_State*);
/** Converts an integer volume value to linear factor.
*
* This is only valid for software volumes. It does not operate
* on instances of @{Volume}.
*
* @function to_linear
* @tparam number value
* @treturn number
*/
int volume_to_linear(lua_State*);
/// Volume
/// @type Volume
@ -237,7 +283,11 @@ static const struct luaL_Reg volume_mt[] = {
static const struct luaL_Reg volume_lib[] = {
{"new", volume_new },
{ "is_valid", volume_is_valid},
{ "from_dB", volume_from_dB },
{ "to_dB", volume_to_dB },
{ "from_linear", volume_from_linear},
{ "to_linear", volume_to_linear },
{ "is_valid", volume_is_valid },
{ NULL, NULL }
};