73 lines
1.4 KiB
C
73 lines
1.4 KiB
C
#ifndef _PULSEFFT_H
|
|
#define _PULSEFFT_H
|
|
|
|
#include <complex.h>
|
|
#include <errno.h>
|
|
#include <pthread.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <tgmath.h>
|
|
#include <unistd.h>
|
|
|
|
#include <pulse/error.h>
|
|
#include <pulse/pulseaudio.h>
|
|
#include <pulse/simple.h>
|
|
|
|
#include <fftw3.h>
|
|
|
|
typedef struct pa_fft {
|
|
pthread_t thread;
|
|
int cont;
|
|
|
|
// Pulseaudio
|
|
pa_simple *s;
|
|
char *dev;
|
|
unsigned int rate;
|
|
int error;
|
|
pa_sample_spec ss;
|
|
pa_channel_map map;
|
|
|
|
// Buffers
|
|
unsigned int samples;
|
|
|
|
double *pa_buff_l;
|
|
double *pa_buff_r;
|
|
size_t pa_buff_size;
|
|
unsigned int pa_samples;
|
|
|
|
double *fft_buff;
|
|
double *fft_buff_l;
|
|
double *fft_buff_r;
|
|
size_t fft_buff_size;
|
|
unsigned int fft_samples;
|
|
|
|
// Output buffers
|
|
float *pa_output;
|
|
size_t pa_output_size;
|
|
|
|
float *fft_output;
|
|
size_t fft_output_size;
|
|
|
|
// FFTW
|
|
fftw_complex *output_l;
|
|
fftw_complex *output_r;
|
|
size_t output_size;
|
|
unsigned int output_samples;
|
|
fftw_plan plan_l;
|
|
fftw_plan plan_r;
|
|
} pa_fft;
|
|
|
|
void separate_freq_bands(double *out, fftw_complex *in, int n, int *lcf,
|
|
int *hcf, float *k, double sensitivity,
|
|
int in_samples);
|
|
void *pa_fft_thread(void *arg);
|
|
void get_pulse_default_sink(pa_fft *pa_fft);
|
|
void init_pulse(pa_fft *pa_fft);
|
|
void init_buffers(pa_fft *pa_fft);
|
|
void init_fft(pa_fft *pa_fft);
|
|
void deinit_fft(pa_fft *pa_fft);
|
|
|
|
#endif // _PULSEFFT_H
|