summaryrefslogtreecommitdiff
path: root/volume.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2009-08-20 20:46:48 +0200
committerGravatar waker <wakeroid@gmail.com>2009-08-20 20:46:48 +0200
commit429f0b3d8b051fd992166fcfcd4a38e9aa763833 (patch)
tree8fbb96fdcf91c0c698149d1b11d27025a5d9ab58 /volume.c
parent158b462b06d4e39d4e126a09e5404ec24d496f24 (diff)
fixed volume control
Diffstat (limited to 'volume.c')
-rw-r--r--volume.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/volume.c b/volume.c
new file mode 100644
index 00000000..85a9a125
--- /dev/null
+++ b/volume.c
@@ -0,0 +1,57 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009 Alexey Yakovenko
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+#include <math.h>
+#include <stdio.h>
+#include "volume.h"
+
+static float volume_db = 0; // in dB
+static float volume_amp = 1; // amplitude [0..1]
+
+void
+volume_set_db (float dB) {
+ volume_db = dB;
+ volume_amp = dB > -60 ? db_to_amp (dB) : 0;
+}
+
+float
+volume_get_db (void) {
+ return volume_db;
+}
+
+void
+volume_set_amp (float amp) {
+ volume_amp = amp;
+ volume_db = amp > 0 ? amp_to_db (amp) : -60.f;
+}
+
+float
+volume_get_amp (void) {
+ return volume_amp;
+}
+
+float
+db_to_amp (float dB) {
+ return pow (10, dB/20.f);
+}
+
+float
+amp_to_db (float amp) {
+ return 20*log10 (amp);
+}
+