From 2aa4a9308df8f90a55d30c10f02f1cce044875b3 Mon Sep 17 00:00:00 2001 From: Quantum Date: Fri, 20 Dec 2019 19:14:33 -0500 Subject: [PATCH] Split input modules into separate object files --- Makefile.am | 3 +- cava.c | 25 ++-------------- input/alsa.c | 10 +++++++ input/alsa.h | 2 ++ input/common.c | 43 ++++++++++++++++++++++++++++ input/common.h | 29 +++++++++++++++++++ input/fifo.c | 73 ++++------------------------------------------- input/fifo.h | 4 ++- input/portaudio.c | 9 ++++-- input/portaudio.h | 2 ++ input/pulse.c | 9 ++++++ input/pulse.h | 2 ++ input/shmem.c | 10 +++++-- input/shmem.h | 5 ++++ input/sndio.c | 6 ++++ input/sndio.h | 5 ++++ 16 files changed, 142 insertions(+), 95 deletions(-) create mode 100644 input/common.c create mode 100644 input/common.h create mode 100644 input/shmem.h create mode 100644 input/sndio.h diff --git a/Makefile.am b/Makefile.am index 2c42d10..2b48369 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,7 +9,8 @@ ACLOCAL_AMFLAGS = -I m4 M_CPPFLAGS = -DSYSTEM_LIBINIPARSER=@SYSTEM_LIBINIPARSER@ bin_PROGRAMS = cava -cava_SOURCES = cava.c +cava_SOURCES = cava.c input/common.c input/alsa.c input/fifo.c input/portaudio.c input/pulse.c \ + input/sndio.c input/shmem.c cava_LDFLAGS = -L/usr/local/lib -Wl,-rpath /usr/local/lib cava_CPPFLAGS = -DPACKAGE=\"$(PACKAGE)\" -DVERSION=\"$(VERSION)\" \ -D_POSIX_SOURCE -D _POSIX_C_SOURCE=200809L diff --git a/cava.c b/cava.c index 060207a..97542d6 100644 --- a/cava.c +++ b/cava.c @@ -50,32 +50,13 @@ #include "output/raw.h" #include "output/raw.c" +#include "input/common.h" #include "input/fifo.h" -#include "input/fifo.c" - -#ifdef ALSA -#include #include "input/alsa.h" -#include "input/alsa.c" -#endif - -#ifdef PORTAUDIO #include "input/portaudio.h" -#include "input/portaudio.c" -#endif - -#ifdef PULSE #include "input/pulse.h" -#include "input/pulse.c" -#endif - -#ifdef SNDIO -#include "input/sndio.c" -#endif - -#ifdef SHMEM -#include "input/shmem.c" -#endif +#include "input/shmem.h" +#include "input/sndio.h" #include diff --git a/input/alsa.c b/input/alsa.c index ebf3434..4a5ba63 100644 --- a/input/alsa.c +++ b/input/alsa.c @@ -1,4 +1,12 @@ // input: ALSA +#ifdef ALSA + +#include "input/alsa.h" +#include "debug.h" +#include "input/common.h" + +#include +#include // assuming stereo #define CHANNELS_COUNT 2 @@ -156,3 +164,5 @@ void *input_alsa(void *data) { snd_pcm_close(handle); return NULL; } + +#endif // ALSA diff --git a/input/alsa.h b/input/alsa.h index 9daf87d..daa2f58 100644 --- a/input/alsa.h +++ b/input/alsa.h @@ -1,3 +1,5 @@ // header file for alsa, part of cava. +#pragma once + void *input_alsa(void *data); diff --git a/input/common.c b/input/common.c new file mode 100644 index 0000000..10f3221 --- /dev/null +++ b/input/common.c @@ -0,0 +1,43 @@ +#include "input/common.h" + +int write_to_fftw_input_buffers(int16_t buf[], int16_t frames, void *data) { + struct audio_data *audio = (struct audio_data *)data; + + for (uint16_t i = 0; i < frames * 2; i += 2) { + if (audio->channels == 1) { + if (audio->average) { + audio->audio_out_bass_l[audio->bass_index] = (buf[i] + buf[i + 1]) / 2; + } + if (audio->left) { + audio->audio_out_bass_l[audio->bass_index] = buf[i]; + } + if (audio->right) { + audio->audio_out_bass_l[audio->bass_index] = buf[i + 1]; + } + } + // stereo storing channels in buffer + if (audio->channels == 2) { + audio->audio_out_bass_l[audio->bass_index] = buf[i]; + audio->audio_out_bass_r[audio->bass_index] = buf[i + 1]; + + audio->audio_out_mid_r[audio->mid_index] = audio->audio_out_bass_r[audio->bass_index]; + audio->audio_out_treble_r[audio->treble_index] = + audio->audio_out_bass_r[audio->bass_index]; + } + + audio->audio_out_mid_l[audio->mid_index] = audio->audio_out_bass_l[audio->bass_index]; + audio->audio_out_treble_l[audio->treble_index] = audio->audio_out_bass_l[audio->bass_index]; + + audio->bass_index++; + audio->mid_index++; + audio->treble_index++; + if (audio->bass_index == audio->FFTbassbufferSize - 1) + audio->bass_index = 0; + if (audio->mid_index == audio->FFTmidbufferSize - 1) + audio->mid_index = 0; + if (audio->treble_index == audio->FFTtreblebufferSize - 1) + audio->treble_index = 0; + } + + return 0; +} diff --git a/input/common.h b/input/common.h new file mode 100644 index 0000000..1aa0257 --- /dev/null +++ b/input/common.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +struct audio_data { + int FFTbassbufferSize; + int FFTmidbufferSize; + int FFTtreblebufferSize; + int bass_index; + int mid_index; + int treble_index; + int16_t audio_out_bass_r[65536]; + int16_t audio_out_bass_l[65536]; + int16_t audio_out_mid_r[65536]; + int16_t audio_out_mid_l[65536]; + int16_t audio_out_treble_r[65536]; + int16_t audio_out_treble_l[65536]; + int format; + unsigned int rate; + char *source; // alsa device, fifo path or pulse source + int im; // input mode alsa, fifo or pulse + int channels; + bool left, right, average; + int terminate; // shared variable used to terminate audio thread + char error_message[1024]; +}; + +int write_to_fftw_input_buffers(int16_t buf[], int16_t frames, void *data); diff --git a/input/fifo.c b/input/fifo.c index c4bb225..aea3c2e 100644 --- a/input/fifo.c +++ b/input/fifo.c @@ -1,75 +1,14 @@ +#include "input/fifo.h" +#include "input/common.h" + +#include +#include #include + #define BUFSIZE 1024 #define MAX_FFTBUFERSIZE int rc; -struct audio_data { - - int FFTbassbufferSize; - int FFTmidbufferSize; - int FFTtreblebufferSize; - int bass_index; - int mid_index; - int treble_index; - int16_t audio_out_bass_r[65536]; - int16_t audio_out_bass_l[65536]; - int16_t audio_out_mid_r[65536]; - int16_t audio_out_mid_l[65536]; - int16_t audio_out_treble_r[65536]; - int16_t audio_out_treble_l[65536]; - int format; - unsigned int rate; - char *source; // alsa device, fifo path or pulse source - int im; // input mode alsa, fifo or pulse - int channels; - bool left, right, average; - int terminate; // shared variable used to terminate audio thread - char error_message[1024]; -}; - -int write_to_fftw_input_buffers(int16_t buf[], int16_t frames, void *data) { - - struct audio_data *audio = (struct audio_data *)data; - - for (uint16_t i = 0; i < frames * 2; i += 2) { - if (audio->channels == 1) { - if (audio->average) { - audio->audio_out_bass_l[audio->bass_index] = (buf[i] + buf[i + 1]) / 2; - } - if (audio->left) { - audio->audio_out_bass_l[audio->bass_index] = buf[i]; - } - if (audio->right) { - audio->audio_out_bass_l[audio->bass_index] = buf[i + 1]; - } - } - // stereo storing channels in buffer - if (audio->channels == 2) { - audio->audio_out_bass_l[audio->bass_index] = buf[i]; - audio->audio_out_bass_r[audio->bass_index] = buf[i + 1]; - - audio->audio_out_mid_r[audio->mid_index] = audio->audio_out_bass_r[audio->bass_index]; - audio->audio_out_treble_r[audio->treble_index] = - audio->audio_out_bass_r[audio->bass_index]; - } - - audio->audio_out_mid_l[audio->mid_index] = audio->audio_out_bass_l[audio->bass_index]; - audio->audio_out_treble_l[audio->treble_index] = audio->audio_out_bass_l[audio->bass_index]; - - audio->bass_index++; - audio->mid_index++; - audio->treble_index++; - if (audio->bass_index == audio->FFTbassbufferSize - 1) - audio->bass_index = 0; - if (audio->mid_index == audio->FFTmidbufferSize - 1) - audio->mid_index = 0; - if (audio->treble_index == audio->FFTtreblebufferSize - 1) - audio->treble_index = 0; - } - - return 0; -} - int open_fifo(const char *path) { int fd = open(path, O_RDONLY); int flags = fcntl(fd, F_GETFL, 0); diff --git a/input/fifo.h b/input/fifo.h index 8afb382..52b6ba6 100644 --- a/input/fifo.h +++ b/input/fifo.h @@ -1,3 +1,5 @@ // header files for fifo, part of cava + +#pragma once + void *input_fifo(void *data); -int write_to_fftw_input_buffers(int16_t buf[], int16_t frames, void *data); diff --git a/input/portaudio.c b/input/portaudio.c index abaeef8..738663d 100644 --- a/input/portaudio.c +++ b/input/portaudio.c @@ -1,5 +1,8 @@ -#include "portaudio.h" -#include "fifo.h" +#ifdef PORTAUDIO + +#include "input/portaudio.h" +#include "input/common.h" + #include #include #include @@ -204,3 +207,5 @@ void *input_portaudio(void *audiodata) { portaudio_simple_free(data); return 0; } + +#endif // PORTAUDIO diff --git a/input/portaudio.h b/input/portaudio.h index 3e21a7d..1953e7f 100644 --- a/input/portaudio.h +++ b/input/portaudio.h @@ -1 +1,3 @@ +#pragma once + void *input_portaudio(void *audiodata); diff --git a/input/pulse.c b/input/pulse.c index ae87ab7..0decdd1 100644 --- a/input/pulse.c +++ b/input/pulse.c @@ -1,10 +1,17 @@ +#ifdef PULSE + +#include "input/pulse.h" +#include "input/common.h" + #include +#include #include #include #include #include #include #include + #define BUFFERSIZE 4096 pa_mainloop *m_pulseaudio_mainloop; @@ -140,3 +147,5 @@ void *input_pulse(void *data) { pa_simple_free(s); return 0; } + +#endif // PULSE diff --git a/input/pulse.h b/input/pulse.h index 5a16157..155da47 100644 --- a/input/pulse.h +++ b/input/pulse.h @@ -1,4 +1,6 @@ // header file for pulse, part of cava. +#pragma once + void *input_pulse(void *data); void getPulseDefaultSink(); diff --git a/input/shmem.c b/input/shmem.c index b3aaeb8..8c30999 100644 --- a/input/shmem.c +++ b/input/shmem.c @@ -1,6 +1,12 @@ +#ifdef SHMEM + +#include "input/shmem.h" +#include "input/common.h" + #include #include #include +#include #include #include @@ -36,8 +42,6 @@ void *input_shmem(void *data) { vis_t *mmap_area; int fd; /* file descriptor to mmaped area */ int mmap_count = sizeof(vis_t); - int n = 0; - int i; printf("input_shmem: source: %s", audio->source); @@ -86,3 +90,5 @@ void *input_shmem(void *data) { } return 0; } + +#endif // SHMEM diff --git a/input/shmem.h b/input/shmem.h new file mode 100644 index 0000000..d02da8d --- /dev/null +++ b/input/shmem.h @@ -0,0 +1,5 @@ +// header file for shmem, part of cava. + +#pragma once + +void *input_shmem(void *data); diff --git a/input/sndio.c b/input/sndio.c index 7da4d9b..f0c89ba 100644 --- a/input/sndio.c +++ b/input/sndio.c @@ -1,3 +1,7 @@ +#ifdef SNDIO + +#include "input/sndio.h" + #include #include #include @@ -62,3 +66,5 @@ void *input_sndio(void *data) { return 0; } + +#endif // SNDIO \ No newline at end of file diff --git a/input/sndio.h b/input/sndio.h new file mode 100644 index 0000000..61801a5 --- /dev/null +++ b/input/sndio.h @@ -0,0 +1,5 @@ +// header file for sndio, part of cava. + +#pragma once + +void *input_sndio(void *data);