From 8c3b9a5f215d95d8fe7544d87ec4c49d93941fb9 Mon Sep 17 00:00:00 2001 From: Jarcode Date: Sun, 5 Aug 2018 17:38:59 -0700 Subject: [PATCH] Added audio buffer mirroring, closes #53 --- glava.c | 2 +- glx_wcb.c | 2 +- pulse_input.c | 6 +++++- render.c | 5 +++++ render.h | 2 +- shaders/rc.glsl | 3 +++ 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/glava.c b/glava.c index 7e18b84..059c20b 100644 --- a/glava.c +++ b/glava.c @@ -244,7 +244,7 @@ int main(int argc, char** argv) { .rate = (unsigned int) r->rate_request, .format = -1, .terminate = 0, - .channels = 2, + .channels = r->mirror_input ? 1 : 2, .audio_out_r = b0, .audio_out_l = b1, .mutex = PTHREAD_MUTEX_INITIALIZER, diff --git a/glx_wcb.c b/glx_wcb.c index 65be661..7206131 100644 --- a/glx_wcb.c +++ b/glx_wcb.c @@ -299,7 +299,7 @@ static void* create_and_bind(const char* name, const char* class, XFree(xvi); } } - + if (best == -1) { fprintf(stderr, "Could not find suitable format for FBConfig\n"); abort(); diff --git a/pulse_input.c b/pulse_input.c index 8ec2038..dacf98f 100644 --- a/pulse_input.c +++ b/pulse_input.c @@ -168,7 +168,11 @@ void* input_pulse(void* data) { int idx = (fsz - (ssz / 4)) + n; - if (audio->channels == 1) bl[idx] = (buf[i] + buf[i + 1]) / 2; + if (audio->channels == 1) { + float sample = (buf[i] + buf[i + 1]) / 2; + bl[idx] = sample; + br[idx] = sample; + } /* stereo storing channels in buffer */ if (audio->channels == 2) { diff --git a/render.c b/render.c index c22a4e3..b3342fc 100644 --- a/render.c +++ b/render.c @@ -685,6 +685,7 @@ struct renderer* rd_new(const char** paths, const char* entry, renderer* r = malloc(sizeof(struct renderer)); *r = (struct renderer) { .alive = true, + .mirror_input = false, .gl = malloc(sizeof(struct gl_data)), .bufsize_request = 8192, .rate_request = 22000, @@ -816,6 +817,10 @@ struct renderer* rd_new(const char** paths, const char* entry, } }) }, + { + .name = "setmirror", .fmt = "b", + .handler = RHANDLER(name, args, { r->mirror_input = *(bool*) args[0]; }) + }, { .name = "setbg", .fmt = "s", .handler = RHANDLER(name, args, { diff --git a/render.h b/render.h index 14e70ba..55d3f58 100644 --- a/render.h +++ b/render.h @@ -5,7 +5,7 @@ struct gl_data; typedef struct renderer { - bool alive; + bool alive, mirror_input; size_t bufsize_request, rate_request, samplesize_request; char* audio_source_request; struct gl_data* gl; diff --git a/shaders/rc.glsl b/shaders/rc.glsl index dfc792c..7c70eb3 100644 --- a/shaders/rc.glsl +++ b/shaders/rc.glsl @@ -41,6 +41,9 @@ "none" - Disable window opacity completely. */ #request setopacity "native" +/* Whether to mirror left and right audio input channels from PulseAudio.*/ +#request setmirror true + /* OpenGL context and GLSL shader versions, do not change unless you *absolutely* know what you are doing. */ #request setversion 3 3