static void the_fftscope(void) { guchar *loc; guchar bits [256 * 129]; int i, h; running = 1; while (running) { guint val; gint j; gint k; memset(bits, 0, 256 * 128); for (i=0; i < BARS; i++) { val = 0; for (j = xranges[i]; j < xranges[i + 1]; j++) { /* k = (guint)(sqrt(fftout[j]) * fftmult); */ k = (fft_buf[j] + fft_buf[256+j]) / 256; val += k; } if(val > 127) val = 127; if (val > (guint)maxbar[ i ]) maxbar[ i ] = val; else { k = maxbar[ i ] - (4 + (8 / (128 - maxbar[ i ]))); val = k > 0 ? k : 0; maxbar[ i ] = val; } loc = bits + 256 * 128; for (h = val; h > 0; h--) { for (j = (256 / BARS) * i + 0; j < (256 / BARS) * i + ((256 / BARS) - 1); j++) { *(loc + j) = val-h; } loc -=256; } } GDK_THREADS_ENTER(); gdk_draw_indexed_image(area->window, area->style->white_gc, 0,0,256,128, GDK_RGB_DITHER_NONE, bits, 256, color_map); gdk_flush(); GDK_THREADS_LEAVE(); dosleep(SCOPE_SLEEP); } GDK_THREADS_ENTER(); fftscope_hide(); GDK_THREADS_LEAVE(); }
/* The actual FFTscope renderer function. */ static void the_fftscope() { guint8 *loc; guint8 bits[256 * 129]; int i, h; running = 1; while (running) { int w; guint val; memset(bits, 128, 256 * SCOPE_HEIGHT); for (i = 0; i < 256; i++) { val = (act_fft[i] + act_fft[i + 256]) / (64 * (128 / SCOPE_HEIGHT)); if (val > (SCOPE_HEIGHT-1)) { val = (SCOPE_HEIGHT-1); } loc = bits + i + 256 * (SCOPE_HEIGHT-1); for (h = val; h > 0; h--) { *loc = h; loc -= 256; } } GDK_THREADS_ENTER(); gdk_draw_indexed_image(area->window, area->style->white_gc, 0, 0, 256, SCOPE_HEIGHT, GDK_RGB_DITHER_NONE, bits, 256, color_map); gdk_flush(); GDK_THREADS_LEAVE(); dosleep(SCOPE_SLEEP); } GDK_THREADS_ENTER(); fftscope_hide(); GDK_THREADS_LEAVE(); }