Introduction
Introduction Statistics Contact Development Disclaimer Help
tImplement mix plugin for Linux using ALSA sound lib - spoon - dwm status utili…
git clone git://src.adamsgaard.dk/spoon
Log
Files
Refs
LICENSE
---
commit e7e3765e0a51f677db1df6bb6ffb11a02a2b955c
parent 98607302965b349b4ef377b31627dad69e3a1fe9
Author: sin <[email protected]>
Date: Thu, 3 Nov 2016 15:42:07 +0000
Implement mix plugin for Linux using ALSA sound lib
Diffstat:
M Makefile | 6 +++++-
M mix.c | 47 +++++++++++++++++++++++++++++…
2 files changed, 52 insertions(+), 1 deletion(-)
---
diff --git a/Makefile b/Makefile
t@@ -11,14 +11,18 @@ include config.mk
CPPFLAGS_OpenBSD = -I/usr/X11R6/include -I/usr/local/include
LDFLAGS_OpenBSD = -L/usr/X11R6/lib -L/usr/local/lib
+LDLIBS_OpenBSD = -lX11
CPPFLAGS_Linux =\
+ -I/usr/local/include\
-DPATH_BAT_CAP=\"/sys/class/power_supply/BAT0/capacity\"\
-DPATH_AC_ONLINE=\"/sys/class/power_supply/AC/online\"\
-DPATH_TEMP=\"/sys/class/hwmon/hwmon0/temp1_input\"\
-DPATH_CPU_FREQ=\"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq\"
+LDFLAGS_Linux = -L/usr/local/lib
+LDLIBS_Linux = -lX11 -lasound
CPPFLAGS = $(CPPFLAGS_$(UNAME))
LDFLAGS = $(LDFLAGS_$(UNAME))
-LDLIBS = -lX11
+LDLIBS = $(LDLIBS_$(UNAME))
# To remove extra compile time dependencies for unwanted plugins
# comment out the following sections. The stub implementations
diff --git a/mix.c b/mix.c
t@@ -63,4 +63,51 @@ out:
close(fd);
return ret;
}
+#elif __linux__
+#include <alsa/asoundlib.h>
+
+int
+mixread(void *arg, char *buf, size_t len)
+{
+ snd_mixer_t *mixerhdl;
+ snd_mixer_elem_t *elem;
+ snd_mixer_selem_id_t *sid;
+ long min, max;
+ long vol;
+
+ if (snd_mixer_open(&mixerhdl, 0) < 0) {
+ warnx("snd_mixer_open: failed");
+ return -1;
+ }
+ if (snd_mixer_attach(mixerhdl, "default") < 0) {
+ warnx("snd_mixer_attach: failed");
+ goto err0;
+ }
+ if (snd_mixer_selem_register(mixerhdl, NULL, NULL) < 0) {
+ warnx("snd_mixer_selem_register: failed");
+ goto err0;
+ }
+ if (snd_mixer_load(mixerhdl) < 0) {
+ warnx("snd_mixer_load: failed");
+ goto err0;
+ }
+ snd_mixer_selem_id_alloca(&sid);
+ snd_mixer_selem_id_set_name(sid, "Master");
+ elem = snd_mixer_find_selem(mixerhdl, sid);
+ if (elem == NULL) {
+ warnx("snd_mixer_find_selem: failed");
+ goto err0;
+ }
+ snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
+ snd_mixer_selem_get_playback_volume(elem, 0, &vol);
+ snd_mixer_close(mixerhdl);
+ if (max == 0)
+ snprintf(buf, len, "0%%");
+ else
+ snprintf(buf, len, "%ld%%", vol * 100 / max);
+ return 0;
+err0:
+ snd_mixer_close(mixerhdl);
+ return -1;
+}
#endif
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.