Skip to content

Commit a7a8306

Browse files
committed
hide internal data format
1 parent 47875bb commit a7a8306

File tree

6 files changed

+39
-19
lines changed

6 files changed

+39
-19
lines changed

alsa.c

+15-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ static snd_pcm_hw_params_t *par;
3131
static int16_t *buffer;
3232
static unsigned int samples;
3333

34+
struct data {
35+
int16_t left;
36+
int16_t right;
37+
};
38+
3439
int
3540
init_sio(void)
3641
{
@@ -76,10 +81,12 @@ max_samples_sio(void)
7681
return samples;
7782
}
7883

79-
int16_t *
80-
read_sio(size_t n)
84+
void
85+
read_sio(double *left, double *right, size_t n)
8186
{
8287
snd_pcm_sframes_t rc;
88+
struct data *data;
89+
int i;
8390

8491
if (n > samples)
8592
n = samples;
@@ -91,7 +98,12 @@ read_sio(size_t n)
9198
snd_pcm_prepare(hdl);
9299
}
93100

94-
return buffer + samples - n;
101+
data = (struct data *)&buffer[samples - n];
102+
103+
for (i = 0; i < n; i++) {
104+
left[i] = data[i].left;
105+
right[i] = data[i].right;
106+
}
95107
}
96108

97109
void

fft.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,17 @@ init_fft(size_t n)
8484
}
8585

8686
int
87-
exec_fft(int16_t *data, double *out, enum fft_chan chan)
87+
exec_fft(double *io)
8888
{
8989
int i;
9090

9191
for (i = 0; i < fft.n; i++)
92-
fft.in[i] = fft.window[i] * data[2 * i + chan];
92+
fft.in[i] = fft.window[i] * io[i];
9393

9494
fftw_execute(fft.plan);
9595

9696
for (i = 0; i < fft.n / 2; i++)
97-
out[i] = fft.sq[i] * cabs(fft.out[i]);
97+
io[i] = fft.sq[i] * cabs(fft.out[i]);
9898

9999
return 0;
100100
}

fft.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818
#ifndef __FFT_H
1919
#define __FFT_H
2020

21-
enum fft_chan { FFT_LEFT, FFT_RIGHT };
22-
2321
__BEGIN_DECLS
2422
int init_fft(size_t);
25-
int exec_fft(int16_t *, double *, enum fft_chan);
23+
int exec_fft(double *);
2624
void free_fft(void);
2725
__END_DECLS
2826

sio.c

+15-4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ static struct sio_par par;
3232
static int16_t *buffer;
3333
static unsigned int samples;
3434

35+
struct data {
36+
int16_t left;
37+
int16_t right;
38+
};
39+
3540
int
3641
init_sio(void)
3742
{
@@ -78,13 +83,14 @@ max_samples_sio(void)
7883
return samples;
7984
}
8085

81-
int16_t *
82-
read_sio(size_t n)
86+
void
87+
read_sio(double *left, double *right, size_t n)
8388
{
84-
int done;
89+
int done, i;
8590
char *p = (char *)buffer;
8691
size_t bufsz = samples * par.rchan * sizeof(int16_t);
8792
size_t rndsz = n * par.rchan * sizeof(int16_t);
93+
struct data *data;
8894

8995
if (rndsz > bufsz)
9096
rndsz = bufsz;
@@ -99,7 +105,12 @@ read_sio(size_t n)
99105
* return a pointer to the latest ROUND samples (the most recent
100106
* ones) to minimize latency between picture and sound
101107
*/
102-
return (int16_t *)(p - rndsz);
108+
data = (struct data *)(p - rndsz);
109+
110+
for (i = 0; i < n; i++) {
111+
left[i] = data[i].left;
112+
right[i] = data[i].right;
113+
}
103114
}
104115

105116
void

sio.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
__BEGIN_DECLS
2222
int init_sio(void);
23-
int16_t *read_sio(size_t);
23+
void read_sio(double *, double *, size_t);
2424
unsigned int max_samples_sio(void);
2525
void free_sio(void);
2626
__END_DECLS

spectrogram.c

+4-5
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ init_panel(Display *d, Window win, XRectangle r, enum mirror m)
303303
p = malloc(sizeof(struct panel));
304304
assert(p);
305305

306-
p->data = calloc(r.width, sizeof(double));
306+
p->data = calloc(2 * r.width, sizeof(double));
307307
assert(p->data);
308308

309309
/* main panel window */
@@ -449,7 +449,6 @@ main(int argc, char **argv)
449449
int scr;
450450

451451
struct panel *left, *right;
452-
int16_t *buffer;
453452

454453
int dflag = 0; /* daemonize */
455454
int fflag = 0; /* fullscreen */
@@ -607,10 +606,10 @@ main(int argc, char **argv)
607606
}
608607
}
609608

610-
buffer = read_sio(round);
609+
read_sio(left->data, right->data, round);
611610

612-
exec_fft(buffer, left->data, FFT_LEFT);
613-
exec_fft(buffer, right->data, FFT_RIGHT);
611+
exec_fft(left->data);
612+
exec_fft(right->data);
614613

615614
draw_panel(dsp, left);
616615
draw_panel(dsp, right);

0 commit comments

Comments
 (0)