Split input modules into separate object files

master
Quantum 6 years ago
parent 456bfc0919
commit 2aa4a9308d
  1. 3
      Makefile.am
  2. 25
      cava.c
  3. 10
      input/alsa.c
  4. 2
      input/alsa.h
  5. 43
      input/common.c
  6. 29
      input/common.h
  7. 73
      input/fifo.c
  8. 4
      input/fifo.h
  9. 9
      input/portaudio.c
  10. 2
      input/portaudio.h
  11. 9
      input/pulse.c
  12. 2
      input/pulse.h
  13. 10
      input/shmem.c
  14. 5
      input/shmem.h
  15. 6
      input/sndio.c
  16. 5
      input/sndio.h

@ -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

@ -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 <alsa/asoundlib.h>
#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 <iniparser.h>

@ -1,4 +1,12 @@
// input: ALSA
#ifdef ALSA
#include "input/alsa.h"
#include "debug.h"
#include "input/common.h"
#include <alsa/asoundlib.h>
#include <math.h>
// assuming stereo
#define CHANNELS_COUNT 2
@ -156,3 +164,5 @@ void *input_alsa(void *data) {
snd_pcm_close(handle);
return NULL;
}
#endif // ALSA

@ -1,3 +1,5 @@
// header file for alsa, part of cava.
#pragma once
void *input_alsa(void *data);

@ -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;
}

@ -0,0 +1,29 @@
#pragma once
#include <inttypes.h>
#include <stdbool.h>
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);

@ -1,75 +1,14 @@
#include "input/fifo.h"
#include "input/common.h"
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#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);

@ -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);

@ -1,5 +1,8 @@
#include "portaudio.h"
#include "fifo.h"
#ifdef PORTAUDIO
#include "input/portaudio.h"
#include "input/common.h"
#include <portaudio.h>
#include <stdio.h>
#include <stdlib.h>
@ -204,3 +207,5 @@ void *input_portaudio(void *audiodata) {
portaudio_simple_free(data);
return 0;
}
#endif // PORTAUDIO

@ -1 +1,3 @@
#pragma once
void *input_portaudio(void *audiodata);

@ -1,10 +1,17 @@
#ifdef PULSE
#include "input/pulse.h"
#include "input/common.h"
#include <errno.h>
#include <pthread.h>
#include <pulse/error.h>
#include <pulse/pulseaudio.h>
#include <pulse/simple.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#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

@ -1,4 +1,6 @@
// header file for pulse, part of cava.
#pragma once
void *input_pulse(void *data);
void getPulseDefaultSink();

@ -1,6 +1,12 @@
#ifdef SHMEM
#include "input/shmem.h"
#include "input/common.h"
#include <fcntl.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@ -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

@ -0,0 +1,5 @@
// header file for shmem, part of cava.
#pragma once
void *input_shmem(void *data);

@ -1,3 +1,7 @@
#ifdef SNDIO
#include "input/sndio.h"
#include <assert.h>
#include <errno.h>
#include <sndio.h>
@ -62,3 +66,5 @@ void *input_sndio(void *data) {
return 0;
}
#endif // SNDIO

@ -0,0 +1,5 @@
// header file for sndio, part of cava.
#pragma once
void *input_sndio(void *data);
Loading…
Cancel
Save