コード例 #1
0
ファイル: effect.c プロジェクト: iolo/liteamp
void effect_init()
{
    echo_init(&effect.echo);
    stereo_init(&effect.stereo);
    voice_init(&effect.voice);
    normal_init(&effect.normal);
    eq_init(&effect.eq);
}
コード例 #2
0
ファイル: rtl_ais.c プロジェクト: JohnG4CVA/rtl-sdr-misc
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;
}
コード例 #3
0
ファイル: display.c プロジェクト: johndpope/stereo
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__);

}