summaryrefslogtreecommitdiff
path: root/plugins/gtkui
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-29 20:42:59 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-29 20:42:59 +0100
commit048fe67bef9965cb40712208e51f7f00df4e3b29 (patch)
tree994ac761fc9870ea018f551b0c5ac7433ba3c256 /plugins/gtkui
parentd5bad39e15fae6770a84787823c56d066cee614a (diff)
vis api WIP
Diffstat (limited to 'plugins/gtkui')
-rw-r--r--plugins/gtkui/widgets.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
index e42601b6..5132689c 100644
--- a/plugins/gtkui/widgets.c
+++ b/plugins/gtkui/widgets.c
@@ -37,6 +37,7 @@
#include "namedicons.h"
#include "hotkeys.h" // for building action treeview
#include "../../strdupa.h"
+#include "../../optmath.h"
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
@@ -2264,16 +2265,16 @@ scope_wavedata_listener (void *ctx, ddb_waveformat_t *fmt, const float *data, in
w_scope_t *w = ctx;
if (w->samples) {
// append
- float ratio = (44100.f / fmt->samplerate);
- int size = in_samples * ratio;
+ float ratio = fmt->samplerate / 44100.f;
+ int size = in_samples / ratio;
int sz = min (w->nsamples, size);
int n = w->nsamples-sz;
memmove (w->samples, w->samples + sz, n * sizeof (float));
float pos = 0;
- for (int i = 0; i < sz && pos < in_samples; i++, pos += 1./ratio) {
- w->samples[n + i] = data[(int)(pos * fmt->channels)];
+ for (int i = 0; i < sz && pos < in_samples; i++, pos += ratio) {
+ w->samples[n + i] = data[ftoi(pos * fmt->channels)];
}
}
}
@@ -2285,16 +2286,12 @@ scope_draw_cairo (GtkWidget *widget, cairo_t *cr, gpointer user_data) {
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_rectangle (cr, 0, 0, a.width, a.height);
cairo_fill (cr);
- cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
- cairo_set_line_width (cr, 1);
- cairo_set_source_rgb (cr, 1, 1, 1);
w_scope_t *w = user_data;
float spp = 1;
int nsamples = a.width / spp;
if (w->nsamples != nsamples) {
- printf ("init\n");
float *oldsamples = w->samples;
int oldnsamples = w->nsamples;
w->samples = NULL;
@@ -2313,21 +2310,15 @@ scope_draw_cairo (GtkWidget *widget, cairo_t *cr, gpointer user_data) {
}
}
-
+ cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_set_line_width (cr, 1);
+ cairo_move_to (cr, 0, ftoi(w->samples[0] * a.height/2 + a.height/2));
float incr = a.width / (float)w->nsamples;
- for (int i = 0; i < w->nsamples; i++) {
- float s = w->samples[i];
- cairo_line_to (cr, i, s * a.height/2 + a.height/2);
+ for (int i = 1; i < w->nsamples; i += 2) {
+ float y = w->samples[i] * a.height/2 + a.height/2;
+ cairo_line_to (cr, i, y);
}
-
-#if 0
- float incr = a.width / (float)DDB_AUDIO_MEMORY_FRAMES;
- float pos = 0;
- for (float x = 0; x < a.width && pos < DDB_AUDIO_MEMORY_FRAMES; x += incr, pos ++) {
- float s = data[(int)pos];
- cairo_line_to (cr, x, s * a.height/2 + a.height/2);
- }
-#endif
cairo_stroke (cr);
return FALSE;