void effect_init() { echo_init(&effect.echo); stereo_init(&effect.stereo); voice_init(&effect.voice); normal_init(&effect.normal); eq_init(&effect.eq); }
int main(int argc, char **argv) { struct sigaction sigact; char *filename = NULL; int r, opt; int i, gain = AUTO_GAIN; /* tenths of a dB */ int dev_index = 0; int dev_given = 0; int ppm_error = 0; int custom_ppm = 0; int left_freq = 161975000; int right_freq = 162025000; int sample_rate = 12000; int output_rate = 48000; int dongle_freq, dongle_rate, delta; int edge = 0; pthread_cond_init(&ready, NULL); pthread_mutex_init(&ready_m, NULL); while ((opt = getopt(argc, argv, "l:r:s:o:EODd:g:p:h")) != -1) { switch (opt) { case 'l': left_freq = (int)atofs(optarg); break; case 'r': right_freq = (int)atofs(optarg); break; case 's': sample_rate = (int)atofs(optarg); break; case 'o': output_rate = (int)atofs(optarg); break; case 'E': edge = !edge; break; case 'D': dc_filter = !dc_filter; break; case 'O': oversample = !oversample; break; case 'd': dev_index = verbose_device_search(optarg); dev_given = 1; break; case 'g': gain = (int)(atof(optarg) * 10); break; case 'p': ppm_error = atoi(optarg); custom_ppm = 1; break; case 'h': default: usage(); return 2; } } if (argc <= optind) { filename = "-"; } else { filename = argv[optind]; } if (left_freq > right_freq) { usage(); return 2; } /* precompute rates */ dongle_freq = left_freq/2 + right_freq/2; if (edge) { dongle_freq -= sample_rate/2;} delta = right_freq - left_freq; if (delta > 1.2e6) { fprintf(stderr, "Frequencies may be at most 1.2MHz apart."); exit(1); } if (delta < 0) { fprintf(stderr, "Left channel must be lower than right channel."); exit(1); } i = (int)log2(2.4e6 / delta); dongle_rate = delta * (1<<i); both.rate_in = dongle_rate; both.rate_out = delta * 2; i = (int)log2(both.rate_in/both.rate_out); both.downsample_passes = i; both.downsample = 1 << i; left.rate_in = both.rate_out; i = (int)log2(left.rate_in / sample_rate); left.downsample_passes = i; left.downsample = 1 << i; left.rate_out = left.rate_in / left.downsample; right.rate_in = left.rate_in; right.rate_out = left.rate_out; right.downsample = left.downsample; right.downsample_passes = left.downsample_passes; if (left.rate_out > output_rate) { fprintf(stderr, "Channel bandwidth too high or output bandwidth too low."); exit(1); } stereo.rate = output_rate; if (edge) { fprintf(stderr, "Edge tuning enabled.\n"); } else { fprintf(stderr, "Edge tuning disabled.\n"); } if (dc_filter) { fprintf(stderr, "DC filter enabled.\n"); } else { fprintf(stderr, "DC filter disabled.\n"); } fprintf(stderr, "Buffer size: %0.2f mS\n", 1000 * (double)DEFAULT_BUF_LENGTH / (double)dongle_rate); fprintf(stderr, "Downsample factor: %i\n", both.downsample * left.downsample); fprintf(stderr, "Low pass: %i Hz\n", left.rate_out); fprintf(stderr, "Output: %i Hz\n", output_rate); /* precompute lengths */ both.len_in = DEFAULT_BUF_LENGTH; both.len_out = both.len_in / both.downsample; left.len_in = both.len_out; right.len_in = both.len_out; left.len_out = left.len_in / left.downsample; right.len_out = right.len_in / right.downsample; left_demod.buf_len = left.len_out; left_demod.result_len = left_demod.buf_len / 2; right_demod.buf_len = left_demod.buf_len; right_demod.result_len = left_demod.result_len; stereo.bl_len = (int)((long)(DEFAULT_BUF_LENGTH/2) * (long)output_rate / (long)dongle_rate); stereo.br_len = stereo.bl_len; stereo.result_len = stereo.br_len * 2; stereo.rate = output_rate; if (!dev_given) { dev_index = verbose_device_search("0"); } if (dev_index < 0) { exit(1); } downsample_init(&both); downsample_init(&left); downsample_init(&right); demod_init(&left_demod); demod_init(&right_demod); stereo_init(&stereo); r = rtlsdr_open(&dev, (uint32_t)dev_index); if (r < 0) { fprintf(stderr, "Failed to open rtlsdr device #%d.\n", dev_index); exit(1); } sigact.sa_handler = sighandler; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); sigaction(SIGQUIT, &sigact, NULL); sigaction(SIGPIPE, &sigact, NULL); if (strcmp(filename, "-") == 0) { /* Write samples to stdout */ file = stdout; setvbuf(stdout, NULL, _IONBF, 0); } else { file = fopen(filename, "wb"); if (!file) { fprintf(stderr, "Failed to open %s\n", filename); exit(1); } } /* Set the tuner gain */ if (gain == AUTO_GAIN) { verbose_auto_gain(dev); } else { gain = nearest_gain(dev, gain); verbose_gain_set(dev, gain); } if (!custom_ppm) { verbose_ppm_eeprom(dev, &ppm_error); } verbose_ppm_set(dev, ppm_error); //r = rtlsdr_set_agc_mode(dev, 1); /* Set the tuner frequency */ verbose_set_frequency(dev, dongle_freq); /* Set the sample rate */ verbose_set_sample_rate(dev, dongle_rate); /* Reset endpoint before we start reading from it (mandatory) */ verbose_reset_buffer(dev); pthread_create(&demod_thread, NULL, demod_thread_fn, (void *)(NULL)); rtlsdr_read_async(dev, rtlsdr_callback, (void *)(NULL), DEFAULT_ASYNC_BUF_NUMBER, DEFAULT_BUF_LENGTH); if (do_exit) { fprintf(stderr, "\nUser cancel, exiting...\n");} else { fprintf(stderr, "\nLibrary error %d, exiting...\n", r);} rtlsdr_cancel_async(dev); safe_cond_signal(&ready, &ready_m); pthread_cond_destroy(&ready); pthread_mutex_destroy(&ready_m); if (file != stdout) { fclose(file);} rtlsdr_close(dev); return r >= 0 ? r : -r; }
void main (int argc, char **argv) { int menuopen = 0; int x, y, x1; CEvent cwevent; XEvent xevent; Window choicewin, editorwin, win3d; init_desktop (&desktop); stereo_init (argv[0]); choicewin = Cdrawwindow ("choicewin", CMain, 0, 0, 10, 10, ""); Cgethintpos (&x, &y); x1 = x; Cdrawbutton ("load", choicewin, x, y, AUTO_SIZE, " Load Image "); Cgethintpos (&x, 0); Cdrawbutton ("loadcal", choicewin, x, y, AUTO_SIZE, " Load Calibration File "); Cgethintpos (&x, 0); Cdrawbutton ("showcal", choicewin, x, y, AUTO_SIZE, " Display Calibration Points "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("loadd", choicewin, x, y, AUTO_SIZE, " Load Previous Desktop "); Cgethintpos (&x, 0); Cdrawbutton ("saved", choicewin, x, y, AUTO_SIZE, " Save Previous Desktop "); Cgethintpos (&x, 0); Cdrawbutton ("finish", choicewin, x, y, AUTO_SIZE, " Quit "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("getpnt", choicewin, x, y, AUTO_SIZE, " Triangulate Point "); Cgethintpos (&x, 0); Cdrawbutton ("getsurf", choicewin, x, y, AUTO_SIZE, " Triangulate Multiple Points (Surface) "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("getline", choicewin, x, y, AUTO_SIZE, " Fit Line from Points "); Cgethintpos (&x, 0); Cdrawbutton ("getlineedge", choicewin, x, y, AUTO_SIZE, " Fit Line from two Line Projections "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("getcyl", choicewin, x, y, AUTO_SIZE, " Fit Cylinder from Points "); Cgethintpos (&x, 0); Cdrawbutton ("getcyle", choicewin, x, y, AUTO_SIZE, " Fit Cylinder from four Line Projections "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("getcirc", choicewin, x, y, AUTO_SIZE, " Fit Circle from Points "); Cgethintpos (&x, 0); Cdrawbutton ("getcircedge", choicewin, x, y, AUTO_SIZE, " Fit Circle from Ellipses Projections "); Cgethintpos (0, &y); x = x1; Cdrawbutton ("getellipse", choicewin, x, y, AUTO_SIZE, " Fit Ellipse from Points "); Cgethintpos (&x, 0); Csetsizehintpos ("choicewin"); editorwin = Cdrawwindow ("editorwin", CMain, 200, 100, 640 + 18, \ 450 + 40 + 18 + TEXT_PIX_PER_LINE + 11, ""); Cdraweditor ("editor", editorwin, 6, 6 + 40, 640, 450, "", 0, "/home/terry/stereo-0.2b/tmp/"); CDrawEditMenuButtons ("em", editorwin, Cwidget ("editor")->winid, 10, 10); Caddcallback ("editor", cb_editor); Cdraw3dobject ("3dview", win3d = Cdrawwindow ("3dplanewin", CMain, 150, 150, WIDTH3D + 100, 16 + HEIGHT3D, ""), 6, 6, WIDTH3D, HEIGHT3D, 1, 256); Cdrawbutton ("plshr", win3d, WIDTH3D + 20, 10, 70, 20, "Shrink"); Cdrawbutton ("plenl", win3d, WIDTH3D + 20, 40, 70, 20, "Enlarge"); Cdrawbutton ("newrender", win3d, WIDTH3D + 20, 70, 70, 20, "New render"); Cdrawbutton ("density", win3d, WIDTH3D + 20, 100, 70, 20, "Density"); Cdrawbutton ("flattri", win3d, WIDTH3D + 20, 130, 70, 20, "Flat Triangle"); Cdrawbutton ("savewin", win3d, WIDTH3D + 20, 160, 70, 20, "Save Window"); Caddcallback ("getpnt", cb_getpoint); Caddcallback ("getellipse", cb_getellipse); Caddcallback ("getcircedge", cb_getcircleedge); Caddcallback ("load", cb_newimage); Caddcallback ("3dview", cb_3dplane); Caddcallback ("newrender", cb_newrender); Caddcallback ("getsurf", cb_getsurface); Caddcallback ("getline", cb_getline); Caddcallback ("getcirc", cb_getcircle); Caddcallback ("getcyle", cb_getcylinderedge); Caddcallback ("getcyl", cb_getcylinder); Caddcallback ("getlineedge", cb_getlineedge); Caddcallback ("loadcal", cb_loadcal); Caddcallback ("showcal", cb_showcal); Caddcallback ("saved", cb_save_desktop); Caddcallback ("loadd", cb_load_desktop); Caddcallback ("savewin", cb_save_window); if (argc > 1) if (*argv[1] != '-') do_load_desktop (&desktop, argv[1]); do { CNextEvent (&xevent, &cwevent); if (!strcmp (cwevent.ident, "plshr")) { Cwidget ("3dview")->solid->distance += 2400; Cwidget ("3dview")->solid->y_cam += 2400; Credraw3dobject ("3dview", 0); } if (!strcmp (cwevent.ident, "plenl")) { Cwidget ("3dview")->solid->distance -= 2400; Cwidget ("3dview")->solid->y_cam -= 2400; Credraw3dobject ("3dview", 0); } if (!strcmp (cwevent.ident, "flattri")) { CWidget *w = Cwidget ("3dview"); if (w->solid->option_flags & TDOPTION_FLAT_TRIANGLE) { w->solid->option_flags &= 0xFFFFFFFF - TDOPTION_FLAT_TRIANGLE; } else { w->solid->option_flags |= TDOPTION_FLAT_TRIANGLE; } Credraw3dobject ("3dview", 0); } if (!strcmp (cwevent.ident, "kill")) { menuopen = 0; Cundrawwidget ("win1"); } } while (strcmp (cwevent.ident, "finish")); Cundrawall (); mad_finalize (__FILE__, __LINE__); }